31 KiB
Kapitel 20 – Tandoor (Rezeptdatenbank)
Einleitung
Rezepte sind im digitalen Alltag oft über viele Orte verteilt – Screenshots aus Chats, alte PDFs, Webseiten-Bookmarks oder Notizen in der Cloud.
Gerade in einer kreativen Umgebung wie dem UCC ist eine zentrale, strukturierte Verwaltung von Rezepten, Zutaten und Menüs nicht nur komfortabel,
sondern auch die Grundlage für Automatisierung, Wochenplanung und gemeinsame Nutzung in Teams oder Familien.
Tandoor Recipes ist eine selbstgehostete Rezeptdatenbank, die genau das bietet:
Ein elegantes Web-Interface, übersichtliche Kategorisierung, automatischen Nährwertabgleich, Einkaufsliste und Planungsfunktionen.
Die Daten bleiben vollständig auf deinem Server – ohne Drittanbieter, ohne Tracking, mit vollständiger Kontrolle über Zugriffe und Berechtigungen.
In diesem Kapitel richtest du Tandoor als eigenen LXC-Container in deinem UCC ein,
konfigurierst Benutzer, Import- und Exportfunktionen und bindest das System sicher über den Nginx Proxy Manager ein.
Optional lernst du im Premium-Teil, wie du Rollenverwaltung, Wochenpläne und Nährwertberechnung aktivierst und automatisierst.
👉 Screenshot geeignet: UCC-Dashboard mit markiertem Tandoor-Container zwischen Nextcloud und Vaultwarden
Note
Tandoor ist ideal für den privaten oder gemeinschaftlichen Einsatz – z. B. in Stream-Küchen, Vereinen oder Familien.
Es ersetzt keine professionelle Warenwirtschaft, bietet aber alles, was für die Verwaltung und Planung eigener Rezepte benötigt wird.
Tandoor unterstützt neben klassischen Rezeptansichten auch Uploads von Bildern, Schritt-für-Schritt-Anleitungen, Zutatenverknüpfungen und Tags.
Über Schnittstellen lässt sich das System später mit Tools wie n8n, Nextcloud oder Vaultwarden kombinieren,
um z. B. Einkaufslisten automatisch zu synchronisieren oder Rezepte sicher zu teilen.
👉 Screenshot geeignet: Browseransicht der Tandoor-Startseite mit Beispielrezepten und Navigationsleiste „Rezepte | Zutaten | Planung“
Voraussetzungen & Ressourcen
Tandoor ist ein modernes Django-basiertes Websystem mit Datenbank-Backend und Python-Umgebung.
Um die Anwendung zuverlässig und performant zu betreiben, wird eine saubere Containerstruktur mit klar definierten Ressourcen benötigt.
Alle Dienste laufen vollständig innerhalb des Containers – inklusive Webserver, Datenbank und statischer Dateiverwaltung.
Container-Ressourcen
-
CPU: 2 vCPU
Erforderlich für parallele Prozesse bei der Datenbankabfrage, der Bildverarbeitung und der Weboberfläche. -
RAM: 3 GB
Nötig für Python-Django-Anwendungen und PostgreSQL-Caching.
So bleibt die Oberfläche auch bei mehreren gleichzeitigen Zugriffen flüssig. -
Speicherplatz: 15 GB
Deckt System, Datenbank, Rezeptbilder und Backups ab.
Erweiterungen wie Wochenplan oder Nährwertdatenbank können später zusätzlichen Platz beanspruchen. -
Netzwerk: Statische IP oder DHCP-Reservierung
Für Proxy-Integration und SSL-Zertifikate ist eine feste Zuordnung erforderlich. -
Betriebssystem: Ubuntu 24.04 LTS
Optimale Kompatibilität mit Python-Paketen, PostgreSQL 15 und Docker-Compose.
LTS-Version mit Sicherheits- und Performance-Updates bis 2029.
👉 Screenshot geeignet: Ressourcenübersicht beim Erstellen des Tandoor-LXC (2 vCPU | 3 GB RAM | 15 GB Storage | Ubuntu 24.04)
Technische Voraussetzungen
Vor der Einrichtung sollte dein UCC folgende Punkte erfüllen:
-
Proxmox VE ist aktiv und bereit zur Containererstellung.
Der Tandoor-Container wird direkt über die Proxmox-Oberfläche angelegt. -
Nginx Proxy Manager (NPM) ist installiert und erreichbar.
Darüber erfolgt die HTTPS-Bereitstellung der Weboberfläche. -
DNS- oder DynDNS-Eintrag für
tandoor.deinedomain.tldist vorhanden.
Wird für Zertifikatserstellung und HTTPS-Zugriff benötigt. -
Internetverbindung im Container ist stabil.
Tandoor lädt Abhängigkeiten aus offiziellen Python- und Node-Repositories. -
SSH-Zugriff ist möglich, z. B. per:
ssh root@<IP-des-Containers>Ersetze
<IP-des-Containers>durch die tatsächliche Adresse deines Tandoor-LXC.
Important
Für reibungslose Performance sollte der Container auf einem Host mit SSD-Speicher laufen.
Tandoor speichert Rezeptbilder und Vorschaudaten lokal – langsame I/O-Systeme führen zu verzögerter Ladezeit.
👉 Screenshot geeignet: Proxmox-Interface mit markiertem Tandoor-LXC in der Containerliste
Schritt-für-Schritt-Anleitung
Schritt 1 – Container vorbereiten und System aktualisieren
Starte den frisch erstellten Tandoor-Container in Proxmox und öffne die Konsole – entweder direkt über das Webinterface oder per SSH.
Zuerst werden alle Systempakete aktualisiert, um sicherzustellen, dass Ubuntu über aktuelle Sicherheits- und Python-Pakete verfügt:
apt update && apt upgrade -y
Nach Abschluss den Container neu starten:
reboot
Danach erneut einloggen:
ssh root@<IP-des-Containers>
Note
Ein aktuelles Basissystem ist zwingend erforderlich, da Tandoor auf moderne Python-Versionen und aktuelle PostgreSQL-Bibliotheken angewiesen ist.
Alte Paketstände führen häufig zu Problemen bei der Paketinstallation oder beim Start des Django-Servers.
👉 Screenshot geeignet: Proxmox-Konsole mit erfolgreichem Abschluss von apt upgrade (alle Pakete aktuell)
Nach dem Reboot legst du die grundlegende Verzeichnisstruktur an, um Konfiguration, Datenbank- und Mediendaten sauber zu trennen:
mkdir -p /opt/tandoor/{config,data,media,logs}
Tip
Diese Struktur sorgt für klare Trennung zwischen System, Anwendungsdaten und Backups.
Sie ist identisch mit der Empfehlung aus der offiziellen Tandoor-Dokumentation.
👉 Screenshot geeignet: Terminalansicht mit ausgeführtem ls -l /opt/tandoor (alle vier Unterordner sichtbar)
Schritt 2 – Docker installieren und vorbereiten
Tandoor wird offiziell als Docker-Anwendung betrieben.
Damit der Container stabil und unabhängig läuft, installierst du zunächst Docker Engine und Docker Compose direkt im Tandoor-LXC.
Führe nacheinander folgende Befehle aus:
apt install -y ca-certificates curl gnupg lsb-release
Dann das offizielle Docker-Repository hinzufügen und die Engine installieren:
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Prüfe anschließend die Installation:
docker --version
docker compose version
Die Ausgabe sollte in etwa so aussehen:
Docker version 26.1.x
Docker Compose version v2.29.x
Note
Tandoor nutzt Docker Compose für den kompletten Stack – Web-App, Datenbank und statische Dateien.
Diese Installationsmethode ist offiziell empfohlen und vereinfacht spätere Updates sowie Backups erheblich.
👉 Screenshot geeignet: Terminalausgabe mit sichtbarer Docker- und Compose-Version nach erfolgreicher Installation
Damit ist die Grundlage für die Tandoor-Umgebung gelegt.
Im nächsten Schritt erstellst du die lokale Verzeichnisstruktur und Konfigurationsdateien für die Anwendung.
Schritt 3 – Verzeichnisstruktur und Konfiguration anlegen
Tandoor benötigt für den Betrieb mehrere persistent gespeicherte Bereiche – für Konfiguration, Datenbank, Medien und Logdateien.
Damit alles sauber getrennt und sicher bleibt, legst du zunächst die komplette Ordnerstruktur im Container an.
mkdir -p /opt/tandoor/{config,data,media,logs}
cd /opt/tandoor
👉 Screenshot geeignet: Terminalansicht mit ausgeführtem ls -l /opt/tandoor (alle vier Unterordner sichtbar)
.env-Datei erstellen
Alle wichtigen Einstellungen für den Tandoor-Betrieb werden in einer zentralen .env-Datei definiert.
Hier legst du Datenbankverbindung, Pfade, Sicherheitsparameter, Log-Level und Mailserver-Zugang fest.
Öffne die Datei:
nano /opt/tandoor/.env
Füge folgenden Inhalt ein:
TZ=Europe/Berlin
SECRET_KEY=$(openssl rand -hex 32)
DEBUG=0
ALLOWED_HOSTS=tandoor.deinedomain.tld,localhost,127.0.0.1
DB_ENGINE=django.db.backends.postgresql
DB_HOST=db
DB_PORT=5432
DB_NAME=tandoor
DB_USER=tandoor
DB_PASSWORD=$(openssl rand -hex 16)
MEDIA_ROOT=/opt/tandoor/media
STATIC_ROOT=/opt/tandoor/static
EMAIL_USE_TLS=True
EMAIL_PORT=<VAULTWARDEN:SMTP_PORT>
EMAIL_HOST=<VAULTWARDEN:SMTP_HOST>
EMAIL_HOST_USER=<VAULTWARDEN:SMTP_USER>
EMAIL_HOST_PASSWORD=<VAULTWARDEN:SMTP_PASSWORD>
LOG_LEVEL=INFO
Note
Die Datei
.enventhält alle wichtigen Umgebungsvariablen für Tandoor.
Die SMTP-Werte werden aus Vaultwarden → Eintrag „UCC-Mailserver (SMTP)” übernommen.
Ersetze die Platzhalter<VAULTWARDEN:...>durch die entsprechenden Werte aus deinem Passwortmanager.
Important
Die
.env-Datei enthält sensible Daten. Setze nach dem Speichern die Zugriffsrechte so, dass nur root Zugriff hat:chmod 600 /opt/tandoor/.env
👉 Screenshot geeignet: geöffnete .env-Datei mit markierten Variablen (DB_HOST, SECRET_KEY, EMAIL_HOST)
docker-compose.yml-Datei anlegen
Nun definierst du den eigentlichen Docker-Stack. Er besteht aus zwei Diensten: einer PostgreSQL-Datenbank und der Tandoor-Webanwendung.
nano /opt/tandoor/docker-compose.yml
Füge folgenden Inhalt ein:
version: "3.9"
services:
db:
image: postgres:15
container_name: tandoor-db
restart: unless-stopped
environment:
POSTGRES_DB: tandoor
POSTGRES_USER: tandoor
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- ./data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U tandoor"]
interval: 30s
timeout: 10s
retries: 5
web:
image: vabene1111/recipes:latest
container_name: tandoor
restart: unless-stopped
env_file:
- .env
depends_on:
db:
condition: service_healthy
ports:
- "8080:8080"
volumes:
- ./media:/opt/tandoor/media
- ./logs:/opt/tandoor/logs
Tip
Die Docker-Compose-Datei definiert den gesamten Stack klar getrennt in zwei Containern.
Die Anwendung startet erst, wenn die Datenbank bereit ist.
Alle Daten bleiben in den Volumes/opt/tandoor/dataund/opt/tandoor/mediapersistent gespeichert.
👉 Screenshot geeignet: Terminal mit geöffneter docker-compose.yml und markiertem Dienst tandoor sowie tandoor-db
Damit ist der Stack vollständig vorbereitet.
Im nächsten Schritt startest du die Container und überprüfst, ob Tandoor korrekt läuft.
Schritt 4 – Container starten und erste Verbindung prüfen
Mit der vorbereiteten .env- und docker-compose.yml-Datei kannst du jetzt den kompletten Tandoor-Stack starten.
Docker lädt dabei automatisch alle benötigten Images und richtet Datenbank sowie Anwendung ein.
Starte die Container:
docker compose up -d
Die Images werden beim ersten Start heruntergeladen.
Dieser Vorgang kann – je nach Internetgeschwindigkeit – einige Minuten dauern.
Überprüfe anschließend den Status:
docker compose ps
Die Ausgabe sollte in etwa so aussehen:
NAME IMAGE STATUS PORTS
tandoor-db postgres:15 Up 1 minute 5432/tcp
tandoor vabene1111/recipes:latest Up 1 minute 0.0.0.0:8080->8080/tcp
Note
Sobald beide Container den Status Up anzeigen, ist das Grundsystem aktiv.
Die Weboberfläche wird über Port 8080 des Containers bereitgestellt.
👉 Screenshot geeignet: Terminalausgabe von docker compose ps mit aktiven Diensten tandoor und tandoor-db
Öffne nun im Browser:
http://<IP-des-Containers>:8080
Wenn alles korrekt funktioniert, erscheint die Tandoor-Startseite mit dem Hinweis, einen Administrator-Account anzulegen.
Trage hier Benutzername, E-Mail und Passwort ein, um das erste Konto zu erstellen.
Important
Verwende hier eine E-Mail-Adresse, die im Mailserver des UCC existiert (z. B.
tandoor@deinedomain.tld).
Nur so kann der spätere Passwort-Reset oder die Benutzer-Einladung über den konfigurierten SMTP-Server funktionieren.
👉 Screenshot geeignet: Browseransicht der Tandoor-Registrierungsseite mit Eingabefeldern für Benutzername, E-Mail und Passwort
Nach der Registrierung wirst du direkt ins Dashboard weitergeleitet.
Dort siehst du das Hauptmenü mit den Bereichen Rezepte, Zutaten, Planung und Einstellungen.
Tip
Wenn die Seite nicht erreichbar ist, prüfe, ob Port 8080 eventuell von einer Firewall blockiert wird oder bereits belegt ist.
Du kannst den Port in derdocker-compose.ymljederzeit anpassen (z. B. auf8081:8080), danach Container neu starten:docker compose down docker compose up -d
👉 Screenshot geeignet: Browserfenster mit geöffneter Tandoor-Startseite (Dashboard-Ansicht nach Anmeldung)
Damit ist Tandoor erfolgreich gestartet und über das lokale Netzwerk erreichbar.
Im nächsten Schritt folgt die Integration in den Nginx Proxy Manager, um den Dienst sicher per HTTPS bereitzustellen.
Schritt 5 – Integration in Nginx Proxy Manager (NPM)
Damit Tandoor sicher über HTTPS erreichbar ist, wird der interne Port 8080 nun über den Nginx Proxy Manager veröffentlicht.
Dadurch erhältst du eine verschlüsselte Verbindung und kannst den Dienst komfortabel über eine eigene Subdomain ansprechen.
Proxy-Host anlegen
- Öffne das Dashboard des Nginx Proxy Manager.
- Klicke auf Add Proxy Host.
- Trage folgende Werte ein:
| Feld | Wert |
|---|---|
| Domain Names | tandoor.deinedomain.tld |
| Scheme | http |
| Forward Hostname / IP | <IP-des-Tandoor-Containers> |
| Forward Port | 8080 |
| Block Common Exploits | aktivieren |
| Websockets Support | aktivieren |
Wechsle in den Reiter SSL und aktiviere folgende Optionen:
- Request a new SSL Certificate
- Force SSL
- HTTP/2 Support
- HSTS Enabled
Klicke danach auf Save.
Note
Der Proxy Manager beantragt automatisch ein gültiges Let’s-Encrypt-Zertifikat.
Voraussetzung ist, dass die Domaintandoor.deinedomain.tldbereits korrekt auf deinen Server zeigt.
Bei lokalen Tests kann stattdessen ein selbstsigniertes Zertifikat verwendet werden.
👉 Screenshot geeignet: NPM-Dashboard mit geöffnetem Proxy-Host tandoor.deinedomain.tld
Verbindung prüfen
Öffne im Browser:
https://tandoor.deinedomain.tld
Wenn alles korrekt eingerichtet ist, erscheint die Tandoor-Startseite nun über eine sichere HTTPS-Verbindung.
Das Schloss-Symbol im Browser zeigt ein aktives SSL-Zertifikat an.
Tip
Sollte die Seite nicht laden, prüfe im NPM-Dashboard, ob IP-Adresse und Port stimmen.
Starte den Container gegebenenfalls neu:docker compose restart
👉 Screenshot geeignet: Browserfenster mit Tandoor-Interface unter https://tandoor.deinedomain.tld (Schloss-Symbol sichtbar)
Important
Die HTTPS-Einbindung ist Voraussetzung, damit Funktionen wie E-Mail-Verifikation, OAuth-Anmeldung oder API-Zugriffe später problemlos funktionieren.
Ohne gültiges Zertifikat lehnen viele Browser die Verbindung oder Formulareingaben ab.
Damit ist Tandoor nun sicher über HTTPS erreichbar.
Im nächsten Schritt kannst du Benutzer anlegen, Rezepte importieren und erste Strukturen aufbauen.
Schritt 6 – Erste Benutzer und Grundeinstellungen
Nach der erfolgreichen Installation und HTTPS-Einbindung kannst du Tandoor nun für die tägliche Nutzung einrichten.
Dazu gehören das Anlegen erster Benutzer, das Festlegen von Berechtigungen und grundlegende Systemeinstellungen wie Zeitzone, Sprache und E-Mail-Absenderadresse.
Administrator-Benutzer bestätigen
Beim ersten Start hast du einen Administrations-Account erstellt.
Dieser besitzt vollständige Rechte und verwaltet Benutzer, Rezepte und Systemoptionen.
Melde dich an unter:
https://tandoor.deinedomain.tld
Benutzername und Passwort stammen aus dem Setup-Dialog des ersten Starts.
👉 Screenshot geeignet: Tandoor-Loginmaske mit eingegebenem Administrator-Benutzernamen
Nach der Anmeldung öffnet sich das Dashboard mit den Menüpunkten Rezepte, Zutaten, Planung, Einkaufsliste und Einstellungen.
Wechsle in den Bereich Einstellungen → Benutzerverwaltung.
Note
Nur der erste angelegte Benutzer hat standardmäßig Administratorrechte.
Weitere Benutzer müssen manuell eingeladen und den Rollen User oder Admin zugewiesen werden.
👉 Screenshot geeignet: Dashboard mit geöffnetem Menüpunkt Benutzerverwaltung
Neue Benutzer einladen
Klicke auf Benutzer hinzufügen und trage folgende Felder aus:
| Feld | Beschreibung |
|---|---|
| Benutzername | frei wählbar, z. B. „kochteam“ |
| Adresse, über die Tandoor Einladungen verschickt | |
| Rolle | User oder Admin |
| Aktiv | aktivieren |
Speichere anschließend.
Wenn dein SMTP-Server korrekt konfiguriert ist, erhält der neue Benutzer automatisch eine Einladungs-Mail mit Link zur Passwortvergabe.
Important
Für den Versand dieser E-Mail müssen die SMTP-Werte in der
.env-Datei korrekt gesetzt sein.
Teste den Versand unter Einstellungen → Test-E-Mail senden, bevor du Benutzer einlädst.
👉 Screenshot geeignet: Benutzerformular mit ausgefüllter E-Mail und aktivierter Rolle User
Grundeinstellungen anpassen
Unter Einstellungen → Allgemein kannst du Sprache, Zeitzone, Maßeinheiten und Standard-Darstellung anpassen.
Setze folgende empfohlene Werte:
| Einstellung | Wert |
|---|---|
| Sprache | Deutsch |
| Zeitzone | Europe/Berlin |
| Maßeinheiten | metrisch (g, ml, °C) |
| Standard-Startseite | Rezepte |
Speichere die Änderungen mit Speichern unten auf der Seite.
Tip
Diese Optionen gelten global für alle Benutzer.
Individuelle Spracheinstellungen können später pro Benutzer angepasst werden.
👉 Screenshot geeignet: Einstellungsseite mit markierten Feldern Sprache = Deutsch und Zeitzone = Europe/Berlin
E-Mail-Absender konfigurieren
Damit ausgehende Systemmails korrekt gekennzeichnet sind, trägst du unter Einstellungen → E-Mail den Absendernamen und die Adresse ein.
Empfohlene Werte:
| Feld | Beispiel |
|---|---|
| Absendername | Tandoor UCC |
| Absenderadresse | tandoor@deinedomain.tld |
Note
Diese Felder steuern nur die sichtbare Absenderkennung.
Der Versand erfolgt weiterhin über den in der.env-Datei eingetragenen SMTP-Server.
👉 Screenshot geeignet: Einstellungsseite „E-Mail“ mit ausgefüllten Feldern Absendername und Absenderadresse
Schritt 7 – Rezepte importieren und Medien verwalten
Nachdem Benutzer und Grundeinstellungen gesetzt sind, kannst du beginnen, Inhalte in Tandoor zu importieren und deine eigene Rezeptbibliothek aufzubauen.
Tandoor bietet dafür mehrere komfortable Wege – vom manuellen Eintrag über URL-Import bis zum Upload kompletter Sammlungen.
Einzelne Rezepte anlegen
Wähle im Hauptmenü Rezepte → Neues Rezept.
Fülle die wichtigsten Felder aus:
| Feld | Beschreibung |
|---|---|
| Titel | Name des Rezepts |
| Beschreibung | Kurztext oder Hintergrundinformation |
| Zubereitungszeit / Gesamtzeit | Minutenangaben |
| Portionen | Anzahl der Portionen |
| Zutatenliste | Zeilenweise Eingabe von Menge und Zutat |
| Anleitung | Schritt-für-Schritt Beschreibung |
Tip
Tandoor speichert alle Eingaben sofort in der Datenbank.
Du kannst Rezepte später jederzeit bearbeiten, ohne sie neu anzulegen.
👉 Screenshot geeignet: Formular „Neues Rezept“ mit ausgefüllten Basisfeldern Titel, Portionen, Zutatenliste
Rezepte aus URLs importieren
Tandoor kann viele Webseiten direkt analysieren und Rezepte automatisch übernehmen.
Klicke im Menü Rezepte → Importieren → Von URL und füge die Adresse einer unterstützten Rezeptseite ein, z. B.:
https://www.chefkoch.de/rezepte/12345
Klicke auf Importieren.
Nach wenigen Sekunden wird das Rezept mit Titel, Zutaten, Zubereitungsschritten und Bild übernommen.
Note
Der URL-Import nutzt standardisierte Schema.org-Metadaten, die von vielen Kochseiten bereitgestellt werden.
Nicht alle Webseiten sind kompatibel. Wenn der Import fehlschlägt, nutze den manuellen Weg oder den JSON-Import.
👉 Screenshot geeignet: Importmaske mit eingefügter URL und sichtbarem Fortschrittsbalken „Import erfolgreich“
JSON- oder ZIP-Import
Wenn du bereits Rezepte aus einer anderen Instanz oder Sicherung besitzt, kannst du sie gesammelt importieren.
Gehe zu Einstellungen → Datenverwaltung → Import/Export und wähle Datei hochladen.
Unterstützte Formate:
.json(Tandoor-Export).zip(gesamte Sammlung mit Bildern)
Wähle die Datei auf deinem Rechner aus und starte den Import.
Important
Beim Import werden gleichnamige Rezepte nicht automatisch überschrieben.
Prüfe nach dem Vorgang doppelte Einträge manuell in der Rezeptliste.
👉 Screenshot geeignet: Einstellungsseite „Import/Export“ mit hochgeladener JSON-Datei und Fortschrittsanzeige
Bilder und Medien hinzufügen
Jedes Rezept kann eigene Fotos, PDFs oder Zusatzdokumente enthalten.
Öffne das gewünschte Rezept und klicke auf Medien → Datei hochladen.
Unterstützte Formate:
- Bilder: JPG, PNG, WEBP
- Dokumente: PDF
- Vorschaubilder: automatisch generiert
Die Dateien werden in /opt/tandoor/media gespeichert und über den Webserver ausgeliefert.
Tip
Halte die Bildgrößen moderat (unter 2 MB pro Bild).
Große Dateien verlangsamen die Anzeige und belasten Backups.
Du kannst Bilder außerhalb von Tandoor mit Tools wie ImageMagick oder TinyPNG verkleinern.
👉 Screenshot geeignet: geöffneter Rezeptsatz mit hinzugefügtem Foto im Bereich „Medien“
Kategorien und Tags
Zur besseren Übersicht lassen sich Rezepte kategorisieren.
Öffne Rezepte → Kategorien und lege neue Einträge wie Vorspeise, Hauptgericht, Dessert oder Vegetarisch an.
Du kannst Kategorien später Rezepten zuweisen oder mehrere kombinieren.
Note
Kategorien erscheinen als Filter im Dashboard und können auch in Wochenplänen oder Einkaufsliste genutzt werden.
👉 Screenshot geeignet: Kategorieverwaltung mit mehreren Einträgen (Vorspeise, Hauptgericht, Dessert)
Damit ist die Basis für deine eigene Rezeptdatenbank vollständig eingerichtet.
Im nächsten Schritt lernst du, wie du Tandoor in deine Backuproutinen und das Monitoring des UCC einbindest.
Troubleshooting & Tipps
Auch wenn Tandoor im Alltag sehr stabil läuft, kann es bei der Einrichtung oder im Dauerbetrieb zu kleineren Problemen kommen –
von nicht geladenen Seiten über E-Mail-Fehler bis hin zu fehlenden Bildern.
Die folgenden Punkte helfen dir, typische Ursachen schnell zu erkennen und zu beheben, ohne tief in Systemdetails einzusteigen.
Tandoor lädt nicht oder zeigt nur eine weiße Seite
Symptom:
Nach dem Start des Containers erscheint im Browser nur eine leere Seite oder der Ladevorgang bricht ab.
Lösungen:
-
Container läuft nicht richtig:
Prüfe im Terminal:docker compose psWenn einer der Container den Status Exited oder Restarting zeigt, starte den gesamten Stack neu:
docker compose down docker compose up -d -
Fehlerhafte Datenbankverbindung:
Öffne/opt/tandoor/.envund überprüfe:DB_HOST=db DB_PORT=5432 DB_NAME=tandoor DB_USER=tandoor DB_PASSWORD=<aus .env>Anschließend Container neu starten.
-
Browser-Cache oder Cookie-Reste:
Lösche den Cache oder öffne die Seite im privaten Fenster, um alte Sitzungen auszuschließen.
Tip
Wenn du dauerhaft nur eine weiße Seite siehst, hilft oft schon ein Neustart beider Container.
In vielen Fällen ist beim ersten Start noch nicht alles vollständig geladen.
👉 Screenshot geeignet: Terminalausgabe von docker compose ps mit einem gestoppten Dienst und anschließendem Neustart
E-Mail-Versand funktioniert nicht
Symptom:
Benutzer erhalten keine Einladungen oder Passwort-Reset-Mails.
Lösungen:
- Prüfe, ob die SMTP-Werte in der
.envkorrekt gesetzt wurden.EMAIL_HOST EMAIL_PORT EMAIL_HOST_USER EMAIL_HOST_PASSWORD - Sende in Tandoor eine Testmail:
Einstellungen → E-Mail → Test senden - Wenn der Versand fehlschlägt, prüfe das Log:
docker compose logs -f tandoor
Note
Tandoor nutzt keinen eigenen Mailserver.
Der Versand erfolgt immer über den zentralen SMTP-Dienst deines UCC.
Stelle sicher, dass dieser erreichbar ist und Anmeldungen von Containern erlaubt.
👉 Screenshot geeignet: Tandoor-Einstellungsseite mit sichtbarem Button Test-E-Mail senden
Bilder fehlen oder werden nicht geladen
Symptom:
Rezeptbilder erscheinen als graue Platzhalter oder fehlen vollständig.
Lösungen:
- Prüfe die Pfade in der
.env:MEDIA_ROOT=/opt/tandoor/media STATIC_ROOT=/opt/tandoor/static - Überprüfe, ob das Volume in der
docker-compose.ymlkorrekt eingebunden ist:volumes: - ./media:/opt/tandoor/media - Wenn die Dateien vorhanden, aber nicht abrufbar sind, passe Berechtigungen an:
chown -R 1000:1000 /opt/tandoor/media
Tip
Nach größeren Datei-Übertragungen kann es helfen, den Container einmal neu zu starten,
damit geänderte Berechtigungen übernommen werden.
👉 Screenshot geeignet: Medienordner im Terminal mit korrekten Eigentümerrechten (UID 1000)
Anmeldung oder Passwort-Reset funktioniert nicht
Symptom:
Benutzer können sich nicht anmelden oder erhalten beim Zurücksetzen des Passworts keine E-Mail.
Lösungen:
- Prüfe, ob das System über HTTPS läuft.
Viele Browser blockieren Formularübertragungen über unverschlüsselte HTTP-Verbindungen. - Stelle sicher, dass in der
.envdie Zeileden korrekten Domainnamen enthält.ALLOWED_HOSTS=tandoor.deinedomain.tld,localhost,127.0.0.1 - Wenn der E-Mail-Versand generell funktioniert, aber keine Nachricht ankommt, prüfe den Spam-Ordner oder die Absenderadresse.
Important
Ohne gültige HTTPS-Verbindung kann Tandoor keine sicheren Links für Passwort-Resets erzeugen.
Die Integration über den Nginx Proxy Manager ist daher zwingend notwendig.
👉 Screenshot geeignet: Browserfenster mit sichtbarer HTTPS-Adresse und aktivem Schloss-Symbol
Backups und Wiederherstellung mit Kopia
Tandoor sollte regelmäßig gesichert werden, um Datenverluste zu vermeiden.
Die Sicherung erfolgt über das zentrale Kopia-System des UCC.
Zu sichernde Verzeichnisse:
/opt/tandoor/data/opt/tandoor/media/opt/tandoor/logs/opt/tandoor/.env
Note
Sichere diese Verzeichnisse immer gemeinsam, damit Datenbank und Mediendateien synchron bleiben.
In Kopia:
- Add Source → Directory →
/opt/tandoor - Name: Tandoor Backup
- Include hidden files: aktivieren
- Backup-Zeitplan: täglich um 03:00 Uhr, 7 Tage Aufbewahrung, Kompression und Verschlüsselung aktivieren.
Tip
Teste regelmäßig eine Wiederherstellung, um sicherzugehen, dass das Backup vollständig ist.
Führe Test-Restores immer auf einem separaten Pfad aus – niemals über die laufende Installation.
👉 Screenshot geeignet: Kopia-Dashboard mit aktivem Eintrag Tandoor Backup und Zeitplan 03:00 Uhr
Container bleibt nach Neustart gestoppt
Symptom:
Nach einem Server- oder Container-Neustart ist Tandoor nicht automatisch wieder aktiv.
Lösung:
Öffne /opt/tandoor/docker-compose.yml und prüfe, ob der Neustart-Modus gesetzt ist:
restart: unless-stopped
Wenn nicht, ergänze ihn unter beiden Diensten (db und web), dann Container neu starten.
Tip
Der Restart-Modus sorgt dafür, dass Docker den Container nach jedem Reboot automatisch wieder startet.
Ein zusätzlicher Cronjob oder systemd-Dienst ist nicht nötig.
👉 Screenshot geeignet: geöffnete docker-compose.yml mit sichtbarem Eintrag restart: unless-stopped
Allgemeine Stabilität und Pflege
- Führe regelmäßig
apt update && apt upgrade -yim Container aus, um Sicherheitsupdates einzuspielen. - Starte den Container etwa einmal pro Woche neu, um temporäre Caches zu leeren.
- Überwache mit
docker stats, ob CPU- oder RAM-Verbrauch auffällig hoch sind. - Leere alte Logdateien, wenn
/opt/tandoor/logszu groß wird.
Note
Bei regelmäßiger Pflege läuft Tandoor monatelang stabil ohne Eingriffe.
Der Dienst reagiert empfindlich auf Dateisystemprobleme – sichere daher das Volume/opt/tandoor/dataregelmäßig.
👉 Screenshot geeignet: Terminalausgabe von docker stats mit laufendem Tandoor-Container
Damit ist der Troubleshooting-Teil vollständig und deckt alle typischen Fehlerquellen, Backup-Themen und Stabilitätsaspekte ab.
Ergebnis
Nach Abschluss dieses Kapitels läuft in deinem UCC eine vollständig integrierte Rezeptverwaltung mit Tandoor.
Du kannst eigene Rezepte erfassen, importieren, mit Bildern versehen und mit anderen Benutzer:innen teilen –
alles innerhalb deiner privaten Infrastruktur und ohne externe Cloud-Dienste.
Dein aktuelles Setup umfasst:
- Tandoor-Container – verwaltet Rezepte, Medien und Benutzerzugänge
- PostgreSQL-Datenbank – speichert alle Inhalte zuverlässig und performant
- Nginx Proxy Manager – stellt den Dienst sicher per HTTPS bereit
- Vaultwarden-Integration – liefert SMTP-Zugangsdaten aus dem zentralen Passwort-Tresor
- Kopia-Backup – sichert alle Daten automatisch und stellt sie bei Bedarf wieder her
- Nutzer- und Rollenverwaltung – ermöglicht gemeinsames Arbeiten im Team oder in der Familie
Note
Tandoor läuft vollständig lokal auf deinem UCC-System.
Alle Daten – inklusive Rezepte, Bilder und Zugangsdaten – bleiben unter deiner Kontrolle.
Für den Betrieb ist keine externe Verbindung oder Cloud-Anmeldung erforderlich.
👉 Screenshot geeignet: Tandoor-Dashboard mit sichtbaren Bereichen Rezepte, Planung, Einstellungen und aktivem Benutzer-Avatar
Damit hast du eine stabile, datensparsame und vielseitige Plattform geschaffen,
um deine Koch- und Backrezepte zentral zu organisieren, gemeinsam zu nutzen und automatisch zu sichern.
Tandoor fügt sich nahtlos in das bestehende UCC-Ökosystem ein und kann später mit Automatisierungen, Backups und Benachrichtigungen erweitert werden.