MAATRIX / Блог / Как установить и настроить Miniflux на VPS

Как установить и настроить Miniflux на VPS

MAATRIX

Если вы устали от тяжёлых веб-читалок, которые грузят десяток мегабайт JS ради списка заголовков, Miniflux — противоположность этому подходу. Один бинарник на Go, одна база PostgreSQL, никакого фронтенд-фреймворка — и при этом полноценный self-hosted RSS-ридер с API, фильтрами, интеграциями и мобильными клиентами. Ниже — рабочая установка на VPS через Docker Compose, с HTTPS и базовыми настройками, которые действительно пригодятся в первую неделю использования.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Почему Miniflux, а не альтернативы

Miniflux сознательно минималистичен: разработчик годами держит принцип «одна функция — один способ её выполнить», без плагинов и тем оформления. Это плюс для тех, кто хочет читалку, а не платформу для кастомизации.

Сравнение с соседними по нише инструментами:

КритерийMinifluxFreshRSSWallabag
НазначениеRSS-ридерRSS-ридерRead-later (сохранение статей)
СтекGo + PostgreSQLPHP + SQLite/MySQLPHP + MySQL/SQLite
Потребление RAM~30-60 МБ~80-150 МБ~100-200 МБ
Темы оформленияНет (light/dark)Есть, кастомизируемыеЕсть
APIREST, хорошо документированGoogle Reader APIREST
Расширения/плагиныНетЕсть (extensions)Есть

Если вам ближе FreshRSS с его темами и расширениями, у нас есть отдельный разбор — как установить и настроить FreshRSS на VPS. Miniflux же берут за скорость, низкий расход ресурсов и то, что он буквально не ломается: базе на PostgreSQL и одному Go-процессу почти нечему течь или падать по памяти.

Из требований к серверу — для личного использования (до пары сотен подписок) хватает 1 vCPU и 1 ГБ RAM с запасом; PostgreSQL — самый прожорливый компонент здесь, но и он умещается в скромные лимиты, если не открывать сотни одновременных соединений.

Подготовка VPS

Понадобится Ubuntu 24.04 (в примерах ниже — она), белый IP, доменное имя, направленное на сервер, и установленный Docker. Если Docker ещё не стоит — у нас есть пошаговая инструкция: Ubuntu 24.04: установка Docker с нуля. Если домен ещё не привязан к серверу — сначала настройте домен и DNS.

Минимальный чек-лист перед стартом:

# обновляем систему
sudo apt update && sudo apt upgrade -y

# проверяем, что Docker и Compose-плагин на месте
docker --version
docker compose version

# создаём рабочую директорию проекта
mkdir -p /opt/miniflux && cd /opt/miniflux

Держите Miniflux и его базу в отдельной директории — это упрощает бэкапы и обновления, не пересекаясь с другими сервисами на том же сервере.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Docker Compose: PostgreSQL + Miniflux

Miniflux официально поддерживается только с PostgreSQL — переезд на SQLite или MySQL не предусмотрен, так что сразу закладываем связку из двух контейнеров.

Создайте docker-compose.yml:

services:
  db:
    image: postgres:16-alpine
    container_name: miniflux-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=замените_на_свой_пароль
      - POSTGRES_DB=miniflux
    volumes:
      - miniflux-db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U miniflux"]
      interval: 10s
      timeout: 5s
      retries: 5

  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "127.0.0.1:8080:8080"
    environment:
      - DATABASE_URL=postgres://miniflux:замените_на_свой_пароль@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=замените_на_сложный_пароль
      - BASE_URL=https://miniflux.ваш-домен.ru

volumes:
  miniflux-db-data:

Ключевые моменты конфигурации:

  • RUN_MIGRATIONS=1 — при первом запуске (и при каждом обновлении образа) контейнер сам прогонит миграции схемы БД, отдельно ничего запускать не нужно.
  • CREATE_ADMIN=1 вместе с ADMIN_USERNAME/ADMIN_PASSWORD создаёт первого администратора автоматически — это удобно, но пароль должен быть по-настоящему сложным, потому что интерфейс будет смотреть наружу через ваш домен.
  • Порт 8080 пробрасывается только на 127.0.0.1 — наружу Miniflux отдаёт Caddy или nginx, сам контейнер снаружи недоступен. Это снижает поверхность атаки и упрощает настройку HTTPS.
  • Пароль БД в DATABASE_URL и в POSTGRES_PASSWORD должен совпадать — это частая причина, по которой контейнер miniflux падает при старте с ошибкой аутентификации.

Запускаем:

docker compose up -d
docker compose logs -f miniflux

В логах должно появиться сообщение о применённых миграциях и о том, что сервис слушает 0.0.0.0:8080 внутри контейнера. Если db не успевает подняться до старта miniflux, depends_on с condition: service_healthy решает эту гонку — но на медленных дисках первый healthcheck иногда стоит подождать 15-20 секунд.

HTTPS через Caddy

Самый безболезненный способ выпустить сертификат для одного поддомена — Caddy: он получает и продлевает Let's Encrypt сертификаты автоматически, без отдельной настройки certbot и cron-задач. Подробный разбор установки — в статье Caddy с авто-SSL на Ubuntu 24.04: пошаговая установка.

Если Caddy ещё не стоит, поставьте его как системный пакет (не в Docker — так проще управлять конфигом) и опишите обратный прокси в /etc/caddy/Caddyfile:

miniflux.ваш-домен.ru {
    reverse_proxy 127.0.0.1:8080

    encode gzip

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "DENY"
    }
}

Перезапустите Caddy:

sudo systemctl reload caddy

Сертификат выпустится автоматически при первом обращении к домену — Caddy сам поднимет HTTP-01 challenge на 80-м порту, важно только, чтобы порты 80 и 443 были открыты в firewall и не заняты другим сервисом.

Если вы предпочитаете nginx с ручным certbot — принцип тот же: proxy_pass http://127.0.0.1:8080; плюс заголовки Host, X-Real-IP, X-Forwarded-For, X-Forwarded-Proto, иначе Miniflux будет неверно строить абсолютные ссылки в BASE_URL.

Проверьте, что BASE_URL в docker-compose.yml совпадает с реальным доменом и схемой https:// — иначе часть внутренних ссылок и OPML-экспорт будут указывать на неправильный адрес.

Первый вход и добавление подписок

Откройте https://miniflux.ваш-домен.ru, войдите под admin и паролем из ADMIN_PASSWORD. Первым делом — смените пароль администратора через Settings → пароль, а сам аккаунт ADMIN_PASSWORD из compose-файла лучше воспринимать как одноразовый bootstrap-пароль.

Добавить подписки можно тремя способами:

  • Вручную — кнопка Add Subscription, вставляете URL сайта (не обязательно прямую ссылку на feed — Miniflux сам найдёт RSS/Atom по HTML-странице).
  • Импорт OPML — если вы переезжаете с Feedly, Inoreader или другого ридера, экспортируйте оттуда OPML-файл и загрузите его в Settings → Import.
  • Bookmarklet или расширение браузера — Miniflux отдаёт готовый bookmarklet в настройках для добавления текущей открытой страницы одним кликом.

Полезная деталь: у Miniflux есть встроенные фильтры «правил блокировки» и «правил разрешения» на уровне отдельной подписки (regex по заголовку или содержимому) — это спасает, если у источника половина записей — реклама или дубли, а вычищать их вручную неохота.

Фоновые обновления и производительность

По умолчанию Miniflux опрашивает фиды раз в час — интервал регулируется переменной окружения POLLING_FREQUENCY (в минутах) в docker-compose.yml:

    environment:
      # ...
      - POLLING_FREQUENCY=30
      - WORKER_POOL_SIZE=5
      - POLLING_PARALLELISM=10
  • POLLING_FREQUENCY — как часто перепроверять фиды (в минутах). Слишком маленькое значение при большом числе подписок создаёт лишнюю нагрузку и риск бана по User-Agent на некоторых сайтах.
  • WORKER_POOL_SIZE — сколько параллельных воркеров обрабатывают очередь обновлений внутри процесса.
  • POLLING_PARALLELISM — сколько фидов опрашивается одновременно за один цикл.

Для личного использования с полусотней подписок дефолтных значений (частота — раз в час, пул — 16) хватает с запасом. Увеличивать параллелизм имеет смысл, только если подписок несколько сотен и часовой цикл не успевает пройти всю очередь — но тогда стоит подумать и о более мощном тарифе, потому что рост нагрузки на PostgreSQL будет заметнее роста нагрузки на сам Miniflux.

Применить изменения:

docker compose up -d

Бэкапы и обновление

Вся пользовательская информация (подписки, прочитанные статьи, настройки, фильтры) живёт в PostgreSQL — бэкапить нужно именно её, а не файлы контейнера Miniflux (он полностью stateless).

Бэкап дампом:

docker compose exec db pg_dump -U miniflux miniflux > miniflux_backup_$(date +%F).sql

Восстановление на чистой базе:

cat miniflux_backup_2026-08-25.sql | docker compose exec -T db psql -U miniflux miniflux

Вынесите это в cron на сервере, добавьте ротацию старых дампов (хранить последние 7-14 дней обычно достаточно) и по возможности копируйте файл за пределы сервера — на S3-совместимое хранилище или хотя бы на другую машину. Дамп в 10-20 МБ для персонального инстанса — это буквально пара строк в rsync-скрипте, отговорок не автоматизировать это нет.

Обновление до новой версии — замена тега образа и перезапуск:

docker compose pull
docker compose up -d

Благодаря RUN_MIGRATIONS=1 схема базы обновится автоматически при рестарте. Перед крупным обновлением (смена мажорной версии) всё равно стоит снять свежий дамп — на случай, если миграция несовместима с откатом назад.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Можно ли обойтись без Docker и поставить Miniflux как systemd-сервис?

Да, разработчик публикует статические бинарники и .deb/.rpm пакеты для основных дистрибутивов. Docker-Compose здесь выбран ради изоляции и простоты обновления одной командой, но нативная установка тоже официально поддерживается и по потреблению ресурсов практически не отличается.

Miniflux поддерживает несколько пользователей на одном сервере?

Да, встроенная многопользовательность есть из коробки — администратор создаёт учётные записи в Settings → Users, у каждого пользователя своя лента подписок и настройки, база при этом общая.

Есть ли мобильные приложения?

Официального мобильного клиента от разработчика нет, но за счёт открытого REST API есть сторонние приложения под iOS и Android (например, читалки с поддержкой Miniflux API из списка совместимых клиентов в документации проекта), а также браузерные расширения.

Что делать, если после обновления домена или BASE_URL интерфейс выдаёт смешанный контент или редиректит не туда?

Проверьте, что BASE_URL в переменных окружения контейнера в точности совпадает с адресом, по которому вы открываете сайт (включая схему https:// и без завершающего слэша), и пересоздайте контейнер (docker compose up -d --force-recreate miniflux) — на лету эта переменная не перечитывается.

Нужен ли отдельный сервер под Miniflux или его можно поставить рядом с другими сервисами?

Для личного использования Miniflux прекрасно уживается на одном VPS с другими лёгкими сервисами — он не требователен к ресурсам. Единственное, за чем стоит следить, — чтобы порт 8080 (или тот, что вы выберете) не конфликтовал с другими контейнерами, и чтобы у Caddy/nginx были отдельные блоки конфигурации под каждый поддомен.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →