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.
Door Simon Vasconcelos Lee
Gepubliceerd op 11 november 2026Leestijd: 13 minuten
data en extensions, achter een reverse proxy met HTTPS.CRON_MIN ververst de feeds vanzelf: het project raadt ongeveer twee rondes per uur aan.data en, met PostgreSQL of MySQL, van de database, en werk daarna bij met docker compose pull.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.
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.
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:
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
docker compose up -d
127.0.0.1: FreshRSS is alleen bereikbaar via de reverse proxy, op dezelfde server ingesteld. Het voorbeeldbestand van het project publiceert poort 8080 voor lokaal gebruik; het adres 127.0.0.1 reserveert haar hier voor de proxy.data bewaart de configuratie, de accounts en, met SQLite, de database van elke gebruiker. De README wijst erop dat het alle persoonlijke gegevens bevat. Docker Compose noemt het naar de map: freshrss_data.extensions bewaart de extensies van derden, als u die toevoegt.TZ krijgt de tijdzone van de server, in de notatie van PHP; standaard is dat UTC.TRUSTED_PROXY behoudt de waarde uit het voorbeeldbestand: de privébereiken waaruit de verzoeken van de proxy komen. Ze bepaalt welk adres in de logboeken komt, dat van de bezoeker of dat van de proxy.cli/health.php uit, zodat Docker weet of de instantie antwoordt.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.
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.
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.
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:
rss.example.com {
reverse_proxy 127.0.0.1:8080
}
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:
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:
sudo certbot --nginx
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:
docker volume inspect freshrss_data
sudo nano /var/lib/docker/volumes/freshrss_data/_data/config.php
docker compose restart freshrss
'base_url' => 'https://rss.example.com/',
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.
13,43; */20 werkt ook.base_url, en de installatiewizard schakelt het in wanneer de server er een heeft.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:
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.
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:
| Methode | Wat ze doet | Waar ze wordt ingesteld |
|---|---|---|
| Formulier | Een gebruikersnaam en een wachtwoord die eigen zijn aan FreshRSS | De installatiewizard |
| HTTP-authenticatie | De webserver controleert de toegang, en nieuwe gebruikers worden bij hun eerste aanmelding aangemaakt | Een bestand p/i/.htaccess gekoppeld in de container, met zijn .htpasswd |
| Externe authenticatie | De proxy geeft de aangemelde gebruiker door in de header Remote-User of X-WebAuth-User | TRUSTED_PROXY, dat de vertrouwde proxy's opsomt |
| OpenID Connect | Het aanmelden loopt via uw identiteitsprovider, met de Apache-module mod_auth_openidc | OIDC_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.
mailer en smtp in data/config.php: de documentatie zegt dat verzenden via de functie mail van PHP binnen de officiële Docker-images nog niet wordt ondersteund.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.
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.
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.
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.
| Database | Opzet | Back-up |
|---|---|---|
| SQLite | Geen: één bestand per gebruiker, data/users/<user>/db.sqlite | Het volume data |
| PostgreSQL | Een dienst postgres in hetzelfde compose.yaml | pg_dump, of cli/db-backup.php |
| MySQL of MariaDB | Uw databaseserver, en de hostnaam ervan in de wizard | mysqldump, 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:
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}
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 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:
| Onderdeel | Wat het bewaart | Back-up |
|---|---|---|
data/ | De configuratie, de accounts, de logboeken en, met SQLite, de databases | Verplicht; cache/ mag u overslaan, FreshRSS bouwt het opnieuw op |
extensions/ | De extensies van derden | Aanbevolen, als u ze gebruikt |
| De externe database | Met PostgreSQL, MySQL of MariaDB, de gegevens van de gebruikers | Verplicht, apart |
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:
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
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:
'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:
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:
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.
docker compose stop freshrss.docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.cli/db-restore.php --delete-backup --force-overwrite.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 Docker-README geeft twee opdrachten, vanuit de map van compose.yaml. De volumes blijven ongemoeid:
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.
data/, de extensies en de database.1.29.1 dit traject mogelijk.Om nieuwe versies te volgen, publiceert het project een Atom-feed van zijn releases: abonneer uw eigen FreshRSS-instantie erop.
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.
| Onderwerp | Ons team | U |
|---|---|---|
| De server | Systeem- en beveiligingsupdates, ingrepen op de server inbegrepen | Het moment dat bij uw activiteit past |
| De monitoring | Server 24 uur per dag en 7 dagen per week bewaakt, met ingrijpen zonder op uw oproep te wachten | Het lezen van de logboeken van uw instantie |
| FreshRSS | Proactief toezicht: fouten, vertragingen en schijfruimte opgespoord, correctie aangeraden | De installatie, de updates en de instellingen, die u toepast, zelf of via uw AI-assistent |
| De accounts en de feeds | De server die ze draagt, bewaakt en geback-upt | De gebruikers, de abonnementen, de extensies en de API-wachtwoorden |
| De back-ups | Elke nacht, versleuteld en buiten de machine bewaard; terugzetten inbegrepen | De eigen exports van FreshRSS, en het verzoek om terug te zetten, wanneer u dat nodig hebt |
| De migratie | Uw huidige server gemigreerd, gratis | Het 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Simafri
Laten we het over uw website hebben
Vertel ons in een paar woorden over uw project: wij nemen snel contact met u op.
Bedankt! Uw aanvraag is verzonden. We nemen spoedig contact met u op.
Liever per e-mail? Schrijf ons op support@simafri.com.