FreshRSS на Raspberry Pi: установка, настройка и безопасность
Зачем запускать FreshRSS на Raspberry Pi
FreshRSS — это свободный и само-хостируемый RSS-ридер. RSS (Really Simple Syndication) — это XML-лента с заголовками, ссылками, датами и краткими фрагментами статей. Вместо того чтобы пользоваться облачными сервисами крупных компаний, вы получаете полный контроль: ленты хранятся у вас, запросы идут с вашего IP, а не с профиля в Google или Facebook.
Ключевые преимущества:
- Централизованное чтение всех лент в браузере или мобильном клиенте.
- Возможность загружать полные тексты статей (fetch full article) и избегать мягких платежных стен.
- Отсутствие отслеживающих скриптов и сторонних куки — лучше приватность.
- Полный контроль над резервными копиями, доступом и обновлениями.
Что нужно подготовить перед установкой
Перед началом убедитесь, что у вас есть:
- Raspberry Pi с установленной Raspberry Pi OS (поддерживаемая версия, желательно актуальная). Рекомендуется минимум 2 ГБ ОЗУ для комфортной работы.
- Доступ по SSH и права sudo для пользователя pi или другого администратора.
- Рабочая сеть: если вы хотите открывать сайт наружу — публичный IP или DDNS и проброшенный порт 80/443 на роутере.
- Установленные Apache, PHP и MariaDB (точные пакеты приведены ниже в разделе установки).
- Доменное имя и доступ к панели DNS для создания A-записи.
Совет: если у вас динамический IP, используйте сервис типа DuckDNS или другой DDNS и настраивайте сертификаты с учётом динамики IP.
Быстрая проверка требований (чеклист)
- Raspberry Pi обновлён: sudo apt update && sudo apt upgrade
- Apache установлен: apache2
- PHP с нужными модулями: php, php-mysql, php-xml, php-curl, php-gd и т.д.
- MariaDB или MySQL установлены
- Доступ к DNS панели для A-записи
- Публичный или локальный IP и проброс портов при необходимости
Установка FreshRSS на Raspberry Pi — пошагово
Настройте DNS. В панели регистратора создайте запись типа A: хост — @, значение — ваш публичный IP (или используйте DDNS).
Подключитесь по SSH к Raspberry Pi:
ssh pi@local.pi.ip.address- Обновите пакеты:
sudo apt update
sudo apt upgrade- Перейдите в каталог веб-контента и скачайте архив FreshRSS:
cd /var/www/
sudo wget https://github.com/FreshRSS/FreshRSS/archive/master.zip- Разархивируйте:
sudo unzip master.zip- Передайте права Apache на папку:
sudo chown -R www-data:www-data FreshRSS-master- Создайте конфигурацию виртуального хоста Apache. Перейдите в каталог сайтов:
cd /etc/apache2/sites-available/Откройте новый файл:
sudo nano freshrss.confВставьте:
ServerName your-domain.tld
DocumentRoot /var/www/FreshRSS-master/p/
Сохраните (Ctrl + O) и выйдите (Ctrl + X).
- Включите сайт и перезапустите Apache:
sudo a2ensite freshrss.conf
sudo service apache2 restart- Подготовьте базу данных. Откройте MariaDB:
sudo MariaDBВ MySQL/MariaDB выполните:
CREATE DATABASE fresh;
CREATE USER fresh IDENTIFIED BY 'password';
GRANT USAGE ON . TO fresh@localhost IDENTIFIED BY 'password';
GRANT ALL privileges ON fresh.* TO fresh@localhost;
FLUSH PRIVILEGES;
quit;Замените ‘password’ на надёжный пароль. Не используйте простой пароль в продакшене.
Откройте в браузере имя вашего домена. Установщик FreshRSS проведёт проверку окружения, попросит выбрать язык, затем ввести параметры доступа к базе данных: тип — MySQL, хост — localhost, пользователь — fresh, база — fresh.
Укажите имя пользователя администратора (до 16 буквенно-цифровых символов), метод аутентификации и пароль. После «Complete Installation» войдите в FreshRSS.
Частые проблемы при установке и их решения
- Apache возвращает 403 Forbidden: проверьте права на каталог /var/www/FreshRSS-master и убедитесь, что www-data владеет файлами. Проверьте директивы
в конфигурации Apache. - Ошибки PHP: установите недостающие расширения: php-mysql, php-xml, php-curl, php-gd, php-cli.
- Подключение к MariaDB не работает: проверьте, что MariaDB запущена и учётная запись fresh@localhost имеет нужные права. Попробуйте подключиться локально через mysql -u fresh -p.
- Страницы не грузятся по домену: проверьте A-запись DNS, подождите распространения, убедитесь, что порт 80 проброшен через роутер.
Добавление и управление лентами в FreshRSS
После первого входа вы увидите одну штатную ленту FreshRSS. Чтобы добавить свои источники:
- Нажмите плюс рядом с управлением подписками.
- Создайте категорию или добавьте отдельную ленту, вставив URL-адрес feed (например, https://makeuseof.com/feed).
Как найти RSS на сайте:
- Попробуйте добавить /feed, /rss или /rss.xml к корневому URL.
- Если не получается, откройте «Просмотр исходного кода страницы» и ищите слова feed, RSS, atom, XML.
Как FreshRSS вытягивает полный текст статей
FreshRSS может автоматически извлекать содержимое полного текста статьи с сайта. Для этого используется CSS-селектор элемента, содержащего текст.
Мини-методология: как найти селектор
- Откройте любую статью на целевом сайте.
- Нажмите правой кнопкой на тело статьи и выберите «Inspect» или «Просмотр кода».
- Навигируйте по DOM-дереву вверх, пока не выделится весь блок статьи.
- Правой кнопкой — Copy → Copy selector.
- В FreshRSS перейдите в настройки ленты → «Advanced», вставьте селектор в поле «Article CSS selector on original website» и сохраните.
Для makeuseof.com полезный селектор: #article-body.
После этого FreshRSS будет подставлять полный текст в записи при последующих загрузках.
Когнитивная шпаргалка: если один селектор не срабатывает на всех статьях — попробуйте более общий селектор или несколько правил для разных шаблонов страниц.
Автоматическое обновление лент через cron
По умолчанию обновление лент вручную: вы нажимаете «Refresh». На Raspberry Pi проще настроить cron для автоматического обновления.
Откройте crontab для root (или другого подходящего системного пользователя):
sudo crontab -eПример записи для обновления каждые 15 минут:
*/15 * * * * php -f /var/www/FreshRSS-master/app/actualize_script.phpВарианты расписания:
- Каждые 5 минут: /5 * …
- Каждые сутки в 03:00: 0 3 * …
- Каждые 30 минут, но только в рабочие дни: /30 1-5 …
Совет: если у вас много подписок, ставьте интервал больше, чтобы не перегружать систему и источники.
Безопасность и защита приватности
Доверие важнее удобства. Несколько шагов для безопасного развёртывания FreshRSS:
- Всегда используйте HTTPS. Установите certbot и получите бесплатные сертификаты Let’s Encrypt:
sudo certbotПри использовании Apache certbot обычно автоматически настроит HTTPS для выбранного виртуального хоста.
- Обновляйте систему: sudo apt update && sudo apt upgrade регулярно.
- Ограничьте доступ к административной панели по IP (при возможности) или настройте двухфакторную аутентификацию в клиенте.
- Настройте firewall (ufw): откройте порты 80 и 443, закройте лишние порты.
Пример простых команд ufw:
sudo apt install ufw
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable- Включите fail2ban для защиты от перебора паролей.
- Сделайте регулярные бэкапы базы данных и каталога /var/www/FreshRSS-master.
- Используйте сложные пароли для учётных записей и базы данных.
Важно: даже если вы хостите ленты локально, сервер, доступный в Интернет, требует стандартной практики безопасности.
Приватность и соответствие GDPR
Если вы используете FreshRSS только для личного чтения, риск минимален. Если вы планируете предоставлять доступ другим людям (например, коллективный внутренний ридер), подумайте о GDPR и защите персональных данных:
- Собираете ли вы email-адреса или аккаунты? Если да — обеспечьте хранение и обработку в соответствии с законодательством.
- Ведёте ли вы логи посещений? Храните их минимально необходимое время.
- Показываете ли вы превью с оригинальных сайтов, включающие трекеры? Рассмотрите предварительную очистку контента.
Для личного использования большинство требований не применимо, но разумно документировать политику хранения и удаления данных, если у вас есть другие пользователи.
Рекомендации по производительности и масштабированию
- Для десятков подписок Raspberry Pi 3/4 достаточно. Для сотен/тысяч подписок рассматривайте выделенный сервер или оптимизацию: кеширование, php-fpm, более мощный процессор и больше памяти.
- Используйте внешнюю базу (если есть) для резервирования и более быстрой обработки.
- Настройте ротацию логов и мониторинг свободного места на диске; логи и база могут расти.
Критерии приёмки
Чтобы считать установку успешной, проверьте:
- Страница установки доступна по домену и загружается по HTTPS.
- Успешный вход в FreshRSS под администратором.
- Добавление и загрузка новой ленты. Записи появляются в интерфейсе.
- Скрипт actualize_script.php успешно запускается вручную и через cron; новые статьи появляются в запланированное время.
- Настроены бэкапы базы и каталога FreshRSS.
- Минимальные меры безопасности: обновления, firewall и сертификаты.
Руководство по отладки (runbook)
Проблема: 500 Internal Server Error при обращении к FreshRSS.
- Проверьте логи Apache: sudo journalctl -u apache2 или /var/log/apache2/error.log.
- Проверьте права файлов и владельца (www-data).
Проблема: статьи не загружаются полностью.
- Убедитесь, что CSS-селектор указан верно.
- Проверьте сетевые ошибки при обращении к сайту-источнику.
Проблема: cron не обновляет ленты.
- Проверьте, что запись в crontab сохранена для нужного пользователя.
- Запустите команду вручную: php -f /var/www/FreshRSS-master/app/actualize_script.php и проанализируйте вывод.
Проблема: Certbot не может получить сертификат.
- Убедитесь, что порт 80 доступен извне и домен разрешается в DNS корректно.
Роль‑ориентированные контрольные списки
Администратор:
- Установить Apache/PHP/MariaDB.
- Настроить виртуальный хост и SSL.
- Создать бэкап-план и мониторинг.
Пользователь (чтение):
- Добавить желаемые ленты и категории.
- Настроить мобильный клиент (если используете) с URL вашего сервера.
Разработчик/поддержка:
- Проверять логи и обновления FreshRSS.
- Обновлять расширения PHP и систему.
Короткая карта принятия решений
flowchart TD
A[Нужен ли доступ из интернета?] -->|Да| B[Настроить DNS и проброс портов]
A -->|Нет| C[Запуск в локальной сети, использовать локальный IP]
B --> D[Установить certbot и настроить HTTPS]
D --> E[Ограничить доступ/включить fail2ban]
C --> F[Обновление через cron в локальной сети]
E --> G[Готово]
F --> GШпаргалка селекторов и примеры crontab
- Общие селекторы: article, .post-content, #content, .entry-content.
- Если сайт использует динамическую подгрузку (JS), автоматическое извлечение может не сработать — нужен серверный парсер или внешний сервис.
Примеры crontab:
- Каждые 10 минут:
*/10 * * * * php -f /var/www/FreshRSS-master/app/actualize_script.php >> /var/log/freshrss_cron.log 2>&1- Раз в час:
0 * * * * php -f /var/www/FreshRSS-master/app/actualize_script.phpГлоссарий (одна строка)
- RSS: формат (XML) для публикации обновлений контента.
- FreshRSS: само-хостируемый RSS-ридер с веб-интерфейсом.
- Cron: планировщик задач в Unix-подобных системах.
- Certbot: клиент для автоматической выдачи сертификатов Let’s Encrypt.
- MariaDB: форк MySQL, СУБД.
Заключение
FreshRSS — отличный выбор для тех, кто хочет контролировать свои ленты и читать контент без трекеров и рекламы. Raspberry Pi предоставляет недорогую и энергоэффективную платформу для круглосуточного ридера. Следуйте шагам установки, настройте обновления через cron, найдите корректные CSS-селекторы для полнотекстового извлечения и не забывайте про регулярные обновления и бэкапы.
Ключевые действия после установки: добавить ленты, настроить автоматическое обновление, включить HTTPS и сделать резервные копии.
Важно: поддерживайте систему в актуальном состоянии и защищайте доступ к своему экземпляру FreshRSS.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone