Găzduirea FreshRSS pe un Managed VPS: fluxurile RSS pe propriul server

Găzduirea FreshRSS pe un Managed VPS înseamnă că dumneavoastră și echipa dumneavoastră citiți fluxurile RSS de pe o mașină a dumneavoastră, pe care echipele noastre o țin la zi și o supraveghează zi și noapte. FreshRSS este un software liber sub licență AGPL-3.0. Acest ghid urmează documentația sa oficială: instalarea cu Docker Compose, HTTPS, actualizarea fluxurilor, conturile și conectarea, API-ul pentru aplicațiile mobile, baza de date, backupurile și actualizările.

Simon Vasconcelos Lee Autor: Publicat la 11 noiembrie 2026Timp de citire: 13 minute

Toate ghidurile

Esențialul

  1. Licența AGPL-3.0 permite rularea liberă a FreshRSS, în firmă ca oriunde altundeva; dacă îl modificați, oferiți codul sursă al versiunii dumneavoastră celor care o folosesc.
  2. Instalați-l cu Docker Compose: o imagine, un port publicat local și două volume, data și extensions, în spatele unui proxy invers în HTTPS.
  3. Variabila CRON_MIN actualizează singură fluxurile: proiectul recomandă aproximativ două rulări pe oră.
  4. Înregistrările sunt închise implicit. Pentru aplicațiile mobile, activați API-ul, apoi fiecare utilizator își setează o parolă API.
  5. Salvați volumul data și, cu PostgreSQL sau MySQL, baza de date, apoi actualizați cu docker compose pull.

Ce face FreshRSS

FreshRSS este un agregator de fluxuri RSS scris în PHP, conceput pentru găzduirea pe propriul server. README-ul său îl descrie ca ușor, simplu de folosit, puternic și personalizabil, tradus în peste douăzeci de limbi. Este o aplicație multiutilizator, cu un mod de citire anonimă și etichete personalizate.

FreshRSS este dezvoltat de comunitatea sa pe GitHub, iar site-ul său oficial este publicat de comunitatea FreshRSS. Extensiile se află într-un depozit separat, iar documentația se adresează utilizatorilor, administratorilor și dezvoltatorilor.

Ce permite licența AGPL-3.0

FreshRSS este publicat sub GNU Affero General Public License, versiunea 3: manifestul său composer.json o declară ca AGPL-3.0, iar README-ul trimite la textul licenței. Acest text afirmă o permisiune nelimitată de a rula programul nemodificat. Puteți deci folosi imaginea publicată de proiect pentru firma și echipa dumneavoastră, fără nicio licență de cumpărat.

Articolul 13 adaugă o condiție specifică AGPL: dacă modificați programul, versiunea dumneavoastră trebuie să ofere tuturor celor care o folosesc de la distanță, prin rețea, posibilitatea de a obține gratuit codul sursă. O extensie terță adăugată în volumul extensions urmează propria sa licență.

Instalarea cu Docker Compose

Proiectul își publică imaginile oficiale pe Docker Hub, sub numele freshrss/freshrss, împreună cu un exemplu de fișier Compose. Pe un server unde Docker este instalat, creați un director numit freshrss și puneți în el acest compose.yaml, preluat din acel fișier și din README-ul Docker:

compose.yaml
volumes:
  data:
  extensions:

services:
  freshrss:
    image: freshrss/freshrss:latest
    container_name: freshrss
    hostname: freshrss
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - data:/var/www/FreshRSS/data
      - extensions:/var/www/FreshRSS/extensions
    ports:
      - 127.0.0.1:8080:80
    environment:
      TZ: UTC
      CRON_MIN: '3,33'
      TRUSTED_PROXY: 172.16.0.1/12 192.168.0.1/16
    healthcheck:
      test: ["CMD", "cli/health.php"]
      timeout: 10s
      start_period: 60s
      start_interval: 11s
      interval: 75s
      retries: 3
Terminal, în directorul freshrss
docker compose up -d

Eticheta latest, cea implicită, urmărește ultima versiune numerotată; edge urmărește versiunea continuă (rolling release); o etichetă precum 1.30.4 fixează o versiune, iar sufixul -alpine oferă același lucru pe o bază Alpine în loc de Debian. Secțiunea despre actualizări revine asupra acestei alegeri.

Finalizarea instalării

Odată ce proxy-ul invers este instalat, deschideți adresa dumneavoastră HTTPS: asistentul de instalare cere limba, verifică serverul, propune alegerea bazei de date, apoi creează contul de administrator, cu parola lui și metoda de conectare. SQLite funcționează fără nicio pregătire. Instalarea merge și în linie de comandă, cu cli/do-install.php și cli/create-user.php, rulate prin docker exec --user www-data freshrss.

În privința resurselor, README-ul cere un server modest, sub Linux sau Windows, și notează că FreshRSS rulează chiar și pe un Raspberry Pi 1, cu timpi de răspuns sub o secundă, cu 150 de fluxuri și 22.000 de articole. Dimensiunea depinde de numărul de utilizatori, de fluxuri și de articolele păstrate. Pe un Managed VPS, descrieți-ne utilizarea dumneavoastră și vă recomandăm dimensiunea potrivită.

HTTPS: proxy-ul invers

Pentru producție, README-ul Docker sfătuiește un proxy invers pe serverul gazdă, care asigură HTTPS. Alegeți mai întâi un nume de domeniu sau un subdomeniu, precum rss.example.com, care indică spre server prin înregistrări A și AAAA. Proiectul recomandă Traefik și publică pentru el un fișier Compose complet, cu certificate Let’s Encrypt și redirecționarea din HTTP spre HTTPS; dă și exemple pentru Apache, Nginx și Caddy.

Cu Caddy

Caddy obține certificatul și activează singur HTTPS. Acest bloc preia exemplul din documentație pentru un subdomeniu, îndreptat aici spre portul publicat local:

Caddyfile
rss.example.com {
  reverse_proxy 127.0.0.1:8080
}

Cu Nginx și Certbot

Acest bloc preia exemplul Nginx din README-ul Docker pentru rădăcina unui domeniu, redus la portul 80, pentru a lăsa Certbot să instaleze HTTPS. Ultimele două linii transmit antetul Authorization, de care are nevoie API-ul Google Reader:

Bloc Nginx
upstream freshrss {
  server 127.0.0.1:8080;
  keepalive 64;
}

server {
  listen 80;
  listen [::]:80;
  server_name rss.example.com;

  location / {
    proxy_pass http://freshrss/;
    proxy_redirect off;
    proxy_buffering off;
    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_set_header X-Forwarded-Port $server_port;
    proxy_read_timeout 90;

    proxy_set_header Authorization $http_authorization;
    proxy_pass_header Authorization;
  }
}

Certbot instalează apoi certificatul și se ocupă de reînnoirea lui:

Terminal
sudo certbot --nginx

Adresa publică: base_url

FreshRSS își păstrează adresa publică în base_url, în fișierul data/config.php. API-ul și WebSub se sprijină pe ea: verificați că ea conține adresa dumneavoastră în https. README-ul Docker arată unde găsiți acest fișier în volum:

Terminal
docker volume inspect freshrss_data
sudo nano /var/lib/docker/volumes/freshrss_data/_data/config.php
docker compose restart freshrss
data/config.php
'base_url' => 'https://rss.example.com/',

Actualizarea fluxurilor: CRON_MIN

FreshRSS preia articolele noi cu scriptul său app/actualize_script.php. Imaginea Docker include o sarcină programată care îl rulează la minutele indicate în CRON_MIN. Fără această variabilă sau cu o valoare goală, sarcina rămâne oprită, iar fluxurile nu se mai actualizează singure.

O altă metodă documentată: o sarcină programată pe serverul gazdă, care apelează scriptul în container. În acest caz, eliminați CRON_MIN din compose.yaml, pentru a păstra o singură metodă:

/etc/cron.d/FreshRSS
7,37 * * * * root docker exec --user www-data freshrss php ./app/actualize_script.php > /tmp/FreshRSS.log 2>&1

Începând cu versiunea 1.30.0, FreshRSS refuză implicit adresele din rețeaua locală, precum 127.0.0.1, ca protecție împotriva falsificării cererilor de pe server (SSRF). Un serviciu vecin care produce fluxuri, precum RSS-Bridge, se autorizează prin variabila INTERNAL_HOST_ALLOWLIST, în forma rss-bridge:80, sau în configurația sistemului. Valoarea * elimină orice verificare, iar documentația o consideră nesigură.

Conturile și conectarea

La instalare, FreshRSS propune conectarea prin formular, care cere JavaScript. Este metoda implicită și se potrivește majorității instanțelor. Documentația le descrie și pe celelalte:

MetodăCe faceUnde se setează
FormularUn nume de utilizator și o parolă proprii FreshRSSAsistentul de instalare
Autentificare HTTPServerul web controlează accesul, iar utilizatorii noi sunt creați la prima lor conectareUn fișier p/i/.htaccess montat în container, cu fișierul său .htpasswd
Autentificare externăProxy-ul transmite utilizatorul conectat în antetul Remote-User sau X-WebAuth-UserTRUSTED_PROXY, care enumeră proxy-urile de încredere
OpenID ConnectConectarea trece prin furnizorul dumneavoastră de identitate, cu modulul Apache mod_auth_openidcOIDC_ENABLED și variabilele OIDC_*, în imaginea Debian pe x86_64

Documentația avertizează că FreshRSS are încredere în orice adresă enumerată în TRUSTED_PROXY: un proxy prost securizat i-ar permite unui atacator să seteze antetul și să obțină acces de administrator. Aici, portul ascultă doar pe 127.0.0.1, ceea ce îl rezervă proxy-ului serverului. Documentația descurajează și orice instanță fără autentificare, de îndată ce serverul este accesibil din afara rețelei dumneavoastră.

Înregistrările și utilizatorii

Pentru o instanță partajată de mai multe persoane, documentația sfătuiește să deschideți conturi persoanelor în care aveți încredere și să păstrați instanța în spatele unui proxy sau al unui firewall care blochează accesul la intervalele de adrese interne.

Aplicațiile mobile: API-urile Google Reader și Fever

FreshRSS funcționează în browser, pe ecrane mari ca și pe cele mici, și în aplicații pentru Android, iOS, Linux, Windows și macOS. Aceste aplicații folosesc unul dintre cele două API-uri ale sale: Google Reader, pe care README-ul îl consideră cel mai bun, și Fever, cu funcții mai limitate, mai puțin eficient și mai puțin sigur.

  1. Ca administrator, în secțiunea Autentificare, activați opțiunea care permite accesul prin API.
  2. Fiecare utilizator își setează o parolă API în profilul său. Ea este distinctă de parola principală, dă acces la mai puține lucruri și este destinată situațiilor mai puțin sigure.
  3. În aplicație, introduceți adresa https://rss.example.com/api/greader.php sau https://rss.example.com/api/fever.php pentru Fever, cu numele de utilizator și această parolă API.

Pentru verificare, linkul afișat lângă parola API, în profil, deschide o pagină de test: PASS la verificarea completă confirmă că totul funcționează. Imaginea Docker configurează deja Apache să accepte barele oblice codificate, de care au nevoie unele aplicații; cu Nginx în față, păstrați transmiterea antetului Authorization.

README-ul ține un tabel al aplicațiilor compatibile, cu platforma, API-ul și funcțiile lor: Capy Reader și Readrops pe Android, FeedFlow pe mobil și desktop, RSS Guard și NewsFlash pe desktop, ReadKit și Reeder Classic pe iOS și macOS, printre altele.

SQLite, PostgreSQL, MySQL sau MariaDB

FreshRSS integrează SQLite, pe care README-ul Docker îl descrie ca opțiunea cea mai simplă, cu performanțe bune. Pagina de cerințe recomandă PostgreSQL 10 sau o versiune mai nouă și acceptă și MariaDB 10.6 și MySQL 8.0 sau mai nou. Alegerea se face în asistentul de instalare.

BazaConfigurareBackup
SQLiteNiciuna: un fișier pentru fiecare utilizator, data/users/<user>/db.sqliteVolumul data
PostgreSQLUn serviciu postgres în același compose.yamlpg_dump sau cli/db-backup.php
MySQL sau MariaDBServerul dumneavoastră de bază de date și numele lui de gazdă în asistentmysqldump sau cli/db-backup.php

Pentru PostgreSQL, adăugați acest serviciu în compose.yaml, preluat din fișierul docker-compose-db.yml al proiectului, și volumul db în lista volumelor. Parola se pune într-un fișier .env, lângă compose.yaml:

compose.yaml, în services
  freshrss-db:
    image: postgres:18
    container_name: freshrss-db
    hostname: freshrss-db
    restart: unless-stopped
    logging:
      options:
        max-size: 10m
    volumes:
      - db:/var/lib/postgresql
    environment:
      POSTGRES_DB: freshrss
      POSTGRES_USER: freshrss
      POSTGRES_PASSWORD: ${DB_PASSWORD}
.env
DB_PASSWORD='a-long-unique-password'

În asistent, alegeți PostgreSQL și introduceți freshrss-db ca gazdă, cu utilizatorul, parola și baza freshrss.

Puteți reveni ulterior asupra acestei alegeri. Documentația descrie trecerea de la o bază la alta, de la MySQL la PostgreSQL de exemplu, sau la o versiune majoră mai nouă de PostgreSQL: cli/db-backup.php copiază baza fiecărui utilizator într-un fișier SQLite, apoi cli/db-restore.php o încarcă în noua bază.

Backupurile

README-ul precizează că FreshRSS este furnizat fără nicio garanție: backupurile dumneavoastră păstrează abonamentele, articolele și setările. Iată ce cere documentația să salvați:

ElementCe păstreazăBackup
data/Configurația, conturile, jurnalele și, cu SQLite, bazele de dateObligatoriu; cache/ poate fi omis, FreshRSS îl reconstruiește
extensions/Extensiile terțeRecomandat, dacă le folosiți
Baza de date externăCu PostgreSQL, MySQL sau MariaDB, datele utilizatorilorObligatoriu, separat

Volumele, cu serviciul oprit

Documentația consideră mai sigur să opriți serviciul în timpul operațiunilor de întreținere. Volumele Docker se copiază cu un container temporar, metoda descrisă în documentația Docker:

Terminal, în directorul freshrss
docker compose stop freshrss
docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -czf /backup/freshrss-$(date +%F).tgz --exclude=data/cache -C /var/www/FreshRSS data extensions
docker compose start freshrss

Bazele de date, cu serviciul în funcțiune

Începând cu versiunea 1.29.1, FreshRSS știe să exporte singur baza fiecărui utilizator într-un fișier SQLite, oricare ar fi baza folosită, și să le păstreze doar pe cele mai recente. Activați acest export în data/config.php:

data/config.php
'auto_sqlite_export' => [
    'enabled' => true,
    'retention' => 7,
],

Programați apoi comanda pe server, aici în fiecare noapte. Fiecare rulare scrie data/users/<user>/sqlite-backups/<date>.sqlite și șterge fișierele care depășesc ultimele șapte:

/etc/cron.d/freshrss-export
20 2 * * * root docker exec --user www-data freshrss cli/export-sqlite-auto.php --quiet

Cu PostgreSQL, adăugați un export cu instrumentul propriu al bazei, ca în README-ul Docker. Opțiunea -T renunță la terminal, de care o sarcină programată nu are nevoie:

Terminal, în directorul freshrss
docker compose exec -T freshrss-db pg_dump -U freshrss freshrss | gzip -9 > freshrss-postgres-$(date +%F).sql.gz

Exportul OPML, din interfață, salvează lista fluxurilor dumneavoastră, fără unele setări proprii FreshRSS, precum datele de acces sau regulile de extragere din pagini. Pentru o copie completă, păstrați exporturile SQLite: puse pe discul serverului, ele intră și în backupurile sale de noapte.

Restaurarea

  1. Opriți FreshRSS cu docker compose stop freshrss.
  2. Reîncărcați arhiva în volume: docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.
  3. Cu o bază externă, restaurați-o din exportul ei sau din fișierele SQLite cu cli/db-restore.php --delete-backup --force-overwrite.
  4. Reporniți cu docker compose start freshrss, apoi verificați că fluxurile și articolele dumneavoastră sunt la locul lor.

Repetați acest exercițiu din când în când, pe o copie: așa verificați că un backup funcționează.

Actualizările

README-ul Docker dă două comenzi, din directorul fișierului compose.yaml. Volumele rămân pe loc:

Terminal
docker compose pull
docker compose up -d

FreshRSS publică pe două canale. Versiunile numerotate, eticheta latest, apar de câteva ori pe an, fără un calendar fix, iar corecturile lor nu sunt aduse în versiunile mai vechi. Versiunea continuă, eticheta edge, primește funcțiile noi și corecturile pe măsură ce apar: începând cu versiunea 1.30.0, proiectul o recomandă pentru corecturi de securitate mai rapide.

Pentru a urmări versiunile noi, proiectul publică un flux Atom al versiunilor sale: abonați la el propria instanță FreshRSS.

Cine ce face pe un Managed VPS

Găzduirea pe propriul server cere să țineți serverul pe lângă aplicație. Pe un Managed VPS, echipele noastre preiau serverul și vă urmăresc proactiv instanța; FreshRSS rămâne software-ul dumneavoastră, cu setările și datele sale.

SubiectEchipele noastreDumneavoastră
ServerulActualizări de sistem și de securitate, intervenții pe server incluseMomentul potrivit activității dumneavoastră
MonitorizareaServer urmărit 24 de ore din 24, 7 zile din 7, cu intervenție fără a vă aștepta apelulCitirea jurnalelor instanței dumneavoastră
FreshRSSUrmărire proactivă: erori, încetiniri și spațiu pe disc depistate, corectură recomandatăInstalarea, actualizările și setările sale, pe care le aplicați dumneavoastră sau asistentul dumneavoastră AI
Conturile și fluxurileServerul care le poartă, supravegheat și salvatUtilizatorii, abonamentele, extensiile și parolele API
BackupurileÎn fiecare noapte, criptate și păstrate în afara mașinii; restaurare inclusăExporturile proprii FreshRSS și cererea de restaurare, când aveți nevoie de ea
MigrareaServerul dumneavoastră actual migrat, gratuitMomentul trecerii

Dacă preferați ca echipele noastre să intervină în aplicația însăși, această prestație se facturează la oră sau la preț fix, cu o ofertă comunicată înainte de intervenție.

FreshRSS, pe un server întreținut pentru dumneavoastră

Cu un Managed VPS Simafri, echipele noastre țin la zi serverul instanței dumneavoastră FreshRSS, îl monitorizează zi și noapte și intervin fără a vă aștepta apelul; ele vă urmăresc proactiv și instanța și vă recomandă corecturile utile, pe care le aplicați dumneavoastră sau asistentul dumneavoastră AI. Backupurile sunt criptate în fiecare noapte și păstrate în afara mașinii, restaurarea lor este inclusă, iar migrarea serverului actual este gratuită.

Descoperiți gama Managed VPS

Întrebări frecvente

Este FreshRSS gratuit pentru o firmă?

Da. FreshRSS este sub licență AGPL-3.0: îl puteți rula în firmă fără nicio licență de cumpărat. Dacă îl modificați, versiunea dumneavoastră trebuie să ofere codul sursă celor care o folosesc prin rețea. Rămâne costul serverului pe care rulează.

Cum instalez FreshRSS cu Docker Compose?

Creați un compose.yaml cu imaginea freshrss/freshrss, volumele data și extensions și portul publicat pe 127.0.0.1, apoi rulați docker compose up -d. Puneți apoi în față un proxy invers în HTTPS, deschideți adresa dumneavoastră și urmați asistentul de instalare.

Cum actualizez automat fluxurile în FreshRSS?

Cu imaginea Docker, dați variabilei CRON_MIN minutele de rulare, de exemplu 13,43: proiectul recomandă aproximativ două rulări pe oră. Fără CRON_MIN, sarcina integrată rămâne oprită. O sarcină programată pe server care rulează app/actualize_script.php în container face aceeași treabă.

Ce bază de date să aleg pentru FreshRSS?

SQLite este integrat și nu cere nicio pregătire; README-ul Docker îl descrie ca cel mai simplu, cu performanțe bune. Pagina de cerințe recomandă PostgreSQL 10 sau mai nou și acceptă MariaDB 10.6 și MySQL 8.0. Comenzile db-backup și db-restore permit schimbarea bazei mai târziu.

Cum citesc FreshRSS pe mobil?

Activați accesul prin API în secțiunea Autentificare, apoi setați o parolă API în profilul dumneavoastră. Într-o aplicație compatibilă, introduceți adresa api/greader.php a instanței dumneavoastră, API-ul Google Reader fiind cel mai bun potrivit README-ului, sau api/fever.php.

Sunt deschise înregistrările pe FreshRSS?

Nu implicit: configurația limitează conturile la cel al administratorului. Le creați pe celelalte în Administrare, Gestionarea utilizatorilor, sau măriți numărul de conturi în configurația sistemului, pentru a afișa formularul de înregistrare.

Cum fac backup la FreshRSS?

Copiați volumele data și extensions cu serviciul oprit. Activați și auto_sqlite_export și programați cli/export-sqlite-auto.php, care exportă în fiecare noapte baza fiecărui utilizator în SQLite. Cu PostgreSQL, adăugați un pg_dump. Testați regulat restaurarea.

Acoperă un Managed VPS și FreshRSS?

Un Managed VPS acoperă serverul: sistemul, securitatea, monitorizarea și backupurile. Echipele noastre vă urmăresc proactiv și instanța și vă recomandă corecturile utile, pe care le aplicați dumneavoastră. O intervenție în aplicație se facturează la oră sau la preț fix.

Surse și documentație oficială

Contactați-ne