Mealie ist eine selbst gehostete Rezepte-App. Wer noch die alte hkotel/mealie-Version (v0.5.x) betreibt, wird früher oder später merken: Ein direktes docker pull + Restart zerschießt die Datenbank. Die neue Version (ghcr.io/mealie-recipes/mealie) hat ein komplett anderes Datenbankschema.
Der empfohlene Weg: Export aus der alten Instanz, neue Instanz parallel aufbauen, importieren, testen, Cutover.
Klingt simpel. Ist es meistens auch — bis zu den drei Stellen, die die Doku entweder wegläßt oder im Kleingedruckten vergräbt.
Das Setup
Alt: hkotel/mealie:v0.5.6, Port 8090, LDAP-Auth, läuft seit Jahren.
Neu: ghcr.io/mealie-recipes/mealie:latest, Port 8093, Keycloak OIDC.
Vorgehen: Parallel starten mit Test-Domain (food-new.deathstar.lan), nach Bewährung Cutover auf die echte Domain (food.deathstar.lan).
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:latest
container_name: mealie-new
ports:
- "8093:9000"
volumes:
- ./data:/app/data/
environment:
BASE_URL: "https://food-new.deathstar.lan"
DB_ENGINE: sqlite
OIDC_AUTH_ENABLED: "true"
OIDC_CONFIGURATION_URL: "https://auth.deathstar.lan/realms/<REALM>/.well-known/openid-configuration"
OIDC_CLIENT_ID: "mealie"
OIDC_CLIENT_SECRET: "${OIDC_CLIENT_SECRET}"
OIDC_AUTO_REDIRECT: "false"
ALLOW_PASSWORD_LOGIN: "true"
extra_hosts:
- "auth.deathstar.lan:<IP-DES-KEYCLOAK-HOSTS>"
ALLOW_PASSWORD_LOGIN: "true" ist wichtig — sonst kommst du nach einem OIDC-Problem nicht mehr rein.
OIDC_AUTO_REDIRECT: "false" — macht den Keycloak-Button sichtbar statt sofort zu redirecten. Hilfreich für den lokalen Admin-Login als Fallback.
Fallstrick 1: Backup Restore ≠ Migration
Die alte v0.5.x Instanz hat einen Export-Endpunkt. Man bekommt eine ZIP-Datei mit recipes/, settings/, usw.
Wer diese ZIP in v3 unter Admin → Data Management → Backups → Restore hochlädt, bekommt:
Invalid backup file. file does not contain required elements (data directory and database.json)
Verständlich — v3 erwartet für Backup-Restore sein eigenes Format (mit data/ und database.json). Das v0.5.x Format ist was anderes.
Die richtige Stelle: Admin → Data Management → Migrations → Source: Mealie
Dort wird explizit das v0.5.x ZIP-Format unterstützt. Alle Rezepte landen sauber in der neuen Instanz.
Fallstrick 2: OIDC-User ohne Admin-Rechte
Beim ersten Login über Keycloak wird der User automatisch angelegt — mit der Standard-Rolle “User”. Das ist meistens was man will.
Was man sich dabei aber nicht erwartet: Auch der eigene Admin-Account aus Keycloak landet mit eingeschränkten Rechten. API-Tokens erstellen, User verwalten, Migrationen starten — alles gesperrt.
Fix:
- Mit dem lokalen Mealie-Admin einloggen (Password-Login, nicht OIDC)
- Admin → Users → [Username] → Advanced
- Admin-Rechte aktivieren
Danach kann der OIDC-User alles. Aber man muss es manuell tun — es gibt keine Keycloak-Rolle, die automatisch Mealie-Admin macht.
Fallstrick 3: nginx sites-enabled vs. sites-available
Der Klassiker, der nie alt wird.
Setup: Der Reverse Proxy (srv-chewbacca.deathstar.lan) hat nginx. Die Config liegt in /etc/nginx/sites-enabled/food.conf — als eigene Datei, kein Symlink zu sites-available.
Nach dem Cutover wird die neue Config lokal bearbeitet und deployt:
scp food.conf root@srv-chewbacca:/etc/nginx/sites-available/food.conf
ssh srv-chewbacca 'nginx -t && systemctl reload nginx'
nginx meldet syntax ok, reload erfolgreich. Und trotzdem: Die alte Seite kommt noch. Kein Keycloak, alte Version.
Warum? sites-enabled und sites-available sind auf diesem Server unabhängige Verzeichnisse. Kein Symlink-Mechanismus. scp nach sites-available hat die falsche Datei aktualisiert. sites-enabled/food.conf war unverändert.
# Prüfen welche Datei nginx wirklich liest:
nginx -T | grep "# configuration file"
# ODER:
ls -la /etc/nginx/sites-enabled/
Fix:
scp food.conf root@srv-chewbacca:/etc/nginx/sites-enabled/food.conf
ssh srv-chewbacca 'nginx -t && systemctl reload nginx'
Immer prüfen ob sites-enabled Symlinks oder eigene Dateien enthält — und dementsprechend deployen.
Zusammenfassung
| Stolperstein | Symptom | Fix |
|---|---|---|
| Falscher Import-Dialog | “Invalid backup file” | Migrations → Mealie, nicht Backups → Restore |
| OIDC-User ohne Rechte | API-Token-Erstellung gesperrt | Admin → Users → Advanced → Admin aktivieren |
| sites-available ≠ sites-enabled | Config deployt, keine Wirkung | scp direkt nach sites-enabled |
Mealie v3 macht vieles besser als v0.5.x — OIDC-Support, aktive Entwicklung, besseres UI. Der Migrationspfad ist solide, wenn man weiß wo die Tücken sind.