GoCook selbst hosten: Chefkoch ohne Tracking & JavaScript
Chefkoch ist praktisch – aber voller Werbung, Tracking und JavaScript. GoCook ist ein datensparsames Frontend dafür: Der kleine Dienst (Go + Bulma) holt Rezepte und Bilder serverseitig und liefert dir nur statisches HTML aus – ohne Tracker, ohne Client-JavaScript, ohne direkte Verbindungen deines Browsers zu Chefkoch. In diesem Tutorial richtest du GoCook mit Docker Compose ein.
Warum GoCook?
Wer bei Chefkoch surft, lädt nicht nur Rezepte: Der Seitenaufbau zieht Werbenetzwerke, Tracker und JavaScript-Bibliotheken nach – auf einem schlanken Gerät oder im Hotel-WLAN wird daraus schnell eine Geduldsprobe. GoCook dreht das Prinzip um: Der Dienst läuft auf deinem Server, holt die Inhalte von Chefkoch und gibt sie als statisches HTML aus. Dein Browser spricht nur mit deiner Instanz – ohne Cookies, ohne Tracking-Skripte, ohne fremde Hosts.
Konzept: Das Frontend-Prinzip
- Was GoCook ist: Ein alternatives, datensparsames Frontend für Chefkoch-Rezepte (ähnlich wie SearXNG für die Suche oder Nitter/Invidious für andere Dienste).
- Statisch statt dynamisch: Ausgeliefert wird reines HTML mit Bulma-CSS – kein Client-JavaScript, keine Werbung, kein Tracking.
- Server-seitige Anfragen: API- und CDN-Anfragen laufen über deinen Container; der Browser hat keinen direkten Kontakt zu Chefkoch.
- Was GoCook nicht ist: Keine Rezeptdatenbank, keine eigene Rezeptverwaltung, keine Nutzerkonten und kein Offline-Archiv – die Inhalte kommen live von Chefkoch.
- Zustandslos: Kein Volume, keine Datenbank, keine dokumentierte Konfiguration – der Container ist bewusst ein Wegwerf-Dienst.
Vorbereitung: Kein Volume, keine Datenbank
Das Schöne an GoCook: Es gibt praktisch nichts vorzubereiten. Der Container braucht weder ein Daten-Volume noch eine Datenbank – du legst nur einen Ordner für die Compose-Datei an:
mkdir -p ~/gocook
cd ~/gocook
- Port 8080 im Container – gebunden wird nur an
127.0.0.1:50546, den Rest übernimmt der Reverse Proxy. USER_UID/USER_GID: im offiziellen Projekt nicht dokumentiert und ohne Funktion – sie schaden nicht, lassen sich aber gefahrlos entfernen.- Kein Cache, kein Persistenz-Ordner: Nach einem
docker compose downist alles weg – genau das ist gewollt.
Docker Compose – die Datei
Deine Vorlage, bereinigt (leerer networks: {}-Block und network_mode: bridge entfernt – beides unnötig) und kommentiert:
services:
gocook:
container_name: gocook
image: noumlautsallowed/gocook:latest
restart: unless-stopped
ports:
# Host-Port : Container-Port
- "127.0.0.1:50546:8080" # nur lokal, Proxy macht den Rest
deploy:
resources:
limits:
cpus: "2.0"
memory: 2G
environment:
- USER_UID=1000
- USER_GID=1000
noumlautsallowed/gocook:latest: das offizielle Image aus dem Projekt-Repository.127.0.0.1:50546:8080: GoCook lauscht im Container auf Port 8080.- Limits (2 CPU / 2 GB) sind großzügig – statisches HTML rendert auch mit deutlich weniger.
restart: unless-stopped: Startet der Dienst neu, kommt er ohne Datenverlust zurück – es gibt schlicht keine eigenen Daten.
Konfiguration: Bewusst schlank
| Env-Variable | Bedeutung |
|---|---|
USER_UID / USER_GID | Im offiziellen Projekt nicht dokumentiert – ohne Funktion, kann entfernt werden. |
| Weitere Env-Variablen | Keine dokumentierten Einstellungen – das Projekt kommt ohne Konfigurationsdatei aus. |
| Volume | Keines nötig – der Dienst ist zustandslos und hält keine eigenen Daten vor. |
Reverse Proxy & TLS
Die Instanz spricht nur HTTP auf localhost – dahinter gehört ein TLS-Proxy. Anders als bei Tools mit Live-Oberfläche (z. B. Uptime Kuma) braucht GoCook keine WebSockets: Es genügt ein schlichter statischer Proxy:
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name kochen.meine.domain;
access_log off;
error_log /var/log/nginx/kochen.meine.domain.error.log;
# ---------------------------------------------------------------- Zertifikat (ECDSA)
ssl_certificate /etc/ssl/private/kochen.meine.domain_ecc/fullchain.cer;
ssl_certificate_key /etc/ssl/private/kochen.meine.domain_ecc/kochen.meine.domain.key;
# ---------------------------------------------------------------- TLS-Feinschliff
ssl_buffer_size 1400; # passt gut zu 1500-Byte-Ethernet-MTU
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off; # Session-Tickets aus: bessere Forward Secrecy
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off; # TLS 1.3 entscheidet der Client; aktueller Rat
ssl_stapling on;
ssl_stapling_verify on;
ssl_ecdh_curve X25519:P-384:P-256:P-521;
# OPTIMIERUNG 2: Lokalen Resolver (oder Quad9/Cloudflare) eintragen für besseren Datenschutz als Google
resolver 9.9.9.9 1.1.1.1 valid=300s;
resolver_timeout 5s;
client_max_body_size 10M;
location / {
proxy_cache_valid 200 120m;
proxy_set_header Host $http_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;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "same-origin" always;
add_header X-Frame-Options "DENY" always;
add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), microphone=(), payment=()" always;
proxy_pass http://127.0.0.1:50546;
}
}
Upgrade/Connection-Header, langes Read-Timeout und
proxy_buffering off. Der Block oben ist damit bewusst schlanker als bei Monitoring- oder
Chat-Oberflächen.
Erster Start & erste Suche
cd ~/gocook
docker compose up -d
docker compose logs -f gocook
Danach https://kochen.meine.domain öffnen:
- Es gibt keine Einrichtung, kein Login – die Suche ist sofort nutzbar.
- Ein Rezept suchen und öffnen: Die Seite kommt als statisches HTML, Zutaten und Zubereitung sind ohne JavaScript lesbar.
- Erster Aufruf kann kurz dauern – der Dienst hat (Stand heute) keinen Cache und holt die Inhalte live.
- Rechtliches/Impressum-Verlinkung („DMCA“ o. Ä.) greift nicht – es gibt keine eigene Datenhaltung.
Updates & Betrieb
Wartung ist denkbar einfach: Es gibt weder Datenbank noch Konfiguration zu sichern – ein Backup ist schlicht nicht nötig. Updates holst du mit:
docker compose pull
docker compose up -d
:latest pullen) halten es am Laufen. Beobachte die Instanz am besten mit Uptime Kuma.
Häufige Probleme (FAQ)
| Problem | Lösung |
|---|---|
| Keine Suchergebnisse / Rezepte laden nicht | Chefkoch hat Struktur oder API geändert – docker compose pull && docker compose up -d und ggf. Projekt-Repo (Codeberg) auf neue Version prüfen. |
| Erster Aufruf ist langsam | Normal: GoCook hält keinen Cache vor und holt die Inhalte live vom Ziel. |
USER_UID/USER_GID wirken nicht | Erwartetes Verhalten – die Variablen sind im offiziellen Projekt nicht dokumentiert und können entfernt werden. |
| Seite liefert leere/fehlerhafte Antwort | Chefkoch blockiert die Server-IP oder verlangt neue Headers – Logs prüfen (docker compose logs gocook) und Projekt-Repo konsultieren. |
| Will ich Rezepte dauerhaft speichern? | Dann ist GoCook das falsche Werkzeug – ein Rezept-Manager mit eigener Datenbank ist die richtige Wahl. |
| Wird mein Browser bei Chefkoch „gesehen“? | Nein – nur die IP deines Servers tritt bei Chefkoch auf. Deshalb gilt: Instanz privat betreiben und nicht öffentlich bewerben. |
Fazit
GoCook ist kein weiterer Rezept-Manager, sondern ein elegantes Privacy-Frontend: schlank, zustandslos und ohne eigene Datenhaltung. Wer Chefkoch-Rezepte ohne Werbung, Tracker und JavaScript lesen will, bekommt mit einem einzigen Container genau das – vorausgesetzt, man akzeptiert die Abhängigkeit von der Chefkoch-Struktur und betreibt die Instanz privat.