FreshRSS hosten op een Managed VPS: uw RSS-feeds op uw eigen server

FreshRSS hosten op een Managed VPS betekent dat u en uw team uw RSS-feeds lezen vanaf een machine die van u is, en die ons team bijwerkt en dag en nacht in de gaten houdt. FreshRSS is vrije software onder de AGPL-3.0-licentie. Deze gids volgt de officiële documentatie: de installatie met Docker Compose, HTTPS, het verversen van de feeds, de accounts en het aanmelden, de API voor mobiele apps, de database, back-ups en updates.

Simon Vasconcelos Lee Door Gepubliceerd op 11 november 2026Leestijd: 13 minuten

Alle gidsen

In het kort

  1. Dankzij de AGPL-3.0-licentie draait u FreshRSS vrij, in een bedrijf of elders; wijzigt u het, dan biedt u de broncode van uw versie aan wie ze gebruikt.
  2. Installeer het met Docker Compose: één image, een lokaal gepubliceerde poort en twee volumes, data en extensions, achter een reverse proxy met HTTPS.
  3. De variabele CRON_MIN ververst de feeds vanzelf: het project raadt ongeveer twee rondes per uur aan.
  4. De registraties zijn standaard gesloten. Schakel voor de mobiele apps de API in, waarna elke gebruiker een API-wachtwoord instelt.
  5. Maak een back-up van het volume data en, met PostgreSQL of MySQL, van de database, en werk daarna bij met docker compose pull.

Wat FreshRSS doet

FreshRSS is een zelf gehoste aggregator voor RSS-feeds, geschreven in PHP. De README beschrijft het als licht, gemakkelijk in gebruik, krachtig en aanpasbaar, en vertaald in meer dan twintig talen. Het is een applicatie voor meerdere gebruikers, met een anonieme leesmodus en eigen labels.

FreshRSS wordt door zijn community op GitHub ontwikkeld, en de officiële website wordt uitgegeven door de FreshRSS-community. De extensies staan in een aparte repository, en de documentatie richt zich op gebruikers, beheerders en ontwikkelaars.

Wat de AGPL-3.0-licentie toestaat

FreshRSS wordt gepubliceerd onder de GNU Affero General Public License, versie 3: het manifest composer.json declareert het als AGPL-3.0, en de README verwijst naar de tekst van de licentie. Die tekst kent een onbeperkte toestemming toe om het ongewijzigde programma te draaien. U kunt de image die het project publiceert dus gebruiken voor uw bedrijf en uw team, zonder een licentie te kopen.

Artikel 13 voegt een voorwaarde toe die eigen is aan de AGPL: als u het programma wijzigt, moet uw versie iedereen die het op afstand, via het netwerk, gebruikt de mogelijkheid bieden de broncode gratis te verkrijgen. Een extensie van derden die u aan het volume extensions toevoegt, volgt haar eigen licentie.

De installatie met Docker Compose

Het project publiceert zijn officiële images op Docker Hub, onder freshrss/freshrss, samen met een voorbeeldbestand voor Compose. Maak op een server waar Docker is geïnstalleerd een map freshrss aan en plaats daarin dit compose.yaml, overgenomen uit dat bestand en uit de Docker-README:

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, in de map freshrss
docker compose up -d

De tag latest, de standaard, volgt de laatste genummerde versie; edge volgt de doorlopende versie; een tag zoals 1.30.4 legt een versie vast, en het achtervoegsel -alpine geeft hetzelfde op een Alpine-basis in plaats van Debian. De sectie over updates komt op deze keuze terug.

De installatie afronden

Zodra de reverse proxy er staat, opent u uw HTTPS-adres: de installatiewizard vraagt de taal, controleert de server, biedt de keuze van de database aan en maakt daarna het beheerdersaccount aan, met zijn wachtwoord en de aanmeldmethode. SQLite werkt zonder enige voorbereiding. De installatie lukt ook vanaf de opdrachtregel, met cli/do-install.php en cli/create-user.php, uitgevoerd via docker exec --user www-data freshrss.

Wat de resources betreft, vraagt de README een lichte server, onder Linux of Windows, en merkt op dat FreshRSS zelfs op een Raspberry Pi 1 draait, met antwoordtijden onder de seconde, bij 150 feeds en 22.000 artikelen. De grootte hangt af van het aantal gebruikers, feeds en bewaarde artikelen. Beschrijf op een managed VPS uw gebruik aan ons, dan raden wij u de passende grootte aan.

HTTPS: de reverse proxy

Voor productie raadt de Docker-README een reverse proxy op de hostserver aan, die HTTPS verzorgt. Kies eerst een domeinnaam of subdomein, zoals rss.example.com, dat met A- en AAAA-records naar de server wijst. Het project beveelt Traefik aan en publiceert daarvoor een volledig Compose-bestand, met Let's Encrypt-certificaten en de doorverwijzing van HTTP naar HTTPS; het geeft ook voorbeelden voor Apache, Nginx en Caddy.

Met Caddy

Caddy verkrijgt zelf het certificaat en schakelt HTTPS zelf in. Dit blok volgt het voorbeeld uit de documentatie voor een subdomein, hier gericht op de lokaal gepubliceerde poort:

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

Met Nginx en Certbot

Dit blok volgt het Nginx-voorbeeld uit de Docker-README voor de root van een domein, teruggebracht tot poort 80 zodat Certbot HTTPS kan plaatsen. De laatste twee regels geven de header Authorization door, die de Google Reader-API nodig heeft:

Nginx-blok
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 plaatst daarna het certificaat en zorgt voor de vernieuwing ervan:

Terminal
sudo certbot --nginx

Het openbare adres: base_url

FreshRSS bewaart zijn openbare adres in base_url, in het bestand data/config.php. De API en WebSub steunen erop: controleer dat het uw adres in https bevat. De Docker-README laat zien waar u dit bestand in het volume vindt:

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

De feeds verversen: CRON_MIN

FreshRSS haalt nieuwe artikelen op met zijn script app/actualize_script.php. De Docker-image bevat een geplande taak die het uitvoert op de minuten die in CRON_MIN staan. Zonder deze variabele, of met een lege waarde, blijft de taak uit en verversen de feeds niet meer vanzelf.

Een andere gedocumenteerde methode: een geplande taak op de hostserver, die het script binnen de container aanroept. Haal in dat geval CRON_MIN uit compose.yaml, zodat er maar één methode overblijft:

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

Sinds versie 1.30.0 weigert FreshRSS standaard adressen uit het lokale netwerk, zoals 127.0.0.1, ter bescherming tegen server-side request forgery. Een naburige dienst die feeds aanmaakt, zoals RSS-Bridge, wordt toegelaten via de variabele INTERNAL_HOST_ALLOWLIST, in de vorm rss-bridge:80, of in de systeemconfiguratie. De waarde * haalt elke controle weg, en de documentatie noemt haar onveilig.

De accounts en het aanmelden

Bij de installatie biedt FreshRSS het aanmelden via een formulier aan, dat JavaScript vraagt. Dat is de standaardmethode, en ze past bij de meeste instanties. De documentatie beschrijft er nog andere:

MethodeWat ze doetWaar ze wordt ingesteld
FormulierEen gebruikersnaam en een wachtwoord die eigen zijn aan FreshRSSDe installatiewizard
HTTP-authenticatieDe webserver controleert de toegang, en nieuwe gebruikers worden bij hun eerste aanmelding aangemaaktEen bestand p/i/.htaccess gekoppeld in de container, met zijn .htpasswd
Externe authenticatieDe proxy geeft de aangemelde gebruiker door in de header Remote-User of X-WebAuth-UserTRUSTED_PROXY, dat de vertrouwde proxy's opsomt
OpenID ConnectHet aanmelden loopt via uw identiteitsprovider, met de Apache-module mod_auth_openidcOIDC_ENABLED en de variabelen OIDC_*, in de Debian-image op x86_64

De documentatie waarschuwt dat FreshRSS elk adres vertrouwt dat in TRUSTED_PROXY staat: een slecht beveiligde proxy zou een aanvaller de header laten instellen en zo beheerderstoegang laten krijgen. Hier luistert de poort alleen op 127.0.0.1, wat haar reserveert voor de proxy van de server zelf. De documentatie raadt ook elke instantie zonder authenticatie af zodra de server van buiten uw netwerk bereikbaar is.

De registraties en de gebruikers

Voor een instantie die door meerdere mensen wordt gedeeld, raadt de documentatie aan accounts te openen voor mensen die u vertrouwt en de instantie achter een proxy of firewall te houden die de toegang tot interne adresbereiken blokkeert.

Mobiele apps: de API's Google Reader en Fever

FreshRSS werkt in de browser, op grote en kleine schermen, en in apps voor Android, iOS, Linux, Windows en macOS. Die apps gebruiken een van de twee API's: Google Reader, die de README als de beste beschouwt, en Fever, met beperktere functies, minder efficiënt en minder veilig.

  1. Schakel als beheerder, in de sectie Authenticatie, de optie in die toegang tot de API toestaat.
  2. Elke gebruiker stelt in zijn profiel een API-wachtwoord in. Het staat los van het hoofdwachtwoord, geeft toegang tot minder zaken en is bedoeld voor minder veilige situaties.
  3. Voer in de app het adres https://rss.example.com/api/greader.php in, of https://rss.example.com/api/fever.php voor Fever, met de gebruikersnaam en dat API-wachtwoord.

Ter controle opent de link naast het API-wachtwoord, in het profiel, een testpagina: PASS bij de volledige controle bevestigt dat alles werkt. De Docker-image stelt Apache al zo in dat gecodeerde schuine strepen worden aanvaard, wat sommige apps nodig hebben; staat Nginx ervoor, behoud dan het doorgeven van de header Authorization.

De README houdt een tabel bij met compatibele apps, met hun platform, API en functies: onder meer Capy Reader en Readrops op Android, FeedFlow op mobiel en desktop, RSS Guard en NewsFlash op desktop, ReadKit en Reeder Classic op iOS en macOS.

SQLite, PostgreSQL, MySQL of MariaDB

FreshRSS bevat SQLite, dat de Docker-README omschrijft als de eenvoudigste optie, met goede prestaties. De pagina met vereisten beveelt PostgreSQL 10 of nieuwer aan, en aanvaardt ook MariaDB 10.6 en MySQL 8.0 of nieuwer. U maakt de keuze in de installatiewizard.

DatabaseOpzetBack-up
SQLiteGeen: één bestand per gebruiker, data/users/<user>/db.sqliteHet volume data
PostgreSQLEen dienst postgres in hetzelfde compose.yamlpg_dump, of cli/db-backup.php
MySQL of MariaDBUw databaseserver, en de hostnaam ervan in de wizardmysqldump, of cli/db-backup.php

Voeg voor PostgreSQL deze dienst toe aan compose.yaml, overgenomen uit het bestand docker-compose-db.yml van het project, en het volume db aan de lijst met volumes. Het wachtwoord komt in een bestand .env, naast compose.yaml:

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

Kies in de wizard PostgreSQL en voer freshrss-db in als host, met de gebruiker, het wachtwoord en de database freshrss.

U kunt later op deze keuze terugkomen. De documentatie beschrijft de overstap van de ene database naar de andere, van MySQL naar PostgreSQL bijvoorbeeld, of naar een nieuwere hoofdversie van PostgreSQL: cli/db-backup.php kopieert de database van elke gebruiker naar een SQLite-bestand, waarna cli/db-restore.php die in de nieuwe database laadt.

De back-ups

De README vermeldt dat FreshRSS zonder enige garantie wordt geleverd: uw back-ups bewaren uw abonnementen, uw artikelen en uw instellingen. Dit vraagt de documentatie te back-uppen:

OnderdeelWat het bewaartBack-up
data/De configuratie, de accounts, de logboeken en, met SQLite, de databasesVerplicht; cache/ mag u overslaan, FreshRSS bouwt het opnieuw op
extensions/De extensies van derdenAanbevolen, als u ze gebruikt
De externe databaseMet PostgreSQL, MySQL of MariaDB, de gegevens van de gebruikersVerplicht, apart

De volumes, met de dienst gestopt

De documentatie vindt het veiliger de dienst te stoppen tijdens onderhoudshandelingen. Docker-volumes kopieert u met een tijdelijke container, de methode die de documentatie van Docker beschrijft:

Terminal, in de map 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

De databases, terwijl de dienst draait

Sinds versie 1.29.1 kan FreshRSS de database van elke gebruiker zelf naar een SQLite-bestand exporteren, welke database u ook gebruikt, en alleen de recentste bewaren. Schakel die export in data/config.php in:

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

Plan daarna de opdracht op de server in, hier elke nacht. Elke ronde schrijft data/users/<user>/sqlite-backups/<date>.sqlite en verwijdert de bestanden voorbij de laatste zeven:

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

Voeg met PostgreSQL een export toe met het eigen hulpmiddel van de database, zoals in de Docker-README. De optie -T laat de terminal weg, waar een geplande taak niets aan heeft:

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

De OPML-export, vanuit de interface, bewaart uw lijst met feeds, zonder bepaalde instellingen die eigen zijn aan FreshRSS, zoals toegangsgegevens of regels om pagina's uit te lezen. Bewaar voor een volledige kopie de SQLite-exports: staan ze op de schijf van de server, dan vallen ze ook onder de nachtelijke back-ups.

Terugzetten

  1. Stop FreshRSS met docker compose stop freshrss.
  2. Laad het archief terug in de volumes: docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.
  3. Zet een externe database terug vanuit haar export, of vanuit de SQLite-bestanden met cli/db-restore.php --delete-backup --force-overwrite.
  4. Start opnieuw met docker compose start freshrss, en controleer daarna dat uw feeds en artikelen er zijn.

Herhaal deze oefening af en toe, op een kopie: zo controleert u of een back-up werkt.

De updates

De Docker-README geeft twee opdrachten, vanuit de map van compose.yaml. De volumes blijven ongemoeid:

Terminal
docker compose pull
docker compose up -d

FreshRSS publiceert via twee kanalen. De genummerde versies, tag latest, verschijnen enkele keren per jaar, zonder vaste kalender, en hun correcties worden niet naar oudere versies teruggebracht. De doorlopende versie, tag edge, krijgt nieuwe functies en correcties zodra ze klaar zijn: sinds versie 1.30.0 raadt het project haar aan voor snellere beveiligingsfixes.

Om nieuwe versies te volgen, publiceert het project een Atom-feed van zijn releases: abonneer uw eigen FreshRSS-instantie erop.

Wie doet wat op een managed VPS

Self-hosting vraagt dat u naast de applicatie ook de server beheert. Op een managed VPS neemt ons team de server voor zijn rekening en houdt het uw instantie proactief in de gaten; FreshRSS blijft uw software, met zijn instellingen en gegevens.

OnderwerpOns teamU
De serverSysteem- en beveiligingsupdates, ingrepen op de server inbegrepenHet moment dat bij uw activiteit past
De monitoringServer 24 uur per dag en 7 dagen per week bewaakt, met ingrijpen zonder op uw oproep te wachtenHet lezen van de logboeken van uw instantie
FreshRSSProactief toezicht: fouten, vertragingen en schijfruimte opgespoord, correctie aangeradenDe installatie, de updates en de instellingen, die u toepast, zelf of via uw AI-assistent
De accounts en de feedsDe server die ze draagt, bewaakt en geback-uptDe gebruikers, de abonnementen, de extensies en de API-wachtwoorden
De back-upsElke nacht, versleuteld en buiten de machine bewaard; terugzetten inbegrepenDe eigen exports van FreshRSS, en het verzoek om terug te zetten, wanneer u dat nodig hebt
De migratieUw huidige server gemigreerd, gratisHet moment van de overschakeling

Wilt u liever dat ons team in de applicatie zelf ingrijpt, dan wordt die dienstverlening per uur of tegen een vast bedrag gefactureerd, met een offerte voordat het werk begint.

FreshRSS, op een server die voor u wordt beheerd

Met een Managed VPS van Simafri houdt ons team de server van uw FreshRSS-instantie up-to-date, bewaakt hem dag en nacht en grijpt in zonder op uw oproep te wachten; het houdt ook uw instantie proactief in de gaten en raadt u de nuttige correcties aan, die u toepast, zelf of via uw AI-assistent. De back-ups worden elke nacht versleuteld en buiten de machine bewaard, het terugzetten is inbegrepen, en de migratie van uw huidige server is gratis.

Ontdek Managed VPS

Veelgestelde vragen

Is FreshRSS gratis voor een bedrijf?

Ja. FreshRSS valt onder de AGPL-3.0-licentie: u mag het in een bedrijf draaien zonder een licentie te kopen. Wijzigt u het, dan moet uw versie de broncode aanbieden aan wie het via het netwerk gebruikt. Wat overblijft, zijn de kosten van de server waarop het draait.

Hoe installeer ik FreshRSS met Docker Compose?

Maak een compose.yaml met de image freshrss/freshrss, de volumes data en extensions en de poort gepubliceerd op 127.0.0.1, en voer docker compose up -d uit. Zet er daarna een reverse proxy met HTTPS voor, open uw adres en volg de installatiewizard.

Hoe ververs ik de feeds automatisch in FreshRSS?

Geef met de Docker-image in CRON_MIN de minuten op waarop het script draait, bijvoorbeeld 13,43: het project raadt ongeveer twee rondes per uur aan. Zonder CRON_MIN blijft de ingebouwde taak uit. Een geplande taak op de server die app/actualize_script.php in de container uitvoert, doet hetzelfde werk.

Welke database kies ik voor FreshRSS?

SQLite is ingebouwd en vraagt geen voorbereiding; de Docker-README omschrijft het als de eenvoudigste, met goede prestaties. De pagina met vereisten beveelt PostgreSQL 10 of nieuwer aan, en aanvaardt MariaDB 10.6 en MySQL 8.0. Met de opdrachten db-backup en db-restore wisselt u later van database.

Hoe lees ik FreshRSS op mijn telefoon?

Schakel de toegang tot de API in, in de sectie Authenticatie, en stel daarna een API-wachtwoord in uw profiel in. Voer in een compatibele app het adres api/greader.php van uw instantie in, want de Google Reader-API is volgens de README de beste, of api/fever.php.

Staan de registraties open op FreshRSS?

Standaard niet: de configuratie beperkt de accounts tot dat van de beheerder. De andere maakt u aan in Beheer, Gebruikers beheren, of u verhoogt het aantal accounts in de systeemconfiguratie om het registratieformulier te tonen.

Hoe maak ik een back-up van FreshRSS?

Kopieer de volumes data en extensions met de dienst gestopt. Schakel ook auto_sqlite_export in en plan cli/export-sqlite-auto.php in, dat de database van elke gebruiker elke nacht naar SQLite exporteert. Voeg met PostgreSQL een pg_dump toe. Test regelmatig het terugzetten.

Dekt een managed VPS ook FreshRSS?

Een managed VPS dekt de server: systeem, beveiliging, monitoring en back-ups. Ons team houdt ook uw instantie proactief in de gaten en raadt u de nuttige correcties aan, die u toepast. Een ingreep in de applicatie wordt per uur of tegen een vast bedrag gefactureerd.

Bronnen en officiële documentatie

Neem contact op