Hosta FreshRSS på en Managed VPS: dina RSS-flöden på din egen server

Att hosta FreshRSS på en Managed VPS innebär att du och ditt team läser era RSS-flöden från en egen maskin, som våra team håller uppdaterad och bevakar dag och natt. FreshRSS är fri programvara under licensen AGPL-3.0. Den här guiden följer den officiella dokumentationen: installation med Docker Compose, HTTPS, uppdatering av flödena, konton och inloggning, API:et för mobilappar, databasen, säkerhetskopior och uppdateringar.

Simon Vasconcelos Lee Av Publicerad den 11 november 2026Lästid: 13 minuter

Alla guider

I korthet

  1. Licensen AGPL-3.0 tillåter fri körning av FreshRSS, i företag som på andra håll; om du ändrar programmet erbjuder du koden till din version åt dem som använder den.
  2. Installera med Docker Compose: en avbild, en port som publiceras lokalt och två volymer, data och extensions, bakom en omvänd proxy med HTTPS.
  3. Variabeln CRON_MIN uppdaterar flödena av sig själv: projektet rekommenderar ungefär två körningar i timmen.
  4. Registreringarna är stängda som standard. För mobilapparna aktiverar du API:et, och sedan väljer varje användare ett API-lösenord.
  5. Säkerhetskopiera volymen data och, med PostgreSQL eller MySQL, databasen, och uppdatera sedan med docker compose pull.

Det FreshRSS gör

FreshRSS är en självhostad aggregator för RSS-flöden, skriven i PHP. README-filen beskriver den som lätt, enkel att arbeta med, kraftfull och anpassningsbar, översatt till fler än tjugo språk. Det är en applikation för flera användare, med ett anonymt läsläge och egna etiketter.

FreshRSS utvecklas av sin gemenskap på GitHub, och den officiella webbplatsen ges ut av FreshRSS-gemenskapen. Tilläggen finns i ett separat förråd, och dokumentationen riktar sig till användare, administratörer och utvecklare.

Det som licensen AGPL-3.0 tillåter

FreshRSS publiceras under GNU Affero General Public License, version 3: dess manifest composer.json deklarerar den som AGPL-3.0, och README-filen länkar till licenstexten. Texten slår fast en obegränsad rätt att köra det oförändrade programmet. Du kan alltså använda avbilden som projektet publicerar för ditt företag och ditt team, utan att köpa någon licens.

Artikel 13 lägger till ett villkor som är särskilt för AGPL: om du ändrar programmet måste din version ge alla som använder den på distans, över nätverket, möjlighet att kostnadsfritt få tag på dess källkod. Ett tillägg från tredje part som läggs i volymen extensions följer sin egen licens.

Installationen med Docker Compose

Projektet publicerar sina officiella avbilder på Docker Hub, under namnet freshrss/freshrss, tillsammans med en exempelfil för Compose. På en server där Docker är installerat skapar du en mapp med namnet freshrss och lägger denna compose.yaml i den, hämtad från den filen och från Docker-README:n:

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

Taggen latest, standardvalet, följer den senaste numrerade versionen; edge följer den löpande utgåvan; en tagg som 1.30.4 låser en version, och suffixet -alpine ger samma sak på en Alpine-bas i stället för Debian. Avsnittet om uppdateringar återkommer till det valet.

Slutföra installationen

När den omvända proxyn är på plats öppnar du din HTTPS-adress: installationsguiden frågar efter språket, kontrollerar servern, erbjuder valet av databas och skapar sedan administratörskontot, med dess lösenord och inloggningsmetod. SQLite fungerar utan några förberedelser. Installationen går också att göra från kommandoraden, med cli/do-install.php och cli/create-user.php, körda via docker exec --user www-data freshrss.

När det gäller resurser begär README-filen en lätt server, med Linux eller Windows, och påpekar att FreshRSS till och med körs på en Raspberry Pi 1, med svarstider under en sekund, med 150 flöden och 22 000 artiklar. Storleken beror på antalet användare, flöden och sparade artiklar. På en Managed VPS beskriver du hur du tänker använda den, så rekommenderar vi lämplig storlek.

HTTPS: den omvända proxyn

För produktion råder Docker-README:n till en omvänd proxy på värdservern, som står för HTTPS. Välj först ett domännamn eller en underdomän, som rss.example.com, som pekar mot servern med A- och AAAA-poster. Projektet rekommenderar Traefik och publicerar en komplett Compose-fil för den, med certifikat från Let’s Encrypt och omdirigeringen från HTTP till HTTPS; det ger också exempel för Apache, Nginx och Caddy.

Med Caddy

Caddy hämtar certifikatet och aktiverar HTTPS på egen hand. Det här blocket följer dokumentationens exempel för en underdomän, här riktat mot porten som publiceras lokalt:

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

Med Nginx och Certbot

Det här blocket följer Nginx-exemplet i Docker-README:n för en domänrot, begränsat till port 80 så att Certbot kan installera HTTPS. De två sista raderna skickar vidare huvudet Authorization, som Google Reader-API:et behöver:

Nginx-block
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 installerar sedan certifikatet och sköter förnyelsen:

Terminal
sudo certbot --nginx

Den publika adressen: base_url

FreshRSS sparar sin publika adress i base_url, i filen data/config.php. API:et och WebSub bygger på den: kontrollera att den innehåller din adress i https. Docker-README:n visar var filen finns i volymen:

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

Uppdatera flödena: CRON_MIN

FreshRSS hämtar nya artiklar med sitt skript app/actualize_script.php. Docker-avbilden levereras med ett schemalagt jobb som kör det vid de minuter som anges i CRON_MIN. Utan den variabeln, eller med ett tomt värde, förblir jobbet avstängt och flödena uppdateras inte längre av sig själva.

En annan dokumenterad metod: ett schemalagt jobb på värdservern, som anropar skriptet inuti containern. Ta i så fall bort CRON_MIN ur compose.yaml, så att bara en metod används:

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

Sedan version 1.30.0 vägrar FreshRSS som standard adresser i det lokala nätverket, som 127.0.0.1, för att skydda mot förfalskade förfrågningar från serversidan. En närliggande tjänst som producerar flöden, som RSS-Bridge, tillåts via variabeln INTERNAL_HOST_ALLOWLIST, i formen rss-bridge:80, eller i systemkonfigurationen. Värdet * tar bort alla kontroller, och dokumentationen kallar det osäkert.

Konton och inloggning

Under installationen erbjuder FreshRSS inloggning via formulär, som kräver JavaScript. Det är standardmetoden, och den passar de flesta instanser. Dokumentationen beskriver andra:

MetodVad den görVar den ställs in
FormulärEtt användarnamn och ett lösenord som är egna för FreshRSSInstallationsguiden
HTTP-autentiseringWebbservern styr åtkomsten, och nya användare skapas vid sin första inloggningEn fil p/i/.htaccess monterad i containern, med sin .htpasswd
Extern autentiseringProxyn skickar den inloggade användaren i huvudet Remote-User eller X-WebAuth-UserTRUSTED_PROXY, som listar de betrodda proxyerna
OpenID ConnectInloggningen går via din identitetsleverantör, med Apache-modulen mod_auth_openidcOIDC_ENABLED och variablerna OIDC_*, i Debian-avbilden på x86_64

Dokumentationen varnar för att FreshRSS litar på varje adress som listas i TRUSTED_PROXY: en dåligt skyddad proxy skulle låta en angripare sätta huvudet och få administratörsåtkomst. Här lyssnar porten bara på 127.0.0.1, vilket reserverar den för serverns egen proxy. Dokumentationen avråder också från varje instans utan autentisering så snart servern går att nå utanför ditt nätverk.

Registreringar och användare

För en instans som delas av flera personer råder dokumentationen att öppna konton för personer du litar på och att hålla instansen bakom en proxy eller en brandvägg som blockerar åtkomsten till interna adressintervall.

Mobilapparna: API:erna Google Reader och Fever

FreshRSS fungerar i webbläsaren, på stora som små skärmar, och i appar för Android, iOS, Linux, Windows och macOS. De här apparna använder ett av dess två API:er: Google Reader, som README-filen bedömer som det bästa, och Fever, med mer begränsade funktioner, mindre effektivt och mindre säkert.

  1. Som administratör, i avsnittet Autentisering, slår du på alternativet som tillåter åtkomst via API:et.
  2. Varje användare väljer ett API-lösenord i sin profil. Det är skilt från huvudlösenordet, ger åtkomst till färre saker och är avsett för mindre säkra situationer.
  3. I appen anger du adressen https://rss.example.com/api/greader.php, eller https://rss.example.com/api/fever.php för Fever, med användarnamnet och det API-lösenordet.

För att kontrollera öppnar länken som visas bredvid API-lösenordet, i profilen, en testsida: PASS på den fullständiga kontrollen bekräftar att allt fungerar. Docker-avbilden ställer redan in Apache så att kodade snedstreck godtas, vilket vissa appar behöver; med Nginx framför behåller du vidarebefordringen av huvudet Authorization.

README-filen har en tabell över kompatibla appar, med plattform, API och funktioner: bland andra Capy Reader och Readrops på Android, FeedFlow på mobil och dator, RSS Guard och NewsFlash på dator, ReadKit och Reeder Classic på iOS och macOS.

SQLite, PostgreSQL, MySQL eller MariaDB

FreshRSS har SQLite inbyggt, vilket Docker-README:n beskriver som det enklaste alternativet, med goda prestanda. Sidan med systemkrav rekommenderar PostgreSQL 10 eller senare, och godtar också MariaDB 10.6 och MySQL 8.0 eller senare. Valet görs i installationsguiden.

DatabasUppsättningSäkerhetskopiering
SQLiteIngen: en fil per användare, data/users/<user>/db.sqliteVolymen data
PostgreSQLEn tjänst postgres i samma compose.yamlpg_dump, eller cli/db-backup.php
MySQL eller MariaDBDin egen databasserver, och dess värdnamn i guidenmysqldump, eller cli/db-backup.php

För PostgreSQL lägger du till den här tjänsten i compose.yaml, hämtad från projektets fil docker-compose-db.yml, och volymen db i listan över volymer. Lösenordet läggs i en fil .env, bredvid 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äljer du PostgreSQL och anger freshrss-db som värd, med användaren, lösenordet och databasen freshrss.

Du kan ompröva valet senare. Dokumentationen beskriver hur du byter från en databas till en annan, från MySQL till PostgreSQL till exempel, eller till en nyare huvudversion av PostgreSQL: cli/db-backup.php kopierar varje användares databas till en SQLite-fil, och sedan läser cli/db-restore.php in den i den nya databasen.

Säkerhetskopiorna

README-filen anger att FreshRSS levereras helt utan garanti: dina säkerhetskopior bevarar dina prenumerationer, dina artiklar och dina inställningar. Det här är vad dokumentationen ber dig att säkerhetskopiera:

DelVad den innehållerAtt säkerhetskopiera
data/Konfigurationen, kontona, loggarna och, med SQLite, databasernaObligatoriskt; cache/ kan hoppas över, FreshRSS bygger upp den igen
extensions/Tillägg från tredje partRekommenderas, om du använder några
Den externa databasenMed PostgreSQL, MySQL eller MariaDB, användarnas dataObligatoriskt, separat

Volymerna, med tjänsten stoppad

Dokumentationen anser det säkrare att stoppa tjänsten under underhållsåtgärder. Docker-volymerna kopieras med en tillfällig container, den metod som beskrivs 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

Databaserna, med tjänsten igång

Sedan version 1.29.1 kan FreshRSS själv exportera varje användares databas till en SQLite-fil, oavsett vilken databas du använder, och bara behålla de senaste. Slå på den exporten i data/config.php:

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

Schemalägg sedan kommandot på servern, här varje natt. Varje körning skriver data/users/<user>/sqlite-backups/<date>.sqlite och tar bort filerna utöver de sju senaste:

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

Med PostgreSQL lägger du till en export med databasens eget verktyg, som i Docker-README:n. Alternativet -T tar bort terminalen, som ett schemalagt jobb inte har någon nytta av:

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

OPML-exporten, från gränssnittet, säkerhetskopierar din lista över flöden, utan vissa inställningar som är särskilda för FreshRSS, som inloggningsuppgifter eller regler för sidskrapning. För en fullständig kopia behåller du SQLite-exporterna: lagda på serverns disk ingår de också i dess nattliga säkerhetskopior.

Återställa

  1. Stoppa FreshRSS med docker compose stop freshrss.
  2. Läs tillbaka arkivet i volymerna: 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 extern databas återställer du den från dess export, eller från SQLite-filerna med cli/db-restore.php --delete-backup --force-overwrite.
  4. Starta igen med docker compose start freshrss och kontrollera sedan att dina flöden och artiklar finns kvar.

Upprepa övningen då och då, på en kopia: så kontrollerar du att en säkerhetskopia fungerar.

Uppdateringarna

Docker-README:n anger två kommandon, från mappen med compose.yaml. Volymerna ligger kvar:

Terminal
docker compose pull
docker compose up -d

FreshRSS publicerar i två kanaler. De numrerade versionerna, taggen latest, kommer ut några gånger om året, utan fast kalender, och deras rättelser förs inte tillbaka till äldre versioner. Den löpande utgåvan, taggen edge, får nya funktioner och rättelser allteftersom de tillkommer: sedan version 1.30.0 rekommenderar projektet den för snabbare säkerhetsrättelser.

För att följa nya versioner publicerar projektet ett Atom-flöde med sina versioner: prenumerera på det i din egen FreshRSS-instans.

Vem gör vad på en Managed VPS

Att självhosta innebär att sköta servern utöver applikationen. På en Managed VPS tar våra team hand om servern och följer din instans proaktivt; FreshRSS förblir din programvara, med sina inställningar och sina data.

OmrådeVåra teamDu
ServernUppdateringar av system och säkerhet, ingrepp på servern inräknadeTidpunkten som passar din verksamhet
ÖvervakningenServern följs dygnet runt, alla dagar, med ingrepp utan att vänta på ditt samtalLäsningen av din instans loggar
FreshRSSProaktiv uppföljning: fel, långsamma svarstider och diskutrymme upptäcks, med rekommenderad rättelseInstallationen, uppdateringarna och inställningarna, som du genomför själv eller med din AI-assistent
Kontona och flödenaServern som bär dem, övervakad och säkerhetskopieradAnvändarna, prenumerationerna, tilläggen och API-lösenorden
SäkerhetskopiornaVarje natt, krypterade och förvarade utanför maskinen; återställning ingårFreshRSS egna exporter och begäran om återställning, när du behöver den
MigreringenDin nuvarande server migreras kostnadsfrittTidpunkten för bytet

Om du föredrar att våra team ingriper i själva applikationen faktureras den tjänsten per timme eller som fast pris, med en offert som lämnas före ingreppet.

FreshRSS, på en server som sköts åt dig

Med en Managed VPS från Simafri håller våra team servern för din FreshRSS-instans uppdaterad, övervakar den dag och natt och griper in utan att vänta på ditt samtal; de följer också din instans proaktivt och rekommenderar de rättelser som är till nytta, som du genomför själv eller med din AI-assistent. Säkerhetskopiorna krypteras varje natt och förvaras utanför maskinen, återställningen ingår, och migreringen av din nuvarande server är kostnadsfri.

Upptäck Managed VPS

Vanliga frågor

Är FreshRSS gratis för ett företag?

Ja. FreshRSS är licensierat under AGPL-3.0: du kan köra det i ditt företag utan att köpa någon licens. Om du ändrar det måste din version erbjuda sin källkod åt dem som använder den över nätverket. Kvar blir kostnaden för servern som kör det.

Hur installerar man FreshRSS med Docker Compose?

Skapa en compose.yaml med avbilden freshrss/freshrss, volymerna data och extensions och porten publicerad på 127.0.0.1, och kör sedan docker compose up -d. Sätt därefter en omvänd proxy med HTTPS framför, öppna din adress och följ installationsguiden.

Hur uppdaterar man flödena automatiskt i FreshRSS?

Med Docker-avbilden ger du CRON_MIN de minuter då jobbet ska köras, till exempel 13,43: projektet rekommenderar ungefär två körningar i timmen. Utan CRON_MIN förblir det inbyggda jobbet avstängt. Ett schemalagt jobb på servern som kör app/actualize_script.php inuti containern gör samma arbete.

Vilken databas ska man välja för FreshRSS?

SQLite är inbyggt och kräver inga förberedelser; Docker-README:n beskriver det som det enklaste, med goda prestanda. Sidan med systemkrav rekommenderar PostgreSQL 10 eller senare, och godtar MariaDB 10.6 och MySQL 8.0. Kommandona db-backup och db-restore låter dig byta databas senare.

Hur läser man FreshRSS i mobilen?

Slå på åtkomsten via API:et i avsnittet Autentisering, och välj sedan ett API-lösenord i din profil. I en kompatibel app anger du din instans adress api/greader.php, eftersom Google Reader-API:et är det bästa enligt README-filen, eller api/fever.php.

Är registreringarna öppna i FreshRSS?

Inte som standard: konfigurationen begränsar kontona till administratörens. Du skapar de andra under Administration, Hantera användare, eller så höjer du antalet konton i systemkonfigurationen för att visa registreringsformuläret.

Hur säkerhetskopierar man FreshRSS?

Kopiera volymerna data och extensions med tjänsten stoppad. Slå också på auto_sqlite_export och schemalägg cli/export-sqlite-auto.php, som varje natt exporterar varje användares databas till SQLite. Med PostgreSQL lägger du till en pg_dump. Testa återställningen regelbundet.

Täcker en Managed VPS FreshRSS?

En Managed VPS täcker servern: system, säkerhet, övervakning och säkerhetskopior. Våra team följer också din instans proaktivt och rekommenderar de rättelser som är till nytta, som du genomför själv. Ett ingrepp i själva applikationen faktureras per timme eller som fast pris.

Källor och officiell dokumentation

Kontakta oss