At hoste FreshRSS på en Managed VPS betyder, at du og dit team læser jeres RSS-feeds fra en maskine, der er jeres egen, og som vores teams holder opdateret og overvåger dag og nat. FreshRSS er fri software under AGPL-3.0-licensen. Denne guide følger den officielle dokumentation: installation med Docker Compose, HTTPS, opdatering af feeds, konti og login, API'et til mobilapps, databasen, backup og opdateringer.
Af Simon Vasconcelos Lee
Udgivet den 11. november 2026Læsetid: 13 minutter
data og extensions, bag en reverse proxy med HTTPS.CRON_MIN opdaterer feedsene af sig selv: projektet anbefaler omkring to kørsler i timen.data og, med PostgreSQL eller MySQL, af databasen, og opdatér derefter med docker compose pull.FreshRSS er en selvhostet aggregator til RSS-feeds, skrevet i PHP. README'en beskriver den som let, nem at arbejde med, kraftfuld og tilpasselig, oversat til mere end tyve sprog. Det er en applikation til flere brugere med en anonym læsetilstand og egne tags.
FreshRSS udvikles af sit fællesskab på GitHub, og dens officielle website udgives af FreshRSS-fællesskabet. Udvidelserne ligger i et separat repository, og dokumentationen henvender sig til brugere, administratorer og udviklere.
FreshRSS udgives under GNU Affero General Public License, version 3: manifestet composer.json angiver den som AGPL-3.0, og README'en linker til licensteksten. Teksten fastslår en ubegrænset tilladelse til at køre det uændrede program. Du kan altså bruge det image, projektet udgiver, til din virksomhed og dit team uden at skulle købe en licens.
Artikel 13 tilføjer en betingelse, der er særlig for AGPL: hvis du ændrer programmet, skal din version tilbyde alle, der bruger den på afstand, via netværket, en måde at få dens kildekode gratis. En udvidelse fra tredjepart, der lægges i volumenet extensions, følger sin egen licens.
Projektet udgiver sine officielle images på Docker Hub under navnet freshrss/freshrss sammen med en eksempelfil til Compose. På en server, hvor Docker er installeret, opretter du en mappe med navnet freshrss og lægger denne compose.yaml i den, hentet fra den fil og fra Docker-README'en:
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 nås kun via reverse proxyen, som er placeret på samme server. Projektets eksempelfil publicerer port 8080 til lokal brug; adressen 127.0.0.1 forbeholder den her proxyen.data rummer konfigurationen, kontiene og, med SQLite, hver brugers database. README'en påpeger, at det indeholder alle personlige data. Docker Compose navngiver det efter mappen: freshrss_data.extensions rummer udvidelser fra tredjepart, hvis du tilføjer nogen.TZ får serverens tidszone i PHP-format; standardværdien er UTC.TRUSTED_PROXY beholder værdien fra eksempelfilen: de private adresseområder, som proxyens forespørgsler kommer fra. Den afgør, hvilken adresse der havner i logfilerne, den besøgendes eller proxyens.cli/health.php med jævne mellemrum, så Docker ved, om instansen svarer.Tagget latest, som er standard, følger den seneste versionerede udgivelse; edge følger den løbende udgivelse; et tag som 1.30.4 fastlåser en version, og endelsen -alpine giver det samme på en Alpine-base i stedet for Debian. Afsnittet om opdateringer vender tilbage til dette valg.
Når reverse proxyen er på plads, åbner du din HTTPS-adresse: installationsguiden spørger om sproget, kontrollerer serveren, tilbyder valget af database og opretter derefter administratorkontoen med dens adgangskode og loginmetoden. SQLite virker uden forberedelse. Installationen kan også ske fra kommandolinjen med cli/do-install.php og cli/create-user.php, kørt via docker exec --user www-data freshrss.
Hvad angår ressourcer, beder README'en om en let server med Linux eller Windows og bemærker, at FreshRSS endda kører på en Raspberry Pi 1 med svartider under et sekund, med 150 feeds og 22.000 artikler. Størrelsen afhænger af antallet af brugere, feeds og gemte artikler. På en Managed VPS beskriver du blot din brug for os, og vi anbefaler den størrelse, der passer.
Til produktion anbefaler Docker-README'en en reverse proxy på værtsserveren, som leverer HTTPS. Vælg først et domænenavn eller et underdomæne, som rss.example.com, der peger på serveren med A- og AAAA-records. Projektet anbefaler Traefik og udgiver en komplet Compose-fil til den med certifikater fra Let's Encrypt og omdirigering fra HTTP til HTTPS; det giver også eksempler til Apache, Nginx og Caddy.
Caddy henter selv certifikatet og slår HTTPS til. Denne blok følger dokumentationens eksempel for et underdomæne, her rettet mod den port, der er publiceret lokalt:
rss.example.com {
reverse_proxy 127.0.0.1:8080
}
Denne blok følger Docker-README'ens Nginx-eksempel for roden af et domæne, begrænset til port 80, så Certbot kan sætte HTTPS op. De to sidste linjer videresender headeren Authorization, som Google Reader-API'et har brug for:
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 installerer derefter certifikatet og sørger for at forny det:
sudo certbot --nginx
FreshRSS gemmer sin offentlige adresse i base_url i filen data/config.php. API'et og WebSub bygger på den: kontrollér, at den indeholder din https-adresse. Docker-README'en viser, hvor filen findes i volumenet:
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 henter nye artikler med sit script app/actualize_script.php. Docker-imaget leverer et planlagt job, der kører det i de minutter, der er angivet i CRON_MIN. Uden denne variabel, eller med en tom værdi, forbliver jobbet slået fra, og feedsene opdateres ikke længere af sig selv.
13,43; */20 virker også.base_url, og installationsguiden slår det til, når serveren har en.En anden dokumenteret metode: et planlagt job på værtsserveren, som kalder scriptet inde i containeren. Fjern i så fald CRON_MIN fra compose.yaml, så der kun er én metode:
7,37 * * * * root docker exec --user www-data freshrss php ./app/actualize_script.php > /tmp/FreshRSS.log 2>&1
Siden version 1.30.0 afviser FreshRSS som standard adresser på det lokale netværk som 127.0.0.1 for at beskytte mod forfalskning af forespørgsler fra serversiden. En nabotjeneste, der producerer feeds, som RSS-Bridge, tillades via variablen INTERNAL_HOST_ALLOWLIST i formen rss-bridge:80 eller i systemkonfigurationen. Værdien * fjerner al kontrol, og dokumentationen kalder den usikker.
Under installationen tilbyder FreshRSS login med formular, som kræver JavaScript. Det er standardmetoden, og den passer til de fleste instanser. Dokumentationen beskriver andre:
| Metode | Hvad den gør | Hvor den indstilles |
|---|---|---|
| Formular | Et brugernavn og en adgangskode, der er specifikke for FreshRSS | Installationsguiden |
| HTTP-godkendelse | Webserveren styrer adgangen, og nye brugere oprettes ved deres første login | En fil p/i/.htaccess monteret i containeren med dens .htpasswd |
| Ekstern godkendelse | Proxyen videregiver den indloggede bruger i headeren Remote-User eller X-WebAuth-User | TRUSTED_PROXY, som opregner de betroede proxyer |
| OpenID Connect | Login går gennem din identitetsudbyder med Apache-modulet mod_auth_openidc | OIDC_ENABLED og variablerne OIDC_* i Debian-imaget på x86_64 |
Dokumentationen advarer om, at FreshRSS stoler på enhver adresse, der står i TRUSTED_PROXY: en dårligt sikret proxy ville lade en angriber sætte headeren og få administratoradgang. Her lytter porten kun på 127.0.0.1, hvilket forbeholder den serverens egen proxy. Dokumentationen fraråder også enhver instans uden godkendelse, så snart serveren kan nås uden for dit netværk.
mailer og smtp i data/config.php: dokumentationen siger, at afsendelse via PHP's funktion mail endnu ikke understøttes i de officielle Docker-images.For en instans, der deles af flere personer, råder dokumentationen til at åbne konti for personer, du har tillid til, og til at holde instansen bag en proxy eller en firewall, der blokerer adgangen til interne adresseområder.
FreshRSS fungerer i browseren, på store og små skærme, og i apps til Android, iOS, Linux, Windows og macOS. Disse apps bruger et af dens to API'er: Google Reader, som README'en vurderer som det bedste, og Fever, med færre funktioner, mindre effektivt og mindre sikkert.
https://rss.example.com/api/greader.php, eller https://rss.example.com/api/fever.php for Fever, med brugernavnet og denne API-adgangskode.For at kontrollere åbner linket ved siden af API-adgangskoden i profilen en testside: PASS på den fulde kontrol bekræfter, at alt virker. Docker-imaget sætter allerede Apache til at acceptere kodede skråstreger, som visse apps har brug for; med Nginx foran beholder du videresendelsen af headeren Authorization.
README'en fører en tabel over kompatible apps med deres platform, API og funktioner: blandt andet Capy Reader og Readrops på Android, FeedFlow på mobil og computer, RSS Guard og NewsFlash på computer, ReadKit og Reeder Classic på iOS og macOS.
FreshRSS har SQLite indbygget, som Docker-README'en beskriver som den nemmeste løsning med god ydelse. Siden om krav anbefaler PostgreSQL 10 eller nyere og accepterer også MariaDB 10.6 og MySQL 8.0 eller nyere. Valget træffes i installationsguiden.
| Database | Opsætning | Backup |
|---|---|---|
| SQLite | Ingen: én fil pr. bruger, data/users/<user>/db.sqlite | Volumenet data |
| PostgreSQL | En tjeneste postgres i samme compose.yaml | pg_dump eller cli/db-backup.php |
| MySQL eller MariaDB | Din egen databaseserver og dens værtsnavn i guiden | mysqldump eller cli/db-backup.php |
Til PostgreSQL tilføjer du denne tjeneste til compose.yaml, hentet fra projektets fil docker-compose-db.yml, og volumenet db til listen over volumener. Adgangskoden lægges i en fil .env ved siden af 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'
I guiden vælger du PostgreSQL og angiver freshrss-db som vært, med brugeren, adgangskoden og databasen freshrss.
Du kan vende tilbage til dette valg senere. Dokumentationen beskriver skiftet fra én database til en anden, for eksempel fra MySQL til PostgreSQL, eller til en nyere hovedversion af PostgreSQL: cli/db-backup.php kopierer hver brugers database til en SQLite-fil, og derefter indlæser cli/db-restore.php den i den nye database.
README'en angiver, at FreshRSS leveres helt uden garanti: dine backups bevarer dine abonnementer, dine artikler og dine indstillinger. Her er, hvad dokumentationen beder dig om at tage backup af:
| Element | Hvad det rummer | Skal der tages backup |
|---|---|---|
data/ | Konfigurationen, kontiene, logfilerne og, med SQLite, databaserne | Obligatorisk; cache/ kan springes over, FreshRSS genopbygger den |
extensions/ | Udvidelser fra tredjepart | Anbefalet, hvis du bruger nogen |
| Den eksterne database | Med PostgreSQL, MySQL eller MariaDB brugernes data | Obligatorisk, separat |
Dokumentationen anser det for sikrere at stoppe tjenesten under vedligeholdelse. Docker-volumener kopieres med en midlertidig container, den metode, der beskrives i Dockers dokumentation:
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
Siden version 1.29.1 kan FreshRSS selv eksportere hver brugers database til en SQLite-fil, uanset hvilken database du bruger, og kun beholde de nyeste. Slå denne eksport til i data/config.php:
'auto_sqlite_export' => [
'enabled' => true,
'retention' => 7,
],
Planlæg derefter kommandoen på serveren, her hver nat. Hver kørsel skriver data/users/<user>/sqlite-backups/<date>.sqlite og sletter filerne ud over de sidste syv:
20 2 * * * root docker exec --user www-data freshrss cli/export-sqlite-auto.php --quiet
Med PostgreSQL tilføjer du en eksport med databasens eget værktøj, som i Docker-README'en. Indstillingen -T slår terminalen fra, som et planlagt job ikke har brug for:
docker compose exec -T freshrss-db pg_dump -U freshrss freshrss | gzip -9 > freshrss-postgres-$(date +%F).sql.gz
OPML-eksporten fra brugerfladen gemmer din liste over feeds, uden visse indstillinger, der er specifikke for FreshRSS, som adgangsoplysninger eller regler for scraping af sider. For en komplet kopi beholder du SQLite-eksporterne: lagt på serverens disk indgår de også i dens natlige backup.
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, og kontrollér derefter, at dine feeds og artikler er der.Gentag denne øvelse en gang imellem på en kopi: sådan kontrollerer du, at en backup virker.
Docker-README'en giver to kommandoer, fra mappen med compose.yaml. Volumenerne bliver, hvor de er:
docker compose pull
docker compose up -d
FreshRSS udgiver på to kanaler. De versionerede udgivelser, tagget latest, kommer nogle gange om året uden fast plan, og deres rettelser overføres ikke til ældre versioner. Den løbende udgivelse, tagget edge, får nye funktioner og rettelser, efterhånden som de kommer: siden version 1.30.0 anbefaler projektet den for at få sikkerhedsrettelser hurtigere.
data/, udvidelserne og databasen før hver opdatering.1.29.1 denne vej mulig.For at følge nye versioner udgiver projektet et Atom-feed over sine versioner: abonnér på det med din egen FreshRSS-instans.
Selvhosting kræver, at du holder serveren ud over selve applikationen. På en Managed VPS tager vores teams sig af serveren og følger din instans proaktivt; FreshRSS forbliver din software, med dens indstillinger og data.
| Emne | Vores teams | Dig |
|---|---|---|
| Serveren | Opdateringer af system og sikkerhed, indgreb på serveren inkluderet | Det tidspunkt, der passer til din drift |
| Overvågningen | Serveren følges døgnet rundt, alle ugens dage, med indgreb uden at vente på dit opkald | Gennemlæsning af din instans' logfiler |
| FreshRSS | Proaktiv opfølgning: fejl, langsomme svartider og diskplads opdages, og en rettelse anbefales | Installation, opdateringer og indstillinger, som du gennemfører, selv eller med din AI-assistent |
| Konti og feeds | Den server, der bærer dem, overvåget og sikkerhedskopieret | Brugerne, abonnementerne, udvidelserne og API-adgangskoderne |
| Backup | Hver nat, krypteret og opbevaret uden for maskinen; gendannelse inkluderet | De eksporter, der er specifikke for FreshRSS, og anmodningen om gendannelse, når du får brug for den |
| Migreringen | Din nuværende server flyttes, uden beregning | Tidspunktet for omlægningen |
Hvis du foretrækker, at vores teams griber ind i selve applikationen, faktureres den ydelse pr. time eller som fast pris, med et overslag oplyst før indgrebet.
Med en Managed VPS fra Simafri holder vores teams serveren bag din FreshRSS-instans opdateret, overvåger den dag og nat og griber ind uden at vente på dit opkald; de følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører, selv eller med din AI-assistent. Backup krypteres hver nat og opbevares uden for maskinen, gendannelsen er inkluderet, og migreringen af din nuværende server sker uden beregning.
Ja. FreshRSS er under AGPL-3.0-licensen: du kan køre den i din virksomhed uden at skulle købe en licens. Hvis du ændrer den, skal din version tilbyde sin kildekode til dem, der bruger den via netværket. Tilbage er udgiften til den server, der kører den.
Opret en compose.yaml med imaget freshrss/freshrss, volumenerne data og extensions og porten publiceret på 127.0.0.1, og kør derefter docker compose up -d. Sæt så en reverse proxy med HTTPS foran, åbn din adresse, og følg installationsguiden.
Med Docker-imaget giver du CRON_MIN de minutter, der skal køres i, for eksempel 13,43: projektet anbefaler omkring to kørsler i timen. Uden CRON_MIN forbliver det indbyggede job slået fra. Et planlagt job på serveren, der kører app/actualize_script.php inde i containeren, gør det samme arbejde.
SQLite er indbygget og kræver ingen forberedelse; Docker-README'en beskriver den som den nemmeste, med god ydelse. Siden om krav anbefaler PostgreSQL 10 eller nyere og accepterer MariaDB 10.6 og MySQL 8.0. Kommandoerne db-backup og db-restore gør det muligt at skifte database senere.
Slå adgang via API'et til i afsnittet Godkendelse, og angiv derefter en API-adgangskode i din profil. I en kompatibel app indtaster du adressen api/greader.php på din instans, hvor Google Reader-API'et ifølge README'en er det bedste, eller api/fever.php.
Ikke som standard: konfigurationen begrænser kontiene til administratorens. Du opretter de andre under Administration, Administrér brugere, eller du hæver antallet af konti i systemkonfigurationen for at vise tilmeldingsformularen.
Kopiér volumenerne data og extensions med tjenesten stoppet. Slå også auto_sqlite_export til, og planlæg cli/export-sqlite-auto.php, som hver nat eksporterer hver brugers database til SQLite. Med PostgreSQL tilføjer du en pg_dump. Test gendannelsen regelmæssigt.
En Managed VPS dækker serveren: system, sikkerhed, overvågning og backup. Vores teams følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører. Et indgreb i selve applikationen faktureres pr. time eller som fast pris.
Simafri
Lad os tale om din hjemmeside
Fortæl os om dit projekt med få ord: vi vender hurtigt tilbage til dig.
Tak! Din forespørgsel er sendt. Vi vender tilbage til dig hurtigst muligt.
Foretrækker du e-mail? Skriv til os på support@simafri.com.