Miniflux на Ubuntu 24.04: пошаговая установка
Большинство self-hosted RSS-агрегаторов тянут за собой PHP, cron-задачи и веб-интерфейс с десятком настроек, до которых руки так и не доходят. Miniflux устроен иначе: один статический бинарник на Go, единственная зависимость — PostgreSQL, встроенный планировщик вместо cron и интерфейс без тем, плагинов и лишних кнопок. Ниже — установка с нуля на Ubuntu 24.04: база, .deb-пакет, конфиг, systemd и HTTPS через nginx.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Почему Miniflux, а не FreshRSS или облачный сервис
Разработчик Miniflux Frédéric Guillot прямо называет проект «opinionated» — минималистичным и без попыток угодить всем. Это заметно в паре решений, которые стоит понимать до установки:
- Никакого выбора СУБД. FreshRSS работает с MySQL, PostgreSQL и SQLite на выбор, Miniflux — только с PostgreSQL. Меньше вариативности, зато меньше и способов сломать конфигурацию.
- Нет отдельного cron. FreshRSS не опрашивает ленты сам — это делает внешняя cron-задача, которую легко забыть настроить или сломать при переезде на новый сервер. У Miniflux планировщик встроен в сам процесс: задали интервал в конфиге — процесс сам обновляет ленты, пока жив systemd-юнит.
- Один бинарник, без PHP-FPM и Composer. Устанавливается .deb-пакетом, апгрейд — установка нового пакета поверх старого.
- Интерфейс намеренно спартанский. Список непрочитанного, чтение, несколько горячих клавиш — без тем оформления и виджетов. Кому нужна гибкость настройки внешнего вида — там ближе FreshRSS, кому важны скорость и предсказуемость — Miniflux.
Для установки хватает 1 vCPU и 512 МБ — 1 ГБ RAM: сам бинарник потребляет единицы мегабайт в простое, PostgreSQL под несколько сотен лент тоже не требователен к ресурсам.
PostgreSQL: база и пользователь для Miniflux
Miniflux работает только с PostgreSQL — это единственная поддерживаемая СУБД, начиная с версии 2.0.27 не требуется даже расширение hstore. Ставим сервер и создаём отдельную роль и базу, не используя учётку postgres в самом приложении:
apt update && apt upgrade -y
apt install -y postgresql
sudo -u postgres psql
CREATE USER miniflux WITH PASSWORD 'замените-на-длинный-пароль';
CREATE DATABASE miniflux2 OWNER miniflux;
\q
Имя базы miniflux2 — не опечатка, а сложившееся в документации проекта название (наследие миграции с первой версии на вторую), можно назвать как угодно, но в примерах конфигурации ниже используется именно оно. Если PostgreSQL на сервере разворачивается впервые и хочется разобраться в ролях и правах подробнее, база шагов та же, что в отдельном гайде по установке PostgreSQL на Ubuntu 24.04.
Строка подключения (DATABASE_URL) у Miniflux поддерживает два формата — как URL, так и key=value. Официальная документация прямо предупреждает: если пароль содержит спецсимволы вроде ^ или @, URL-формат может сломаться при парсинге — надёжнее использовать key=value:
user=miniflux password=замените-на-длинный-пароль dbname=miniflux2 host=localhost sslmode=disable
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстановка Miniflux из .deb-пакета
Официальный способ для Debian/Ubuntu — .deb-пакет со страницы релизов на GitHub, никакого стороннего репозитория подключать не нужно. Посмотрите актуальную версию на https://github.com/miniflux/v2/releases — на момент подготовки этой статьи (август 2026) свежий стабильный релиз в ветке 2.3.x, но проверьте номер сами, он меняется чаще, чем обновляются статьи:
cd /tmp
wget https://github.com/miniflux/v2/releases/download/2.3.3/miniflux_2.3.3_amd64.deb
dpkg -i miniflux_2.3.3_amd64.deb
Пакет разворачивает бинарник в /usr/bin/miniflux, кладёт шаблон конфига в /etc/miniflux.conf и systemd-юнит miniflux.service. Для ARM-серверов и Raspberry Pi в том же релизе есть сборки arm64 и armhf — архитектуру сервера можно уточнить командой uname -m.
Конфигурация: /etc/miniflux.conf
Откройте /etc/miniflux.conf и пропишите как минимум четыре параметра — подключение к базе, адрес, на котором слушает процесс, публичный домен и автомиграцию при старте:
DATABASE_URL=user=miniflux password=замените-на-длинный-пароль dbname=miniflux2 host=localhost sslmode=disable
LISTEN_ADDR=127.0.0.1:8080
BASE_URL=https://rss.example.com
RUN_MIGRATIONS=1
LISTEN_ADDR=127.0.0.1:8080 — процесс слушает только локально, наружу будет смотреть nginx. BASE_URL обязателен для корректной генерации ссылок в интерфейсе и cookie — без него после переезда за HTTPS-домен возможны сюрпризы с редиректами.
Из параметров, которые стоит знать сразу:
| Параметр | Назначение | Значение по умолчанию |
|---|---|---|
POLLING_FREQUENCY | как часто планировщик выбирает пачку лент на обновление, в минутах | 60 |
BATCH_SIZE | сколько лент отправляется в очередь за один проход планировщика | 100 |
WORKER_POOL_SIZE | число фоновых воркеров, разбирающих очередь | 16 |
CLEANUP_ARCHIVE_READ_DAYS | через сколько дней прочитанные записи архивируются | 60 |
CLEANUP_ARCHIVE_UNREAD_DAYS | то же для непрочитанных | 180 |
Если 60 минут между обновлениями кажется медленно, снизьте POLLING_FREQUENCY до 15 — учитывайте, что это создаёт больше нагрузки на источники лент и на саму базу.
Миграции, администратор и запуск сервиса
Применить миграции базы можно вручную, не полагаясь на RUN_MIGRATIONS в конфиге — так виднее, если что-то пойдёт не так:
miniflux -migrate -config-file /etc/miniflux.conf
Дальше — интерактивное создание первого администратора:
miniflux -create-admin -config-file /etc/miniflux.conf
Команда запросит логин и пароль прямо в терминале. Это отдельная учётка внутри Miniflux, никак не связанная с ролью PostgreSQL, созданной раньше. После этого включаем и запускаем сервис:
systemctl enable --now miniflux
systemctl status miniflux
Проверить, что процесс действительно отвечает, можно без браузера — у Miniflux есть встроенный health-check эндпоинт:
curl http://127.0.0.1:8080/healthcheck
Ответ OK подтверждает, что бинарник поднялся и достучался до базы. Если сервис не стартует — почти всегда причина в DATABASE_URL: опечатка в пароле или база ещё не создана, логи смотрите через journalctl -u miniflux -n 50.
nginx и HTTPS перед Miniflux
Miniflux хранит cookie сессии и работает по прямому HTTP на 8080-м порту — наружу его пускать нельзя, только через reverse proxy с TLS. Конфиг /etc/nginx/sites-available/miniflux.conf:
server {
listen 80;
server_name rss.example.com;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Активируйте и проверьте синтаксис:
ln -s /etc/nginx/sites-available/miniflux.conf /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx
Сертификат — Let's Encrypt через certbot, как для любого другого сайта на этом сервере:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d rss.example.com
После выпуска сертификата добавьте в /etc/miniflux.conf строку HTTPS=1 — она заставляет Miniflux ставить cookie с флагом Secure и отправлять заголовок HSTS, что имеет смысл только когда домен реально отдаётся по HTTPS — и перезапустите сервис (systemctl restart miniflux). Если certbot ругается на валидацию домена, вероятная причина разобрана в статье почему Let's Encrypt не проходит валидацию — чаще всего дело в DNS-записи или закрытом снаружи 80-м порте. Не забудьте открыть 80/443 в файрволе, если он уже настроен по инструкции UFW на Ubuntu 24.04 — порт 8080 наружу открывать не нужно вовсе, он должен остаться доступен только с localhost.
Ленты, бэкап и обновление версии
Заходите на https://rss.example.com, входите под учёткой администратора, созданной выше. Добавление ленты — кнопка «+» и адрес сайта или прямая ссылка на RSS/Atom, Miniflux сам пытается найти фид по адресу главной страницы. Массовый перенос подписок — раздел настроек «Import / Export»: загрузка OPML-файла, выгруженного из Feedly, Inoreader или другого агрегатора, переносит все категории и подписки разом, тем же путём делается и обратный экспорт.
Для мобильных клиентов у Miniflux два пути интеграции: собственный REST API (его использует официальное Android-приложение и часть сторонних клиентов) и эмуляция Fever API, которую понимают Reeder, ReadKit и часть других читалок — включить обе можно в настройках профиля пользователя.
Бэкап сводится к дампу базы — файлов приложения, требующих сохранения отдельно, у Miniflux, в отличие от FreshRSS, практически нет:
sudo -u postgres pg_dump miniflux2 > miniflux-backup.sql
Восстановление на новом сервере — создать пустую базу с той же ролью-владельцем и залить дамп:
sudo -u postgres psql miniflux2 < miniflux-backup.sql
Обновление версии — скачать новый .deb с той же страницы релизов и поставить поверх:
dpkg -i miniflux_НОВАЯ_ВЕРСИЯ_amd64.deb
miniflux -migrate -config-file /etc/miniflux.conf
systemctl restart miniflux
Миграцию стоит прогонять и при апгрейде — не все релизы меняют схему базы, но команда безвредна, если менять нечего.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Нужен ли PHP, Node.js или Docker для запуска?
Нет, Miniflux — единственный статический бинарник на Go без внешних рантаймов. Docker поддерживается как альтернативный способ установки, но для сервера, выделенного под один-два сервиса, .deb-пакет проще в обслуживании.
Чем Miniflux отличается от FreshRSS на практике?
Главное — встроенный планировщик вместо cron и единственная поддерживаемая СУБД (PostgreSQL). Интерфейс у Miniflux заметно проще: нет тем оформления и плагинов, зато меньше того, что может сломаться при обновлении.
Можно ли обновлять ленты чаще, чем раз в час?
Да, параметр POLLING_FREQUENCY в /etc/miniflux.conf задаёт интервал планировщика в минутах — снижайте его, но учитывайте нагрузку на серверы источников и собственную базу.
Что если несколько сайтов уже сидят за одним nginx на сервере?
Miniflux ничем не отличается от любого другого backend-приложения — добавьте отдельный server блок с своим server_name, отдельный сертификат certbot для него не обязателен, если уже настроен wildcard или отдельный домен.
Как перенести Miniflux на другой сервер?
Дамп базы через pg_dump, копия /etc/miniflux.conf с учётом нового адреса базы и домена, установка того же .deb на новом сервере и восстановление дампа — файлов пользовательских данных вне PostgreSQL приложение не хранит.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →