Zum Inhalt springen
Serverküche
Suche

Die Suche wird geladen … (nur in der veröffentlichten Seite verfügbar).

Anwendungen Schwierigkeit: Fortgeschritten

FreshRSS: der eigene RSS-Reader

Alle Nachrichtenquellen an einem Ort, ohne Algorithmus und Tracking: FreshRSS als selbstgehosteter RSS-Reader hinter Traefik – mit App-Anbindung und Backup.

· 5 Min. Lesezeit ·Dauer: ca. 40 Minuten
Inhaltsverzeichnis

RSS ist das beste Nachrichtenformat, das die meisten vergessen haben: Du abonnierst Quellen direkt, ohne Algorithmus, ohne Werbung, ohne dass jemand mitliest, was du liest. FreshRSS bündelt all deine Quellen an einem selbstgehosteten Ort – und synchronisiert sogar mit den RSS-Apps auf dem Handy.

Was bauen wir?

Einen eigenen RSS-Reader mit FreshRSS (v1.29.1) hinter Traefik, der deine Nachrichtenquellen sammelt und im Hintergrund per Cron aktuell hält. Am Ende liest du heise, Blogs, YouTube-Kanäle und Podcasts an einem Ort, gruppiert in Kategorien – und kannst über die eingebaute Google-Reader-API mobile Apps wie Reeder oder FeedMe anbinden. FreshRSS ist erfrischend leichtgewichtig: Es genügt SQLite, keine separate Datenbank nötig.

Voraussetzungen

🍳 Empfehlung Anzeige

VPS 1000 G12

4 vCore · 8 GB RAM · 256 GB NVMe

ab 10,36 €/Monat

FreshRSS ist genügsam – der kleinste VPS reicht auch für viele Feeds.

Zu netcup →

💶 5 € Gutschein für netcup-Neukunden:36nc17844976032 (nur Neukunden, keine Domains)

Schritt für Schritt

Schritt 1: Compose-Datei anlegen

FreshRSS speichert alles in einem data-Verzeichnis (SQLite-Datenbank, Konfiguration, Cache). Lege das Projekt an:

Terminal
mkdir -p /opt/freshrss && cd /opt/freshrss

Die compose.yaml – ersetze DEINE_DOMAIN:

YAML
services:
  freshrss:
    image: freshrss/freshrss:1.29.1
    restart: unless-stopped
    volumes:
      - ./data:/var/www/FreshRSS/data
      - ./extensions:/var/www/FreshRSS/extensions
    environment:
      TZ: Europe/Berlin
      CRON_MIN: '13,43'
    networks: [proxy]
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.freshrss.rule=Host(`DEINE_DOMAIN`)"
      - "traefik.http.routers.freshrss.entrypoints=websecure"
      - "traefik.http.routers.freshrss.tls.certresolver=le"
      - "traefik.http.services.freshrss.loadbalancer.server.port=80"

networks:
  proxy:
    external: true

CRON_MIN ist ein nettes Detail des offiziellen Images: Es startet einen internen Cron, der die Feeds zu den genannten Minuten (hier 13 und 43 jeder Stunde) automatisch aktualisiert – du brauchst keinen externen Timer.

Schritt 2: Starten

Terminal
docker compose up -d

Prüfe, dass FreshRSS mit gültigem HTTPS antwortet (die 302 ist die Weiterleitung zum Installations-Assistenten):

Terminal
curl -sI https://DEINE_DOMAIN/ | head -1
Ausgabe
HTTP/2 302

Schritt 3: Der Installations-Assistent

Öffne https://DEINE_DOMAIN/ im Browser. Der Assistent führt dich in fünf Schritten durch die Einrichtung – Sprache, Systemprüfung, Datenbank, Konto:

Der FreshRSS-Installationsassistent, Schritt 1: Sprachauswahl mit Versionsangabe 1.29.1
Der Installationsassistent führt durch Sprache, Systemcheck, Datenbank und Admin-Konto

Wähle als Datenbanktyp SQLite (keine weiteren Angaben nötig), als Authentifizierung Formular-basiert und lege dein Administrator-Konto mit einem starken Passwort an. Nach dem letzten Schritt bist du eingeloggt.

Alternative: Einrichtung per Kommandozeile

Wer die Ersteinrichtung skripten will, kann sie ohne Browser erledigen: docker compose exec -u www-data freshrss ./cli/do-install.php --default-user admin --auth-type form --db-type sqlite --language de, danach ./cli/create-user.php --user admin --password 'DEIN_PASSWORT'. Praktisch für reproduzierbare Setups – für den Einstieg ist der grafische Assistent aber bequemer.

Schritt 4: Erste Feeds abonnieren

Klicke oben links auf Abonnementverwaltung → Feed oder Kategorie hinzufügen. Trage die Feed-URL einer Quelle ein (z. B. https://www.heise.de/rss/heise-atom.xml) und ordne sie einer Kategorie zu. FreshRSS erkennt das Feed-Format automatisch. Nach dem Hinzufügen mehrerer Quellen sieht die Verwaltung so aus:

Die FreshRSS-Abonnementverwaltung mit Feeds in den Kategorien Nachrichten und Unkategorisiert
Die Abonnementverwaltung: Feeds in Kategorien gruppiert, mit Import/Export und Statistiken

Bestehende Feeds per OPML übernehmen

Wechselst du von einem anderen Reader (Feedly, Inoreader, altes Google Reader), exportiere dort eine OPML-Datei und importiere sie unter „Importieren / Exportieren“. So ziehen all deine Abos mit einem Klick um – inklusive Kategoriestruktur.

Schritt 5: Lesen

Zurück in der Leseansicht sammelt FreshRSS die Artikel aller Quellen chronologisch, gruppiert nach Kategorie. Ungelesene Zähler pro Feed, Sternchen für Favoriten, Volltextsuche – alles da:

Die FreshRSS-Leseansicht mit aktuellen Artikeln von heise online und t3n, gruppiert in Kategorien
Die Leseansicht: alle Quellen an einem Ort, mit Ungelesen-Zählern und Suche

Schritt 6: Handy-Apps anbinden (optional)

FreshRSS spricht die Google-Reader-API, sodass viele mobile Apps es als Sync-Backend nutzen können. Aktiviere sie unter Einstellungen → Profil → Externer Zugriff via API und vergib dort ein separates API-Passwort. In der App (z. B. Reeder, FeedMe, NetNewsWire) wählst du „FreshRSS“ oder „Google Reader API“, trägst https://DEINE_DOMAIN/api/greader.php, deinen Benutzernamen und das API-Passwort ein – und liest unterwegs synchron weiter.

Wenn es nicht funktioniert

Der Assistent meldet Schreibrechte-Fehler beim data-Ordner. Der Container läuft als www-data (UID 33). Bei bind-gemountetem ./data müssen die Rechte passen: chown -R 33:33 /opt/freshrss/data (siehe Benutzer & Rechte).

Feeds werden nicht automatisch aktualisiert. Prüfe, ob CRON_MIN gesetzt ist und der interne Cron läuft: docker compose logs freshrss | grep -i cron. Manuell anstoßen kannst du jederzeit über den Aktualisieren-Knopf oben rechts oder docker compose exec -u www-data freshrss ./cli/actualize-user.php --user admin.

Ein Feed bleibt leer / wird als „inaktiv" markiert. Die Quelle liefert kein gültiges RSS/Atom, oder die URL ist eine HTML-Seite statt des Feeds. Viele Seiten verstecken den Feed – suche im Seitenquelltext nach application/rss+xml. Unter „Statistiken → Inaktive Feeds“ findest du Problemquellen gebündelt.

Login klappt nicht, obwohl das Passwort stimmt. FreshRSS verschlüsselt das Passwort im Browser (JavaScript). Ist JavaScript deaktiviert oder die Verbindung nicht wirklich HTTPS (Zertifikatswarnung), scheitert der Login. Über Traefik ist HTTPS gegeben – prüfe im Zweifel das Zertifikat.

Nach einem Update fehlen Artikel. FreshRSS bereinigt alte Artikel nach einer einstellbaren Frist (Standard: einige Wochen). Das ist gewollt und hält die Datenbank klein; erhöhe bei Bedarf die Aufbewahrung pro Feed in dessen Einstellungen.

Wartung & Backups

  • Updates. Setze den Image-Tag (freshrss/freshrss:1.29.1) gelegentlich auf die neue Version und docker compose up -d; FreshRSS wandert seine Datenbank beim Start automatisch mit. Größere Sprünge kündigt das Projekt in den Release-Notes an – meist ist nichts weiter zu tun. Den Rest erledigt dein normaler Update-Prozess.
  • Backup. Der gesamte Zustand liegt im data-Ordner (SQLite-Datenbank + Konfiguration). Ihn ins Restic-Backup aufnehmen – dann sind Abos, Kategorien und gelesene Markierungen gesichert. Zusätzlich lohnt ein regelmäßiger OPML-Export deiner Feed-Liste als menschenlesbares, reader-unabhängiges Backup.
  • Aufwand ist gering. FreshRSS ist ein „einmal einrichten, dann läuft es"-Dienst. Die einzige wiederkehrende Aufgabe ist das Pflegen deiner Feed-Liste – tote Quellen unter „Inaktive Feeds“ ausmisten, Neues abonnieren.

Zuletzt aktualisiert: 09.09.2026

Feedback per E-Mail: feedback@serverkueche.de

Das könnte dir auch schmecken