// Tutorial · Self-Hosting · Privatsphäre

GoCook selbst hosten: Chefkoch ohne Tracking & JavaScript

📅 04.09.2026 ⏱ 6 Min. Lesezeit ✍️ Redaktion

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.

Wie es funktioniert: Der GoCook-Container übernimmt serverseitig den Zugriff auf die Chefkoch-API und die Bild-/CDN-URLs und rendert daraus eine schlanke, statische Seite. Auf dem Client läuft kein JavaScript – nur HTML und CSS.

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 down ist alles weg – genau das ist gewollt.
Fair Use & Privatsphäre: Die Rezepte kommen weiterhin live von Chefkoch – dabei tritt die IP-Adresse deines Servers auf. Betreibe die Instanz privat (nur für dich/Familie) und stelle sie nicht öffentlich zur Schau: Frontends wie dieses brechen, sobald der Anbieter seine Struktur ändert.

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-VariableBedeutung
USER_UID / USER_GIDIm offiziellen Projekt nicht dokumentiert – ohne Funktion, kann entfernt werden.
Weitere Env-VariablenKeine dokumentierten Einstellungen – das Projekt kommt ohne Konfigurationsdatei aus.
VolumeKeines nötig – der Dienst ist zustandslos und hält keine eigenen Daten vor.
So bleibt es schlank: Wenn du langfristig ein eigenes Rezept-Archiv oder Offline-Zugriff willst, bist du bei GoCook falsch – dafür gibt es Rezept-Verwaltungen mit Datenbank. GoCook ist bewusst nur das schnelle, private Frontend zum Nachschlagen.

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;
  }
}
Kein WebSocket-Tunnel nötig: Da GoCook statisches HTML ausliefert, entfallen 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
Frontends sind empfindlich: GoCook hängt an der Struktur der Chefkoch-Seite. Ändert Chefkoch API oder Layout, kann das Frontend kurzfristig brechen – regelmäßige Updates (:latest pullen) halten es am Laufen. Beobachte die Instanz am besten mit Uptime Kuma.

Häufige Probleme (FAQ)

ProblemLösung
Keine Suchergebnisse / Rezepte laden nichtChefkoch 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 langsamNormal: GoCook hält keinen Cache vor und holt die Inhalte live vom Ziel.
USER_UID/USER_GID wirken nichtErwartetes Verhalten – die Variablen sind im offiziellen Projekt nicht dokumentiert und können entfernt werden.
Seite liefert leere/fehlerhafte AntwortChefkoch 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.

Die vier Merksätze: ① GoCook ist ein Frontend, kein Rezept-Archiv – keine Datenbank, kein Volume. ② Kein Client-JavaScript, kein Tracking: Dein Browser spricht nur mit deiner Instanz. ③ Fair Use: privat nutzen, nicht öffentlich bewerben – die Server-IP tritt bei Chefkoch auf. ④ Updates sind Pflege: Frontends brechen, wenn Chefkoch sich ändert – regelmäßig pullen.
📝
....

Wir betreiben unsere komplette Infrastruktur selbst auf Open-Source-Software und schreiben nur über Tools, die wir im Alltag wirklich einsetzen. Fragen zum Artikel? Schreib uns.