bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Установка Tiny Tiny RSS на VPS: Docker, Nginx, PostgreSQL и автообновления

calendar_month Aug 26, 2026 schedule 18 мин. чтения visibility 25 просмотров
Установка Tiny Tiny RSS на VPS: Docker, Nginx, PostgreSQL и автообновления
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Установка Tiny Tiny RSS на VPS: Docker, Nginx, PostgreSQL и автообновления

TL;DR

В этом подробном гайде мы пошагово настроим Tiny Tiny RSS (TTRSS) — мощный и гибкий RSS-агрегатор с открытым исходным кодом — на вашем виртуальном сервере (VPS). Мы будем использовать современный подход с Docker и Docker Compose для изоляции и легкого управления сервисами, Nginx в качестве обратного прокси и для обеспечения HTTPS, а также PostgreSQL как надежную базу данных. В результате вы получите полностью функциональный, безопасный и автоматически обновляемый TTRSS-сервер, готовый к сбору и организации ваших новостных лент.

  • TTRSS будет развернут в контейнерах Docker для простоты управления и масштабирования.
  • Nginx настроен как обратный прокси для TTRSS, обеспечивая доступ к сервису через доменное имя и HTTPS.
  • Автоматическое получение и продление SSL-сертификатов Let's Encrypt с помощью Certbot.
  • База данных PostgreSQL будет работать в отдельном контейнере, гарантируя надежное хранение данных.
  • Настройка автоматических обновлений и резервного копирования для бесперебойной работы и сохранности данных.
  • Гайд включает команды для Debian/Ubuntu, актуальные на 2026 год.

Что мы настраиваем и зачем

Мы будем устанавливать Tiny Tiny RSS (TTRSS) — это мощный, полностью открытый (AGPLv3) веб-ориентированный агрегатор RSS/Atom-лент. В мире, где многие коммерческие RSS-сервисы приходят и уходят, или начинают показывать рекламу и ограничивать функционал, TTRSS предлагает полную свободу и контроль над вашими новостными потоками. Вы сможете собирать, читать и организовывать тысячи лент из самых разных источников, будь то блоги, новостные сайты, подкасты или каналы YouTube (с помощью специальных плагинов).

В итоге читатель получит собственный, приватный и полностью контролируемый RSS-сервер, доступный из любой точки мира через веб-интерфейс и мобильные приложения (поддерживающие API TTRSS). Это идеальное решение для тех, кто ценит конфиденциальность, хочет избежать навязчивой рекламы и иметь полный контроль над своим информационным пространством.

Существуют альтернативы, такие как облачные сервисы (Inoreader, Feedly) или другие самохостинговые решения (FreshRSS, Nextcloud News). Облачные сервисы удобны, но лишают вас контроля над данными и часто имеют платные тарифы с расширенным функционалом. Самохостинговые решения, такие как TTRSS, требуют начальной настройки, но в долгосрочной перспективе предлагают несравненную гибкость, безопасность и экономическую выгоду, особенно когда вы разворачиваете их на собственном VPS. Вы владеете своими данными, можете устанавливать любые плагины и настраивать сервис под свои нужды без ограничений.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Для развертывания Tiny Tiny RSS с Docker, Nginx и PostgreSQL на одном VPS требуются относительно скромные ресурсы, но с небольшим запасом для комфортной работы и возможности расширения.

Минимальные требования (для 1-5 пользователей, до 1000 лент):

  • CPU: 1 ядро (например, Intel Xeon E3/E5 или AMD EPYC).
  • RAM: 1 ГБ. Этого достаточно для Docker-контейнеров TTRSS, PostgreSQL и Nginx, но без большого запаса.
  • Диск: 20 ГБ SSD. TTRSS не потребляет много места для самой установки, но база данных и кэш изображений могут со временем расти. SSD значительно ускоряет работу с БД.
  • Сеть: 100 Мбит/с. Для RSS-агрегатора скорость сети не является критичной, так как трафик в основном состоит из небольших HTTP-запросов.

Рекомендуемый VPS-план (для 5-20 пользователей, до 5000+ лент, с запасом на будущее):

  • CPU: 2 ядра. Обеспечит лучшую производительность при обновлении большого количества лент и одновременной работе нескольких пользователей.
  • RAM: 2-4 ГБ. Позволит PostgreSQL более эффективно кэшировать данные, а TTRSS обрабатывать больше фоновых задач.
  • Диск: 50-100 ГБ SSD. Даст достаточно места для роста базы данных, хранения кэша, а также для бэкапов.
  • Сеть: 1 Гбит/с. Стандартная скорость, обеспечивающая быструю загрузку веб-интерфейса.

Для такого сценария можно взять VPS с указанными характеристиками. Выбирайте провайдера, предлагающего гибкие тарифы и возможность масштабирования.

Когда нужен dedicated, а не VPS

Выделенный сервер (dedicated server) для Tiny Tiny RSS обычно не требуется, если только вы не планируете обслуживать сотни или тысячи пользователей, агрегировать десятки тысяч лент с очень высокой частотой обновления, или если TTRSS является лишь одной из множества требовательных служб, работающих на этом же сервере. Dedicated серверы предлагают полную изоляцию ресурсов и часто более высокую производительность ввода/вывода, но для TTRSS на несколько десятков пользователей VPS среднего уровня будет более чем достаточно и значительно экономичнее.

Локация: на что влияет

Выбор локации VPS влияет на:

  • Задержку (latency): Чем ближе сервер к вам и вашим пользователям, тем быстрее будет загружаться веб-интерфейс TTRSS.
  • Законодательство: Некоторые пользователи предпочитают размещать свои данные в юрисдикциях с более строгими законами о конфиденциальности.
  • Скорость агрегации: Если большинство ваших RSS-лент исходит из определенного географического региона, размещение VPS там же может немного ускорить процесс обновления лент, но это редко является критичным фактором.

В большинстве случаев выбирайте локацию, которая находится географически близко к вам или к основной массе ваших пользователей.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

После получения доступа к вашему новому VPS первое, что нужно сделать — это провести базовую настройку безопасности и установить необходимые утилиты. Мы будем использовать дистрибутив на базе Debian/Ubuntu, который является одним из самых популярных и хорошо документированных.

1. Подключение по SSH и создание нового пользователя

Подключитесь к серверу как пользователь root (или тот, которого предоставил провайдер):


ssh root@ВАШ_IP_АДРЕС

Создайте нового пользователя с правами sudo для повседневной работы. Замените ваш_пользователь на желаемое имя пользователя:


adduser ваш_пользователь # Создаем нового пользователя
usermod -aG sudo ваш_пользователь # Добавляем его в группу sudo

Установите надежный пароль для нового пользователя, когда система запросит.

2. Настройка аутентификации по SSH-ключам (рекомендуется)

Это значительно повышает безопасность. Скопируйте ваш публичный SSH-ключ на сервер:


# На вашей локальной машине:
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС

Затем отключите аутентификацию по паролю для SSH (только после того, как убедитесь, что можете войти по ключу). Отредактируйте файл /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config

Найдите строки и измените их значения:


PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no # Иногда полезно отключить, если у вас проблемы с логином
PermitRootLogin no # Отключаем вход для root

Перезапустите SSH-сервис:


sudo systemctl restart sshd

Теперь выйдите из root-сессии и войдите как новый пользователь:


exit
ssh ваш_пользователь@ВАШ_IP_АДРЕС

3. Обновление системы и установка базовых утилит

Обновите список пакетов и установите все доступные обновления:


sudo apt update && sudo apt upgrade -y

Установите необходимые утилиты, которые пригодятся в процессе настройки:


sudo apt install -y curl wget git nano htop unzip

4. Настройка файрвола (UFW)

Включите UFW и разрешите только необходимые порты (SSH, HTTP, HTTPS):


sudo apt install -y ufw # Устанавливаем UFW, если еще не установлен
sudo ufw allow OpenSSH # Разрешаем SSH (порт 22 по умолчанию)
sudo ufw allow http # Разрешаем HTTP (порт 80)
sudo ufw allow https # Разрешаем HTTPS (порт 443)
sudo ufw enable # Включаем файрвол
sudo ufw status # Проверяем статус файрвола

Подтвердите включение файрвола, нажав y.

5. Установка Fail2Ban

Fail2Ban помогает защитить сервер от атак методом подбора паролей, блокируя IP-адреса, с которых поступают множественные неудачные попытки входа.


sudo apt install -y fail2ban # Устанавливаем Fail2Ban
sudo systemctl enable fail2ban # Включаем автозапуск сервиса
sudo systemctl start fail2ban # Запускаем сервис
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Копируем конфиг для редактирования

Отредактируйте /etc/fail2ban/jail.local, если хотите изменить параметры (например, bantime или maxretry). Для большинства случаев настройки по умолчанию для SSH достаточны.


sudo nano /etc/fail2ban/jail.local

Убедитесь, что секция [sshd] активна (enabled = true).

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

Для развертывания Tiny Tiny RSS мы будем использовать Docker и Docker Compose. Это позволит изолировать TTRSS, PostgreSQL и Nginx, упростит управление зависимостями и обеспечит легкие обновления.

1. Установка Docker Engine (актуально на 2026 год)

Добавим официальный репозиторий Docker, чтобы всегда получать самые свежие версии.


# Обновляем список пакетов
sudo apt update

# Устанавливаем необходимые пакеты для работы с HTTPS-репозиториями
sudo apt install -y ca-certificates curl gnupg

# Добавляем официальный GPG ключ Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавляем репозиторий Docker в APT sources
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Обновляем список пакетов с учетом нового репозитория
sudo apt update

# Устанавливаем Docker Engine, Docker CLI и containerd
# Актуальные версии на 2026 год могут быть Docker Engine 25.x/26.x
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Проверим, что Docker установлен и работает:


sudo docker run hello-world # Запускаем тестовый контейнер

Добавим вашего пользователя в группу docker, чтобы не использовать sudo для каждой команды Docker:


sudo usermod -aG docker ваш_пользователь # Добавляем пользователя в группу docker
newgrp docker # Применяем изменения к текущей сессии (или переподключитесь по SSH)

2. Установка Docker Compose (плагин)

Docker Compose теперь поставляется как плагин Docker CLI, поэтому он уже должен быть установлен с docker-compose-plugin. Проверим его версию:


docker compose version # Проверяем версию Docker Compose (ожидаем 2.24.x или выше на 2026 год)

3. Установка Nginx

Nginx будет работать как обратный прокси на хост-машине, перенаправляя запросы к нашему Docker-контейнеру TTRSS.


sudo apt install -y nginx # Устанавливаем Nginx
sudo systemctl enable nginx # Включаем автозапуск Nginx
sudo systemctl start nginx # Запускаем Nginx

Проверим статус Nginx:


sudo systemctl status nginx # Убеждаемся, что Nginx работает

4. Установка Certbot для Let's Encrypt

Certbot будет использоваться для автоматического получения и продления SSL/TLS-сертификатов от Let's Encrypt.


sudo apt install -y certbot python3-certbot-nginx # Устанавливаем Certbot и плагин для Nginx

5. Создание рабочего каталога для TTRSS

Создадим каталог, где будут храниться все файлы конфигурации Docker Compose и данные TTRSS.


mkdir ~/ttrss # Создаем каталог в домашней директории пользователя
cd ~/ttrss # Переходим в созданный каталог

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

Теперь, когда все необходимое ПО установлено, мы перейдем к настройке Tiny Tiny RSS, базы данных PostgreSQL и Nginx.

1. Создание файла docker-compose.yml

Этот файл описывает наши сервисы (TTRSS, PostgreSQL) и их взаимосвязи. Создайте файл docker-compose.yml в каталоге ~/ttrss:


nano docker-compose.yml

Вставьте следующее содержимое. Замените ВАШ_ДОМЕН на ваш реальный домен, например ttrss.example.com. Также придумайте надежные пароли для POSTGRES_PASSWORD и TTRSS_DB_PASS.


version: '3.8'

services:
  db:
    image: postgres:17-alpine # Актуальная версия PostgreSQL на 2026 год
    restart: always
    environment:
      POSTGRES_USER: ttrss_user
      POSTGRES_PASSWORD: ваш_очень_надежный_пароль_для_бд # Смените на свой
      POSTGRES_DB: ttrss_db
    volumes:
      - db_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ttrss_user -d ttrss_db"]
      interval: 10s
      timeout: 5s
      retries: 5

  app:
    image: ghcr.io/henrywhitaker3/ttrss:latest # Официальный Docker образ Tiny Tiny RSS
    restart: always
    depends_on:
      db:
        condition: service_healthy
    environment:
      TTRSS_DB_TYPE: pgsql
      TTRSS_DB_HOST: db
      TTRSS_DB_NAME: ttrss_db
      TTRSS_DB_USER: ttrss_user
      TTRSS_DB_PASS: ваш_очень_надежный_пароль_для_бд # Должен совпадать с POSTGRES_PASSWORD
      TTRSS_SELF_URL_PATH: https://ВАШ_ДОМЕН/ # Замените на ваш домен
      TTRSS_FEED_UPDATE_INTERVAL: 15 # Интервал обновления лент в минутах
      TTRSS_PLUGINS: auth_internal,bookmarklets,embed_original,fever,force_refresh,mark_read_on_scroll,note,nsfw,open_in_new_window,toggle_sidebar,updater,view_original,youtube
      TTRSS_PHP_TZ: Europe/Moscow # Установите свой часовой пояс
      TTRSS_NO_SMTP_HOSTNAME: "true" # Если не используете SMTP для отправки почты
      TTRSS_LOG_DESTINATION: "stdout"
      TTRSS_DEFAULT_UPDATE_DAEMON: "true" # Включаем встроенный демон обновления
    volumes:
      - ttrss_data:/var/www/html/feed-icons # Для иконок фидов
      - ./config.php:/var/www/html/config.php # Если нужна кастомная конфигурация, но лучше через ENV
    ports:
      - "127.0.0.1:8080:80" # TTRSS будет доступен на хосте через порт 8080

volumes:
  db_data:
  ttrss_data:

Настройки TTRSS_SELF_URL_PATH, TTRSS_FEED_UPDATE_INTERVAL, TTRSS_PLUGINS и TTRSS_PHP_TZ можно адаптировать под свои нужды.

Сохраните и закройте файл (Ctrl+O, Enter, Ctrl+X).

2. Запуск Docker Compose сервисов

В каталоге ~/ttrss выполните:


docker compose up -d # Запускаем контейнеры в фоновом режиме

Проверьте статус контейнеров:


docker compose ps # Проверяем, что все сервисы запущены и здоровы (healthy)

3. Настройка Nginx в качестве обратного прокси

Создайте новый файл конфигурации Nginx для вашего домена. Замените ВАШ_ДОМЕН на ваш домен.


sudo nano /etc/nginx/sites-available/ВАШ_ДОМЕН.conf

Вставьте следующее содержимое:


server {
    listen 80;
    listen [::]:80;
    server_name ВАШ_ДОМЕН; # Замените на ваш домен

    location / {
        return 301 https://$host$request_uri; # Перенаправляем HTTP на HTTPS
    }
}

# Этот блок будет настроен Certbot'ом автоматически после получения SSL
# server {
#     listen 443 ssl http2;
#     listen [::]:443 ssl http2;
#     server_name ВАШ_ДОМЕН;
#
#     ssl_certificate /etc/letsencrypt/live/ВАШ_ДОМЕН/fullchain.pem;
#     ssl_certificate_key /etc/letsencrypt/live/ВАШ_ДОМЕН/privkey.pem;
#     ssl_trusted_certificate /etc/letsencrypt/live/ВАШ_ДОМЕН/chain.pem;
#
#     # Остальные SSL-настройки для безопасности
#     ssl_protocols TLSv1.2 TLSv1.3;
#     ssl_prefer_server_ciphers off;
#     ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
#     ssl_session_cache shared:SSL:10m;
#     ssl_session_timeout 1h;
#     ssl_session_tickets off;
#     ssl_stapling on;
#     ssl_stapling_verify on;
#     resolver 8.8.8.8 8.8.4.4 valid=300s;
#     resolver_timeout 5s;
#
#     add_header X-Frame-Options "SAMEORIGIN" always;
#     add_header X-Content-Type-Options "nosniff" always;
#     add_header X-XSS-Protection "1; mode=block" always;
#     add_header Referrer-Policy "no-referrer-when-downgrade" always;
#     add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
#
#     location / {
#         proxy_pass http://127.0.0.1:8080; # Перенаправляем на TTRSS контейнер
#         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;
#         proxy_buffering off;
#         proxy_request_buffering off;
#     }
#
#     # Запрет доступа к скрытым файлам
#     location ~ /\.ht {
#         deny all;
#     }
# }

Создайте символическую ссылку на этот файл в sites-enabled и проверьте конфигурацию Nginx:


sudo ln -s /etc/nginx/sites-available/ВАШ_ДОМЕН.conf /etc/nginx/sites-enabled/
sudo nginx -t # Проверяем синтаксис конфига Nginx

Если ошибок нет, перезапустите Nginx:


sudo systemctl restart nginx

4. Получение SSL-сертификата с Certbot

Теперь получим SSL-сертификат для вашего домена с помощью Certbot. Убедитесь, что ваш домен уже указывает на IP-адрес вашего VPS.


sudo certbot --nginx -d ВАШ_ДОМЕН # Замените на ваш домен

Следуйте инструкциям Certbot. Он запросит ваш email для уведомлений и согласие с условиями. После успешного выполнения Certbot автоматически изменит ваш файл конфигурации Nginx, добавив server блок для HTTPS и настроив SSL.

Проверьте, что автоматическое продление сертификатов работает:


sudo certbot renew --dry-run # Тестовый запуск продления

Если тестовый запуск прошел успешно, Certbot настроил cron-задачу для автоматического продления сертификатов.

5. Проверка работоспособности

Откройте в браузере https://ВАШ_ДОМЕН. Вы должны увидеть страницу входа Tiny Tiny RSS. Логин по умолчанию: admin, пароль: password. Обязательно смените пароль сразу после первого входа!

Внутри TTRSS перейдите в "Preferences" -> "Feeds" и попробуйте добавить несколько RSS-лент, чтобы убедиться, что они обновляются.

Вы также можете проверить доступность сервиса с помощью curl с сервера:


curl -I https://127.0.0.1:8080 # Проверяем доступ к TTRSS через внутренний порт

Или, если вы хотите проверить через Nginx (с хоста):


curl -I https://ВАШ_ДОМЕН # Проверяем доступ через Nginx и HTTPS

Убедитесь, что заголовки ответа показывают успешное соединение (например, HTTP/2 200).

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

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Регулярное резервное копирование — критически важная часть любого продакшн-сервиса. Для Tiny Tiny RSS необходимо бэкапить базу данных и пользовательские данные.

1. Что бэкапить

  • База данных PostgreSQL: Содержит все ваши ленты, статьи, настройки, пользователей. Это самая важная часть.
  • Конфигурационные файлы TTRSS: Хотя мы используем переменные окружения, если вы вносили изменения в config.php или другие файлы, их нужно бэкапить.
  • Данные пользователей (feed-icons): Каталог ttrss_data, куда монтируются иконки фидов.
  • Конфигурация Nginx и Certbot: Файлы /etc/nginx/sites-available/ВАШ_ДОМЕН.conf и /etc/letsencrypt/.

2. Простой скрипт автобэкапа

Создадим простой скрипт, который будет бэкапить базу данных PostgreSQL и важные файлы.


nano ~/ttrss/backup_ttrss.sh

Вставьте следующее содержимое, заменив ВАШ_ДОМЕН на ваш домен и ваш_очень_надежный_пароль_для_бд на пароль от вашей БД:


#!/bin/bash

# --- НАСТРОЙКИ ---
BACKUP_DIR="/var/backups/ttrss"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
DB_CONTAINER="ttrss-db-1" # Имя контейнера базы данных (можно посмотреть через 'docker ps')
DB_USER="ttrss_user"
DB_NAME="ttrss_db"
DB_PASSWORD="ваш_очень_надежный_пароль_для_бд" # Пароль от БД

# Каталог с данными TTRSS
TTRSS_DATA_DIR="/var/lib/docker/volumes/ttrss_ttrss_data/_data" # Путь к volume ttrss_data

# Каталог с конфигурацией Nginx и Certbot
NGINX_CONF_DIR="/etc/nginx/sites-available"
LETSENCRYPT_DIR="/etc/letsencrypt"
COMPOSE_FILE_PATH="/home/ваш_пользователь/ttrss/docker-compose.yml" # Путь к docker-compose.yml

# --- СОЗДАНИЕ КАТАЛОГА ДЛЯ БЭКАПОВ ---
mkdir -p "$BACKUP_DIR"

# --- БЭКАП БАЗЫ ДАННЫХ ---
echo "[$TIMESTAMP] Создание бэкапа базы данных PostgreSQL..."
docker exec -e PGPASSWORD="$DB_PASSWORD" "$DB_CONTAINER" pg_dump -U "$DB_USER" -d "$DB_NAME" -Fc > "$BACKUP_DIR/ttrss_db_$TIMESTAMP.dump"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Бэкап базы данных успешно создан: $BACKUP_DIR/ttrss_db_$TIMESTAMP.dump"
else
    echo "[$TIMESTAMP] ОШИБКА: Не удалось создать бэкап базы данных."
fi

# --- БЭКАП ДАННЫХ TTRSS (feed-icons) ---
echo "[$TIMESTAMP] Копирование данных TTRSS (feed-icons)..."
tar -czf "$BACKUP_DIR/ttrss_data_$TIMESTAMP.tar.gz" -C "$TTRSS_DATA_DIR" .
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Бэкап данных TTRSS успешно создан: $BACKUP_DIR/ttrss_data_$TIMESTAMP.tar.gz"
else
    echo "[$TIMESTAMP] ОШИБКА: Не удалось создать бэкап данных TTRSS."
fi

# --- БЭКАП КОНФИГУРАЦИИ NGINX и Certbot ---
echo "[$TIMESTAMP] Копирование конфигурации Nginx..."
cp "$NGINX_CONF_DIR/ВАШ_ДОМЕН.conf" "$BACKUP_DIR/nginx_ВАШ_ДОМЕН_conf_$TIMESTAMP"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Бэкап Nginx успешно создан."
else
    echo "[$TIMESTAMP] ОШИБКА: Не удалось создать бэкап Nginx."
fi

echo "[$TIMESTAMP] Копирование конфигурации Certbot..."
tar -czf "$BACKUP_DIR/letsencrypt_conf_$TIMESTAMP.tar.gz" -C "$LETSENCRYPT_DIR" .
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Бэкап Certbot успешно создан."
else
    echo "[$TIMESTAMP] ОШИБКА: Не удалось создать бэкап Certbot."
fi

echo "[$TIMESTAMP] Копирование docker-compose.yml..."
cp "$COMPOSE_FILE_PATH" "$BACKUP_DIR/docker-compose_$TIMESTAMP.yml"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Бэкап docker-compose.yml успешно создан."
else
    echo "[$TIMESTAMP] ОШИБКА: Не удалось создать бэкап docker-compose.yml."
fi

# --- ОЧИСТКА СТАРЫХ БЭКАПОВ (храним последние 7 дней) ---
echo "[$TIMESTAMP] Удаление старых бэкапов (старше 7 дней)..."
find "$BACKUP_DIR" -type f -name ".dump" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name ".tar.gz" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name ".yml" -mtime +7 -delete
find "$BACKUP_DIR" -type f -name "_conf_" -mtime +7 -delete
echo "[$TIMESTAMP] Очистка завершена."

echo "[$TIMESTAMP] Процесс бэкапа завершен."

Сделайте скрипт исполняемым:


chmod +x ~/ttrss/backup_ttrss.sh

3. Настройка Cron для автоматического бэкапа

Добавьте скрипт в расписание Cron для ежедневного выполнения:


crontab -e

Добавьте следующую строку в конец файла (например, для запуска в 03:00 ночи ежедневно):


0 3    /home/ваш_пользователь/ttrss/backup_ttrss.sh >> /var/log/ttrss_backup.log 2>&1

Сохраните и закройте файл. Теперь бэкапы будут создаваться автоматически.

4. Куда складывать бэкапы (внешнее хранилище)

Хранить бэкапы на том же сервере, что и основной сервис, небезопасно. В случае выхода из строя сервера вы потеряете и сервис, и бэкапы. Рекомендуется использовать внешние хранилища:

  • S3-совместимое хранилище: Облачные сервисы, такие как AWS S3, Backblaze B2, DigitalOcean Spaces, предлагают надежное и недорогое хранение. Для их использования можно интегрировать скрипт с утилитами вроде awscli или rclone.
  • Отдельный VPS: Вы можете иметь небольшой, дешевый VPS, куда по rsync или scp будут копироваться бэкапы.
  • Локальный NAS/ПК: Если вы хотите хранить бэкапы дома, можно настроить rsync или scp для копирования их на ваш домашний сервер.

Пример отправки бэкапов на другой сервер через rsync (добавьте в скрипт после создания архивов):


# --- ОТПРАВКА БЭКАПОВ НА УДАЛЕННЫЙ СЕРВЕР ---
REMOTE_USER="backup_user"
REMOTE_HOST="ваш_удаленный_сервер_ip"
REMOTE_PATH="/mnt/backups/ttrss/"

echo "[$TIMESTAMP] Отправка бэкапов на удаленный сервер $REMOTE_HOST..."
rsync -avz "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Бэкапы успешно отправлены на удаленный сервер."
else
    echo "[$TIMESTAMP] ОШИБКА: Не удалось отправить бэкапы на удаленный сервер."
fi

Убедитесь, что на удаленном сервере настроена аутентификация по SSH-ключам для пользователя backup_user.

5. Обновления: rolling vs maintenance window

  • Обновление Docker-образов (rolling): Для TTRSS и PostgreSQL, поскольку они работают в Docker, обновление относительно просто. Вы можете выполнять docker compose pull для загрузки новых образов и затем docker compose up -d для их развертывания. Это можно делать без значительного простоя, так как Docker умеет gracefully перезапускать контейнеры. Рекомендуется проверять логи после обновления.
  • Обновление системы (maintenance window): Обновление самой операционной системы (sudo apt update && sudo apt upgrade -y) лучше проводить в заранее определенное "окно обслуживания", когда нагрузка на сервер минимальна. Это может потребовать перезагрузки сервера, что приведет к кратковременному простою TTRSS.

Для автоматизации обновления Docker-образов можно использовать утилиты типа Watchtower, которая отслеживает новые версии образов и автоматически обновляет запущенные контейнеры. Однако, для критически важных сервисов лучше контролировать обновления вручную или через CI/CD пайплайны.

Troubleshooting + FAQ

Какой VPS-конфиг минимально подойдёт?

Для Tiny Tiny RSS на одного-двух пользователей с умеренным количеством лент (до 1000) минимально подойдет VPS с 1 ядром CPU, 1 ГБ оперативной памяти и 20 ГБ SSD. Этого достаточно для работы Docker-контейнеров TTRSS, PostgreSQL и Nginx, но без большого запаса. При увеличении числа пользователей или лент, рекомендуется увеличить RAM и дисковое пространство.

Что выбрать — VPS или dedicated для этой задачи?

В подавляющем большинстве случаев для Tiny Tiny RSS на несколько десятков пользователей достаточно VPS. Выделенный сервер (dedicated) имеет смысл только для очень крупных инсталляций, обслуживающих сотни или тысячи пользователей, или если на сервере работают другие ресурсоемкие сервисы. VPS предлагает лучшую гибкость и экономичность для большинства сценариев использования TTRSS.

TTRSS недоступен после установки, что делать?

Проверьте следующие шаги:

  1. Убедитесь, что Docker-контейнеры запущены: docker compose ps. Все сервисы должны быть в статусе running (healthy).
  2. Проверьте, что Nginx работает: sudo systemctl status nginx.
  3. Проверьте конфигурацию Nginx: sudo nginx -t. Убедитесь, что нет синтаксических ошибок.
  4. Проверьте, что доменное имя указывает на ваш VPS: используйте ping ВАШ_ДОМЕН или онлайн-инструменты DNS-lookup.
  5. Проверьте правила файрвола: sudo ufw status. Порты 80 и 443 должны быть разрешены.
  6. Попробуйте получить доступ к TTRSS напрямую через внутренний порт: curl -I http://127.0.0.1:8080 с сервера. Если это работает, проблема в Nginx или Certbot.

Мой SSL-сертификат истек или не был выдан, что делать?

Сертификаты Let's Encrypt действуют 90 дней. Certbot должен автоматически их продлевать. Если сертификат истек или не был выдан:

  1. Убедитесь, что ваш домен корректно указывает на IP-адрес VPS.
  2. Проверьте конфигурацию Nginx: sudo nginx -t. Убедитесь, что Nginx работает на порту 80 и может отвечать на запросы Certbot.
  3. Попробуйте обновить сертификаты вручную: sudo certbot renew --force-renewal.
  4. Проверьте логи Certbot: sudo tail -f /var/log/letsencrypt/letsencrypt.log на наличие ошибок.

Ленты не обновляются автоматически, хотя TTRSS работает.

Это может быть связано с тем, что демон обновления TTRSS не запущен или не имеет доступа к интернету:

  1. Проверьте, что в docker-compose.yml установлена переменная TTRSS_DEFAULT_UPDATE_DAEMON: "true".
  2. Убедитесь, что контейнер TTRSS может получить доступ к внешним ресурсам. Проверьте логи контейнера: docker compose logs app.
  3. Внутри TTRSS перейдите в "Preferences" -> "Feeds" и попробуйте принудительно обновить несколько лент.
  4. Проверьте системное время VPS: date. Неправильное время может вызывать проблемы с планировщиком.

Docker Compose выдает ошибки при запуске.

Внимательно прочитайте сообщение об ошибке. Частые причины:

  1. Ошибки синтаксиса YAML: Убедитесь, что отступы и структура файла docker-compose.yml корректны. Используйте онлайн-валидаторы YAML.
  2. Проблемы с портами: Если порт 8080 уже занят на хост-машине другим сервисом, Docker не сможет его использовать. Проверьте sudo lsof -i :8080.
  3. Недостаточно ресурсов: Если у вас очень мало оперативной памяти, контейнеры могут не запуститься. Проверьте docker compose logs для соответствующего сервиса.
  4. Неправильные переменные окружения: Убедитесь, что пароли и доменные имена в docker-compose.yml указаны верно.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно развернули и настроили свой собственный Tiny Tiny RSS сервер на VPS, используя Docker, Nginx и PostgreSQL. Теперь у вас есть мощный, приватный и полностью контролируемый инструмент для агрегации и чтения новостных лент. Вы освоили современные подходы к развертыванию веб-приложений, включая контейнеризацию, безопасное соединение через HTTPS и автоматическое резервное копирование.

Куда двигаться дальше?

  • Настройка плагинов: Изучите богатую экосистему плагинов TTRSS для расширения функционала, например, для интеграции с другими сервисами, улучшения парсинга или добавления новых тем.
  • Мобильный доступ: Установите одно из мобильных приложений, поддерживающих TTRSS API (например, FeedMe для Android или TTRSS Reader для iOS), чтобы читать ленты с мобильных устройств.
  • Мониторинг ресурсов: Установите систему мониторинга (например, Prometheus + Grafana или Netdata) для отслеживания использования ресурсов вашего VPS и производительности TTRSS, чтобы быть готовым к масштабированию.

Был ли этот гайд полезен?

Ваш отзыв помогает нам улучшать гайды.

Поделиться записью:

Отправьте гайд тому, кому он может пригодиться.

Telegram VKVK WhatsApp Facebook LinkedIn XX

установка tiny tiny rss на vps: docker, nginx, postgresql и автообновления
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.