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

Πώς να κάνετε self-host το Grocy το 2026: δεδομένα αποθέματος, ζώνη ώρας και αντίγραφα ασφαλείας

Κάντε self-host το Grocy με σωστές θύρες, persistent storage, HTTPS, secrets, αντίγραφα ασφαλείας και ελέγχους αναβάθμισης. Μάθετε πώς να διορθώσετε το πρόβλημα όταν η βάση SQLite δεν μπορεί να γράψει.

Αντιμετωπίστε το Grocy ως ένα μικρό σύστημα και όχι ως ένα Docker image. Ο στόχος του Grocy για τον χρήστη είναι σαφής: παρακολούθηση αποθέματος του νοικοκυριού, ειδών παντοπωλείου, εργασιών και εξοπλισμού. Η εγκατάσταση είναι αποδεκτή μόνο όταν μπορείτε να αντικαταστήσετε τα προεπιλεγμένα στοιχεία σύνδεσης, να προσθέσετε ένα προϊόν, να καταγράψετε μια αγορά και κατανάλωση, να σαρώσετε ένα barcode και να ενεργοποιήσετε μια υπενθύμιση για εργασία ή λήξη.

Αυτή η διάκριση εντοπίζει το failure mode που συναντούν οι operators μετά τις τοπικές δοκιμές: η βάση SQLite δεν μπορεί να γράψει ή οι προγραμματισμένες εργασίες χρησιμοποιούν λάθος ζώνη ώρας. Κάνει επίσης το πλάνο για αντίγραφα ασφαλείας και αναβαθμίσεις αρκετά συγκεκριμένο, ώστε να μπορεί να δοκιμαστεί.

Θύρες, διεργασίες και private services

Ένα χρήσιμο διάγραμμα του Grocy δείχνει το public route, την private port 80, το όριο του state και κάθε υποστηρικτική απαίτηση. Σημειώστε ποια βέλη μεταφέρουν credentials και ποια αντιστοιχούν σε συνηθισμένη κίνηση χρηστών. Η απαίτηση του local runtime είναι ένα durable config volume και προαιρετική πρόσβαση σε συσκευή barcode. Δώστε μέγεθος και παρακολουθήστε αυτόν τον πόρο μαζί με το container, αντί να εκθέσετε μια άσχετη network service.

Επαληθεύστε το διάγραμμα με μία πραγματική ενέργεια: αντικαταστήστε τα προεπιλεγμένα στοιχεία σύνδεσης, προσθέστε ένα προϊόν, καταγράψτε μια αγορά και κατανάλωση, σαρώστε ένα barcode και ενεργοποιήστε μια υπενθύμιση για εργασία ή λήξη. Η πιθανότερη πίεση προέρχεται από τις εγγραφές στη SQLite, τις uploaded images, τα scheduled jobs και την κίνηση από συσκευές του νοικοκυριού. Παρακολουθήστε αυτήν τη διαδρομή αντί να αντιμετωπίζετε όλα τα HTTP requests ως ισοδύναμα.

Παρακολουθήστε το workload, όχι μόνο το container

Παρατηρήστε την εργασία που εκτελεί το Grocy: εγγραφές στη SQLite, uploaded images, scheduled jobs και κίνηση από συσκευές του νοικοκυριού. Ορίστε limits με επαρκές περιθώριο για αυτή την εργασία και αποφύγετε ένα liveness probe που ανταγωνίζεται τους ίδιους πόρους. Ο έλεγχος του operator θα πρέπει και πάλι να επιχειρεί, σε προγραμματισμένη βάση, να αντικαταστήσει τα προεπιλεγμένα στοιχεία σύνδεσης, να προσθέσει ένα προϊόν, να καταγράψει μια αγορά και κατανάλωση, να σαρώσει ένα barcode και να ενεργοποιήσει μια υπενθύμιση για εργασία ή λήξη.

Για τις ενημερώσεις, θυμηθείτε ότι τα database migrations του Grocy και τα custom extensions πρέπει να δοκιμάζονται εκ των προτέρων σε έναν αντίγραφο του config directory. Κάντε deploy την υποψήφια έκδοση πάνω σε ένα αντίγραφο που έχει ανακτηθεί και επαναλάβετε το γνωστό test. Αν η βάση SQLite δεν μπορεί να γράψει ή οι προγραμματισμένες εργασίες χρησιμοποιούν λάθος ζώνη ώρας, χρησιμοποιήστε τα runtime logs και το πραγματικό network request για να εντοπίσετε ποια παραδοχή άλλαξε.

Τι πρέπει να περάσει πριν φτάσουν πραγματικά δεδομένα στο Grocy

Ένα production gate για το Grocy θα πρέπει να μπορεί να εκτελεστεί από κάποιον που δεν δημιούργησε το deployment. Δώστε σε αυτό το άτομο την pinned version, έναν test account χωρίς ευαίσθητα δεδομένα και την εξής εργασία: να αντικαταστήσει τα προεπιλεγμένα στοιχεία σύνδεσης, να προσθέσει ένα προϊόν, να καταγράψει μια αγορά και κατανάλωση, να σαρώσει ένα barcode και να ενεργοποιήσει μια υπενθύμιση για εργασία ή λήξη. Αν οι οδηγίες απαιτούν undocumented πρόσβαση μέσω shell, η υπηρεσία δεν είναι ακόμη operationally ready.

Επαναλάβετε το gate αφού αντικαταστήσετε μόνο το container. Στη συνέχεια, επαναφέρετε τη βάση δεδομένων, τα uploaded files, τις συνταγές και τις ρυθμίσεις σε κενή υποδομή και αποδείξτε ότι το απόθεμα, οι συνταγές, οι εργασίες, ο εξοπλισμός και το ιστορικό επανέρχονται, καθώς και ότι η επόμενη προγραμματισμένη υπενθύμιση έχει τη σωστή ημερομηνία. Μετρήστε τις εγγραφές στη SQLite, τα uploaded images, τα scheduled jobs και την κίνηση από συσκευές του νοικοκυριού και στις δύο επιτυχημένες εκτελέσεις. Οι απρόσμενες διαφορές συχνά αποκαλύπτουν ένα cache, index, worker ή data mount που λείπει.

Προσθέστε μια άσκηση αντιμετώπισης failure: υποβάλετε ακίνδυνο input κοντά στο όριο πόρων ή format που σχετίζεται με αυτό το boundary: η βάση SQLite δεν μπορεί να γράψει ή οι προγραμματισμένες εργασίες χρησιμοποιούν λάθος ζώνη ώρας. Το Grocy θα πρέπει να εμφανίσει ένα χρήσιμο σφάλμα, να διατηρήσει το υπάρχον state και να ανακάμψει όταν επανέλθει η έγκυρη συνθήκη. Αποθηκεύστε τα timestamps και τις σχετικές γραμμές των logs, με τα secrets redacted. Αυτά τα στοιχεία γίνονται η αναφορά για την επόμενη αλλαγή image ή configuration.

Δημιουργήστε ένα Grocy container που μπορεί να αντικατασταθεί

Χρησιμοποιήστε μια εντολή που εκθέτει κάθε σημαντική επιλογή. Αυτό το baseline δεσμεύει το Grocy στο host loopback, προσθέτει τα γνωστά data mounts και παρέχει την πρώτη απαιτούμενη ρύθμιση. Επιβεβαιώστε την τοπική απαίτηση πριν από την έκθεση: ένα durable config volume και προαιρετική πρόσβαση σε συσκευή barcode.

docker run -d \
  --name grocy \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  -v grocy-data:/config \
  lscr.io/linuxserver/grocy:latest

Αντικαταστήστε τα floating tags με μια tested version ή digest. Μετά την εκκίνηση, ελέγξτε το docker logs --tail 200 grocy και επιβεβαιώστε ότι η διεργασία ακούει στη θύρα 80. Στη συνέχεια, εκτελέστε το acceptance action του Grocy. Η απόκριση της root page δεν μπορεί να αποδείξει ότι ολοκληρώνεται επιτυχώς όλο το σενάριο: αντικατάσταση των προεπιλεγμένων στοιχείων σύνδεσης, προσθήκη προϊόντος, καταγραφή αγοράς και κατανάλωσης, σάρωση barcode και ενεργοποίηση υπενθύμισης για εργασία ή λήξη.

Σχεδιάστε το restore του Grocy πριν από το launch

Προστατέψτε το state του Grocy πριν βελτιστοποιήσετε το container του. Το απαιτούμενο σύνολο είναι η βάση δεδομένων, τα uploaded files, οι συνταγές και οι ρυθμίσεις. Κάντε mount το /config πριν από το bootstrap, γράψτε ακίνδυνα sample data και αντικαταστήστε το container για να αποδείξετε ότι η διαδρομή είναι πράγματι persistent. Αν πρέπει να συμφωνούν πολλαπλά stores, τεκμηριώστε τη σειρά με την οποία διακόπτονται οι εγγραφές και λαμβάνονται τα αντίγραφα ασφαλείας.

Διατηρείτε αντίγραφα εκτός του deployment server και κρυπτογραφήστε το υλικό που περιέχει credentials ή private content. Το recovery είναι επιτυχές όταν επανέρχονται το απόθεμα, οι συνταγές, οι εργασίες, ο εξοπλισμός και το ιστορικό, ενώ η επόμενη προγραμματισμένη υπενθύμιση έχει τη σωστή ημερομηνία. Η διάκριση μεταξύ persistent mount και ανεξάρτητου αντιγράφου καλύπτεται στο persistent storage and snapshots.

Δοκιμάστε το Grocy εκτός του server

Επιλέξτε το τελικό hostname του Grocy πριν αποθηκεύσουν οι χρήστες callbacks ή client settings. Στη συνέχεια, δημοσιεύστε το UI μέσω HTTPS και ρυθμίστε τη σωστή ζώνη ώρας. Το platform route θα πρέπει να τερματίζει το TLS μία φορά και να κατευθύνεται στην private port 80.

Εκτελέστε τη transaction αποδοχής εξωτερικά. Αν ο client δεν φτάνει ποτέ στο Grocy, χρησιμοποιήστε το SSL validation checklist για ελέγχους DNS και certificate. Αν το request φτάνει στο Grocy αλλά η βάση SQLite δεν μπορεί να γράψει ή οι προγραμματισμένες εργασίες χρησιμοποιούν λάθος ζώνη ώρας, σταματήστε να αλλάζετε τα proxy redirects και ελέγξτε το application-specific boundary.

Επιλέξτε το trust boundary του Grocy

Κάντε threat modeling για την ενέργεια που εκτελεί το Grocy και όχι μόνο για τη φόρμα σύνδεσης. Εδώ, το high-risk λάθος είναι να παραμείνουν τα προεπιλεγμένα στοιχεία σύνδεσης μετά το setup. Υλοποιήστε αυτό το boundary: αφαιρέστε τα default credentials, επιλέξτε τη σωστή ζώνη ώρας και περιορίστε τα δεδομένα του νοικοκυριού στους προβλεπόμενους χρήστες.

Το Grocy δεν απαιτεί mandatory bootstrap secret σε αυτό το baseline. Αντί γι’ αυτό, προστατέψτε τον πραγματικό administrator account ή το upstream authentication. Μην επιλύετε ένα permission error εκτελώντας το container ως root ή κάνοντας broad mount του host. Τα resource limits ανήκουν επίσης στον σχεδιασμό ασφάλειας, όταν οι χρήστες μπορούν να ενεργοποιήσουν εγγραφές στη SQLite, uploaded images, scheduled jobs και κίνηση από συσκευές του νοικοκυριού.

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

Το Dockup μπορεί να αναλάβει τα replaceable platform pieces: να δρομολογήσει την κίνηση στην port 80, να εκδώσει το domain και το certificate, να injectάρει secrets, να συνδέσει persistent storage και να συνδέσει το Grocy με managed ή privately attached services. Αυτό μπορεί να γίνει είτε σε υποδομή του Dockup είτε σε server που έχετε συνδέσει.

Η εργασία αποδοχής του Grocy παραμένει ρητή. Μετά το one-click deployment, δημοσιεύστε το UI μέσω HTTPS και ρυθμίστε τη σωστή ζώνη ώρας, επιβεβαιώστε την τοπική απαίτηση — ένα durable config volume και προαιρετική πρόσβαση σε συσκευή barcode — και εκτελέστε αυτό το σενάριο: αντικαταστήστε τα προεπιλεγμένα στοιχεία σύνδεσης, προσθέστε ένα προϊόν, καταγράψτε μια αγορά και κατανάλωση, σαρώστε ένα barcode και ενεργοποιήστε μια υπενθύμιση για εργασία ή λήξη. Αυτός ο διαχωρισμός είναι σκόπιμος: το Dockup καταργεί το επαναλαμβανόμενο infrastructure setup χωρίς να προσποιείται ότι οι ρόλοι της εφαρμογής, τα credentials του provider ή η πολιτική restore επιλέγονται αυτόματα.

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

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

Δρομολογήστε το Grocy container στην port 80 μέσω ενός HTTPS origin. Η απαίτηση του local runtime είναι ένα durable config volume και προαιρετική πρόσβαση σε συσκευή barcode. Μην θεωρήσετε ότι το Grocy είναι έτοιμο μέχρι να μπορείτε να αντικαταστήσετε τα προεπιλεγμένα στοιχεία σύνδεσης, να προσθέσετε ένα προϊόν, να καταγράψετε μια αγορά και κατανάλωση, να σαρώσετε ένα barcode και να ενεργοποιήσετε μια υπενθύμιση για εργασία ή λήξη.

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

Κάντε persist το /config και συμπεριλάβετε τη βάση δεδομένων, τα uploaded files, τις συνταγές και τις ρυθμίσεις στο ίδιο recovery manifest. Ένα καθαρό restore του Grocy είναι επιτυχές μόνο όταν επανέρχονται το απόθεμα, οι συνταγές, οι εργασίες, ο εξοπλισμός και το ιστορικό, ενώ η επόμενη προγραμματισμένη υπενθύμιση έχει τη σωστή ημερομηνία.

Απαιτεί το Grocy HTTPS πίσω από reverse proxy;

Χρησιμοποιήστε HTTPS για το public origin του Grocy και διατηρήστε την port 80 στο internal route. Εφαρμόστε σωστά τη ρύθμιση του Grocy: δημοσιεύστε το UI μέσω HTTPS και ρυθμίστε τη σωστή ζώνη ώρας. Για το Grocy, το HTTPS προστατεύει credentials ή user content κατά τη μεταφορά και διατηρεί συνεπή τη συμπεριφορά του client που εξαρτάται από το origin.

Πώς πρέπει να δοκιμάζεται μια αναβάθμιση του Grocy;

Επαναφέρετε το τρέχον state του Grocy σε ένα isolated deployment, εφαρμόστε την υποψήφια έκδοση και επαναλάβετε τη transaction αποδοχής. Δώστε ιδιαίτερη προσοχή, επειδή τα database migrations του Grocy και τα custom extensions πρέπει να δοκιμάζονται εκ των προτέρων σε έναν αντίγραφο του config directory. Διατηρήστε το προηγούμενο Grocy image μέχρι να κατανοήσετε το όριο του data migration και του rollback.