Ευρετήριο ημερολογίουDockup / σημείωση πεδίου
Note / self-host-mealie

Πώς να κάνετε self-hosting του Mealie το 2026: Εισαγωγή συνταγών, χρήστες και backups

Ένας πρακτικός οδηγός για self-hosting του Mealie, με Docker, ports, persistent data, TLS, ασφάλεια, backups και τις αστοχίες που εμποδίζουν τη χρήση σε production. Βήμα προς βήμα.

Το πιο σύντομο demo του Mealie αποδεικνύει απλώς ότι μια διεργασία ακούει στο port 9000. Το production χρειάζεται ισχυρότερες αποδείξεις. Πρέπει να περνά αυτό το σενάριο ακόμη και μετά την αντικατάσταση του container: εισαγωγή ενός URL συνταγής, επαλήθευση της εικόνας της, προσθήκη της σε meal plan και δημιουργία shopping list από αρκετές συνταγές.

Το Mealie εγκαθίσταται για έναν σαφή σκοπό: συνταγές, meal plans και shopping lists. Η συνηθέστερη παγίδα στο deployment είναι να εξαφανίζονται οι εικόνες των συνταγών επειδή το /app/data δεν είναι persistent, επομένως η διαχείριση των public URLs και η διατήρηση της κατάστασης χρειάζονται την ίδια προσοχή με την εκκίνηση της εικόνας.

Καθορίστε το runtime boundary του Mealie

Η μικρότερη υπεύθυνη τοπολογία του Mealie περιλαμβάνει έναν private listener στο 9000, ένα ingress route και ένα τεκμηριωμένο state boundary. Το network contract για το Mealie είναι το Postgres για deployment πολλών χρηστών σε production και το SMTP για προσκλήσεις. Διατηρήστε τα private endpoints σε internal DNS, επιτρέψτε μόνο τις απαραίτητες εξερχόμενες κλήσεις και δώστε στο Mealie ένα service credential με περιορισμένο scope.

Επικυρώστε την τοπολογία ζητώντας από έναν καθαρό client να εισαγάγει ένα URL συνταγής, να επαληθεύσει την εικόνα της, να την προσθέσει σε meal plan και να δημιουργήσει shopping list από αρκετές συνταγές. Παρακολουθήστε τις εισαγωγές συνταγών, την αποθήκευση εικόνων, τα database queries, τα background tasks και τους ταυτόχρονους household users όσο εκτελείται. Το αποτέλεσμα δείχνει αν η επόμενη βελτίωση ανήκει στη μνήμη, στο storage, στο networking ή σε ξεχωριστό worker, αντί να ενθαρρύνει αυθαίρετη αύξηση των πόρων του container.

Έλεγχοι capacity και upgrade

Ένα health check σε κατάσταση αδράνειας λέει λίγα για το Mealie. Παρακολουθήστε τις εισαγωγές συνταγών, την αποθήκευση εικόνων, τα database queries, τα background tasks και τους ταυτόχρονους household users και ενεργοποιήστε alerts για το σύμπτωμα που βιώνουν οι χρήστες: αποτυχία της ενέργειας «εισαγωγή ενός URL συνταγής, επαλήθευση της εικόνας της, προσθήκη της σε meal plan και δημιουργία shopping list από αρκετές συνταγές». Διατηρήστε το liveness local και οικονομικό· αφήστε το readiness να αναφέρει migrations ή initialization χωρίς να προκαλεί restart storm.

Το επικίνδυνο σημείο σε ένα upgrade είναι ότι τα database migrations και οι αλλαγές στον ingredient parser μπορούν να επηρεάσουν τις αποθηκευμένες συνταγές, επομένως ελέγξτε τις εισαγωγές και τις υπάρχουσες εγγραφές. Διαβάστε τα release notes, δημιουργήστε snapshot της κατάστασης, κάντε deploy της έκδοσης-στόχου σε ένα restored αντίγραφο και επαναλάβετε την ενέργεια αποδοχής. Αν οι εικόνες των συνταγών εξαφανίζονται επειδή το /app/data δεν είναι persistent, συσχετίστε το client request με το πρώτο σχετικό application log αντί να διαγράψετε την κατάσταση ή να προσθέσετε redirects χωρίς έλεγχο.

Το release gate του Mealie

Ένα release candidate για το Mealie κερδίζει traffic ολοκληρώνοντας ένα προκαθορισμένο σενάριο: εισαγωγή ενός URL συνταγής, επαλήθευση της εικόνας της, προσθήκη της σε meal plan και δημιουργία shopping list από αρκετές συνταγές. Καταγράψτε το image digest, το effective non-secret configuration, το public origin και τα timestamps για αυτό το σενάριο. Τα test data πρέπει να είναι αναλώσιμα, αλλά αρκετά ρεαλιστικά ώστε να ασκούν την ίδια διαδρομή με αυτήν των χρηστών.

Εκτελέστε το μετά την αντικατάσταση του runtime και, στη συνέχεια, ανακατασκευάστε την υπηρεσία από τη βάση δεδομένων, τις εικόνες συνταγών, τα assets και τις ρυθμίσεις της εφαρμογής. Η αποκατάσταση περνά όταν επιστρέψουν οι συνταγές, οι εικόνες, οι χρήστες, τα meal plans και οι shopping lists και όταν μια γνωστή συνταγή εμφανίζεται σωστά. Συγκρίνετε τις μετρήσεις πόρων για τις εισαγωγές συνταγών, την αποθήκευση εικόνων, τα database queries, τα background tasks και τους ταυτόχρονους household users με την προηγούμενη έκδοση και διερευνήστε κάθε σημαντική απόκλιση πριν από την προώθηση.

Τέλος, εκτελέστε αυτή την ελεγχόμενη αστοχία: αποκλείστε προσωρινά από το test identity την πρόσβαση στο Postgres για deployment πολλών χρηστών σε production και στο SMTP για προσκλήσεις. Επαληθεύστε ότι το Mealie εξηγεί την αποτυχία, δεν καταστρέφει την υπάρχουσα κατάσταση και συνεχίζει μετά την επαναφορά της έγκυρης συνθήκης. Αποθηκεύστε ένα redacted απόσπασμα log και τον χρόνο αποκατάστασης. Συνολικά, αυτοί οι έλεγχοι καλύπτουν τη συμπεριφορά, την ανθεκτικότητα και τη λειτουργικότητα, όχι μόνο το uptime της διεργασίας.

Δημιουργήστε ένα replaceable container του Mealie

Διατηρήστε την αρχική εκτέλεση του Mealie αρκετά reproducible ώστε να μπορεί να ελεγχθεί σε ένα 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

Μην βασίζεστε στο latest αφού υπάρχουν πραγματικά data. Καταγράψτε το working digest, τον user του container και το ownership των mounts. Παρακολουθήστε το application log σε όλη τη διάρκεια ενός πλήρους test — εισαγωγή ενός URL συνταγής, επαλήθευση της εικόνας της, προσθήκη της σε meal plan και δημιουργία shopping list από αρκετές συνταγές — και σημειώστε τυχόν migrations πριν τοποθετήσετε το route πίσω από production traffic.

Εντοπίστε κάθε durable byte στο Mealie

Καταγράψτε κάθε durable artifact: database, εικόνες συνταγών, assets και application settings. Κάντε mount το /app/data πριν από το bootstrap, γράψτε ακίνδυνα sample data και αντικαταστήστε το container για να αποδείξετε ότι το συγκεκριμένο path είναι πράγματι persistent. Συμπεριλάβετε ρυθμίσεις που αλλάζουν τον τρόπο ερμηνείας των αποθηκευμένων δεδομένων, όχι μόνο τον μεγαλύτερο κατάλογο.

Ορίστε retention, αντιγράψτε τα backups εκτός host και εκτελέστε restore σε clean room. Το drill του Mealie ολοκληρώνεται όταν επιστρέψουν οι συνταγές, οι εικόνες, οι χρήστες, τα meal plans και οι shopping lists και όταν μια γνωστή συνταγή εμφανίζεται σωστά. Αν τα snapshots αποτελούν μέρος του πλάνου, χρησιμοποιήστε τον οδηγό PITR έναντι snapshot για να τεκμηριώσετε τι μπορεί να ανακτήσει κάθε μηχανισμός.

Κάντε route στο Mealie χωρίς παραπλανητικό HTTPS

Ορίστε το BASE_URL στο εξωτερικό HTTPS origin. Στείλτε το επιλεγμένο hostname στο port 9000 του container, προωθήστε το αρχικό host και το HTTPS scheme και αποφύγετε τη δημοσίευση δεύτερου direct origin.

Ελέγξτε το Mealie από έναν καθαρό εξωτερικό client. Διαχωρίστε την αποτυχία του ingress από το γνωστό application boundary — οι εικόνες των συνταγών εξαφανίζονται επειδή το /app/data δεν είναι persistent. Ένα σφάλμα certificate, DNS ή 502 ανήκει στο routing· ένα request που φτάνει στο Mealie και αποτυγχάνει αργότερα ανήκει στην application state, στο capacity ή σε supporting requirement. Ο οδηγός για TLS σε custom domain καλύπτει την πρώτη κατηγορία.

Μειώστε τα δικαιώματα που διαθέτει το Mealie

Μετά το πρώτο login, ελέγξτε τι μπορεί να κάνει ένας anonymous visitor, ένας ordinary user και ένας administrator. Η αστοχία του Mealie που πρέπει να αποφύγετε είναι να παραμείνει ανοιχτό το sign-up ή να μην αλλάξει το αρχικό password του admin. Η προβλεπόμενη πολιτική είναι να αντικαταστήσετε το αρχικό password του admin, να κλείσετε το sign-up όταν ολοκληρωθεί το enrollment και να προστατεύσετε τα ιδιωτικά δεδομένα του νοικοκυριού.

Το BASE_URL είναι configuration και όχι secret· διατηρήστε την τιμή του explicit, προστατεύοντας παράλληλα τα ξεχωριστά credentials που χρησιμοποιεί το Mealie. Διατηρήστε ξεχωριστούς τους dependency accounts από τους human accounts, αρνηθείτε το μη χρησιμοποιούμενο egress όπου είναι πρακτικό και περιορίστε την εργασία που επηρεάζεται από τις εισαγωγές συνταγών, την αποθήκευση εικόνων, τα database queries, τα background tasks και τους ταυτόχρονους household users.

Ένα deployment στο Dockup χρειάζεται και πάλι acceptance test για το Mealie

Το routing, τα certificates, η αντικατάσταση υπηρεσιών και το attached storage είναι λογικοί στόχοι για automation. Το Dockup τα αναλαμβάνει για το Mealie και μπορεί να κάνει provision το σχετικό managed database ή να συνδεθεί σε υπηρεσίες στον server του ίδιου του πελάτη.

Αυτό που δεν πρέπει να επινοήσει είναι η trust policy του Mealie. Μετά το deployment, ορίστε το BASE_URL στο εξωτερικό HTTPS origin, επιβάλετε αυτό το boundary — αντικαταστήστε το αρχικό password του admin, κλείστε το sign-up όταν ολοκληρωθεί το enrollment και προστατεύστε τα ιδιωτικά δεδομένα του νοικοκυριού — και επαληθεύστε το αποτέλεσμα αυτού του σεναρίου: εισαγωγή ενός URL συνταγής, επαλήθευση της εικόνας της, προσθήκη της σε meal plan και δημιουργία shopping list από αρκετές συνταγές. Το αποτέλεσμα είναι one-click infrastructure με application-specific acceptance test.

Συχνές ερωτήσεις

Τι χρειάζεται το Mealie για deployment σε production;

Κάντε route το container του Mealie στο port 9000 μέσω ενός HTTPS origin. Η supporting network requirement είναι το Postgres για deployment πολλών χρηστών σε production και το SMTP για προσκλήσεις. Μην θεωρήσετε το Mealie έτοιμο μέχρι να μπορείτε να εισαγάγετε ένα URL συνταγής, να επαληθεύσετε την εικόνα της, να την προσθέσετε σε meal plan και να δημιουργήσετε shopping list από αρκετές συνταγές.

Ποια δεδομένα του Mealie πρέπει να περιλαμβάνονται σε backup;

Κάντε persistent το /app/data και συμπεριλάβετε τη database, τις εικόνες συνταγών, τα assets και τα application settings στο ίδιο recovery manifest. Ένα clean Mealie restore περνά μόνο όταν επιστρέψουν οι συνταγές, οι εικόνες, οι χρήστες, τα meal plans και οι shopping lists και όταν μια γνωστή συνταγή εμφανίζεται σωστά.

Χρειάζεται το Mealie HTTPS πίσω από reverse proxy;

Χρησιμοποιήστε HTTPS για το public origin του Mealie και διατηρήστε το port 9000 στο internal route. Εφαρμόστε σωστά τη ρύθμιση του Mealie: ορίστε το BASE_URL στο εξωτερικό HTTPS origin. Για το Mealie, το HTTPS προστατεύει τα credentials ή το περιεχόμενο των χρηστών κατά τη μεταφορά και διατηρεί συνεπή τη client behavior που εξαρτάται από το origin.

Πώς πρέπει να ελεγχθεί ένα upgrade του Mealie;

Κάντε restore την τρέχουσα κατάσταση του Mealie σε ένα isolated deployment, εφαρμόστε την candidate version και επαναλάβετε το acceptance transaction. Δώστε ιδιαίτερη προσοχή, επειδή τα database migrations και οι αλλαγές στον ingredient parser μπορούν να επηρεάσουν τις αποθηκευμένες συνταγές, επομένως ελέγξτε τις εισαγωγές και τις υπάρχουσες εγγραφές. Διατηρήστε το προηγούμενο Mealie image μέχρι να κατανοήσετε το όριο των data migrations και του rollback.