Установка и настройка FreshRSS на Raspberry Pi

Подписываться на новости и контент создателей важно, но не обязательно создавать учётные записи у крупных корпораций. FreshRSS — это самохостящаяся RSS-платформа, которую можно развернуть на Raspberry Pi и использовать через браузер или мобильные клиенты.
В этой статье вы найдёте не только базовую пошаговую установку, но и рекомендации по безопасности, автоматизации, восстановлению и отладке. В конце есть чек-листы для ролей, критерии приёмки и варианты, если что-то идёт не так.
Почему FreshRSS на Raspberry Pi — хорошая идея
RSS — это простой и широко распространённый формат для доставки обновлений сайтов. RSS представляет собой XML-файл с заголовками, ссылками, датами и сниппетами. FreshRSS — это серверное приложение, которое агрегирует эти ленты локально, давая вам единый интерфейс и возможность скачивать полнотекстовые версии статей.
Преимущества:
- Приватность: меньше трекеров и рекламных скриптов.
- Централизация: все устройства читают одну и ту же базу подписок.
- Контроль: вы решаете, что хранится и кто к нему имеет доступ.
Важно: FreshRSS не является магией от обхода авторских платных стен. Иногда сайты применяют усиленные ограничения, и полнотекстовые извлечения могут не работать.
Требования и предварительная подготовка
Перед установкой подготовьте следующее:
- Raspberry Pi с установленной ОС Raspberry Pi OS (или Debian-подобной). Рекомендуется 4 ГБ ОЗУ и священный запас места на SD/SSD.
- Доступ по SSH к устройству или физическая клавиатура и монитор.
- Общедоступный домен или DNS-запись для доступа извне (необязательно для локальной сети).
- Установленные пакеты: Apache или Nginx, PHP (версия 7.4 или выше рекомендуется), unzip, wget, MariaDB/MySQL.
- Базовые навыки работы с терминалом и редактором nano.
Совет: если у вас ограниченный ресурс записи на SD-карту, используйте внешний SSD или логическую томацию с уменьшением количества записей.
Пошаговая установка FreshRSS
Ниже — подробная последовательность команд и пояснений. Выполняйте их под пользователем с правами sudo.
- Подключитесь по SSH к Raspberry Pi:
ssh pi@local.pi.ip.address- Обновите пакеты системы:
sudo apt update
sudo apt upgrade -y- Перейдите в директорию веб-сервера и скачайте архив FreshRSS:
cd /var/www/
sudo wget https://github.com/FreshRSS/FreshRSS/archive/master.zip- Распакуйте архив:
sudo unzip master.zip- Переименуйте или оставьте директорию и передайте права веб-сервису. В примере директорию обозначим как «FreshRSS-master»:
sudo chown -R www-data:www-data FreshRSS-masterЕсли вы хотите — сразу переименуйте папку в более короткое имя, например freshrss:
sudo mv FreshRSS-master freshrss
sudo chown -R www-data:www-data freshrss- Создайте конфигурацию для Apache. Перейдите в папку конфигураций:
cd /etc/apache2/sites-available/Создайте файл freshrss.conf:
sudo nano freshrss.confВставьте следующий минимальный VirtualHost (замените your-domain.tld на ваш домен или IP):
ServerName your-domain.tld
DocumentRoot /var/www/freshrss/p/
Require all granted
AllowOverride All
Сохраните изменения: Ctrl+O, выход: Ctrl+X.
- Включите сайт и перезапустите Apache:
sudo a2ensite freshrss.conf
sudo systemctl reload apache2Примечание: если используете Nginx, настройте server block и укажите корневую папку проекта. Для Nginx также потребуется настроить PHP-FPM сокет.
- Настройка базы данных (MariaDB/MySQL). Откройте MariaDB:
sudo mariadbВнутри MariaDB выполните команды создания базы и пользователя. Замените password на надёжный пароль:
CREATE DATABASE fresh;
CREATE USER 'fresh'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON fresh.* TO 'fresh'@'localhost';
FLUSH PRIVILEGES;
EXIT;Если MariaDB не установлена, выполните:
sudo apt install mariadb-server -y
sudo mysql_secure_installationЗавершите веб-инсталляцию. Откройте браузер и перейдите на ваш домен или IP. Установщик проверит окружение и попросит ввести параметры базы: тип MySQL, host localhost, имя базы fresh, пользователь fresh и пароль, который вы указали.
Создайте администратора приложения и завершите установку. После успешной установки войдите в FreshRSS под указанным логином.
Типичные проблемы при установке и их решения
- Ошибка прав доступа 403: Проверьте права на директорию и наличие AllowOverride All в конфигурации Apache.
- Ошибка отсутствия расширения PHP: установите необходимые модули php, например php-mysql, php-xml, php-curl, php-gd, php-mbstring.
- Неправильный путь DocumentRoot: убедитесь, что путь указывает на папку p внутри распакованного FreshRSS.
Команды для установки PHP модулей (Debian/Ubuntu):
sudo apt install php php-cli libapache2-mod-php php-mysql php-xml php-curl php-gd php-mbstring unzip -y
sudo systemctl restart apache2Настройка получения полнотекстовых статей
Некоторые сайты отдают только краткие версии статей в RSS. FreshRSS умеет вытягивать полнотекст при помощи CSS-селектора, который описывает контейнер с содержимым статьи.
Как найти селектор статьи:
- Откройте любую статью в браузере.
- Правый клик по тексту статьи -> Инспектировать элемент.
- Наводите курсор вверх по дереву DOM, пока не выделится весь блок статьи.
- Правый клик по нужному элементу -> Copy -> Copy selector.
Например, для makeuseof.com селектор может выглядеть так: #article-body
В FreshRSS: откройте настройки фида, кликните шестерёнку рядом с подпиской -> Advanced -> поле Article CSS selector on original website и вставьте селектор. Нажмите Submit и затем Reload.
Это универсальный подход, но у некоторых сайтов структура сложная, и селектор нужно корректировать.
Автоматическое обновление лент: cron и альтернативы
По умолчанию FreshRSS обновляет ленты вручную при нажатии Refresh. На Raspberry Pi удобнее поставить планировщик.
- Откройте crontab для root или для www-data. Часто используют crontab root:
sudo crontab -eДобавьте задачу, например обновление каждые 15 минут:
*/15 * * * * php -f /var/www/freshrss/app/actualize_script.phpСохраните и выйдите.
Альтернатива: systemd-timer. Для большей гибкости и логирования можно создать systemd сервис + timer, который будет запускать скрипт php и хранить логи в journalctl.
Пример unit файла:
[Unit]
Description=Actualize FreshRSS feeds
[Service]
Type=oneshot
ExecStart=/usr/bin/php -f /var/www/freshrss/app/actualize_script.php
[Install]
WantedBy=multi-user.targetИ соответствующий timer с интервалом.
Безопасность: HTTPS и Certbot
Доступ по HTTP небезопасен. Для лёгкой настройки HTTPS используйте Certbot и Let’s Encrypt.
Установите Certbot и плагин для Apache:
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apacheВведите ваш email, согласитесь с условиями и выберите домен. Certbot автоматически создаст и подключит сертификат. Certbot также может настроить автоматическое продление.
Важно: если ваш Raspberry Pi доступен только в локальной сети, можно использовать самоподписанный сертификат или внутренний CA для домашней сети.
Резервное копирование и восстановление
Рекомендуется делать регулярные бэкапы базы данных и папки конфигурации FreshRSS.
Пример сценария бэкапа:
# резервная копия базы
mysqldump -u root -p fresh > /home/pi/backups/fresh_$(date +%F_%T).sql
# резервная копия файлов
tar -czf /home/pi/backups/freshrss_www_$(date +%F_%T).tar.gz /var/www/freshrssХраните копии на внешнем носителе или в зашифрованном облачном хранилище. Для восстановления — восстановите дамп и распакуйте файлы в /var/www/freshrss и восстановите права:
sudo chown -R www-data:www-data /var/www/freshrssТестирование и критерии приёмки
Критерии приёмки:
- Веб-интерфейс FreshRSS доступен по HTTPS и логин успешен.
- База данных подключена и записи создаются при добавлении подписки.
- Автообновление лент работает по расписанию.
- Полнотекстовая выгрузка статей корректна для как минимум 5 тестовых сайтов.
- Бэкап и восстановление проверены на тестовой машине.
Тестовые сценарии:
- Добавить RSS-ленту и подтвердить, что новые элементы появляются.
- Настроить CSS-селектор и проверить, что статьи загружаются целиком.
- Отключить сеть и убедиться, что приложение реагирует корректно на ошибки.
Чек-листы по ролям
Администратор:
- Установить и обновить систему и PHP-модули.
- Настроить веб-сервер и SSL.
- Создать бэкап-план и проверить восстановление.
- Настроить автоматическое обновление лент.
Пользователь:
- Создать учётную запись в FreshRSS.
- Добавить категории и подписки.
- Настроить клиентские приложения (только если нужно).
Разработчик/отладчик:
- Проверить логи Apache и PHP при ошибках.
- Использовать инструменты инспекции для определения CSS-селекторов.
- Предложить оптимизации по кэшированию и уменьшению нагрузки.
Когда FreshRSS может не подойти: примеры и ограничения
- Сайты с динамически загружаемым контентом через JavaScript могут отдавать пустые или урезанные RSS-ленты.
- Платные стены со сложной авторизацией и проверками ботов могут блокировать попытки полнотекстового извлечения.
- Если требуется масштаб на тысячи подписок и сотни пользователей, Raspberry Pi может стать узким местом — нужна более мощная инфраструктура.
Альтернативы:
- Коммерческие агрегаторы и облачные сервисы.
- Сервисы на основе Docker-контейнеров для простого развертывания на сервере.
Дополнительные рекомендации по безопасности и приватности
- Ограничьте доступ к панели администратора по IP, если это возможно.
- Используйте сложные пароли и двухфакторную аутентификацию для учётных записей доступа к серверу.
- Скрывайте метаданные сервера через механизмы веб-сервера.
Риски и mitigations:
- Эксплуатация открытого порта 80/443: настраивайте брандмауэр и мониторинг.
- Уязвимости PHP/Apache: регулярно обновляйте пакеты.
Миграция и совместимость
Если у вас уже есть существующие подписки в другом агрегаторе, экспортируйте их в формате OPML и импортируйте в FreshRSS через меню импорта. Это стандартный способ миграции подписок между читателями.
Совместимость:
- FreshRSS поддерживает стандартные протоколы — вы можете подключаться через приложения, использующие Feedly API совместимые клиенты, или через встроенные мобильные приложения.
Короткий план восстановления после инцидента
- Отсоединить устройство от сети, если подозрение на взлом.
- Восстановить последнюю чистую резервную копию базы и файлов.
- Проверить журналы аудита и установить обновления безопасности.
- Сменить пароли и пересоздать сертификаты при подозрении на компрометацию.
Краткое руководство по производительности
- Ограничьте частоту обновления для большого количества подписок.
- Используйте кеширование на уровне PHP и веб-сервера.
- Разгрузите базу данных, если количество записей растёт слишком быстро: храните старые элементы вне базы или архивируйте.
Пример использования: добавить подписку MUO
- Нажмите + рядом с управлением подписками.
- Создайте категорию или используйте существующую.
- Вставьте URL подписки, например https://www.makeuseof.com/feed/. Если не знаете адрес, пробуйте /feed, /rss или /rss.xml.
- Если требуется — найдите CSS-селектор статьи, вставьте в Advanced и перезапустите загрузку.
Заключение
FreshRSS на Raspberry Pi — надёжный и приватный способ собрать все свои ленты в одном месте. С правильной настройкой вы получите полнотекстовые статьи, безопасный доступ по HTTPS, автоматические обновления и простую систему резервного копирования.
Важно: тестируйте настройки на небольшом наборе подписок перед массовым переносом, чтобы подобрать оптимальные селекторы и частоту обновления.
Краткое резюме и шаги дальше:
- Установите FreshRSS по инструкции выше.
- Настройте базу данных и права доступа.
- Настройте SSL через Certbot.
- Настройте cron или systemd-timer для автоматического обновления.
- Настройте резервное копирование и протестируйте восстановление.
Если вы хотите, я могу подготовить готовые systemd unit-файлы, шаблон crontab или чек-лист для миграции с другого агрегатора.
Похожие материалы
Поделиться принтером между Windows, Mac и Linux
Клиппинг звука: причины и как исправить в DAW
Как исправить Bellsouth email в Outlook
Dev Drive в Windows 11: настройка и советы
Синхронизировать f.lux с Philips Hue