Redlib: Privates Reddit-Frontend hinter Cloudflare-WARP als Docker-Container
Reddit ohne Werbung, Tracking und JavaScript-Ballast lesen – dafür gibt es Redlib. Doch wer Redlib auf einem eigenen Server betreibt, läuft schnell in eine Mauer: Reddit blockiert viele Rechenzentrums-IPs. Die Lösung aus unserem Stack ist ein Cloudflare-WARP-Sidecar, das den kompletten Redlib-Verkehr über die Cloudflare-Infrastruktur herausführt. Diesen Aufbau zeigt dieser Artikel.
Was ist Redlib?
Redlib ist eine private Alternative zur Reddit-Oberfläche und der direkte Nachfolger von Libreddit. Geschrieben in Rust, verzichtet sie konsequent auf JavaScript, Werbung und Tracking. Alle Anfragen – auch Bilder und Videos – laufen über deinen eigenen Server und werden von dort an Reddit weitergeleitet. Dein Browser spricht also nie direkt mit Reddit.
- Schnell & schlank: Rust statt schwerer Web-Frontends – Redlib lädt spürbar flotter als die Originalseite.
- Privat: Keine Cookies, keine Tracker, alle Medien werden über die eigene Instanz ausgeliefert.
- Sicher: Eine strenge Content-Security-Policy verhindert, dass der Browser heimlich Anfragen an Reddit stellt.
- Komfortabel: Subreddits, Kommentare, Suche, Medien – die meisten Reddit-Funktionen funktionieren ohne Login.
Einzige Hürde: Reddit erkennt Server-IPs aus Rechenzentren und liefert dort häufig 403 Forbidden – genau dafür kommt der WARP-Container ins Spiel.
Das Problem: Reddit blockiert Server-IPs
Reddit bekämpft Scraper und automatisierte Zugriffe, indem es bekannte Rechenzentrums-IP-Adressen sperrt oder mit aggressivem Rate-Limiting belegt. Dein Server bei einem Cloud-Anbieter fällt meist in genau diese Kategorie – die Folge: Redlib zeigt Fehlerseiten, obwohl alles korrekt eingerichtet ist.
Cloudflare WARP löst das elegant: Der Client baut eine verschlüsselte Verbindung zur Cloudflare-Infrastruktur auf und leitet deinen Traffic über deren IP-Adressen nach außen. Für Reddit sieht die Anfrage dann nicht nach Rechenzentrum aus, sondern nach einem normalen Cloudflare-Nutzer – die Sperre greift nicht mehr.
Installation mit Docker Compose
Wir legen den Stack wie gewohnt unter /opt/stacks/redlib an. Die Compose-Datei besteht aus zwei Diensten: dem WARP-Sidecar und dem eigentlichen Redlib-Dienst, der per network_mode: service:cloudflare in dessen Netzwerk-Namespace einzieht:
services:
cloudflare:
cap_add:
- NET_ADMIN
image: caomingjun/warp
ports:
- 127.0.0.1:50536:8080
restart: unless-stopped
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
- net.ipv6.conf.all.disable_ipv6=0
volumes:
- cloudflare:/var/lib/cloudflare-warp
service:
image: quay.io/redlib/redlib
network_mode: service:cloudflare
restart: unless-stopped
volumes:
cloudflare:
networks:
redlib: null
Die einzelnen Bausteine erklärt:
cloudflare(WARP-Client): BenötigtNET_ADMIN, um das WARP-Tunnel-Interface anzulegen. Das Sysctlsrc_valid_mark=1ist für das Routing mit WireGuard/Fwmark zwingend; IPv6 bleibt aktiviert.- Volume
cloudflare: Speichert die WARP-Registrierung unter/var/lib/cloudflare-warp. Ohne dieses Volume verliert der Container bei jedem Neustart seine Identität und muss sich neu registrieren. - Port
127.0.0.1:50536:8080: Der veröffentlichte Port gehört dem geteilten Netzwerk-Namespace – dort lauscht Redlib auf seinem Standard-Port8080. Nach außen ist wieder nur127.0.0.1sichtbar. network_mode: service:cloudflare: Redlib teilt sich den Namespace des WARP-Containers. Dadurch läuft der komplette Reddit-Verkehr über das WARP-Tunnel – ohne Proxy-Umgebungsvariablen.networks: redlib: Ist in dieser Datei ein Überbleibsel – kein Dienst nutzt dieses Netzwerk, der Block kann ersatzlos entfallen.
cd /opt/stacks/redlib
docker compose up -d
docker compose ps
Der WARP-Client braucht beim ersten Start 10–30 Sekunden, bis die Verbindung steht. Das ist normal und dank restart: unless-stopped unkritisch. Erst wenn beide Container laufen, testen wir:
# Web-UI erreichbar?
curl -I http://127.0.0.1:50536/
# HTTP/1.1 200 OK
# Läuft der WARP-Tunnel? (Logs zeigen den Verbindungsstatus)
docker compose logs cloudflare | grep -i -E "connectivity|success"
docker compose up -d startet beide Dienste parallel – Redlib kann kurz „keine Verbindung“ melden, solange WARP noch nicht verbunden ist. Ein docker compose restart service nach dem ersten erfolgreichen WARP-Connect behebt das, falls nötig.Reverse Proxy: Redlib nach außen bringen
Wie bei allen Diensten aus der Serie bleibt Redlib auf 127.0.0.1 und wird ausschließlich über den Reverse Proxy mit TLS ausgeliefert. Der Nginx-Serverblock (Muster aus dem nginx/acme.sh-Artikel):
server {
listen 80;
server_name rd.example.org;
location / {
proxy_pass http://127.0.0.1:50536;
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;
}
}
Danach die Konfiguration prüfen und sanft neu laden:
sudo nginx -t
sudo systemctl reload nginx
Unter https://rd.example.org erreichst du jetzt deine private Reddit-Oberfläche – ohne Werbung, ohne Tracking, ohne JavaScript.
Konfiguration: Startseite & Standardwerte
Redlib bringt viele Einstellungen mit – vom Theme über das Layout bis zur Sortierung. Jeder Besucher kann sie im Menü der Instanz ändern (die Werte landen im Browser-Speicher). Wer will, legt Server-weite Standardwerte über Umgebungsvariablen fest. Die wichtigsten Beispiele:
services:
service:
image: quay.io/redlib/redlib
network_mode: service:cloudflare
restart: unless-stopped
environment:
# Startseite: popular statt home
- REDLIB_DEFAULT_FRONT_PAGE=popular
# Theme & Layout für alle Besucher vorbelegen
- REDLIB_DEFAULT_THEME=dark
- REDLIB_DEFAULT_LAYOUT=card
# Sortierung der Beiträge
- REDLIB_DEFAULT_POST_SORT=hot
Die Variablen heißen durchgehend REDLIB_DEFAULT_… – eine vollständige Liste aller Optionen findest du im Abschnitt „Configuration“ der Redlib-Dokumentation. Die Einstellungen pro Benutzer haben dabei immer Vorrang vor den Server-Standardwerten.
Betrieb, Updates & Backups
Updates
Redlib und der WARP-Client erscheinen regelmäßig mit Updates. Der Weg ist der übliche aus der Serie:
cd /opt/stacks/redlib
docker compose pull
docker compose up -d
docker image prune -f
Wer automatische Updates bevorzugt, nimmt Watchtower aus Teil 5 hinzu.
Backup mit Borg (aus Teil 4)
Redlib selbst hält keinen Zustand – es gibt keinen Datenbankordner, der gesichert werden muss. Relevant sind nur die Compose-Datei und (optional) die WARP-Registrierung im Volume. Für den Stack-Ordner gilt das bewährte, ausfallsichere Backup-Muster:
#!/bin/sh
cd /opt/stacks/redlib || exit 1
# Dienste anhalten – Container & Netzwerke bleiben erhalten
docker compose stop
# Notbremse: Egal ob das Backup klappt oder nicht – Redlib startet wieder.
trap 'docker compose start' EXIT
# Borg-Archiv mit dynamischem Datum
borg create --stats /mnt/backup/borg-repo::redlib-$(date +%Y-%m-%d) /opt/stacks/redlib
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6
Beim Wiederherstellen nach einem Totalausfall ist der Ablauf simpel: Stack-Ordner zurückspielen, docker compose up -d, fertig. Die WARP-Registrierung wird beim ersten Start automatisch neu erzeugt.
Häufige Probleme
| Problem | Lösung |
|---|---|
| Web-UI nicht erreichbar | Beide Container prüfen: docker compose ps. Der veröffentlichte Port gehört zum geteilten Namespace – Redlib muss laufen, sonst antwortet nichts auf 127.0.0.1:50536. |
| Reddit liefert trotzdem 403 | WARP-Status in den Logs prüfen (docker compose logs cloudflare). Häufigste Ursache: WARP war beim Redlib-Start noch nicht verbunden – danach docker compose restart service. |
| Nach Reboot keine Verbindung zu Reddit | WARP muss sich nach einem Neustart neu verbinden. restart: unless-stopped startet beide Container – Redlib kurz danach neu starten, sobald WARP verbunden ist. |
| WARP registriert sich bei jedem Start neu | Das Volume cloudflare:/var/lib/cloudflare-warp fehlt oder wurde gelöscht – so bleibt die Registrierung über Neustarts erhalten. |
| Port 50536 ist bereits belegt | Host-Port in der Compose-Datei ändern und die Zuordnung in der Dockerliste notieren – der Reverse Proxy muss dann auf den neuen Port zeigen. |
| Seite lädt nach Update nicht mehr | Beide Images aktualisiert? docker compose pull zieht nur geänderte Images – danach docker compose up -d und ggf. den WARP-Container neu starten. |
Fazit
Redlib ist der Inbegriff eines guten Selbsthosting-Projekts: klein, schnell und mit klarem Nutzen für die Privatsphäre. Die eigentliche Kunst steckt im Detail – Reddit blockt Server-IPs, und genau dafür ist das WARP-Sidecar da. Das Zusammenspiel aus geteiltem Netzwerk-Namespace, lokaler Portbindung und Reverse Proxy folgt exakt den Mustern, die sich durch unsere ganze Serie ziehen.
network_mode: service:cloudflare – Redlib fährt im Netzwerk des WARP-Containers mit ④ Kein eigener Zustand: Backups sichern nur den Stack-Ordner