Guía de despliegue

Alojar FreshRSS en su propio VPS

Desplegar en un VPS Cloud →

Tutorial

Alojar FreshRSS en su propio VPS

Autoalojamiento10 min de lectura9 pasos

Los agregadores RSS comerciales cierran, cambian de tarifa o revenden sus centros de interés. FreshRSS invierte la lógica: un lector de feeds ligero, multiusuario, que usted mismo aloja. Así se despliega correctamente en un VPS, con base de datos, reverse proxy y certificado HTTPS.

Contenido· Por qué autoalojar FreshRSS en un VPS1/10
  1. 01Por qué autoalojar FreshRSS en un VPS
  2. 02Ventajas concretas de FreshRSS autoalojado
  3. 03Requisitos técnicos
  4. 04Desplegar FreshRSS paso a paso
  5. 05Configuración avanzada de FreshRSS
  6. 06La API de FreshRSS para sus agentes IA y automatizaciones
  7. 07FreshRSS vs Miniflux vs Tiny Tiny RSS
  8. 08Hacer copias de seguridad y migrar FreshRSS
  9. 09Resolución de problemas: 4 errores frecuentes
  10. 10Caso de uso: vigilancia tecnológica para desarrolladores

Por qué autoalojar FreshRSS en un VPS

FreshRSS es un agregador de feeds RSS/Atom escrito en PHP, diseñado para ser discreto en recursos y gestionar al mismo tiempo miles de artículos. El self-hosting en un VPS resuelve tres problemas que los servicios cerrados no abordan: la perdurabilidad (su vigilancia no desaparece de un día para otro), la confidencialidad (nadie perfila sus suscripciones) y la frescura (usted define la frecuencia de actualización mediante cron, sin cuota impuesta). Un VPS, a diferencia de un alojamiento compartido, le da un acceso SSH completo, el derecho a lanzar un contenedor Docker y a programar tareas: exactamente lo que FreshRSS necesita para actualizar los feeds en segundo plano.

Ventajas concretas de FreshRSS autoalojado

  • API nativa compatible con Fever y Google Reader: sincronice con Reeder, FeedMe o Fluent Reader en el móvil.
  • Extensión GReader / scraping: recupere el contenido completo de los artículos truncados gracias a los filtros XPath.
  • Multiusuario con cuotas por cuenta: ideal para compartir una instancia dentro de una agencia.
  • Huella de memoria mínima (de 200 a 300 MB): funciona sin inmutarse en el más pequeño de los VPS.
  • Actualización controlada por cron: usted decide si los feeds se actualizan cada 5 minutos o cada hora.
  • Copia de seguridad trivial: una base SQLite/MySQL y una carpeta de datos bastan para restaurarlo todo.

Requisitos técnicos

FreshRSS es una de las aplicaciones más frugales del self-hosting. Cuente 1 vCPU y 1 GB de RAM para una instancia personal con unos pocos usuarios; 10 GB de disco bastan de sobra, ya que lo esencial lo ocupa el historial de artículos. En cuanto al software: Docker y el plugin Docker Compose instalados en el VPS, un nombre de dominio (o un subdominio del tipo rss.sudominio.com) apuntado con un registro A a la IP del servidor, y el puerto 80/443 abierto para el reverse proxy. No hace falta instalar PHP en el host: la imagen oficial freshrss/freshrss lo incluye todo.

Desplegar FreshRSS paso a paso

  1. Preparar el VPS y Docker

    Conéctese por SSH, actualice el sistema (apt update && apt upgrade -y) e instale Docker: curl -fsSL https://get.docker.com | sh. Añada su usuario al grupo docker: usermod -aG docker $USER. Compruébelo con docker compose version. Cree la carpeta de proyecto: mkdir -p /opt/freshrss && cd /opt/freshrss.

  2. Escribir el docker-compose.yml

    Cree docker-compose.yml con el siguiente contenido:

    services:
      freshrss:
        image: freshrss/freshrss:latest
        container_name: freshrss
        restart: unless-stopped
        environment:
          CRON_MIN: "*/20"
          TZ: "Europe/Madrid"
        volumes:
          - ./data:/var/www/FreshRSS/data
          - ./extensions:/var/www/FreshRSS/extensions
        ports:
          - "127.0.0.1:8080:80"

    El puerto está vinculado únicamente a 127.0.0.1: solo el reverse proxy local puede acceder a él.

  3. Configurar nginx como reverse proxy

    Instale nginx: apt install -y nginx. Cree /etc/nginx/sites-available/freshrss:

    server {
        listen 80;
        server_name rss.sudominio.com;
    
        location / {
            proxy_pass http://127.0.0.1:8080;
            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;
        }
    }

    Active el vhost: ln -s /etc/nginx/sites-available/freshrss /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginx.

  4. Obtener el certificado TLS con Certbot

    Instale Certbot y el plugin de nginx: apt install -y certbot python3-certbot-nginx. Emita el certificado: certbot --nginx -d rss.sudominio.com. Certbot modifica automáticamente el vhost de nginx para escuchar en 443 y redirigir HTTP a HTTPS. La renovación automática se activa por defecto a través del timer systemd de certbot.

  5. Arrancar el contenedor

    Arranque la stack desde /opt/freshrss: docker compose up -d. Siga la inicialización: docker compose logs -f. El contenedor aplica las migraciones y crea la estructura de datos en el primer arranque. A continuación, verifique que FreshRSS responde: curl -I https://rss.sudominio.com.

  6. Finalizar la instalación web

    Abra https://rss.sudominio.com en su navegador. El asistente le pide que elija el backend de base de datos: seleccione SQLite para un uso personal (archivo único, sin servicio que gestionar), o MySQL si se prevén decenas de usuarios. Cree la cuenta de administrador con una contraseña robusta.

  7. Activar la API

    Vaya a Perfil → Gestión de la API. Marque «Activar la API GReader/Fever» y defina una contraseña de API distinta de su contraseña principal. Anote la URL base de la API: https://rss.sudominio.com/api/greader.php.

  8. Importar su OPML

    Exporte sus suscripciones desde su lector anterior (Feedly, Inoreader…) en formato OPML. En FreshRSS, vaya a Suscripciones → Importar/Exportar → Importar un archivo OPML. Sus categorías y feeds se recrean en pocos segundos. Verifique la primera actualización manual: docker compose exec freshrss php ./cli/actualize.php.

  9. Verificar el cron automático

    La variable CRON_MIN=*/20 configura el cron interno del contenedor para actualizar todos los feeds cada 20 minutos. Confirme que está activo: docker compose exec freshrss crontab -l. Si la salida está vacía, añada CRON_MIN: "*/20" bajo environment: y vuelva a crear el contenedor.

Para los sitios que solo publican un extracto en su feed, instale la extensión oficial «FreshRSS Content Selector»: configure un selector CSS (por ejemplo, article.post-content) por suscripción y FreshRSS irá a buscar el texto íntegro en cada actualización. Combínela con la extensión de filtros para ocultar automáticamente los artículos patrocinados detectados por palabra clave.

Configuración avanzada de FreshRSS

Una vez operativa la instancia base, tres ejes de optimización convierten FreshRSS de un simple lector en una herramienta de monitorización profesional:

Extensiones: RSS-Bridge y FullTextRss. Copie la extensión en /opt/freshrss/extensions/ y actívela en la sección Extensiones de la interfaz. RSS-Bridge genera un feed RSS para sitios que no lo ofrecen (Twitter/X público, Instagram, LinkedIn). FullTextRss completa los artículos truncados extrayendo el cuerpo HTML según reglas de sitio predefinidas — más de 2.000 sitios ya están configurados en la base de reglas comunitaria.

Frecuencia de actualización. El valor CRON_MIN=*/20 es adecuado para la mayoría de las necesidades. Para fuentes críticas (alertas de seguridad), baje a */5. Para reducir la carga con muchas suscripciones inactivas, suba a */60. FreshRSS también respeta las cabeceras HTTP ETag y Last-Modified: si un feed no ha cambiado, la actualización casi no consume ancho de banda.

SQLite vs MySQL. SQLite es suficiente para centenares de miles de artículos y un puñado de usuarios; su sencillez (archivo único) lo convierte en la mejor opción personal. Más allá de 5 usuarios simultáneos o 500.000 artículos, MySQL ofrece mejor rendimiento. La migración de SQLite a MySQL es posible con la herramienta CLI convert-db.php incluida en el contenedor.

La API de FreshRSS para sus agentes IA y automatizaciones

FreshRSS es uno de los pocos agregadores autoalojados que implementa dos API estándar: la API Google Reader (/api/greader.php) y la API Fever (/api/fever.php). Estas API, documentadas públicamente, permiten una integración sin fricciones con decenas de herramientas de automatización.

Integración con n8n. En un flujo de trabajo n8n, use el nodo HTTP Request con autenticación Basic (credenciales de la API de FreshRSS). Active el flujo sobre nuevos artículos no leídos consultando el endpoint GReader. Encadene con un nodo OpenAI para resumir cada artículo y envíe el resumen a Slack o por correo. Todo dentro de su propia infraestructura.

Integración con Make (ex-Integromat). El módulo HTTP de Make permite las mismas llamadas REST. Un escenario típico: cada hora, recuperar artículos destacados con estrella, enriquecerlos con un LLM y enviarlos a Notion o Airtable.

Agentes IA. Marcos como LangChain o LlamaIndex pueden consultar directamente la API de FreshRSS para alimentar un pipeline RAG sobre su monitorización personal. Su instancia se convierte en una fuente de datos privada, estructurada y actualizada, inaccesible para los modelos públicos.

FreshRSS vs Miniflux vs Tiny Tiny RSS

Desplace la tabla

CriterioFreshRSSMinifluxTiny Tiny RSS
Lenguaje / stackPHP + SQLite/MySQLGo (binario único)PHP + PostgreSQL
RAM mínima~50 MB (sin Docker)~20 MB~100 MB
API estándarGoogle Reader + FeverMiniflux REST + FeverGoogle Reader (plugin)
Extensiones / pluginsRico (más de 30 oficiales)Limitadas (filtros nativos)Muchos plugins de terceros
LicenciaAGPL-3.0Apache-2.0GPL-3.0

Hacer copias de seguridad y migrar FreshRSS

Una de las ventajas del self-hosting es el control total sobre sus datos. Dos niveles de copia de seguridad cubren todos los escenarios:

Exportación OPML (suscripciones). Desde Suscripciones → Importar/Exportar → Exportar como OPML, genera un archivo XML con todos sus feeds y categorías. Automátice con crontab: 0 3 * * * docker exec freshrss php /var/www/FreshRSS/cli/export-opml-file.php > /opt/backups/freshrss-opml-$(date +%F).xml.

Copia de seguridad completa (base de datos + datos). Para conservar también el historial de lectura y las estrellas, haga una copia del volumen Docker completo: rsync -a /opt/freshrss/data/ /opt/backups/freshrss-data-$(date +%F)/.

Migración entre VPS. El proceso es lineal: (1) detenga el contenedor origen (docker compose stop); (2) copie la carpeta data/ al nuevo VPS mediante rsync o scp; (3) despliegue el mismo docker-compose.yml en el nuevo VPS y arranque; (4) actualice el registro DNS A a la nueva IP. Tiempo total para una instancia personal: menos de 10 minutos, sin pérdida de datos.

Resolución de problemas: 4 errores frecuentes

1. Cron inactivo — los feeds ya no se actualizan. Síntoma: la columna «Última actualización» permanece congelada. Primero compruebe que el cron interno está activo: docker compose exec freshrss crontab -l. Si la salida está vacía, añada CRON_MIN: "*/20" bajo environment: y vuelva a crear el contenedor.

2. Feed que nunca se actualiza pese a un cron activo. Causa más frecuente: el feed devuelve sistemáticamente HTTP 429 (límite de tasa) o 403. Compruebe en Suscripciones → Gestionar → Último error. Para un sitio que bloquea peticiones sin User-Agent, añada uno explícito en los ajustes avanzados del feed.

3. Error SSL «certificate verify failed». Ocurre cuando el contenedor intenta acceder a un feed HTTPS con certificado autofirmado o caducado. Opciones: deshabilitar la verificación SSL solo para ese feed (casilla en opciones avanzadas), o actualizar los CA del contenedor (docker compose exec freshrss update-ca-certificates).

4. Extensión FullTextRss silenciosa — el contenido sigue truncado. Compruebe que la extensión está activada en Extensiones y que la URL del servicio FullTextRss es correcta en su configuración. Si usa la versión autoalojada, pruebe la URL directamente en el navegador. Una respuesta JSON vacía indica que el selector del sitio no está en la base de reglas — cree un archivo de reglas personalizado en site_patterns/ y móntelo como volumen Docker.

Caso de uso: vigilancia tecnológica para desarrolladores

Añada los feeds de GitHub releases de cada dependencia de su proyecto (https://github.com/<owner>/<repo>/releases.atom), el feed de Hacker News (https://news.ycombinator.com/rss), los blogs de los principales mantenedores de su ecosistema y los feeds CVE de su runtime y sistema operativo.

FreshRSS entrega la línea de tiempo en bruto, sin ordenación algorítmica y sin publicaciones patrocinadas. Cree una regla de marcado automático: todo artículo que contenga «security advisory» o «breaking change» recibe una estrella y desencadena una notificación ntfy en su teléfono. Obtiene la señal, sin el ruido de las plataformas sociales.

Lance su vigilancia informativa en unos minutos

El VPS Cloud ServOrbit llega con Docker preinstalado y un reverse proxy listo para usar: despliegue su plantilla FreshRSS y recupere el control de sus feeds, sin depender de ningún servicio de terceros.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva