Nach Art des Hauses

Rezeptdatenbank selbst hosten mit Tandoor Recipes

Man nehme: einen Server oder Raspi, Docker und die Open-Source-Software Tandoor Recipes. Etwa 30 Minuten Arbeitszeit – fertig ist eine selbstverwaltete Online-Rezeptdatenbank, die Wochenpläne erzeugt, Einkaufslisten generiert und die Rezepte mit Freunden und Familie teilt.

Von Jan Mahn

Das Familienrezept für den Weihnachtsbraten oder die Zusammensetzung für das ideale Käsefondue werden noch immer von Generation zu Generation auf kariertem Notizpapier weitergegeben und zu später Stunde bei Familienfeiern hastig abgeschrieben – Übertragungsfehler und unleserliche Mengenangaben inklusive? Wenn Sie keine Lust mehr auf diese Zettelwirtschaft haben, brauchen Sie dringend eine digitale Rezeptsammlung. Solche gibt es zuhauf als kommerzielle Apps und Online-Dienste. Doch es geht auch ohne Bindung an einen Anbieter und laufende Kosten für ein Abo.

Mit der Open-Source-Rezeptdatenbank Tandoor Recipes, benannt nach einem indischen Holzkohleofen, betreiben Familien-Admins ihr eigenes Rezeptarchiv ohne Abofalle und Werbung selbst, teilen es mit Freunden und der Familie und haben nebenbei ein schönes Projekt für die kalte Jahreszeit. Auch wenn Sie zu den Millionen Essern gehören, die sich für das neue Jahr vorgenommen haben, mehr auf ausgewogene und gesunde Ernährung zu achten, kann Tandoor helfen: Sind die Rezepte erst digitalisiert, erstellen Sie im Handumdrehen Wochenpläne, exportieren diese in Ihren Terminkalender und generieren bequem Einkaufslisten, hochgerechnet auf die benötigten Portionen. Wer gut plant, greift seltener zur Tiefkühlpizza.

Beim Funktionsumfang hinter den Kulissen haben die Entwickler nicht gekleckert, sondern klotzen richtig: Anmelden kann man sich mit einem systemeigenen Account, der Admin kann aber auch Anmeldungen über eine eigene Nextcloud oder über Social-Media-Accounts (wie Google, Facebook oder GitHub) gestatten. Selbst eine LDAP-Anbindung ist vorgesehen, die Familien-Admins wohl eher selten erwarten dürften. Sie ist eher etwas für Firmen-Admins. Zu allem Überfluss ist die Software sogar mandantenfähig, denn in einer Instanz kann man mehrere separate Bereiche (sogenannte Spaces) einrichten, die sich nicht gegenseitig in die Quere kommen. Mit solchen Funktionen ist das kleine Open-Source-Projekt besser ausgestattet als manche Unternehmenssoftware.

Rezeptverwaltung ohne Papierkram: Neben Zutaten und Arbeitsschritten speichern Sie in Tandoor auch Fotos und Kommentare zum Rezept.

Ausgedacht hat sich die Software der deutsche Entwickler Benedikt Sienz mit dem GitHub-Namen vabene1111, der die meiste Arbeit allein erledigt hat. Im Gespräch mit c’t berichtet Sienz, wie es zum Projekt gekommen ist: Ursprüngliche Idee war eine Ablage für eingescannte Rezepte, die weiteren Funktionen kamen dann dazu. Eine mittlerweile große internationale Community unterstützt mit Anregungen und Verbesserungen – LDAP-Anbindung und Wochenspeisepläne waren beispielsweise Ideen und Beiträge aus der Community.

Das System basiert auf dem populären Python-Framework Django [1], Python-Kenntnisse brauchen Sie zum Betrieb aber nicht. Erfahrene Python- und Django-Entwickler sind laut Entwickler Sienz willkommen, sich am Projekt zu beteiligen und Code beizusteuern (github.com/TandoorRecipes). Wenn Sie keine Motivation haben, die Software selbst zu hosten, können Sie eine fertige Umgebung auch vom Entwickler mieten (tandoor.dev). Zum Ausprobieren gibt es ein kostenloses Modell für maximal zehn Rezepte. Unbegrenzt viele Rezepte dürfen Sie für vier Euro im Monat ablegen, die Rezepte aus der gemieteten Instanz können Sie später auch exportieren und in Ihrer selbstbetriebenen Umgebung importieren.

Für die Zukunft gibt es Pläne: Die Einkaufslistenverwaltung soll weiter aufgebohrt werden; eine eigene Verwaltung von Lagerbeständen und Anbindungen an externe Lagerverwaltungsanwendungen stehen auf der Liste. Außerdem soll man Accounts künftig auch über die Grenzen von Spaces hinaus in einer Instanz nutzen können.

Der Betrieb auf dem eigenen Server ist keine Raketenwissenschaft. Wenn Sie um Container-Technik einen weiten Bogen machen und Software (in diesem Fall neben Tandoor selbst auch noch Nginx, PostgreSQL und Gunicorn) gern per Hand installieren, finden Sie eine Schritt-für-Schritt-Anleitung in der offiziellen Dokumentation (siehe ct.de/yug8).

Container-Schnellstart

Mit Containern kommen Sie in wenigen Minuten zu einer lauffähigen Instanz. Voraussetzung ist ein Linux-Server (mit einer Distribution Ihres Vertrauens) mit installiertem Docker und der Compose-Erweiterung. Eine Einführung in Docker lesen Sie in [2], ein kostenloser und stets aktualisierter c’t-Online-Artikel (siehe ct.de/yug8) beschreibt, wie Sie Docker und Docker-Compose auf verschiedenen Systemen zum Laufen bringen. Wenn Sie docker compose version ohne Fehlermeldung auf der Kommandozeile ausgeführt haben, ist Ihr Server bereit. Der Server selbst muss keine Rennmaschine sein, ein kleiner Mietserver oder ein Raspberry Pi, der nebenbei noch andere Webseiten ausliefert, reichen völlig. Ein handelsübliches Webhosting-Paket dagegen genügt nicht, Sie brauchen einen Server mit Root-Zugriff. Falls Sie ein Synology-NAS und Erfahrung mit der Inbetriebnahme von Containern auf einem solchen haben, finden Sie eine passende Anleitung in der Tandoor-Doku. Auch für das Betriebssystem Unraid [2] finden Sie dort ein Installationsrezept.

Importiert man Rezepte aus dem Internet, sollte man anschließend die Einheiten und Namen der Zutaten vereinheitlichen. Tandoor erleichtert das mit der zentralen Einheiten- und Zutatenverwaltung.

Auf Ihrer Linux-Server-Maschine legen Sie irgendwo einen neuen Ordner an und navigieren hinein:

mkdir tandoor
cd tandoor

Auf Seite 167 sehen Sie eine Docker-Compose-Datei, die ausreicht, um das System in einem internen Netz hochzufahren. Damit veröffentlichen Sie Tandoor auf Port 80 der lokalen Netzwerkschnittstelle – um Tandoor ins Internet zu hängen später mehr. Legen Sie den Inhalt des Listings unter dem Namen docker-compose.yml im Ordner ab. Wenn Sie die Struktur nicht abtippen wollen, finden Sie einen Link zum Original über ct.de/yug8.

Neben der Docker-Compose-Datei muss eine Datei mit dem Namen .env (Schreibweise genau so) liegen. Darin müssen mindestens folgende Variablen mit Werten befüllt sein:

DEBUG=0
SQL_DEBUG=0
ALLOWED_HOSTS=*
SECRET_KEY=
TIMEZONE=Europe/Berlin

DB_ENGINE=django.db.backends.postgresql
POSTGRES_HOST=db_recipes
POSTGRES_PORT=5432
POSTGRES_USER=djangouser
POSTGRES_PASSWORD=verySecret
POSTGRES_DB=djangodb

FRACTION_PREF_DEFAULT=0
COMMENT_PREF_DEFAULT=1
SHOPPING_MIN_AUTOSYNC_INTERVAL=5
GUNICORN_MEDIA=0
REVERSE_PROXY_AUTH=0

Eine Vorlage für diese .env-Datei finden Sie ebenfalls in der offiziellen Dokumentation, schnell erreichbar über ct.de/yug8. Ersetzen sollten Sie unbedingt das Kennwort für die Datenbank (POSTGRES_PASSWORD) durch einen länglichen Zufallsstring. Außerdem müssen Sie einen SECRET_KEY bereitstellen. Einen solchen erzeugen Sie schnell auf einer Linux- oder macOS-Kommandozeile mit:

base64 /dev/urandom | head -c50

Ist die Datei mit dem Namen .env an Ort und Stelle, fahren Sie mit docker compose up die Zusammenstellung hoch. Beim ersten Start sollten Sie die Logs auf der Kommandozeile beobachten und erst wenn die Einrichtung erledigt ist, auf die Seite zugreifen. Zu Beginn legt PostgreSQL eine Datenbank an und Tandoor startet sogenannte Migrationen, die darin Tabellen anlegen. All das kann ein paar Minuten dauern.

Wenn Sie Tandoor Recipes nicht nur im lokalen Netz anbieten, sondern auch im Internet veröffentlichen wollen, brauchen Sie einen HTTP-Proxy, der sich darum kümmert, ein gültiges Zertifikat zu beschaffen und die Seite per TLS auszuliefern. In diesem Fall empfehlen wir gern den Open-Source-Proxy Traefik. Eine fertige Zusammenstellung in einer separaten Docker-Compose-Datei haben wir für Sie vorbereitet – zu finden über ct.de/yug8. An der Docker-Compose-Datei für Tandoor sind ebenfalls ein paar Handgriffe nötig, damit Traefik weiß, welchen Verkehr es an Tandoor leiten muss. Eine passende Datei finden Sie ebenfalls über ct.de/yug8. An dieser Stelle der obligatorische Sicherheitshinweis: Wenn Sie sich entscheiden, eine Anwendung per Portweiterleitung ins Internet zu hängen, sollten Sie sich selbst als Fortgeschrittener oder Profi einstufen und regelmäßig Updates einspielen. Sonst können Angreifer leicht in Ihren Server eindringen und sich so im Heimnetz breit machen. Wenn Sie unsicher sind, veröffentlichen Sie Tandoor am besten nur intern und verschaffen sich für die Rezeptplanung von unterwegs über ein VPN Zugriff auf Ihr Heimnetz.

Ersteinrichtung

Wenn Sie Tandoor lokal gestartet haben und im Browser die IP-Adresse Ihres lokalen Servers öffnen (zum Beispiel http://192.168.1.123/), begrüßt Sie ein Einrichtungsdialog. Beim ersten Besuch wünscht sich Tandoor von Ihnen einen Benutzernamen und ein Kennwort, dann landen Sie direkt in der noch leeren Rezeptverwaltung. Um ohne viel Aufwand ein erstes Rezept zu sehen, klicken Sie oben rechts auf das Plus, dann auf „Rezept importieren“. Die Importer sind eine Stärke der Software: Importieren können Sie unter anderem aus Exportdateien der meisten gängigen Rezeptsammlungen und Apps, was einen Umzug erleichtert.

Sie können sich aber auch leicht an großen Online-Rezeptdatenbanken bedienen. Öffnen Sie dazu ein Rezept auf einer Seite wie chefkoch.de, kochbar.de oder lecker.de und kopieren die URL in das vorgesehene Feld in Tandoor. Mit einem Klick auf die Lupe werden die Inhalte geladen und nach einer kurzen Überprüfung importieren Sie das Rezept mit dem Button am Seiten-Ende in Ihre lokale Sammlung. Dass das so reibungslos gelingt, liegt daran, dass Tandoor nicht die ganze HTML-Seite zerlegen und mühsam Werbung von Rezept trennen muss. Weil die großen Kochbuchseiten gerne bei Google direkt mit Rezept in der Vorschau gelistet werden wollen, stellen sie ihre Rezepte im Format JSON-LD im Quelltext bereit. Diese Daten sind maschinenlesbar (ähnlich wie RSS-Feeds für Nachrichten) und daher fix importiert, inklusive richtig erfasster Zutatenlisten. Selbst Bilder werden automatisch heruntergeladen und bei Ihnen auf dem Server abgelegt. Urheberrechtlich ist all das natürlich nur dann vertretbar, wenn Sie die Rezepte ausschließlich in Familie und Freundeskreis zugänglich machen.

Mehr Planung: Aus Rezepten und Freitexteintragungen bauen Sie in Tandoor einen Speiseplan. Den kann man auch als ICS-Datei für Kalenderprogramme exportieren.

Eigene Rezepte legen Sie über das Plus oben rechts und die Schaltfläche „Erstellen“ an. Der Dialog ist recht intuitiv – Rezepte können Sie in Schritte aufteilen und Zutaten mit Mengen zuweisen. Wenn Ihnen die im Aufklappmenü vorgeschlagenen Einheiten nicht reichen, können Sie durch Tippen im Textfeld neue hinzufügen, die dann in der Datenbank landen. Halten Sie die Liste am besten kurz: Wenn Sie bei Mengenangaben von Anfang an mit anständigen Volumen- und Gewichtsangaben aus dem SI-Einheitensystem wie Liter und Kilogramm (und Teile davon) arbeiten, haben Sie später mehr Freude, wenn Sie Tandoor Mengen für mehrere Portionen und Einkaufslisten berechnen lassen. Fantasiemaße wie „Becher Sahne“ haben in einer gut geführten Datenbank nichts verloren.

Die Textfelder für den Fließtext des Rezepts sind für Normalanwender und Nerds gleichermaßen praktisch: Wer auf die typischen Buttons steht, die man auch aus Office-Anwendungen kennt, legt Überschriften, Tabellen, Bilder und Hervorhebungen darüber an. Wer lieber Text in einer Auszeichnungssprache eintippt, kann das mit Markdown tun. Tandoor nutzt einen Python-Markdown-Parser, um daraus schön formatierte Rezepte zu zaubern.

All Ihre Rezepte finden Sie über den Menüpunkt „Kochbuch“. Etwas verwirrend ist die Benennung einer weiteren Funktion: Unter dem Menüpunkt „Bücher“ können Sie Rezeptsammlungen wie „Gesunde Küche“ anlegen und darin Rezepte einfügen. Alle weitere Funktionen erkunden Sie am besten bei einem Rundgang durch alle Menüpunkte. Hinter dem Taschen-Symbol oben rechts verbirgt sich eine Verwaltung für zahlreiche Objekte, die Sie an anderen Stellen im System brauchen. Es lohnt sich ungemein, wie bei den Einheiten auch bei den Zutaten immer mal wieder aufzuräumen und unterschiedliche Schreibweisen über dieses Menü anzugleichen. Dafür finden Sie an jeder Zutat rechts drei Punkte, darunter ein Menü und dort den Punkt „Zusammenführen“. Aus den Varianten „Mehl“, „Weizenmehl“ und „Weizen-Mehl“ machen Sie so schnell einheitlich „Weizenmehl“.

Daran merkt man, dass bei der Entwicklung keine Laien am Werk waren und das Datenbankdesign durchdacht ist: Tandoor speichert Zutaten nicht direkt am Rezept, sondern separat in einer eigenen Datenbanktabelle und verknüpft die Einträge nur. Wenn Sie die Schreibweise dort ändern, gilt das für alle Rezepte. Nachdem Sie Rezepte, Supermärkte (auch die kann man hiermit pflegen), Stichworte und Zutaten im System haben, können Sie Einkaufslisten auf Basis der Rezepte generieren und als Text exportieren (etwa in Ihre Notiz-App). Spätestens dann macht sich die Pflege einheitlicher Zutatenbezeichnungen und Mengenangaben bezahlt. Damit die Familie weiß, worauf sie sich in der nächsten Zeit einstellen kann, können Sie über den Punkt im oberen Menü Essenspläne einrichten. Das geht sogar halbautomatisch, die Funktion ist aber noch etwas fummelig. Fertige Speisepläne können Sie sogar als ICS-Datei exportieren und so in den Familienkalender einspeisen.

Einige nützliche Funktionen von Tandoor sind gut versteckt: So gibt es im Koffer-Menü zum Beispiel eine Funktion zur Massenbearbeitung. Darüber heften Sie automatisch Stichworte (die helfen später beim Filtern) an Rezepte. Wenn Sie alle Rezepte, in denen das Wort „Pfanne“ vorkommt mit dem Tag „gebraten“ versehen wollen, gelingt das dort.

Admin-Freuden

Weil viele Köche den Brei bekanntlich verderben, gibt es in Tandoor nicht nur eine Benutzerverwaltung, sondern auch Berechtigungsstufen – nicht jeder soll schreibend auf Ihre Rezepte und Ihren Wochenplan zugreifen können. Die Verwaltung finden Sie im Menü hinter Ihrem Namen oben rechts und dort im Punkt „Space Einstellungen“. Das Anlegen von Benutzern ist sehr Admin-freundlich gelöst. Statt alle Benutzer mit Namen und Kennwort selbst anzulegen, erzeugen Sie Einladungslinks und lassen diese den Nutzern zukommen – die müssen ihren Namen und ihr Kennwort dann selbst eintippen. Jeder bekommt einen eigenen Link; die Berechtigungsstufe legen Sie in den Einstellungen fest. Die Rolle „guest“ darf nur Rezepte lesen (nicht den Speiseplan), „user“ dürfen eigene Rezepte, Wochenpläne und weitere Objekte wie Zutaten bearbeiten. Die Rolle „admins“ darf alles, also auch Benutzer bearbeiten, einladen und entfernen. Dieses grobe Berechtigungskonzept könnte durchaus noch ausgebaut werden. Als Externer ohne Account sehen Sie nichts – mit einer sehr nützlichen Ausnahme: Nutzer können in einem Rezept in der Übersicht (Button mit drei Punkten) das Menü öffnen, dort „Teilen“wählen und den erzeugten Link an Externe verschicken. Mit dem Link können diese das Rezept ganz ohne Account und Login lesen. Voraussetzung ist natürlich, dass Sie sich dafür entschieden haben, Tandoor ins Internet zu hängen.

In der offiziellen Dokumentation (docs.tandoor.dev) finden Sie weitere optionale Konfigurationsschritte. Wenn Sie Freunden Zugriff per Google- oder GitHub-Account geben möchten, müssen Sie das Kapitel „Authentication“ studieren. Tandoor nutzt im Hintergrund die Django-Bibliothek Allauth, die Dutzende externe Anmeldeserver unterstützt. Die letzte Hausaufgabe für den Admin: Damit Tandoor stets aktuell ist, sollten Sie regelmäßig nach neuen Versionen suchen und diese installieren. Das funktioniert in einer Docker-Umgebung recht einfach mit einem Container-Updater wie Watchtower oder Ouroboros (zu finden über ct.de/yug8). Alternativ reicht aber auch ein Cron-Job, der regelmäßig folgende zwei Befehle im Verzeichnis mit der Docker-Compose-Datei ausführt:

docker compose pull
docker compose up -d

Spaß für die ganze Familie

Eine selbstgehostete Tandoor-Rezeptsammlung ist ein schönes Projekt, von dem die ganze Familie profitieren kann. Auch wenn das Open-Source-Projekt an einigen Ecken noch nicht fertig ist, machen Einrichtung und Rezeptsammelei Spaß. Besonders der Import von großen Online-Rezeptseiten überzeugt. So hat man die Lieblingsrezepte schnell in einer übersichtlichen und werbefreien eigenen Sammlung. Allemal besser als eine Rezeptkollektion, die aus Browser-Lesezeichen zu chefkoch.de & Co. besteht. (jam@ct.de)

Tandoor Recipes: ct.de/yug8