Hoste FreshRSS på en Managed VPS: dine RSS-feeds på din egen server

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.

Simon Vasconcelos Lee Af Udgivet den 11. november 2026Læsetid: 13 minutter

Alle guider

Det vigtigste

  1. AGPL-3.0-licensen tillader at køre FreshRSS frit, både i virksomheder og andre steder; hvis du ændrer programmet, stiller du din versions kildekode til rådighed for dem, der bruger den.
  2. Installér med Docker Compose: ét image, en port publiceret lokalt og to volumener, data og extensions, bag en reverse proxy med HTTPS.
  3. Variablen CRON_MIN opdaterer feedsene af sig selv: projektet anbefaler omkring to kørsler i timen.
  4. Tilmeldinger er lukket som standard. Til mobilapps slår du API'et til, og derefter angiver hver bruger en API-adgangskode.
  5. Tag backup af volumenet data og, med PostgreSQL eller MySQL, af databasen, og opdatér derefter med docker compose pull.

Hvad FreshRSS gør

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.

Hvad AGPL-3.0-licensen tillader

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.

Installation med Docker Compose

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:

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, i mappen freshrss
docker compose up -d

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.

Gør installationen færdig

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.

HTTPS: reverse proxyen

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.

Med 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:

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

Med Nginx og Certbot

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:

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 installerer derefter certifikatet og sørger for at forny det:

Terminal
sudo certbot --nginx

Den offentlige adresse: base_url

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:

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

Opdatering af feeds: CRON_MIN

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.

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:

/etc/cron.d/FreshRSS
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.

Konti og login

Under installationen tilbyder FreshRSS login med formular, som kræver JavaScript. Det er standardmetoden, og den passer til de fleste instanser. Dokumentationen beskriver andre:

MetodeHvad den gørHvor den indstilles
FormularEt brugernavn og en adgangskode, der er specifikke for FreshRSSInstallationsguiden
HTTP-godkendelseWebserveren styrer adgangen, og nye brugere oprettes ved deres første loginEn fil p/i/.htaccess monteret i containeren med dens .htpasswd
Ekstern godkendelseProxyen videregiver den indloggede bruger i headeren Remote-User eller X-WebAuth-UserTRUSTED_PROXY, som opregner de betroede proxyer
OpenID ConnectLogin går gennem din identitetsudbyder med Apache-modulet mod_auth_openidcOIDC_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.

Tilmeldinger og brugere

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.

Mobilapps: API'erne Google Reader og Fever

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.

  1. Som administrator slår du i afsnittet Godkendelse den indstilling til, der tillader adgang via API'et.
  2. Hver bruger angiver en API-adgangskode i sin profil. Den er adskilt fra hovedadgangskoden, giver adgang til færre ting og er beregnet til mindre sikre situationer.
  3. I appen indtaster du adressen 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.

SQLite, PostgreSQL, MySQL eller MariaDB

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.

DatabaseOpsætningBackup
SQLiteIngen: én fil pr. bruger, data/users/<user>/db.sqliteVolumenet data
PostgreSQLEn tjeneste postgres i samme compose.yamlpg_dump eller cli/db-backup.php
MySQL eller MariaDBDin egen databaseserver og dens værtsnavn i guidenmysqldump 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:

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

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.

Backup

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:

ElementHvad det rummerSkal der tages backup
data/Konfigurationen, kontiene, logfilerne og, med SQLite, databaserneObligatorisk; cache/ kan springes over, FreshRSS genopbygger den
extensions/Udvidelser fra tredjepartAnbefalet, hvis du bruger nogen
Den eksterne databaseMed PostgreSQL, MySQL eller MariaDB brugernes dataObligatorisk, separat

Volumenerne, med tjenesten stoppet

Dokumentationen anser det for sikrere at stoppe tjenesten under vedligeholdelse. Docker-volumener kopieres med en midlertidig container, den metode, der beskrives i Dockers dokumentation:

Terminal, i mappen 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

Databaserne, mens tjenesten kører

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:

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:

/etc/cron.d/freshrss-export
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:

Terminal, i mappen freshrss
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.

Gendan

  1. Stop FreshRSS med docker compose stop freshrss.
  2. Indlæs arkivet i volumenerne igen: docker run --rm --volumes-from freshrss -v "$PWD":/backup ubuntu tar -xzf /backup/freshrss-YYYY-MM-DD.tgz -C /var/www/FreshRSS.
  3. Med en ekstern database gendanner du den fra dens eksport eller fra SQLite-filerne med cli/db-restore.php --delete-backup --force-overwrite.
  4. Start igen med 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.

Opdateringer

Docker-README'en giver to kommandoer, fra mappen med compose.yaml. Volumenerne bliver, hvor de er:

Terminal
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.

For at følge nye versioner udgiver projektet et Atom-feed over sine versioner: abonnér på det med din egen FreshRSS-instans.

Hvem gør hvad på en Managed VPS

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.

EmneVores teamsDig
ServerenOpdateringer af system og sikkerhed, indgreb på serveren inkluderetDet tidspunkt, der passer til din drift
OvervågningenServeren følges døgnet rundt, alle ugens dage, med indgreb uden at vente på dit opkaldGennemlæsning af din instans' logfiler
FreshRSSProaktiv opfølgning: fejl, langsomme svartider og diskplads opdages, og en rettelse anbefalesInstallation, opdateringer og indstillinger, som du gennemfører, selv eller med din AI-assistent
Konti og feedsDen server, der bærer dem, overvåget og sikkerhedskopieretBrugerne, abonnementerne, udvidelserne og API-adgangskoderne
BackupHver nat, krypteret og opbevaret uden for maskinen; gendannelse inkluderetDe eksporter, der er specifikke for FreshRSS, og anmodningen om gendannelse, når du får brug for den
MigreringenDin nuværende server flyttes, uden beregningTidspunktet 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.

FreshRSS på en server, der passes for dig

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.

Opdag Managed VPS

Ofte stillede spørgsmål

Er FreshRSS gratis for en virksomhed?

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.

Hvordan installerer man FreshRSS med Docker Compose?

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.

Hvordan opdaterer man feeds automatisk i FreshRSS?

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.

Hvilken database skal man vælge til FreshRSS?

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.

Hvordan læser man FreshRSS på mobilen?

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.

Er tilmeldinger åbne på FreshRSS?

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.

Hvordan tager man backup af FreshRSS?

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.

Dækker en Managed VPS FreshRSS?

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.

Kilder og officiel dokumentation

Kontakt os