Ospitare FreshRSS su un VPS gestito: i vostri feed RSS sul vostro server

Ospitare FreshRSS su un VPS gestito significa leggere, voi e il vostro team, i vostri feed RSS da una macchina tutta vostra, che i nostri team tengono aggiornata e supervisionano giorno e notte. FreshRSS è un software libero con licenza AGPL-3.0. Questa guida segue la sua documentazione ufficiale: l'installazione con Docker Compose, HTTPS, l'aggiornamento dei feed, gli account e l'accesso, l'API per le app mobili, il database, i backup e gli aggiornamenti.

Simon Vasconcelos Lee Di Pubblicato l'11 novembre 2026Lettura: 13 minuti

Tutte le guide

In breve

  1. La licenza AGPL-3.0 consente di far girare FreshRSS liberamente, in azienda come altrove; se lo modificate, mettete il codice sorgente della vostra versione a disposizione di chi la utilizza.
  2. Installatelo con Docker Compose: un'immagine, una porta pubblicata in locale e due volumi, data ed extensions, dietro un reverse proxy in HTTPS.
  3. La variabile CRON_MIN aggiorna i feed da sola: il progetto raccomanda circa due esecuzioni all'ora.
  4. Le registrazioni sono chiuse per impostazione predefinita. Per le app mobili, attivate l'API, poi ogni utente sceglie una password API.
  5. Salvate il volume data e, con PostgreSQL o MySQL, il database, poi aggiornate con docker compose pull.

Che cosa fa FreshRSS

FreshRSS è un aggregatore di feed RSS self-hosted scritto in PHP. Il suo README lo descrive come leggero, facile da usare, potente e personalizzabile, tradotto in più di venti lingue. È un'applicazione multiutente, con una modalità di lettura anonima ed etichette personalizzate.

FreshRSS è sviluppato dalla sua comunità su GitHub, e il suo sito ufficiale è pubblicato dalla comunità FreshRSS. Le estensioni vivono in un repository separato, e la documentazione si rivolge a utenti, amministratori e sviluppatori.

Che cosa consente la licenza AGPL-3.0

FreshRSS è pubblicato con la GNU Affero General Public License, versione 3: il suo manifesto composer.json la dichiara come AGPL-3.0, e il suo README rimanda al testo della licenza. Quel testo afferma un'autorizzazione illimitata a eseguire il programma non modificato. Potete quindi usare l'immagine pubblicata dal progetto per la vostra azienda e il vostro team, senza alcuna licenza da acquistare.

L'articolo 13 aggiunge una condizione propria dell'AGPL: se modificate il programma, la vostra versione deve offrire a tutti coloro che la usano a distanza, tramite la rete, il modo di ottenerne gratuitamente il codice sorgente. Un'estensione di terzi aggiunta al volume extensions segue la propria licenza.

L'installazione con Docker Compose

Il progetto pubblica le sue immagini ufficiali su Docker Hub, come freshrss/freshrss, insieme a un file Compose di esempio. Su un server in cui Docker è installato, create una cartella chiamata freshrss e collocatevi questo compose.yaml, tratto da quel file e dal README 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
Terminale, nella cartella freshrss
docker compose up -d

Il tag latest, quello predefinito, segue l'ultima versione numerata; edge segue la versione continua; un tag come 1.30.4 fissa una versione, e il suffisso -alpine dà lo stesso risultato su una base Alpine anziché Debian. La sezione sugli aggiornamenti torna su questa scelta.

Completare l'installazione

Una volta al suo posto il reverse proxy, aprite il vostro indirizzo HTTPS: la procedura guidata chiede la lingua, verifica il server, propone la scelta del database, poi crea l'account amministratore, con la sua password e il metodo di accesso. SQLite funziona senza nulla da preparare. L'installazione si fa anche da riga di comando, con cli/do-install.php e cli/create-user.php, lanciati tramite docker exec --user www-data freshrss.

Quanto alle risorse, il README chiede un server leggero, con Linux o Windows, e segnala che FreshRSS gira perfino su un Raspberry Pi 1, con tempi di risposta inferiori al secondo, con 150 feed e 22.000 articoli. La taglia dipende dal numero di utenti, di feed e di articoli conservati. Su un VPS gestito, descrivetici il vostro uso e vi raccomandiamo la taglia adatta.

HTTPS: il reverse proxy

In produzione, il README Docker consiglia un reverse proxy sul server host, che fornisce HTTPS. Scegliete prima un nome di dominio o un sottodominio, come rss.example.com, che punta al server con record A e AAAA. Il progetto raccomanda Traefik e pubblica per esso un file Compose completo, con i certificati Let's Encrypt e il reindirizzamento da HTTP a HTTPS; fornisce anche esempi per Apache, Nginx e Caddy.

Con Caddy

Caddy ottiene il certificato e attiva HTTPS da solo. Questo blocco segue l'esempio della documentazione per un sottodominio, puntato qui sulla porta pubblicata in locale:

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

Con Nginx e Certbot

Questo blocco segue l'esempio Nginx del README Docker per la radice di un dominio, ridotto alla porta 80 per lasciare a Certbot l'attivazione di HTTPS. Le ultime due righe trasmettono l'intestazione Authorization, necessaria all'API Google Reader:

Blocco 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 installa poi il certificato e si occupa di rinnovarlo:

Terminale
sudo certbot --nginx

L'indirizzo pubblico: base_url

FreshRSS conserva il proprio indirizzo pubblico in base_url, nel file data/config.php. L'API e WebSub si basano su di esso: verificate che contenga il vostro indirizzo https. Il README Docker indica dove trovare questo file nel volume:

Terminale
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/',

L'aggiornamento dei feed: CRON_MIN

FreshRSS recupera i nuovi articoli con il suo script app/actualize_script.php. L'immagine Docker include un'attività pianificata che lo esegue ai minuti indicati in CRON_MIN. Senza questa variabile, o con un valore vuoto, l'attività resta disattivata e i feed non si aggiornano più da soli.

Un altro metodo documentato: un'attività pianificata sul server host, che chiama lo script all'interno del container. In questo caso, togliete CRON_MIN da compose.yaml, per mantenere un solo metodo:

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

Dalla versione 1.30.0, FreshRSS rifiuta per impostazione predefinita gli indirizzi della rete locale come 127.0.0.1, per proteggersi dalla falsificazione delle richieste lato server. Un servizio vicino che produce feed, come RSS-Bridge, si autorizza tramite la variabile INTERNAL_HOST_ALLOWLIST, nella forma rss-bridge:80, oppure nella configurazione di sistema. Il valore * toglie ogni controllo, e la documentazione lo giudica non sicuro.

Gli account e l'accesso

Durante l'installazione, FreshRSS propone l'accesso tramite modulo, che richiede JavaScript. È il metodo predefinito, e si adatta alla maggior parte delle istanze. La documentazione ne descrive altri:

MetodoChe cosa faDove si imposta
ModuloUn nome utente e una password propri di FreshRSSLa procedura guidata di installazione
Autenticazione HTTPIl server web controlla l'accesso, e i nuovi utenti vengono creati al loro primo accessoUn file p/i/.htaccess montato nel container, con il suo .htpasswd
Autenticazione esternaIl proxy trasmette l'utente connesso nell'intestazione Remote-User o X-WebAuth-UserTRUSTED_PROXY, che elenca i proxy fidati
OpenID ConnectL'accesso passa dal vostro provider di identità, tramite il modulo Apache mod_auth_openidcOIDC_ENABLED e le variabili OIDC_*, nell'immagine Debian su x86_64

La documentazione avverte che FreshRSS si fida di qualsiasi indirizzo elencato in TRUSTED_PROXY: un proxy mal protetto permetterebbe a un malintenzionato di impostare l'intestazione e di ottenere l'accesso da amministratore. Qui la porta ascolta solo su 127.0.0.1, il che la riserva al proxy del server stesso. La documentazione sconsiglia inoltre qualsiasi istanza senza autenticazione non appena il server è raggiungibile dall'esterno della vostra rete.

Le registrazioni e gli utenti

Per un'istanza condivisa da più persone, la documentazione consiglia di aprire gli account a persone di fiducia e di tenere l'istanza dietro un proxy o un firewall che blocchi l'accesso alle reti di indirizzi interni.

Le app mobili: le API Google Reader e Fever

FreshRSS funziona nel browser, su schermi grandi come su quelli piccoli, e in app per Android, iOS, Linux, Windows e macOS. Queste app usano una delle sue due API: Google Reader, che il README giudica la migliore, e Fever, con funzioni più limitate, meno efficiente e meno sicura.

  1. Come amministratore, nella sezione Autenticazione, attivate l'opzione che consente l'accesso tramite API.
  2. Ogni utente sceglie una password API nel proprio profilo. È distinta dalla password principale, dà accesso a meno cose ed è pensata per le situazioni meno sicure.
  3. Nell'app, inserite l'indirizzo https://rss.example.com/api/greader.php, oppure https://rss.example.com/api/fever.php per Fever, con il nome utente e quella password API.

Per verificare, il link mostrato accanto alla password API, nel profilo, apre una pagina di prova: PASS sul controllo completo conferma che tutto funziona. L'immagine Docker imposta già Apache per accettare le barre codificate, che alcune app richiedono; con Nginx davanti, mantenete l'inoltro dell'intestazione Authorization.

Il README tiene una tabella delle app compatibili, con la loro piattaforma, la loro API e le loro funzioni: Capy Reader e Readrops su Android, FeedFlow su mobile e desktop, RSS Guard e NewsFlash su desktop, ReadKit e Reeder Classic su iOS e macOS, tra le altre.

SQLite, PostgreSQL, MySQL o MariaDB

FreshRSS integra SQLite, che il README Docker descrive come l'opzione più semplice, con buone prestazioni. La pagina dei requisiti raccomanda PostgreSQL 10 o successivo, e accetta anche MariaDB 10.6 e MySQL 8.0 o successivi. La scelta si fa nella procedura guidata di installazione.

DatabaseConfigurazioneBackup
SQLiteNessuna: un file per utente, data/users/<user>/db.sqliteIl volume data
PostgreSQLUn servizio postgres nello stesso compose.yamlpg_dump, oppure cli/db-backup.php
MySQL o MariaDBIl vostro server di database, e il suo nome host nella procedura guidatamysqldump, oppure cli/db-backup.php

Per PostgreSQL, aggiungete questo servizio a compose.yaml, tratto dal file docker-compose-db.yml del progetto, e il volume db all'elenco dei volumi. La password va in un file .env, accanto a compose.yaml:

compose.yaml, in 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'

Nella procedura guidata, scegliete PostgreSQL e indicate freshrss-db come host, con l'utente, la password e il database freshrss.

Potete tornare su questa scelta in seguito. La documentazione descrive il passaggio da un database all'altro, da MySQL a PostgreSQL per esempio, o verso una versione principale più recente di PostgreSQL: cli/db-backup.php copia il database di ogni utente in un file SQLite, poi cli/db-restore.php lo carica nel nuovo database.

I backup

Il README precisa che FreshRSS è fornito senza alcuna garanzia: sono i vostri backup a custodire i vostri abbonamenti, i vostri articoli e le vostre impostazioni. Ecco che cosa la documentazione chiede di salvare:

ElementoChe cosa conservaBackup
data/La configurazione, gli account, i log e, con SQLite, i databaseObbligatorio; cache/ si può escludere, FreshRSS la ricostruisce
extensions/Le estensioni di terziRaccomandato, se ne usate
Il database esternoCon PostgreSQL, MySQL o MariaDB, i dati degli utentiObbligatorio, a parte

I volumi, a servizio fermo

La documentazione ritiene più sicuro fermare il servizio durante le operazioni di manutenzione. I volumi Docker si copiano con un container temporaneo, il metodo descritto nella documentazione di Docker:

Terminale, nella cartella 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

I database, a servizio attivo

Dalla versione 1.29.1, FreshRSS sa esportare da solo il database di ogni utente in un file SQLite, qualunque sia il database che usate, e conservare solo i più recenti. Attivate questa esportazione in data/config.php:

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

Pianificate poi il comando sul server, qui ogni notte. Ogni esecuzione scrive data/users/<user>/sqlite-backups/<date>.sqlite ed elimina i file oltre gli ultimi sette:

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

Con PostgreSQL, aggiungete un'esportazione con lo strumento del database stesso, come nel README Docker. L'opzione -T toglie il terminale, che a un'attività pianificata non serve:

Terminale, nella cartella freshrss
docker compose exec -T freshrss-db pg_dump -U freshrss freshrss | gzip -9 > freshrss-postgres-$(date +%F).sql.gz

L'esportazione OPML, dall'interfaccia, salva l'elenco dei vostri feed, senza alcune impostazioni proprie di FreshRSS come le credenziali o le regole di estrazione delle pagine. Per una copia completa, conservate le esportazioni SQLite: collocate sul disco del server, rientrano anche nei suoi backup notturni.

Ripristinare

  1. Fermate FreshRSS con docker compose stop freshrss.
  2. Ricaricate l'archivio nei volumi: docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.
  3. Con un database esterno, ripristinatelo dalla sua esportazione, oppure dai file SQLite con cli/db-restore.php --delete-backup --force-overwrite.
  4. Rilanciate con docker compose start freshrss, poi verificate che i vostri feed e i vostri articoli ci siano.

Ripetete questo esercizio di tanto in tanto, su una copia: è così che verificate che un backup funzioni.

Gli aggiornamenti

Il README Docker fornisce due comandi, dalla cartella del compose.yaml. I volumi restano al loro posto:

Terminale
docker compose pull
docker compose up -d

FreshRSS pubblica su due canali. Le versioni numerate, tag latest, escono qualche volta all'anno, senza un calendario fisso, e le loro correzioni non vengono riportate sulle versioni precedenti. La versione continua, tag edge, riceve le novità e le correzioni man mano che arrivano: dalla versione 1.30.0, il progetto la raccomanda per avere più rapidamente le correzioni di sicurezza.

Per seguire le nuove versioni, il progetto pubblica un feed Atom delle sue versioni: abbonatevi con la vostra stessa istanza FreshRSS.

Chi fa che cosa su un VPS gestito

Il self-hosting richiede di occuparsi del server oltre che dell'applicazione. Su un VPS gestito, i nostri team prendono in carico il server e seguono la vostra istanza in modo proattivo; FreshRSS resta il vostro software, con le sue impostazioni e i suoi dati.

ArgomentoI nostri teamVoi
Il serverAggiornamenti del sistema e della sicurezza, interventi sul server compresiIl momento più adatto alla vostra attività
La supervisioneServer seguito 24 ore su 24, 7 giorni su 7, con intervento senza attendere la vostra chiamataLa lettura dei log della vostra istanza
FreshRSSMonitoraggio proattivo: errori, rallentamenti e spazio su disco individuati, correzione raccomandataLa sua installazione, i suoi aggiornamenti e le sue impostazioni, che applicate voi o il vostro assistente IA
Gli account e i feedIl server che li ospita, sorvegliato e salvatoGli utenti, gli abbonamenti, le estensioni e le password API
I backupOgni notte, cifrati e conservati fuori dalla macchina; ripristino compresoLe esportazioni proprie di FreshRSS e la richiesta di ripristino, quando ne avete bisogno
La migrazioneIl vostro server attuale migrato, in omaggioIl momento del passaggio

Se preferite che i nostri team intervengano nell'applicazione stessa, questa prestazione si fattura a ore o a forfait, con un preventivo comunicato prima dell'intervento.

FreshRSS, su un server gestito per voi

Con un VPS gestito Simafri, i nostri team tengono aggiornato il server della vostra istanza FreshRSS, lo sorvegliano giorno e notte e intervengono senza attendere la vostra chiamata; seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi o il vostro assistente IA. I backup sono cifrati ogni notte e conservati fuori dalla macchina, il loro ripristino è compreso e la migrazione del vostro server attuale è in omaggio.

Scoprire i VPS gestiti

Domande frequenti

FreshRSS è gratuito per un'azienda?

Sì. FreshRSS ha licenza AGPL-3.0: potete farlo girare in azienda senza alcuna licenza da acquistare. Se lo modificate, la vostra versione deve offrire il proprio codice sorgente a chi la usa tramite la rete. Resta il costo del server che lo fa girare.

Come installare FreshRSS con Docker Compose?

Create un compose.yaml con l'immagine freshrss/freshrss, i volumi data ed extensions e la porta pubblicata su 127.0.0.1, poi lanciate docker compose up -d. Collocate quindi davanti un reverse proxy in HTTPS, aprite il vostro indirizzo e seguite la procedura guidata di installazione.

Come aggiornare automaticamente i feed in FreshRSS?

Con l'immagine Docker, indicate in CRON_MIN i minuti di esecuzione, per esempio 13,43: il progetto raccomanda circa due esecuzioni all'ora. Senza CRON_MIN, l'attività integrata resta disattivata. Un'attività pianificata sul server che esegue app/actualize_script.php nel container svolge lo stesso lavoro.

Quale database scegliere per FreshRSS?

SQLite è integrato e non richiede alcuna preparazione; il README Docker lo descrive come il più semplice, con buone prestazioni. La pagina dei requisiti raccomanda PostgreSQL 10 o successivo, e accetta MariaDB 10.6 e MySQL 8.0. I comandi db-backup e db-restore permettono di cambiare database in seguito.

Come leggere FreshRSS su mobile?

Attivate l'accesso tramite API nella sezione Autenticazione, poi scegliete una password API nel vostro profilo. In un'app compatibile, inserite l'indirizzo api/greader.php della vostra istanza, poiché l'API Google Reader è la migliore secondo il README, oppure api/fever.php.

Le registrazioni sono aperte su FreshRSS?

Non per impostazione predefinita: la configurazione limita gli account a quello dell'amministratore. Gli altri si creano in Amministrazione, Gestione utenti, oppure si aumenta il numero di account nella configurazione di sistema per mostrare il modulo di registrazione.

Come fare il backup di FreshRSS?

Copiate i volumi data ed extensions a servizio fermo. Attivate anche auto_sqlite_export e pianificate cli/export-sqlite-auto.php, che ogni notte esporta in SQLite il database di ogni utente. Con PostgreSQL, aggiungete un pg_dump. Provate regolarmente il ripristino.

Un VPS gestito copre FreshRSS?

Un VPS gestito copre il server: sistema, sicurezza, supervisione e backup. I nostri team seguono anche la vostra istanza in modo proattivo e vi raccomandano le correzioni utili, che applicate voi. Un intervento nell'applicazione si fattura a ore o a forfait.

Fonti e documentazione ufficiale

Contattaci