JournalindeksDockup / feltnote
Note / self-host-mealie

Sådan self-hoster du Mealie i 2026: Import af opskrifter, brugere og backups

En praktisk guide til self-hosting af Mealie med fokus på Docker, porte, persistent data, TLS, sikkerhed, backups og de fejl, der forhindrer produktionsbrug. Trin for trin.

Den korteste Mealie-demo beviser, at en proces lytter på port 9000. Produktion kræver stærkere dokumentation. Følgende scenarie skal fungere, også efter at containeren er blevet udskiftet: Importér en opskrifts-URL, verificér billedet, føj opskriften til en madplan, og generér en indkøbsliste ud fra flere opskrifter.

Mealie deployes med et klart formål: opskrifter, madplaner og indkøbslister. Den mest almindelige deployment-fælde er, at opskriftsbilleder forsvinder, fordi /app/data ikke er persistent. Derfor skal håndtering af offentlige URL'er og persistent state have samme opmærksomhed som opstart af billedet.

Afgræns Mealie-runtime

Den mindst omfattende, men forsvarlige Mealie-topologi består af én privat listener på port 9000, en ingress-route og en dokumenteret state-grænse. Mealie-netværkskontrakten er Postgres til en multi-user-produktionsdeployment og SMTP til invitationer. Hold private endpoints på intern DNS, tillad kun nødvendige udgående kald, og giv Mealie en afgrænset service credential.

Validér topologien ved at bede en ren klient om at importere en opskrifts-URL, verificere billedet, føje den til en madplan og generere en indkøbsliste ud fra flere opskrifter. Overvåg opskriftsimport, billedlagring, databaseforespørgsler, background tasks og samtidige husstandsbrugere, mens scenariet kører. Resultatet viser, om den næste forbedring hører hjemme i memory, storage, networking eller en separat worker, i stedet for at tilskynde til tilfældig dimensionering af containere.

Kapacitet og upgrade-tjek

Et idle health check siger ikke meget om Mealie. Overvåg opskriftsimport, billedlagring, databaseforespørgsler, background tasks og samtidige husstandsbrugere, og giv alarm på det symptom, brugerne oplever: at handlingen “importér en opskrifts-URL, verificér billedet, føj den til en madplan, og generér en indkøbsliste ud fra flere opskrifter” mislykkes. Hold liveness lokal og billig, og lad readiness rapportere migrations eller initialisering uden at forårsage en restart storm.

Det risikable ved upgrades er, at databasemigrationer og ændringer i ingredient-parseren kan påvirke gemte opskrifter, så test imports og eksisterende records. Læs release notes, tag et snapshot af state, deploy målversionen mod en gendannet kopi, og gentag accept-handlingen. Hvis opskriftsbilleder forsvinder, fordi /app/data ikke er persistent, skal du sammenholde klientforespørgslen med den første relevante applikationslog i stedet for blindt at slette state eller tilføje redirects.

Mealie release gate

En release candidate til Mealie får trafik ved at gennemføre et fast scenarie: Importér en opskrifts-URL, verificér billedet, føj opskriften til en madplan, og generér en indkøbsliste ud fra flere opskrifter. Gem image digest, effektiv ikke-hemmelig konfiguration, public origin og timestamps for scenariet. Testdataene skal kunne bortskaffes, men være realistiske nok til at gennemføre den samme sti som brugerne.

Kør scenariet efter at have udskiftet runtime, og rebuild derefter servicen ud fra database, opskriftsbilleder, assets og applikationsindstillinger. Recovery er godkendt, når opskrifter, billeder, brugere, madplaner og indkøbslister er tilbage, og en kendt opskrift renderes korrekt. Sammenlign ressourceforbruget for opskriftsimport, billedlagring, databaseforespørgsler, background tasks og samtidige husstandsbrugere med den forrige release, og undersøg betydelige afvigelser før promotion.

Udfør til sidst denne kontrollerede fejl: Nægt midlertidigt testidentiteten adgang til Postgres til en multi-user-produktionsdeployment og SMTP til invitationer. Kontrollér, at Mealie forklarer fejlen, ikke beskadiger eksisterende state og genoptager driften, når den korrekte tilstand er gendannet. Gem et redigeret logudsnit og recovery-tiden. Tilsammen dækker disse checks adfærd, persistens og driftbarhed i stedet for kun proces-uptime.

Byg en Mealie-container, der kan udskiftes

Hold den første Mealie-invocation reproducerbar nok til at kunne gennemgås i et pull request.

docker run -d \
  --name mealie \
  --restart unless-stopped \
  -p 127.0.0.1:9000:9000 \
  -v mealie-data:/app/data \
  -e BASE_URL=https://app.example.com \
  ghcr.io/mealie-recipes/mealie:latest

Stol ikke på latest, når der først findes rigtige data. Gem den fungerende digest, container-brugeren og ejerskabet af mountet. Følg applikationsloggen gennem en komplet test — importér en opskrifts-URL, verificér billedet, føj opskriften til en madplan, og generér en indkøbsliste ud fra flere opskrifter — og notér eventuelle migrations, før routen placeres bag produktionstrafik.

Find alle persistente bytes i Mealie

Lav en fortegnelse over alle persistente artefakter: database, opskriftsbilleder, assets og applikationsindstillinger. Mount /app/data før bootstrap, skriv harmløse eksempeldata, og udskift containeren for at bevise, at stien faktisk er persistent. Medtag også konfiguration, der ændrer, hvordan gemte data fortolkes, ikke kun den største mappe.

Indstil retention, kopiér backups væk fra hosten, og udfør en clean-room restore. Mealie-øvelsen er gennemført, når opskrifter, billeder, brugere, madplaner og indkøbslister er tilbage, og en kendt opskrift renderes korrekt. Hvis snapshots indgår i planen, kan du bruge vejledningen om PITR versus snapshots til at dokumentere, hvad hver mekanisme kan gendanne.

Rout Mealie uden at give et forkert indtryk af HTTPS

Indstil BASE_URL til den eksterne HTTPS-origin. Send det valgte hostname til containerport 9000, videresend den oprindelige host og HTTPS-scheme, og undgå at eksponere en ekstra direkte origin.

Test Mealie fra en ren ekstern klient. Adskil ingress-fejl fra den kendte applikationsgrænse — opskriftsbilleder forsvinder, fordi /app/data ikke er persistent. En certifikat-, DNS- eller 502-fejl hører til routing; en forespørgsel, der når Mealie og fejler senere, hører til applikationens state, kapacitet eller et understøttende krav. Guiden til TLS med custom domain dækker den første gruppe.

Begræns de rettigheder, Mealie har

Efter det første login skal du gennemgå, hvad en anonym besøgende, en almindelig bruger og en administrator hver især kan gøre. Den Mealie-fejl, du skal undgå, er at lade signup være åbent eller beholde den første admin-adgangskode. Den tilsigtede politik er at udskifte den første admin-adgangskode, lukke for signup, når tilmeldingen er afsluttet, og beskytte private husstandsdata.

BASE_URL er konfiguration, ikke en secret; hold værdien eksplicit, og beskyt samtidig de separate credentials, som Mealie bruger. Hold dependency-konti adskilt fra menneskelige konti, afvis ubrugt egress, hvor det er praktisk, og sæt grænser for arbejde, der påvirkes af opskriftsimport, billedlagring, databaseforespørgsler, background tasks og samtidige husstandsbrugere.

En Dockup-deployment kræver stadig en Mealie-accepttest

Routing, certifikater, udskiftning af services og tilknyttet storage er fornuftige mål for automatisering. Dockup håndterer dette for Mealie og kan provisionere den tilknyttede managed database eller oprette forbindelse til services på kundens egen server.

Det, Dockup ikke bør opfinde, er Mealie's trust policy. Efter deployment skal du indstille BASE_URL til den eksterne HTTPS-origin, håndhæve denne grænse — udskift den første admin-adgangskode, luk for signup, når tilmeldingen er afsluttet, og beskyt private husstandsdata — og verificere resultatet af dette scenarie: Importér en opskrifts-URL, verificér billedet, føj opskriften til en madplan, og generér en indkøbsliste ud fra flere opskrifter. Resultatet er infrastruktur med ét klik og en applikationsspecifik accepttest.

Ofte stillede spørgsmål

Hvad kræver Mealie til en produktionsdeployment?

Rout Mealie-containeren på port 9000 gennem én HTTPS-origin. Det understøttende netværkskrav er Postgres til en multi-user-produktionsdeployment og SMTP til invitationer. Erklær ikke Mealie klar, før du kan importere en opskrifts-URL, verificere billedet, føje opskriften til en madplan og generere en indkøbsliste ud fra flere opskrifter.

Hvilke Mealie-data skal med i en backup?

Gør /app/data persistent, og medtag database, opskriftsbilleder, assets og applikationsindstillinger i det samme recovery-manifest. En ren Mealie-restore er kun godkendt, når opskrifter, billeder, brugere, madplaner og indkøbslister er tilbage, og en kendt opskrift renderes korrekt.

Kræver Mealie HTTPS bag en reverse proxy?

Brug HTTPS til den offentlige Mealie-origin, og behold port 9000 på den interne route. Anvend Mealie-indstillingen korrekt: Indstil BASE_URL til den eksterne HTTPS-origin. For Mealie beskytter HTTPS credentials eller brugerindhold under transport og sikrer ensartet klientadfærd, der afhænger af origin.

Hvordan bør en Mealie-upgrade testes?

Gendan den aktuelle Mealie-state i en isoleret deployment, anvend candidate-versionen, og gentag dens accepttransaktion. Vær særligt opmærksom, fordi databasemigrationer og ændringer i ingredient-parseren kan påvirke gemte opskrifter, så test imports og eksisterende records. Behold det tidligere Mealie-image, indtil grænsen for datamigration og rollback er forstået.