bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación de Tiny Tiny RSS en

calendar_month Aug 26, 2026 schedule 18 min de lectura visibility 22 vistas
Установка Tiny Tiny RSS на VPS: Docker, Nginx, PostgreSQL и автообновления
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación de Tiny Tiny RSS en un VPS: Docker, Nginx, PostgreSQL y actualizaciones automáticas

TL;DR

En esta detallada guía, configuraremos paso a paso Tiny Tiny RSS (TTRSS) — un potente y flexible agregador RSS de código abierto — en su servidor virtual (VPS). Utilizaremos un enfoque moderno con Docker y Docker Compose para el aislamiento y la fácil gestión de los servicios, Nginx como proxy inverso y para asegurar HTTPS, y PostgreSQL como una base de datos fiable. Como resultado, obtendrá un servidor TTRSS completamente funcional, seguro y con actualizaciones automáticas, listo para recopilar y organizar sus fuentes de noticias.

  • TTRSS se desplegará en contenedores Docker para facilitar la gestión y la escalabilidad.
  • Nginx configurado como proxy inverso para TTRSS, proporcionando acceso al servicio a través de un nombre de dominio y HTTPS.
  • Obtención y renovación automática de certificados SSL de Let's Encrypt con Certbot.
  • La base de datos PostgreSQL funcionará en un contenedor separado, garantizando un almacenamiento de datos fiable.
  • Configuración de actualizaciones automáticas y copias de seguridad para un funcionamiento ininterrumpido y la seguridad de los datos.
  • La guía incluye comandos para Debian/Ubuntu, válidos para 2026.

Qué configuramos y por qué

Instalaremos Tiny Tiny RSS (TTRSS) — un potente agregador de feeds RSS/Atom basado en web, completamente de código abierto (AGPLv3). En un mundo donde muchos servicios RSS comerciales van y vienen, o empiezan a mostrar publicidad y a limitar funcionalidades, TTRSS ofrece total libertad y control sobre sus flujos de noticias. Podrá recopilar, leer y organizar miles de feeds de las más diversas fuentes, ya sean blogs, sitios de noticias, podcasts o canales de YouTube (con la ayuda de plugins especiales).

Al final, el lector obtendrá su propio servidor RSS, privado y totalmente controlado, accesible desde cualquier parte del mundo a través de una interfaz web y aplicaciones móviles (que soporten la API de TTRSS). Esta es la solución ideal para quienes valoran la privacidad, desean evitar la publicidad intrusiva y tener control total sobre su espacio de información.

Existen alternativas, como los servicios en la nube (Inoreader, Feedly) u otras soluciones autoalojadas (FreshRSS, Nextcloud News). Los servicios en la nube son convenientes, pero le privan del control sobre sus datos y a menudo tienen tarifas de pago con funcionalidades extendidas. Las soluciones autoalojadas, como TTRSS, requieren una configuración inicial, pero a largo plazo ofrecen una flexibilidad, seguridad y beneficio económico incomparables, especialmente cuando las despliega en su propio VPS. Usted es dueño de sus datos, puede instalar cualquier plugin y configurar el servicio según sus necesidades sin restricciones.

Qué configuración de VPS se necesita para esta tarea

Diagrama: Qué configuración de VPS se necesita para esta tarea
Diagrama: Qué configuración de VPS se necesita para esta tarea

Para desplegar Tiny Tiny RSS con Docker, Nginx y PostgreSQL en un solo VPS se requieren recursos relativamente modestos, pero con un pequeño margen para un funcionamiento cómodo y la posibilidad de expansión.

Requisitos mínimos (para 1-5 usuarios, hasta 1000 feeds):

  • CPU: 1 núcleo (por ejemplo, Intel Xeon E3/E5 o AMD EPYC).
  • RAM: 1 GB. Esto es suficiente para los contenedores Docker de TTRSS, PostgreSQL y Nginx, pero sin mucho margen.
  • Disco: 20 GB SSD. TTRSS no consume mucho espacio para la instalación en sí, pero la base de datos y la caché de imágenes pueden crecer con el tiempo. Un SSD acelera significativamente el trabajo con la base de datos.
  • Red: 100 Mbit/s. Para un agregador RSS, la velocidad de la red no es crítica, ya que el tráfico consiste principalmente en pequeñas solicitudes HTTP.

Plan de VPS recomendado (para 5-20 usuarios, hasta 5000+ feeds, con margen para el futuro):

  • CPU: 2 núcleos. Proporcionará un mejor rendimiento al actualizar un gran número de feeds y al trabajar varios usuarios simultáneamente.
  • RAM: 2-4 GB. Permitirá a PostgreSQL almacenar datos en caché de manera más eficiente y a TTRSS procesar más tareas en segundo plano.
  • Disco: 50-100 GB SSD. Proporcionará suficiente espacio para el crecimiento de la base de datos, el almacenamiento en caché y las copias de seguridad.
  • Red: 1 Gbit/s. Velocidad estándar que garantiza una carga rápida de la interfaz web.

Para este escenario, puede adquirir un VPS con las características indicadas. Elija un proveedor que ofrezca tarifas flexibles y la posibilidad de escalabilidad.

Cuándo se necesita un servidor dedicado y no un VPS

Un servidor dedicado para Tiny Tiny RSS no suele ser necesario, a menos que planee atender a cientos o miles de usuarios, agregar decenas de miles de feeds con una frecuencia de actualización muy alta, o si TTRSS es solo uno de los muchos servicios exigentes que se ejecutan en el mismo servidor. Los servidores dedicados ofrecen un aislamiento completo de los recursos y, a menudo, un mayor rendimiento de E/S, pero para TTRSS con unas pocas decenas de usuarios, un VPS de nivel medio será más que suficiente y significativamente más económico.

Ubicación: en qué influye

La elección de la ubicación del VPS influye en:

  • Latencia: Cuanto más cerca esté el servidor de usted y sus usuarios, más rápido se cargará la interfaz web de TTRSS.
  • Legislación: Algunos usuarios prefieren alojar sus datos en jurisdicciones con leyes de privacidad más estrictas.
  • Velocidad de agregación: Si la mayoría de sus feeds RSS provienen de una región geográfica específica, ubicar el VPS allí mismo puede acelerar ligeramente el proceso de actualización de los feeds, pero esto rara vez es un factor crítico.

En la mayoría de los casos, elija una ubicación que esté geográficamente cerca de usted o de la mayoría de sus usuarios.

Preparación del servidor

Diagrama: Preparación del servidor
Diagrama: Preparación del servidor

Después de obtener acceso a su nuevo VPS, lo primero que debe hacer es realizar una configuración básica de seguridad e instalar las utilidades necesarias. Utilizaremos una distribución basada en Debian/Ubuntu, que es una de las más populares y bien documentadas.

1. Conexión por SSH y creación de un nuevo usuario

Conéctese al servidor como usuario root (o el que le haya proporcionado el proveedor):


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

Cree un nuevo usuario con permisos sudo para el trabajo diario. Reemplace ваш_пользователь con el nombre de usuario deseado:


adduser ваш_пользователь # Creamos un nuevo usuario
usermod -aG sudo ваш_пользователь # Lo añadimos al grupo sudo

Establezca una contraseña segura para el nuevo usuario cuando el sistema lo solicite.

2. Configuración de la autenticación por claves SSH (recomendado)

Esto aumenta significativamente la seguridad. Copie su clave pública SSH al servidor:


# En su máquina local:
ssh-copy-id ваш_пользователь@ВАШ_IP_АДРЕС

Luego, desactive la autenticación por contraseña para SSH (solo después de asegurarse de que puede iniciar sesión con la clave). Edite el archivo /etc/ssh/sshd_config:


sudo nano /etc/ssh/sshd_config

Encuentre las líneas y cambie sus valores:


PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no # A veces es útil deshabilitar si tiene problemas de inicio de sesión
PermitRootLogin no # Deshabilitamos el inicio de sesión para root

Reinicie el servicio SSH:


sudo systemctl restart sshd

Ahora salga de la sesión de root e inicie sesión como el nuevo usuario:


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

3. Actualización del sistema e instalación de utilidades básicas

Actualice la lista de paquetes e instale todas las actualizaciones disponibles:


sudo apt update && sudo apt upgrade -y

Instale las utilidades necesarias que serán útiles durante el proceso de configuración:


sudo apt install -y curl wget git nano htop unzip

4. Configuración del firewall (UFW)

Habilite UFW y permita solo los puertos necesarios (SSH, HTTP, HTTPS):


sudo apt install -y ufw # Instalamos UFW, si aún no está instalado
sudo ufw allow OpenSSH # Permitimos SSH (puerto 22 por defecto)
sudo ufw allow http # Permitimos HTTP (puerto 80)
sudo ufw allow https # Permitimos HTTPS (puerto 443)
sudo ufw enable # Habilitamos el firewall
sudo ufw status # Verificamos el estado del firewall

Confirme la activación del firewall pulsando y.

5. Instalación de Fail2Ban

Fail2Ban ayuda a proteger el servidor contra ataques de fuerza bruta, bloqueando las direcciones IP desde las que se producen múltiples intentos fallidos de inicio de sesión.


sudo apt install -y fail2ban # Instalamos Fail2Ban
sudo systemctl enable fail2ban # Habilitamos el inicio automático del servicio
sudo systemctl start fail2ban # Iniciamos el servicio
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local # Copiamos la configuración para editar

Edite /etc/fail2ban/jail.local si desea cambiar los parámetros (por ejemplo, bantime o maxretry). Para la mayoría de los casos, la configuración predeterminada para SSH es suficiente.


sudo nano /etc/fail2ban/jail.local

Asegúrese de que la sección [sshd] esté activa (enabled = true).

Instalación de software — paso a paso

Diagrama: Instalación de software — paso a paso
Diagrama: Instalación de software — paso a paso

Para desplegar Tiny Tiny RSS, utilizaremos Docker y Docker Compose. Esto permitirá aislar TTRSS, PostgreSQL y Nginx, simplificará la gestión de dependencias y facilitará las actualizaciones.

1. Instalación de Docker Engine (actualizado a 2026)

Añadiremos el repositorio oficial de Docker para obtener siempre las versiones más recientes.


# Обновляем список пакетов
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

Verifiquemos que Docker esté instalado y funcionando:


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

Añadiremos su usuario al grupo docker para no tener que usar sudo en cada comando de Docker:


sudo usermod -aG docker su_usuario # Añadimos el usuario al grupo docker
newgrp docker # Aplicamos los cambios a la sesión actual (o reconéctese por SSH)

2. Instalación de Docker Compose (plugin)

Docker Compose ahora se distribuye como un plugin de Docker CLI, por lo que ya debería estar instalado con docker-compose-plugin. Verifiquemos su versión:


docker compose version # Verificamos la versión de Docker Compose (se espera 2.24.x o superior para 2026)

3. Instalación de Nginx

Nginx funcionará como un proxy inverso en la máquina host, redirigiendo las solicitudes a nuestro contenedor Docker de TTRSS.


sudo apt install -y nginx # Instalamos Nginx
sudo systemctl enable nginx # Habilitamos el inicio automático de Nginx
sudo systemctl start nginx # Iniciamos Nginx

Verifiquemos el estado de Nginx:


sudo systemctl status nginx # Nos aseguramos de que Nginx esté funcionando

4. Instalación de Certbot para Let's Encrypt

Certbot se utilizará para obtener y renovar automáticamente certificados SSL/TLS de Let's Encrypt.


sudo apt install -y certbot python3-certbot-nginx # Instalamos Certbot y el plugin para Nginx

5. Creación del directorio de trabajo para TTRSS

Crearemos un directorio donde se almacenarán todos los archivos de configuración de Docker Compose y los datos de TTRSS.


mkdir ~/ttrss # Creamos un directorio en el directorio personal del usuario
cd ~/ttrss # Nos movemos al directorio creado

Configuración

Diagrama: Configuración
Diagrama: Configuración

Ahora que todo el software necesario está instalado, procederemos a configurar Tiny Tiny RSS, la base de datos PostgreSQL y Nginx.

1. Creación del archivo docker-compose.yml

Este archivo describe nuestros servicios (TTRSS, PostgreSQL) y sus interconexiones. Cree el archivo docker-compose.yml en el directorio ~/ttrss:


nano docker-compose.yml

Pegue el siguiente contenido. Reemplace SU_DOMINIO por su dominio real, por ejemplo ttrss.example.com. También invente contraseñas seguras para POSTGRES_PASSWORD y TTRSS_DB_PASS.


version: '3.8'

services:
  db:
    image: postgres:17-alpine # Versión actual de PostgreSQL para 2026
    restart: always
    environment:
      POSTGRES_USER: ttrss_user
      POSTGRES_PASSWORD: su_contraseña_muy_segura_para_la_bd # Cámbielo por el suyo
      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 # Imagen oficial de Docker de 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: su_contraseña_muy_segura_para_la_bd # Debe coincidir con POSTGRES_PASSWORD
      TTRSS_SELF_URL_PATH: https://SU_DOMINIO/ # Reemplace por su dominio
      TTRSS_FEED_UPDATE_INTERVAL: 15 # Intervalo de actualización de feeds en minutos
      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 # Establezca su zona horaria
      TTRSS_NO_SMTP_HOSTNAME: "true" # Si no utiliza SMTP para enviar correo
      TTRSS_LOG_DESTINATION: "stdout"
      TTRSS_DEFAULT_UPDATE_DAEMON: "true" # Habilitamos el demonio de actualización integrado
    volumes:
      - ttrss_data:/var/www/html/feed-icons # Para iconos de feeds
      - ./config.php:/var/www/html/config.php # Si necesita una configuración personalizada, pero es mejor a través de ENV
    ports:
      - "127.0.0.1:8080:80" # TTRSS estará disponible en el host a través del puerto 8080

volumes:
  db_data:
  ttrss_data:

Las configuraciones de TTRSS_SELF_URL_PATH, TTRSS_FEED_UPDATE_INTERVAL, TTRSS_PLUGINS y TTRSS_PHP_TZ se pueden adaptar a sus necesidades.

Guarde y cierre el archivo (Ctrl+O, Enter, Ctrl+X).

2. Inicio de los servicios de Docker Compose

En el directorio ~/ttrss, ejecute:


docker compose up -d # Iniciamos los contenedores en segundo plano

Verifique el estado de los contenedores:


docker compose ps # Verificamos que todos los servicios estén en ejecución y saludables (healthy)

3. Configuración de Nginx como proxy inverso

Cree un nuevo archivo de configuración de Nginx para su dominio. Reemplace SU_DOMINIO por su dominio.


sudo nano /etc/nginx/sites-available/SU_DOMINIO.conf

Pegue el siguiente contenido:


server {
    listen 80;
    listen [::]:80;
    server_name SU_DOMINIO; # Reemplace por su dominio

    location / {
        return 301 https://$host$request_uri; # Redirigimos HTTP a HTTPS
    }
}

# Este bloque será configurado automáticamente por Certbot después de obtener el SSL
# server {
#     listen 443 ssl http2;
#     listen [::]:443 ssl http2;
#     server_name SU_DOMINIO;
#
#     ssl_certificate /etc/letsencrypt/live/SU_DOMINIO/fullchain.pem;
#     ssl_certificate_key /etc/letsencrypt/live/SU_DOMINIO/privkey.pem;
#     ssl_trusted_certificate /etc/letsencrypt/live/SU_DOMINIO/chain.pem;
#
#     # Otras configuraciones SSL para seguridad
#     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; # Redirigimos al contenedor 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;
#     }
#
#     # Prohibición de acceso a archivos ocultos
#     location ~ /\.ht {
#         deny all;
#     }
# }

Cree un enlace simbólico a este archivo en sites-enabled y verifique la configuración de Nginx:


sudo ln -s /etc/nginx/sites-available/SU_DOMINIO.conf /etc/nginx/sites-enabled/
sudo nginx -t # Verificamos la sintaxis de la configuración de Nginx

Si no hay errores, reinicie Nginx:


sudo systemctl restart nginx

4. Obtención de un certificado SSL con Certbot

Ahora obtendremos un certificado SSL para su dominio usando Certbot. Asegúrese de que su dominio ya apunte a la dirección IP de su VPS.


sudo certbot --nginx -d SU_DOMINIO # Reemplace por su dominio

Siga las instrucciones de Certbot. Le pedirá su correo electrónico para notificaciones y su consentimiento a los términos. Después de una ejecución exitosa, Certbot modificará automáticamente su archivo de configuración de Nginx, añadiendo el bloque server para HTTPS y configurando SSL.

Verifique que la renovación automática de certificados funcione:


sudo certbot renew --dry-run # Ejecución de prueba de renovación

Si la ejecución de prueba fue exitosa, Certbot ha configurado una tarea cron para la renovación automática de certificados.

5. Verificación de la operatividad

Abra https://SU_DOMINIO en su navegador. Debería ver la página de inicio de sesión de Tiny Tiny RSS. El nombre de usuario predeterminado es admin, la contraseña es password. ¡Asegúrese de cambiar la contraseña inmediatamente después del primer inicio de sesión!

Dentro de TTRSS, vaya a "Preferences" -> "Feeds" e intente añadir algunas fuentes RSS para asegurarse de que se actualizan.

También puede verificar la disponibilidad del servicio usando curl desde el servidor:


curl -I https://127.0.0.1:8080 # Verificamos el acceso a TTRSS a través del puerto interno

O, si desea verificar a través de Nginx (desde el host):


curl -I https://SU_DOMINIO # Verificamos el acceso a través de Nginx y HTTPS

Asegúrese de que los encabezados de respuesta muestren una conexión exitosa (por ejemplo, HTTP/2 200).

Copias de seguridad y mantenimiento

Diagrama: Copias de seguridad y mantenimiento
Diagrama: Copias de seguridad y mantenimiento

La copia de seguridad regular es una parte crítica de cualquier servicio en producción. Para Tiny Tiny RSS, es necesario hacer una copia de seguridad de la base de datos y los datos del usuario.

1. Qué respaldar

  • Base de datos PostgreSQL: Contiene todas sus fuentes, artículos, configuraciones, usuarios. Esta es la parte más importante.
  • Archivos de configuración de TTRSS: Aunque usamos variables de entorno, si ha realizado cambios en config.php u otros archivos, debe hacer una copia de seguridad de ellos.
  • Datos de usuario (feed-icons): El directorio ttrss_data, donde se montan los iconos de los feeds.
  • Configuración de Nginx y Certbot: Los archivos /etc/nginx/sites-available/ВАШ_ДОМЕН.conf y /etc/letsencrypt/.

2. Script simple de copia de seguridad automática

Crearemos un script simple que hará una copia de seguridad de la base de datos PostgreSQL y los archivos importantes.


nano ~/ttrss/backup_ttrss.sh

Pegue el siguiente contenido, reemplazando ВАШ_ДОМЕН por su dominio y ваш_очень_надежный_пароль_для_бд por la contraseña de su base de datos:


#!/bin/bash

# --- CONFIGURACIÓN ---
BACKUP_DIR="/var/backups/ttrss"
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
DB_CONTAINER="ttrss-db-1" # Nombre del contenedor de la base de datos (se puede ver con 'docker ps')
DB_USER="ttrss_user"
DB_NAME="ttrss_db"
DB_PASSWORD="ваш_очень_надежный_пароль_для_бд" # Contraseña de la BD

# Directorio con los datos de TTRSS
TTRSS_DATA_DIR="/var/lib/docker/volumes/ttrss_ttrss_data/_data" # Ruta al volumen ttrss_data

# Directorio con la configuración de Nginx y Certbot
NGINX_CONF_DIR="/etc/nginx/sites-available"
LETSENCRYPT_DIR="/etc/letsencrypt"
COMPOSE_FILE_PATH="/home/ваш_пользователь/ttrss/docker-compose.yml" # Ruta a docker-compose.yml

# --- CREACIÓN DEL DIRECTORIO DE COPIAS DE SEGURIDAD ---
mkdir -p "$BACKUP_DIR"

# --- COPIA DE SEGURIDAD DE LA BASE DE DATOS ---
echo "[$TIMESTAMP] Creando copia de seguridad de la base de datos 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] Copia de seguridad de la base de datos creada con éxito: $BACKUP_DIR/ttrss_db_$TIMESTAMP.dump"
else
    echo "[$TIMESTAMP] ERROR: No se pudo crear la copia de seguridad de la base de datos."
fi

# --- COPIA DE SEGURIDAD DE LOS DATOS DE TTRSS (feed-icons) ---
echo "[$TIMESTAMP] Copiando datos de TTRSS (feed-icons)..."
tar -czf "$BACKUP_DIR/ttrss_data_$TIMESTAMP.tar.gz" -C "$TTRSS_DATA_DIR" .
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Copia de seguridad de los datos de TTRSS creada con éxito: $BACKUP_DIR/ttrss_data_$TIMESTAMP.tar.gz"
else
    echo "[$TIMESTAMP] ERROR: No se pudo crear la copia de seguridad de los datos de TTRSS."
fi

# --- COPIA DE SEGURIDAD DE LA CONFIGURACIÓN DE NGINX y Certbot ---
echo "[$TIMESTAMP] Copiando configuración de Nginx..."
cp "$NGINX_CONF_DIR/ВАШ_ДОМЕН.conf" "$BACKUP_DIR/nginx_ВАШ_ДОМЕН_conf_$TIMESTAMP"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Copia de seguridad de Nginx creada con éxito."
else
    echo "[$TIMESTAMP] ERROR: No se pudo crear la copia de seguridad de Nginx."
fi

echo "[$TIMESTAMP] Copiando configuración de Certbot..."
tar -czf "$BACKUP_DIR/letsencrypt_conf_$TIMESTAMP.tar.gz" -C "$LETSENCRYPT_DIR" .
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Copia de seguridad de Certbot creada con éxito."
else
    echo "[$TIMESTAMP] ERROR: No se pudo crear la copia de seguridad de Certbot."
fi

echo "[$TIMESTAMP] Copiando docker-compose.yml..."
cp "$COMPOSE_FILE_PATH" "$BACKUP_DIR/docker-compose_$TIMESTAMP.yml"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Copia de seguridad de docker-compose.yml creada con éxito."
else
    echo "[$TIMESTAMP] ERROR: No se pudo crear la copia de seguridad de docker-compose.yml."
fi

# --- LIMPIEZA DE COPIAS DE SEGURIDAD ANTIGUAS (conservamos los últimos 7 días) ---
echo "[$TIMESTAMP] Eliminando copias de seguridad antiguas (más de 7 días)..."
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] Limpieza completada."

echo "[$TIMESTAMP] Proceso de copia de seguridad completado."

Haga el script ejecutable:


chmod +x ~/ttrss/backup_ttrss.sh

3. Configuración de Cron para copia de seguridad automática

Agregue el script a la programación de Cron para su ejecución diaria:


crontab -e

Agregue la siguiente línea al final del archivo (por ejemplo, para ejecutarlo a las 03:00 AM diariamente):


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

Guarde y cierre el archivo. Ahora las copias de seguridad se crearán automáticamente.

4. Dónde almacenar las copias de seguridad (almacenamiento externo)

Almacenar las copias de seguridad en el mismo servidor que el servicio principal no es seguro. En caso de fallo del servidor, perderá tanto el servicio como las copias de seguridad. Se recomienda utilizar almacenamiento externo:

  • Almacenamiento compatible con S3: Servicios en la nube como AWS S3, Backblaze B2, DigitalOcean Spaces, ofrecen almacenamiento fiable y económico. Para usarlos, puede integrar el script con utilidades como awscli o rclone.
  • VPS separado: Puede tener un VPS pequeño y económico donde las copias de seguridad se copiarán mediante rsync o scp.
  • NAS/PC local: Si desea almacenar las copias de seguridad en casa, puede configurar rsync o scp para copiarlas a su servidor doméstico.

Ejemplo de envío de copias de seguridad a otro servidor a través de rsync (agregue al script después de crear los archivos):


# --- ENVÍO DE COPIAS DE SEGURIDAD A UN SERVIDOR REMOTO ---
REMOTE_USER="backup_user"
REMOTE_HOST="ваш_удаленный_сервер_ip"
REMOTE_PATH="/mnt/backups/ttrss/"

echo "[$TIMESTAMP] Enviando copias de seguridad al servidor remoto $REMOTE_HOST..."
rsync -avz "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
if [ $? -eq 0 ]; then
    echo "[$TIMESTAMP] Copias de seguridad enviadas con éxito al servidor remoto."
else
    echo "[$TIMESTAMP] ERROR: No se pudieron enviar las copias de seguridad al servidor remoto."
fi

Asegúrese de que la autenticación por claves SSH esté configurada en el servidor remoto para el usuario backup_user.

5. Actualizaciones: rolling vs. ventana de mantenimiento

  • Actualización de imágenes Docker (rolling): Para TTRSS y PostgreSQL, dado que funcionan en Docker, la actualización es relativamente sencilla. Puede ejecutar docker compose pull para descargar nuevas imágenes y luego docker compose up -d para desplegarlas. Esto se puede hacer sin un tiempo de inactividad significativo, ya que Docker sabe reiniciar los contenedores de forma elegante. Se recomienda revisar los registros después de la actualización.
  • Actualización del sistema (ventana de mantenimiento): La actualización del propio sistema operativo (sudo apt update && sudo apt upgrade -y) es mejor realizarla en una "ventana de mantenimiento" predefinida, cuando la carga del servidor es mínima. Esto puede requerir un reinicio del servidor, lo que provocará un breve tiempo de inactividad de TTRSS.

Para automatizar la actualización de imágenes Docker, se pueden usar utilidades como Watchtower, que monitorea nuevas versiones de imágenes y actualiza automáticamente los contenedores en ejecución. Sin embargo, para servicios críticos, es mejor controlar las actualizaciones manualmente o a través de pipelines de CI/CD.

Solución de problemas + Preguntas frecuentes

¿Qué configuración mínima de VPS es adecuada?

Para Tiny Tiny RSS con uno o dos usuarios y una cantidad moderada de fuentes (hasta 1000), un VPS con 1 núcleo de CPU, 1 GB de RAM y 20 GB de SSD será mínimamente adecuado. Esto es suficiente para el funcionamiento de los contenedores Docker de TTRSS, PostgreSQL y Nginx, pero sin mucho margen. Si aumenta el número de usuarios o fuentes, se recomienda aumentar la RAM y el espacio en disco.

¿Qué elegir: VPS o dedicado para esta tarea?

En la gran mayoría de los casos, un VPS es suficiente para Tiny Tiny RSS con unas pocas decenas de usuarios. Un servidor dedicado solo tiene sentido para instalaciones muy grandes que atienden a cientos o miles de usuarios, o si otros servicios que consumen muchos recursos se ejecutan en el servidor. El VPS ofrece mayor flexibilidad y rentabilidad para la mayoría de los escenarios de uso de TTRSS.

TTRSS no está accesible después de la instalación, ¿qué hacer?

Verifique los siguientes pasos:

  1. Asegúrese de que los contenedores Docker estén en ejecución: docker compose ps. Todos los servicios deben estar en estado running (healthy).
  2. Verifique que Nginx esté funcionando: sudo systemctl status nginx.
  3. Verifique la configuración de Nginx: sudo nginx -t. Asegúrese de que no haya errores de sintaxis.
  4. Verifique que el nombre de dominio apunte a su VPS: use ping ВАШ_ДОМЕН o herramientas de búsqueda de DNS en línea.
  5. Verifique las reglas del firewall: sudo ufw status. Los puertos 80 y 443 deben estar permitidos.
  6. Intente acceder a TTRSS directamente a través del puerto interno: curl -I http://127.0.0.1:8080 desde el servidor. Si esto funciona, el problema está en Nginx o Certbot.

Mi certificado SSL ha caducado o no se emitió, ¿qué hacer?

Los certificados de Let's Encrypt son válidos por 90 días. Certbot debería renovarlos automáticamente. Si el certificado ha caducado o no se emitió:

  1. Asegúrese de que su dominio apunte correctamente a la dirección IP del VPS.
  2. Verifique la configuración de Nginx: sudo nginx -t. Asegúrese de que Nginx esté funcionando en el puerto 80 y pueda responder a las solicitudes de Certbot.
  3. Intente renovar los certificados manualmente: sudo certbot renew --force-renewal.
  4. Revise los registros de Certbot: sudo tail -f /var/log/letsencrypt/letsencrypt.log en busca de errores.

Las fuentes no se actualizan automáticamente, aunque TTRSS funciona.

Esto puede deberse a que el demonio de actualización de TTRSS no está en ejecución o no tiene acceso a Internet:

  1. Verifique que la variable TTRSS_DEFAULT_UPDATE_DAEMON: "true" esté configurada en docker-compose.yml.
  2. Asegúrese de que el contenedor TTRSS pueda acceder a recursos externos. Revise los registros del contenedor: docker compose logs app.
  3. Dentro de TTRSS, vaya a "Preferences" -> "Feeds" e intente actualizar forzosamente algunas fuentes.
  4. Verifique la hora del sistema del VPS: date. Una hora incorrecta puede causar problemas con el programador.

Docker Compose muestra errores al iniciar.

Lea atentamente el mensaje de error. Las causas comunes son:

  1. Errores de sintaxis YAML: Asegúrese de que las indentaciones y la estructura del archivo docker-compose.yml sean correctas. Use validadores YAML en línea.
  2. Problemas con los puertos: Si el puerto 8080 ya está ocupado en la máquina host por otro servicio, Docker no podrá usarlo. Verifique con sudo lsof -i :8080.
  3. Recursos insuficientes: Si tiene muy poca memoria RAM, los contenedores pueden no iniciarse. Revise docker compose logs para el servicio correspondiente.
  4. Variables de entorno incorrectas: Asegúrese de que las contraseñas y los nombres de dominio en docker-compose.yml sean correctos.

Conclusiones y próximos pasos

Diagrama: Conclusiones y próximos pasos
Diagrama: Conclusiones y próximos pasos

¡Felicidades! Ha desplegado y configurado con éxito su propio servidor Tiny Tiny RSS en un VPS, utilizando Docker, Nginx y PostgreSQL. Ahora tiene una herramienta potente, privada y totalmente controlada para agregar y leer fuentes de noticias. Ha dominado los enfoques modernos para el despliegue de aplicaciones web, incluyendo la contenerización, la conexión segura a través de HTTPS y la copia de seguridad automática.

¿Hacia dónde ir a continuación?

  • Configuración de plugins: Explore el rico ecosistema de plugins de TTRSS para ampliar la funcionalidad, por ejemplo, para la integración con otros servicios, la mejora del análisis o la adición de nuevos temas.
  • Acceso móvil: Instale una de las aplicaciones móviles que admiten la API de TTRSS (por ejemplo, FeedMe para Android o TTRSS Reader para iOS) para leer fuentes desde dispositivos móviles.
  • Monitoreo de recursos: Instale un sistema de monitoreo (por ejemplo, Prometheus + Grafana o Netdata) para rastrear el uso de recursos de su VPS y el rendimiento de TTRSS, para estar preparado para escalar.

¿Te fue útil esta guía?

Tus comentarios nos ayudan a mejorar nuestras guías.

Compartir esta publicación:

Envía esta guía a alguien a quien pueda resultarle útil.

Telegram VKVK WhatsApp Facebook LinkedIn XX

instalación Tiny Tiny RSS en VPS: Docker, Nginx, PostgreSQL y actualizaciones automáticas
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.