Mealie Atelier ohne Home Assistant: die Küchen-App mit Docker
Docker Compose, Mealie-Token, Konten mit Rollen, Kiosk-Tablet, Push-Timer, HTTPS, Backups und Updates.
Mealie Atelier braucht kein Home Assistant. Dieselbe Küche, die als Dashboard-Karten in Home Assistant läuft, gibt es auch als eigenständige Web-App: Rezepte mit Fotos, Wochenplan, Einkaufsliste, Kochmodus mit Timern, Vorräte und Druckstudio. Ein kleiner Server auf deinem eigenen Rechner zeigt sie im Browser an, auf dem Handy installierst du sie wie eine App.

Ich gehe in diesem Guide jeden Schritt einzeln durch, vom leeren Ordner bis zum Tablet an der Küchenwand. Was die einzelnen Bereiche können, steht im Überblick. Hast du Home Assistant, ist der Weg über die Bridge meist bequemer. Mealie selbst richtest du vorher mit dem Mealie-Guide ein.
Was die Web-App ist und für wen sie passt
Die Web-App liegt im Karten-Repository im Ordner web/. Sie ist ein kleiner Node-Server ohne zusätzliche npm-Pakete, der zwischen deinem Browser und deinem Mealie sitzt. Der Server bewahrt den Mealie-API-Token auf, verlangt eine Anmeldung und reicht nur die Befehle an Mealie weiter, die die Küche braucht. Der Browser spricht nie direkt mit Mealie und sieht den Token nie.
Sie passt zu dir, wenn
- du Mealie nutzt, aber kein Home Assistant hast,
- du eine eigene Küchen-App fürs Handy willst, die nicht in einem Smart-Home-Dashboard steckt,
- ein Tablet in der Küche nur Rezepte und Wochenplan zeigen soll,
- Familienmitglieder ein eigenes Konto mit eigenen Rechten bekommen sollen, ohne Zugang zu deinem Smart Home.
| Web-App ohne Home Assistant | Karten in Home Assistant | |
|---|---|---|
| Was läuft | Ein Server per Docker Compose oder Node.js 22 | Die Bridge (Integration) und die Karten |
| Anmeldung | Gemeinsames Passwort oder Konten pro Person mit Rollen | Deine Home-Assistant-Konten |
| Wo der Mealie-Token liegt | In der Datei .env auf dem Server | In Home Assistant |
| Benutzt wird es | Im Browser oder als installierte App | Im Dashboard und in der Companion App |
| Timer im Hintergrund | Web Push im Browser | Benachrichtigung über Home Assistant |
| Einkaufs-Sync nach Bring! | nein | ja |
| Installation | Ein paar Befehle im Terminal | Marketplace oder HACS |
Was fehlt: Der Einkaufs-Sync zu Bring! und anderen Listen gehört zur Bridge in Home Assistant. Die Web-App sendet keine Einkaufsdaten an Dritte. Ein Server bedient genau einen Mealie-Token und damit einen Haushalt. Beide Wege können gleichzeitig an demselben Mealie laufen.
Was du brauchst
- Mealie 3, eingerichtet und mit ein paar Rezepten. Das Projekt testet mit Mealie 3.29.
- Einen Rechner, der dauerhaft läuft, zum Beispiel ein Mini-PC, ein NAS oder der Server, auf dem schon Mealie läuft. Der Container ist auf 256 MB Arbeitsspeicher begrenzt.
- Darauf Docker mit Compose oder Node.js 22 oder neuer.
- Git, um den Code zu holen.
- Eine Mealie-Adresse, die dieser Rechner erreicht, zum Beispiel
http://192.168.1.20:9925. - Für Handy und Tablet: einen Reverse Proxy mit HTTPS oder ein privates Netz wie Tailscale. Installation als App und Push-Nachrichten gehen nur über HTTPS.
Die Schritte im Überblick
- Einen Mealie-API-Token anlegen
- Den Code holen
- Die Einstellungen in der .env anlegen
- Starten und anmelden
- Gemeinsames Passwort oder Konten pro Person
- HTTPS für Handy und Tablet
- Als App installieren
- Küchentimer als Push-Nachricht (optional)
Schritt 1: Einen Mealie-API-Token anlegen
Mit dem Token greift die Web-App in deinem Namen auf Mealie zu. Was das Mealie-Konto darf, darf später auch die Web-App. Leg für sie einen eigenen Token an, dann kannst du genau diesen später löschen.
- Melde dich in Mealie mit dem Konto an, dessen Rezepte, Wochenplan und Einkaufslisten die Küche zeigen soll.
- Klicke oben links auf deinen Namen und öffne API-Token (die Adresse endet auf
/user/profile/api-tokens). - Trage bei Token-Name zum Beispiel
Atelier Web-Appein und klicke auf Erzeugen. - Kopiere den Token sofort. Mealie zeigt ihn nur dieses eine Mal.

Typischer Fehler: Der Token gehört zu dem Konto, mit dem du gerade angemeldet bist. Legst du ihn in einem anderen Haushalt an, siehst du später fremde oder gar keine Einkaufslisten.
Schritt 2: Den Code holen
Ein fertiges Docker-Image gibt es nicht, Docker baut es bei dir aus dem Code. Öffne auf dem Server ein Terminal und hol dir das Repository:
git clone https://github.com/mealie-atelier/mealie-atelier-cards.git
cd mealie-atelier-cards/webAlle weiteren Befehle laufen in diesem Ordner web.
Schritt 3: Die Einstellungen in der .env anlegen
Alle Einstellungen stehen in einer Datei namens .env. Kopiere die Vorlage und öffne die Kopie in einem Editor, zum Beispiel mit nano .env:
cp .env.example .envDrei Werte musst du anpassen:
MEALIE_URL=http://192.168.1.20:9925
MEALIE_API_TOKEN=DEIN_MEALIE_TOKEN
ATELIER_PASSWORD=DEIN_LANGES_PASSWORTMEALIE_URList die Adresse deines Mealie, mithttp://oderhttps://und Port. Zugangsdaten oder etwas hinter einem?dürfen nicht darin stehen.MEALIE_API_TOKENist der Token aus Schritt 1.ATELIER_PASSWORDist das gemeinsame Passwort für die Web-App. Es braucht mindestens 12 Zeichen, sonst startet der Server nicht. Wer sich damit anmeldet, hat Admin-Rechte.
Dazu zwei Zeilen, die in der Vorlage schon stehen:
ATELIER_USERNAME=homeist der Benutzername zum gemeinsamen Passwort. Löschst du die Zeile, heißt eratelier.ATELIER_READ_ONLY=trueschaltet den Nur-Lesen-Modus ein. Der Server lehnt dann jede Änderung ab, du kannst also nur ansehen. Willst du abhaken, planen und Rezepte bearbeiten, setzeATELIER_READ_ONLY=false. Mehr dazu unter Kiosk-Tablet.
Typischer Fehler: MEALIE_URL=http://localhost:9925. Läuft die Web-App in Docker, ist localhost der Container selbst und nicht dein Server. Nimm die IP-Adresse oder den Hostnamen des Rechners, auf dem Mealie läuft.
Die .env enthält deinen Token. Sie gehört nie in Git, nie in ein Docker-Image und nie in einen Screenshot. Alle weiteren Einstellungen stehen in der Tabelle Alle Einstellungen.
Schritt 4: Starten und anmelden
Mit Docker:
docker compose up -d --buildDer erste Start dauert etwa eine Minute, weil Docker das Image baut. Der Container startet nach einem Neustart des Servers von selbst wieder und prüft alle 30 Sekunden, ob er antwortet.
Danach ist die Web-App unter http://localhost:3008 erreichbar, allerdings nur auf dem Server selbst. Das ist Absicht: compose.yaml veröffentlicht den Port ausschließlich auf der Loopback-Adresse des Servers, also nicht im Netzwerk. Von deinem Laptop oder Handy aus erreichst du sie erst nach Schritt 6. Hat der Server keinen Bildschirm, prüfst du den Start direkt im Terminal:
curl -I http://localhost:3008Kommt HTTP/1.1 401 Unauthorized zurück, läuft die Web-App und wartet auf die Anmeldung. Den Port auf dem Server änderst du mit ATELIER_HOST_PORT in der .env. Eine Zeile PORT=... ändert bei Docker nichts, weil im Container immer Port 3000 gilt.
Ohne Docker, mit Node.js 22:
npm startDer Befehl liest die .env selbst und startet den Server auf Port 3000. Weitere Pakete musst du nicht installieren. Damit der Server einen Neustart des Rechners übersteht, brauchst du hier selbst einen Dienst, etwa systemd. Mit Docker ist das schon erledigt.
Die Anmeldung: Beim Öffnen erscheint keine gestaltete Login-Seite, sondern ein schlichtes Fenster deines Browsers mit Benutzername und Passwort. Es gehört zum Browser und sieht überall etwas anders aus. Trag die Werte aus deiner .env ein. Der Browser merkt sich die Anmeldung, bis du ihn ganz schließt.
Danach siehst du die Übersicht mit dem heutigen Gericht, links das Menü mit Heute, Kochinspo, Rezepte, Wochenplan, Vorräte, Einkaufsliste, Gemeinsam kochen, Kochbuch und Verwalten.
Typische Fehler:
- Der Server startet nicht. Er nennt den Grund in seiner Ausgabe: bei Docker mit
docker compose logs, bei Node direkt im Terminal. Die Meldungen erklärt die Fehlerbehebung. - Statt der Küche steht nur
{"error":"Sign in to Mealie Atelier"}auf der Seite. Du hast das Anmeldefenster abgebrochen. Lade die Seite neu. - Nach mehreren falschen Passwörtern antwortet der Server mit
Too many failed sign-ins. Try again later.Die Sperre dauert höchstens 60 Sekunden.
Schritt 5: Gemeinsames Passwort oder Konten pro Person
Ein gemeinsames Passwort ist der einfachste Weg: Alle melden sich mit demselben Namen an und dürfen alles. Soll jede Person ein eigenes Konto mit eigenen Rechten bekommen, nutzt du ATELIER_USERS mit drei Rollen:
| Rolle | Darf |
|---|---|
admin | Alles: Rezepte anlegen, bearbeiten und importieren, Fotos hochladen, Nährwerte speichern, Zutaten bearbeiten |
writer | Einkaufslisten, Wochenplan und Küchendaten wie Vorräte ändern. Keine Rezepte bearbeiten, keine Familienmitglieder oder Helferaufgaben anlegen. |
reader | Nur ansehen. Eigene Küchentimer und das Kochjournal gehen trotzdem. |
Passwörter stehen dabei nie im Klartext in der .env, sondern nur als Hash. Den erzeugst du für jede Person im Ordner web. Hast du Node.js 22 auf dem Rechner:
npm run hash-passwordLäuft bei dir nur Docker, geht es auch mit einem kurzlebigen Node-Container. Das Docker-Image der Web-App enthält das Skript nicht:
docker run --rm -it -v "$PWD":/app:ro -w /app node:22-alpine node scripts/hash-password.mjsDer Befehl fragt nach Password:. Was du tippst, erscheint nicht auf dem Bildschirm und landet nicht im Verlauf deiner Shell. Auch hier gilt: mindestens 12 Zeichen, sonst kommt Use a password with at least 12 characters. Als Antwort kommt eine lange Zeile, die mit scrypt$ beginnt. Das ist der Hash.
Die Einträge schreibst du als Name:Rolle:Hash in die .env, getrennt durch Semikolon. Setze den ganzen Wert in einfache Anführungszeichen, weil der Hash $-Zeichen enthält, die Docker Compose sonst als Variablen liest:
ATELIER_USERS='anna:admin:scrypt$16384$8$1$SALT$KEY;ben:writer:scrypt$16384$8$1$SALT$KEY;kueche:reader:scrypt$16384$8$1$SALT$KEY'Danach startest du den Server neu, bei Docker mit docker compose up -d.
Was dabei gilt:
- Benutzernamen bestehen aus Kleinbuchstaben, Ziffern, Punkt, Unterstrich und Bindestrich, höchstens 40 Zeichen.
- Sobald
ATELIER_USERSgesetzt ist, kannst duATELIER_PASSWORDweglassen. Behältst du es, meldet es sich weiter als Admin unterATELIER_USERNAMEan. Derselbe Name darf dann nicht auch inATELIER_USERSstehen, sonst startet der Server nicht. - Ein fehlerhafter Eintrag verhindert den Start. Die Meldung nennt die Position des Eintrags, nie den Hash.
- Der Nur-Lesen-Modus schlägt jede Rolle.
- Die Oberfläche blendet Knöpfe aus, die eine Rolle nicht nutzen darf. Der Server prüft trotzdem jede Änderung selbst.
- Vorräte, Kochjournal, Familie und Kochsessions teilt sich der ganze Haushalt. Die Konten regeln, wer schreiben darf. Sie trennen keine persönlichen Daten.
Schritt 6: HTTPS für Handy und Tablet
Mit Docker hört die Web-App nur auf der Loopback-Adresse des Servers (localhost). Von anderen Geräten aus erreichst du sie also nicht, auch nicht über die IP-Adresse des Servers. Stell den Container nicht direkt ins Internet: Die Anmeldung über das Browserfenster ist über http:// in fremden Netzen unsicher. Es gibt drei Wege, such dir einen aus.
Weg 1: Reverse Proxy auf demselben Server (empfohlen). Der Proxy nimmt Anfragen mit HTTPS an und reicht sie an localhost:3008 weiter. Mit Caddy genügt diese Caddyfile:
kueche.example.de {
reverse_proxy localhost:3008
}Ersetze kueche.example.de durch einen Namen, der auf deinen Server zeigt. Caddy holt das Zertifikat selbst. Dafür muss der Name öffentlich auflösbar sein und Caddy braucht die Ports 80 und 443. Nginx Proxy Manager oder Traefik gehen genauso, wichtig ist nur das Ziel localhost:3008. Läuft der Proxy selbst in Docker, zeigt localhost auf seinen eigenen Container. Dann nimm Weg 2 oder Weg 3.
Weg 2: Im Heimnetz direkt per Port. Ändere in compose.yaml die Zeile unter ports:, die den Port nur auf der Loopback-Adresse veröffentlicht, so:
services:
mealie-atelier:
ports:
- "3008:3000"Nach docker compose up -d ist die Web-App unter http://IP-DES-SERVERS:3008 erreichbar. Der Preis: Die Anmeldung läuft unverschlüsselt durchs Netz, jeder im selben WLAN kann mitlesen. Installation als App und Push-Nachrichten gehen ohne HTTPS nicht. Gib den Port nie im Router frei. Weil sich eine Datei aus dem Repository ändert, kann ein späteres git pull Konflikte melden. Ohne Docker hört npm start schon auf allen Adressen (HOST=0.0.0.0) auf Port 3000. Willst du das nicht, setze HOST=localhost.
Weg 3: Ein privates Netz wie Tailscale. Tailscale Serve auf dem Server leitet Anfragen aus deinem Tailnet an den lokalen Port weiter und bringt HTTPS mit:
tailscale serve --bg 3008Der Befehl nennt dir die Adresse, die du auf deinen Geräten im Tailnet öffnest. HTTPS-Zertifikate müssen dafür in deinem Tailnet aktiviert sein. Für alle anderen bleibt die Seite unerreichbar.
Wichtig bei einem Proxy: die Sperre nach falschen Passwörtern. Hinter einem Reverse Proxy kommen alle Anfragen von der Adresse des Proxys. Die Sperre würde dann alle Nutzer wie einen einzigen behandeln, ein Fremder könnte mit falschen Versuchen alle aussperren. Trag deshalb die Adresse ein, von der der Proxy bei der Web-App ankommt:
ATELIER_TRUSTED_PROXIES=172.18.0.0/16,::1Das ist das Beispiel aus dem Projekt. Bei Docker kommt ein Proxy auf dem Server meist über das Gateway des Netzes an, das Compose für die Web-App anlegt. Den Bereich zeigt docker network inspect web_default im Feld Subnet. Nur von diesen Adressen glaubt der Server die mitgeschickte Client-Adresse (X-Forwarded-For). Fehlt die Einstellung, warnt der Server einmal in seiner Ausgabe, sobald ein Proxy aus dem Heimnetz diesen Header schickt.
Schritt 7: Als App installieren
Auf Handy und Tablet fühlt sich die Web-App wie eine echte App an, wenn du sie installierst: eigenes Symbol auf dem Home-Bildschirm, eigenes Fenster ohne Adressleiste. Ganz unten auf der Seite steht dafür App installieren. Der Knopf öffnet Dein Küchenstudio. Immer griffbereit. mit den Schritten für dein Gerät.


Auf Android und mit Chrome oder Edge am Rechner gilt: Steht im Fenster Jetzt installieren, tippst du darauf. Der Browser zeigt dann sein eigenes Bestätigungsfenster mit Symbol und Namen der App. Fehlt der Knopf, wählst du im Browser-Menü App installieren oder Zum Startbildschirm hinzufügen. Am Rechner steht das Symbol dafür oft rechts in der Adressleiste.
Auf iPhone und iPad öffnest du die Seite in Safari. Andere Browser bieten die Installation dort meist nicht an. Tippe auf Teilen, wähle Zum Home-Bildschirm (falls nötig unter Mehr), lass Als Web-App öffnen an und tippe auf Hinzufügen.
Auf dem Home-Bildschirm heißt die App Atelier. Ist sie installiert, verschwindet der Knopf App installieren in der App. Die Installation ändert nichts an deinem Mealie-Konto. Private Rezeptdaten und Fotos legt die App dabei nicht im Offline-Speicher des Geräts ab.
Typischer Fehler: Der Browser bietet keine Installation an. Die Seite läuft dann über http:// mit einer IP-Adresse. Installieren lässt sie sich nur über eine vertrauenswürdige https://-Adresse, zum Ausprobieren auch über localhost.
Schritt 8: Küchentimer als Push-Nachricht
Im Kochmodus stellst du Küchentimer. Solange die Seite offen ist, meldet sich der Timer dort. Damit er sich auch meldet, wenn die App längst zu ist, brauchst du Web Push. Das ist optional.
1. Schlüssel erzeugen. Im Ordner web mit Node.js 22:
npm run vapidLäuft nur Docker und der Container schon, geht es auch dort, denn dieses Skript steckt im Image:
docker compose exec mealie-atelier node scripts-generate-vapid.mjsDer Befehl gibt drei Zeilen mit Schlüsseln aus: ATELIER_VAPID_PUBLIC_KEY=..., ATELIER_VAPID_PRIVATE_KEY=... sowie ATELIER_VAPID_SUBJECT=mailto:you@example.com. Darunter steht ein Hinweis zum Aufbewahren.
2. In die .env kopieren. Übernimm die drei Schlüsselzeilen. Ersetze in ATELIER_VAPID_SUBJECT die Beispieladresse durch eine eigene mailto:-Adresse oder eine https://-Adresse. Die drei gehören zusammen, einzeln funktioniert keiner. Den privaten Schlüssel hältst du geheim, änderst ihn nicht mehr und sicherst ihn mit der .env. Ein neuer Schlüssel macht alle bisherigen Freigaben ungültig.
3. Neu starten: docker compose up -d oder npm start.
4. Im Browser erlauben. Öffne oben die Statusleiste Synchronisierung & Küchentimer. Unter Hintergrund-Timer steht jetzt Web Push konfiguriert (Berechtigung erforderlich). Tippe auf Push erlauben und bestätige die Frage des Browsers. Danach steht auf dem Knopf Push eingerichtet. Das machst du auf jedem Gerät, das Nachrichten bekommen soll.

Was du wissen solltest:
- Web Push braucht HTTPS. Über
http://mit einer IP-Adresse fragt der Browser gar nicht erst. - Auf iPhone und iPad bekommt nur die installierte App aus Schritt 7 Push-Nachrichten, nicht der Safari-Tab.
ATELIER_ALARM_CHANNELbleibt auf dem Standardboth. Das schickt über Web Push und zusätzlich über Home Assistant, falls du eins eingetragen hast. Setze nieha, wenn du kein Home Assistant verbunden hast, sonst kommt keine Nachricht an.- Die Zustellung läuft über den Push-Dienst des Browser-Herstellers. Dass sie ankommt, ist nicht garantiert.
In derselben Statusleiste schaltest du mit Offline aktivieren den Offline-Einkauf ein: Abgehakte Artikel warten dann auf dem Gerät, bis die Verbindung wieder steht. Die Einkaufslisten liegen dafür auf dem Gerät, aktiviere es nicht auf fremden oder öffentlichen Geräten.
Die Küche im Alltag
Die Web-App zeigt dieselben Bereiche wie die Komplette-Küche-Karte in Home Assistant. Ein paar Beispiele mit den erfundenen Testrezepten:




Der Knopf Einkaufs-Sync ist auch in der Web-App da. Er erklärt aber nur, dass der Live-Sync zu Bring! Home Assistant mit der Bridge braucht.

Aussehen und Sprache stellst du über das Zahnrad oben rechts im Design Studio ein: Erscheinungsbild (Dunkel oder Hell), Akzentfarbe, Abstände, Spalten, Sprache, Bewegung & Übergänge, Bildformat, Ecken und Rezeptbilder anzeigen. Das gilt nur für das Gerät, auf dem du es einstellst. So kann das Wandtablet hell sein, während dein Handy dunkel bleibt.

Ein Tablet nur zum Anschauen (Kiosk)
Ein Tablet an der Küchenwand soll Rezepte und den Wochenplan zeigen, aber niemand soll aus Versehen etwas löschen. Dafür gibt es zwei Wege. Der Unterschied ist wichtig:
ATELIER_READ_ONLY=truegilt für den ganzen Server. Dann darf niemand mehr etwas ändern, auch du am Handy nicht. Auch Küchentimer und Kochjournal sind gesperrt. Das passt, wenn die Web-App ausschließlich als Anzeige läuft und du in Mealie selbst planst.- Ein eigenes Konto mit der Rolle
readergilt nur für dieses Gerät. Lege zum Beispiel ein Kontokuechealsreaderan (Schritt 5) und melde das Tablet damit an. Alle anderen behalten ihre Rechte. Küchentimer und Kochjournal gehen auf dem Tablet trotzdem.
Für die meisten Haushalte ist das reader-Konto der bessere Weg. Danach:
- Öffne die Web-App auf dem Tablet und installiere sie wie in Schritt 7. Als App läuft sie ohne Adressleiste im Vollbild.
- Stell im Design Studio die Darstellung ein, die man aus zwei Metern lesen kann, etwa Hell und Komfortabel.
- Im Kochmodus bleibt der Bildschirm an, solange Bildschirm beim Kochen anlassen angehakt ist. Für die Zeit dazwischen regelst du das in den Einstellungen des Tablets.
- Damit niemand die App verlässt, nutzt du die Bildschirmfixierung des Tablets: unter Android „App anpinnen“, auf dem iPad „Geführter Zugriff“.
Optionale Funktionen
Alles hier ist zunächst aus. Nach jeder Änderung an der .env startest du den Server neu.
Rezept-Editor mit strukturierten Zutaten: ATELIER_STRUCTURED_EDITS=true. Admins bearbeiten dann Zutaten mit Menge, Einheit und verknüpftem Lebensmittel. Nur mit Mealie 3 und nur nach einem Mealie-Backup. Vor jeder Änderung legt die Web-App eine eigene Sicherung unter recipe-backups/ im Datenordner an (die letzten 10 pro Rezept, bei Titelfotos die letzten 3). Im Versionsverlauf des Editors holst du jede zurück. Fotos lädst du als JPEG, PNG oder WebP mit höchstens 10 MiB hoch.
Nährwertlabor: USDA_FDC_API_KEY schaltet die Nährwertsuche in FoodData Central frei. Den kostenlosen Key bekommst du auf fdc.nal.usda.gov/api-key-signup, wie im Einrichtungs-Guide beschrieben.
KI-Hilfen: Mit einem eigenen API-Key von OpenAI (OPENAI_API_KEY) oder Anthropic (ANTHROPIC_API_KEY) kommen englische Suchbegriffe fürs Nährwertlabor, Ersatzvorschläge für eine Zutat und eine Rezeptprüfung dazu. Setzt du beide Keys, wählt ATELIER_AI_PROVIDER mit openai oder anthropic den Anbieter, sonst startet der Server nicht. Daten gehen erst nach deinem Klick an den gewählten Anbieter. Die Nährwerte selbst kommen nie von der KI. Alle Keys bleiben auf dem Server.
Timer über Home Assistant: Hast du doch ein Home Assistant, kann die Web-App Timer-Nachrichten auch darüber schicken. Dafür setzt du ATELIER_HA_URL, ATELIER_HA_TOKEN (ein langlebiges Zugriffstoken) und ATELIER_HA_NOTIFY_SERVICE, etwa notify.mobile_app_annas_handy. Nur alle drei zusammen.
Drucken: Rezepte, Einkaufslisten und der Wochenplan öffnen dasselbe Druckstudio wie in Home Assistant. Gedruckt oder als PDF gespeichert wird im Browser. Der Mealie-Token steckt nie im Druckdokument.
Alle Einstellungen der Web-App
Alle Werte stehen in der .env. Nach einer Änderung startest du den Server neu.
| Variable | Standard | Pflicht | Wofür |
|---|---|---|---|
MEALIE_URL | keiner | ja | Adresse deines Mealie, http:// oder https://, ohne Zugangsdaten |
MEALIE_API_TOKEN | keiner | ja | Dein Mealie-API-Token |
ATELIER_PASSWORD | keiner | ja, wenn ATELIER_USERS fehlt | Gemeinsames Passwort mit Admin-Rechten, mindestens 12 Zeichen |
ATELIER_USERNAME | atelier | nein | Benutzername zum gemeinsamen Passwort. Die Vorlage setzt home. |
ATELIER_USERS | leer | ja, wenn ATELIER_PASSWORD fehlt | Konten pro Person als Name:Rolle:Hash, getrennt durch Semikolon |
ATELIER_READ_ONLY | false | nein | true, 1 oder yes sperrt jede Änderung auf dem Server. Die Vorlage setzt true. |
PORT | 3000 | nein | Port bei npm start. Bei Docker immer 3000. |
ATELIER_HOST_PORT | 3008 | nein | Port auf dem Server bei Docker, nur auf dem Server selbst erreichbar (Loopback) |
HOST | 0.0.0.0 | nein | Adresse, auf der der Server bei npm start hört |
ATELIER_TRUSTED_PROXIES | leer | nein | IP-Adressen und Bereiche deines Reverse Proxys, durch Komma getrennt |
ATELIER_DATA_DIR | ./data | nein | Ordner für die Küchendaten. Docker nutzt immer /app/data. |
ATELIER_STRUCTURED_EDITS | false | nein | true schaltet den Editor mit strukturierten Zutaten ein |
USDA_FDC_API_KEY | leer | nein | Nährwertsuche im Nährwertlabor |
OPENAI_API_KEY | leer | nein | Die drei KI-Hilfen mit OpenAI |
ANTHROPIC_API_KEY | leer | nein | Dieselben KI-Hilfen mit Anthropic (Claude) |
ATELIER_AI_PROVIDER | leer | ja, wenn beide KI-Keys gesetzt sind | openai oder anthropic |
ATELIER_ALARM_CHANNEL | both | nein | Weg für Timer-Nachrichten: both, push oder ha |
ATELIER_VAPID_PUBLIC_KEY, ATELIER_VAPID_PRIVATE_KEY, ATELIER_VAPID_SUBJECT | leer | nein | Schlüssel für Web Push, nur alle drei zusammen |
ATELIER_HA_URL, ATELIER_HA_TOKEN, ATELIER_HA_NOTIFY_SERVICE | leer | nein | Timer-Nachrichten über Home Assistant, nur alle drei zusammen |
ATELIER_EXPERIMENTAL_INGREDIENTS | false | nein | Veraltet und ohne Wirkung. Nimm ATELIER_STRUCTURED_EDITS. |
Daten und Backups
Rezepte, Wochenplan und Einkaufslisten liegen in Mealie. Die Web-App speichert nur, was Mealie nicht kennt, im Datenordner ATELIER_DATA_DIR:
studio.json: Vorräte, Kochjournal, Familie und Kochsessionsalarms.json: laufende Küchentimer und die Push-Freigaben der Geräteoffline-ledger.json: das Protokoll der Offline-Einkäufe, damit nichts doppelt ankommtrecipe-backups/,ingredient-backups/,photo-backups/: Sicherungen vor Rezeptänderungen
Bei Docker liegt der Ordner in einem Volume, das ein Neuanlegen des Containers übersteht. Compose stellt den Namen des Projektordners davor, aus atelier_data wird also meist web_atelier_data. Den genauen Namen zeigt docker volume ls. So packst du das Volume in ein Archiv im aktuellen Ordner:
docker run --rm -v web_atelier_data:/data:ro -v "$PWD":/backup alpine tar czf /backup/atelier-data.tar.gz -C /data .Sichere zusätzlich die .env, denn darin stehen Token, Passwort-Hashes und der private Push-Schlüssel. Bewahre beides getrennt vom Server auf, so wie dein Mealie-Backup. Die Sicherungen der Web-App ersetzen kein Mealie-Backup.
Updates
Neue Versionen holst du im Ordner web mit Git:
git pull
docker compose up -d --buildOhne Docker beendest du den Server und startest ihn nach git pull mit npm start neu. Die Küchendaten im Datenordner bleiben erhalten. Die App auf Handy und Tablet lädt die neue Version beim nächsten Öffnen von selbst, weil der Cache an die Versionsnummer gebunden ist. Hast du für Weg 2 die compose.yaml geändert und git pull meldet einen Konflikt, sicherst du deine Änderung mit git stash, holst das Update und spielst sie mit git stash pop wieder ein.
Wenn etwas nicht klappt
Schau zuerst in die Ausgabe des Servers: docker compose logs mealie-atelier oder das Terminal mit npm start. Der Server prüft beim Start seine Einstellungen und bricht mit einer klaren Meldung ab.
| Was du siehst | Woran es liegt |
|---|---|
Configure MEALIE_URL, MEALIE_API_TOKEN and ATELIER_PASSWORD or ATELIER_USERS before starting. | Ein Pflichtwert fehlt oder es gibt nur die Vorlage .env.example, keine .env |
ATELIER_PASSWORD must be at least 12 characters long. | Das Passwort ist zu kurz |
MEALIE_URL must be an http(s) server URL without credentials or query. | http:// oder https:// fehlt, oder die Adresse enthält Zugangsdaten oder Parameter |
ATELIER_USERS repeats the ATELIER_USERNAME of the shared password. Rename one of them. | Derselbe Name steht in ATELIER_USERNAME und in ATELIER_USERS |
Rezepte laden nicht, in der Ausgabe steht Request failed: | MEALIE_URL ist vom Server aus nicht erreichbar (oft localhost in Docker) oder der Token wurde in Mealie gelöscht |
| Nichts lässt sich ändern | ATELIER_READ_ONLY=true aus der Vorlage oder ein Konto mit der Rolle reader |
| Kein Installieren, kein Push erlauben | Die Seite läuft nicht über HTTPS |
| Andere Geräte erreichen die Seite nicht | Docker veröffentlicht den Port nur auf dem Server selbst, siehe Schritt 6 |
Alle Fälle mit Erklärung stehen in der Fehlerbehebung unter Web-App ohne Home Assistant. Fragen und Erfahrungen sind in den GitHub Discussions willkommen. Poste dort nie deine .env, Tokens oder Passwort-Hashes.
Weiterführende Inhalte
- Mealie Atelier im Überblick: alle Bereiche der Küche und der Vergleich der beiden Wege
- Mealie Atelier mit Home Assistant einrichten: Bridge, Karten und Einkaufs-Sync nach Bring!
- Mealie installieren: der Rezeptmanager selbst, mit Docker oder als App
Läuft deine Küche auf einem Tablet an der Wand oder vor allem auf dem Handy?
Unterstütze den Kanal
Hat dir der Beitrag geholfen? Es gibt zwei Wege, etwas zurückzugeben.
