FreshRSS: собственная лента новостей без алгоритмов
Социальные сети сами решают, какие публикации показать первыми. Поэтому важное обновление проекта легко пропустить, пока его место занимают десятки рекомендаций. FreshRSS работает иначе: вы выбираете источники, а новый контент появляется в одной хронологической ленте.
FreshRSS можно установить на собственный сервер и использовать как единый входящий ящик для блогов, новостных сайтов, обновлений программ, форумов, подкастов и других источников, предоставляющих RSS- или Atom-ленты. В этом руководстве рассмотрим возможности приложения, требования к серверу и установку на VPS с Docker и HTTPS.
FreshRSS за пять шагов
- Создать Linux VPS и направить на него поддомен, например
rss.example.com. - Установить Docker и Docker Compose.
- Запустить FreshRSS вместе с Caddy для автоматического HTTPS.
- Открыть поддомен, выбрать SQLite и создать учетную запись.
- Импортировать подписки из OPML или добавить сайты вручную.
После этого VPS будет проверять источники по расписанию, даже когда компьютер пользователя выключен.
Что такое FreshRSS?
FreshRSS — бесплатный RSS- и Atom-агрегатор для самостоятельного размещения. Self-hosted означает, что приложение и база данных работают на сервере под вашим контролем, а не в инфраструктуре облачного сервиса.
RSS-лента — специальный файл, который сайт обновляет при публикации нового контента. FreshRSS регулярно получает эти файлы от выбранных источников и объединяет их записи в одном интерфейсе. Непрочитанные статьи, избранное и история чтения синхронизируются между устройствами.
Главная идея проста: пользователь сам решает, за кем следить и в каком порядке просматривать публикации. FreshRSS не ранжирует записи по вовлеченности и не вставляет рекомендованный контент между подписками.
Возможности FreshRSS
| Возможность | Для чего используется |
|---|---|
| Категории, статусы и избранное | Разделение рабочих, технических и личных источников |
| Поиск, фильтры и сохраненные запросы | Показ публикаций только по выбранной теме |
| Импорт и экспорт OPML | Быстрый перенос списка подписок |
| Google Reader API и Fever API | Подключение совместимых мобильных и настольных приложений |
| WebSub | Мгновенное получение записей после публикации от поддерживаемых источников |
| Несколько пользователей | Создание отдельных учетных записей для семьи или команды |
| Темы и расширения | Изменение интерфейса и добавление возможностей |
| XPath и JSON Feed | Подписка на некоторые источники без стандартной RSS- или Atom-ленты |
Сохраненный запрос можно превратить в отдельную тематическую ленту, например содержащую только публикации о безопасности или обновления конкретного продукта. Результат можно открыть внутри FreshRSS или опубликовать как HTML либо RSS; для списков лент также доступен OPML.
WebSub позволяет совместимому сайту уведомить FreshRSS о новой записи, вместо того чтобы ждать следующей плановой проверки. Для этого экземпляр FreshRSS должен быть доступен из интернета по корректному публичному адресу.
FreshRSS особенно полезен разработчикам и системным администраторам: блоги проектов, релизы, отчеты об инцидентах и публикации о безопасности можно собрать в одну ленту. Для повседневного чтения он заменяет десятки открытых вкладок и синхронизирует точный статус прочтения на всех устройствах.
Системные требования FreshRSS
FreshRSS требует немного ресурсов. Он поддерживает SQLite, PostgreSQL, MariaDB и MySQL, а для ручной установки нужны веб-сервер и PHP 8.1 или новее. В официальном описании даже приведен тест на Raspberry Pi 1 со 150 лентами и 22 000 статей.
Практичные начальные конфигурации:
| Сценарий | CPU | RAM | Хранилище | База данных |
|---|---|---|---|---|
| Личная лента | 1 vCPU | 1 ГБ | 10–20 ГБ SSD | SQLite |
| Семья или небольшая команда | 1–2 vCPU | 2 ГБ | 20–40 ГБ SSD | SQLite или внешняя база данных |
| Много пользователей и большой архив | От 2 vCPU | От 4 ГБ | От 40 ГБ SSD | PostgreSQL или MariaDB |
Это ориентиры, а не строгие минимальные требования. Расход дискового пространства зависит от количества источников, частоты публикаций и срока хранения истории. VPS удобнее домашнего компьютера, если нужны круглосуточное обновление, внешний доступ, синхронизация с телефоном и корректная работа WebSub.
Как установить FreshRSS на VPS с Docker
В конфигурации ниже FreshRSS работает за Caddy. Caddy принимает внешние запросы и автоматически получает TLS-сертификат.
Понадобятся Linux VPS, установленный Docker с командой docker compose, поддомен с A-записью, указывающей на IP-адрес сервера, и открытые порты 80 и 443.
Шаг 1. Создать каталог
sudo mkdir -p /opt/freshrss
sudo chown "$USER":"$USER" /opt/freshrss
cd /opt/freshrssШаг 2. Создать compose.yaml
services:
freshrss:
image: freshrss/freshrss:latest
container_name: freshrss
restart: unless-stopped
logging:
options:
max-size: 10m
environment:
TZ: Etc/UTC
CRON_MIN: '3,33'
FRESHRSS_ENV: production
TRUSTED_PROXY: 172.16.0.0/12
volumes:
- freshrss_data:/var/www/FreshRSS/data
- freshrss_extensions:/var/www/FreshRSS/extensions
caddy:
image: caddy:2
container_name: freshrss-caddy
restart: unless-stopped
depends_on:
- freshrss
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
volumes:
freshrss_data:
freshrss_extensions:
caddy_data:
caddy_config:CRON_MIN: '3,33' запускает проверку лент на 3-й и 33-й минуте каждого часа. FreshRSS не обновляет отдельную ленту чаще, чем примерно раз в 20 минут, поэтому более частый запуск задачи обычно не нужен.
Шаг 3. Создать Caddyfile
rss.example.com {
reverse_proxy freshrss:80
}Замените домен на собственный. После распространения DNS-записи и открытия портов Caddy автоматически получит и будет продлевать сертификат.
Шаг 4. Запустить FreshRSS
docker compose up -d
docker compose psПроверить журналы можно этой командой:
docker compose logs -f --tail=100Откройте https://rss.example.com. Мастер установки проверит окружение, предложит выбрать базу данных и создаст первого пользователя. SQLite — самый простой выбор для личного сервера, поскольку отдельный контейнер базы данных не требуется.
Первоначальная настройка
FreshRSS часто может найти RSS- или Atom-ленту по обычному адресу сайта. Если автоматическое обнаружение не сработало, укажите прямой URL ленты. Подписки из Feedly, Inoreader и других читалок удобно переносить через OPML.
Сразу распределите источники по категориям вроде «обязательно прочитать», «работа», «безопасность», «длинные тексты» и «фоновое чтение». Новостные сайты с большим объемом публикаций не должны вытеснять действительно важные обновления из основной ленты.
Чтобы подключить приложение, включите API в настройках аутентификации и задайте отдельный пароль API в профиле. Адрес Google Reader API выглядит так:
https://rss.example.com/api/greader.phpЛучше не использовать один пароль для основной учетной записи и API.
Как не утонуть в непрочитанных статьях
FreshRSS становится наиболее полезным после небольшой настройки:
- оставьте в основной ленте только важные источники;
- с помощью фильтров автоматически отмечайте ненужные разделы как прочитанные;
- сохраняйте поисковые запросы для продуктов, авторов и тем;
- периодически просматривайте статистику и удаляйте источники, создающие только шум.
Расширения могут добавить оценку времени чтения, подсветку слов, проксирование изображений, встраивание YouTube, webhook-уведомления и классификацию статей через совместимый API LLM. Устанавливайте сторонние дополнения только из доверенных источников.
Обновления, безопасность и резервные копии
Для обновления контейнеров выполните:
cd /opt/freshrss
docker compose pull
docker compose up -dПеред крупным обновлением создайте резервную копию. В volume freshrss_data хранятся настройки пользователей и, при использовании SQLite, база данных статей. Если вы используете дополнения, сохраните также freshrss_extensions. Для PostgreSQL, MariaDB и MySQL потребуется отдельный дамп базы данных.
Минимальные меры безопасности:
- используйте HTTPS;
- после создания необходимых учетных записей отключите открытую регистрацию;
- не включайте анонимный доступ без необходимости;
- используйте отдельный пароль API;
- регулярно обновляйте FreshRSS и его расширения;
- храните резервную копию за пределами VPS.
Экспорт OPML не заменяет полную резервную копию, но позволяет быстро восстановить список подписок в любой совместимой RSS-читалке.
FreshRSS на VPS от tropic.host
FreshRSS — хороший первый self-hosted-сервис: он требует немного ресурсов, работает в Docker и сразу становится полезным после импорта подписок. Публичный VPS обеспечивает круглосуточное обновление лент, доступ с телефона и корректную работу WebSub.
Для личной установки обычно достаточно небольшой Linux-конфигурации. На tropic.host можно выделить FreshRSS собственный поддомен, начать с начального тарифа VPS и сохранить сервис независимым от домашнего компьютера. При выборе тарифа стабильность, место для архива и резервные копии важнее большого запаса вычислительной мощности.
Заключение
FreshRSS превращает десятки сайтов в удобную личную ленту без алгоритмического ранжирования. Он поддерживает мобильные клиенты, фильтры, сохраненные запросы, нескольких пользователей, WebSub и расширения, оставаясь достаточно легким для небольшого VPS.
Для начала нужны Docker, домен и SQLite. После установки настройте категории, автоматические обновления, HTTPS и резервные копии. Тогда FreshRSS будет показывать только выбранные источники, а контроль над чтением останется у пользователя.
FAQ
FreshRSS бесплатен?
Да. FreshRSS распространяется по лицензии AGPL-3.0. Платить нужно только за инфраструктуру, если приложение работает на арендованном VPS.
Можно ли использовать FreshRSS без домена?
Да, открыв порт контейнера. Для постоянного использования лучше настроить домен и HTTPS: это упрощает безопасный доступ, синхронизацию с телефоном и работу WebSub.
Сколько RAM нужно FreshRSS?
Для личной ленты разумно начать с 1 ГБ RAM и SQLite. Большой архив, несколько пользователей или дополнительные сервисы потребуют больше памяти.
Можно ли добавить сайт без RSS?
Иногда. FreshRSS поддерживает веб-скрейпинг через XPath, но правила придется настроить вручную. Если макет сайта изменится, источник может потребовать исправления.
Что необходимо резервировать?
В первую очередь сохраните volume freshrss_data: при использовании SQLite в нем находится база данных статей. Также сохраните freshrss_extensions и создавайте дампы внешней базы данных, если она используется.
