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

Πώς να κάνετε self-host το Homepage το 2026: Allowed Hosts, widgets και ρυθμίσεις

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

Υπάρχουν δύο εκδοχές του «τρέχω το Homepage»: είτε υπάρχει ένα container είτε η υπηρεσία ολοκληρώνει την πραγματική της δουλειά. Μόνο η δεύτερη έχει σημασία. Εδώ, η απόδειξη είναι να φορτώσετε services και bookmarks, να καλέσετε αρκετά live widgets, να δοκιμάσετε την αναζήτηση και να κάνετε restart αφού επεξεργαστείτε ένα YAML configuration file.

Το Homepage εξυπηρετεί τον εξής σκοπό: είναι μια start page με live widgets για self-hosted services. Το deployment πρέπει να διατηρεί τα στοιχεία που υποστηρίζουν αυτήν τη συμπεριφορά· ένα port, ένα volume και ένα certificate είναι είσοδοι, όχι το αποτέλεσμα.

Επιλέξτε την ελάχιστη βιώσιμη τοπολογία του Homepage

Ένα χρήσιμο διάγραμμα του Homepage δείχνει το public route, το private port 3000, το όριο του state και κάθε υποστηρικτική απαίτηση. Σημειώστε ποια βέλη μεταφέρουν credentials και ποια είναι απλή user traffic. Η εξωτερική απαίτηση του Homepage είναι read-only configuration και credentials για προαιρετικά service widgets. Δοκιμάστε το outbound DNS, το TLS και τη συμπεριφορά των providers χωρίς να δημοσιεύσετε άλλη inbound service.

Επιβεβαιώστε το διάγραμμα με μία πραγματική ενέργεια: φορτώστε services και bookmarks, καλέστε αρκετά live widgets, δοκιμάστε την αναζήτηση και κάντε restart αφού επεξεργαστείτε ένα YAML configuration file. Η πιθανότερη πίεση προέρχεται από το widget fan-out, τα αργά downstream APIs, το DNS resolution και το refresh rate του browser dashboard· παρακολουθήστε αυτήν τη διαδρομή αντί να αντιμετωπίζετε όλα τα HTTP requests ως ισοδύναμα.

Κάντε upgrade στο Homepage χωρίς εικασίες

Το πρώτο χρήσιμο operational metric για το Homepage είναι αν μπορεί να φορτώσει services και bookmarks, να καλέσει αρκετά live widgets, να δοκιμάσει την αναζήτηση και να κάνει restart αφού επεξεργαστείτε ένα YAML configuration file. Συνδυάστε το με saturation signals για το widget fan-out, τα αργά downstream APIs, το DNS resolution και το refresh rate του browser dashboard. Ένα process-only probe δεν πρέπει να καλεί expensive dependencies ούτε να κάνει restart στο container επειδή ένα upstream δεν ήταν προσωρινά διαθέσιμο.

Αντιμετωπίστε τα upgrades ως αλλαγές δεδομένων, επειδή τα configuration keys και τα widget integrations μπορούν να αλλάξουν, επομένως επικυρώστε το YAML και τη συμπεριφορά των providers πριν από ένα image update. Κάντε pin τις versions, δοκιμάστε τη διαδικασία σε restored state και διατηρήστε διαθέσιμο το προηγούμενο image μέχρι να παραμένει έγκυρο ένα rollback. Όταν απορρίπτεται το host ή το YAML indentation εμποδίζει τη φόρτωση του config, διατηρήστε τα logs από πριν από το restart· συνήθως περιέχουν το αιτιακό μήνυμα.

Ένα production acceptance run για το Homepage

Πριν εμφανιστούν πραγματικοί χρήστες, δημιουργήστε ένα release worksheet για το Homepage. Πρέπει να αναφέρει το pinned image, το port 3000, το canonical origin, τα persistent paths και τον υπεύθυνο για το read-only configuration και τα credentials των προαιρετικών service widgets. Επισυνάψτε το αναμενόμενο αποτέλεσμα αυτής της συναλλαγής: φόρτωση services και bookmarks, κλήση αρκετών live widgets, δοκιμή αναζήτησης και restart μετά την επεξεργασία ενός YAML configuration file.

Χρησιμοποιήστε το worksheet μετά από ένα κανονικό replacement και μετά από ένα clean restore. Η αποκατάσταση γίνεται αποδεκτή μόνο αν επιστρέψουν τα services, τα bookmarks, τα widgets και τα custom assets και όλα τα critical widgets διαχειρίζονται ορατά τις αστοχίες των downstream dependencies. Συλλέξτε επίσης ένα σύντομο resource trace που καλύπτει το widget fan-out, τα αργά downstream APIs, το DNS resolution και το refresh rate του browser dashboard· κρατήστε το δίπλα στο release, ώστε οι μελλοντικές αλλαγές χωρητικότητας να συγκρίνονται με το ίδιο workload.

Συμπεριλάβετε μία ελεγχόμενη αστοχία: αρνηθείτε προσωρινά τη δοκιμαστική διαδρομή που χρησιμοποιείται από το read-only configuration και τα credentials των προαιρετικών service widgets. Επιβεβαιώστε ότι το Homepage αναφέρει το πρόβλημα στο σωστό boundary, επαναφέρετε τη σωστή συνθήκη και εκτελέστε ξανά τη συναλλαγή. Αυτό ελέγχει την ορατότητα των errors και όχι απλώς την επιτυχία, αποτρέποντας ένα interface που φαίνεται υγιές από το να αποκρύπτει έναν broken worker, callback ή database connection.

Κάντε το startup του Homepage reproducible

Χρησιμοποιήστε το container ως replaceable runtime και όχι ως τοποθεσία της αλήθειας.

docker run -d \
  --name homepage \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  -v homepage-data:/app/config \
  -e HOMEPAGE_ALLOWED_HOSTS=home.example.com \
  ghcr.io/gethomepage/homepage:latest

Επιτρέψτε και επαληθεύστε τη outbound ή client-side διαδρομή που απαιτείται για το read-only configuration και τα credentials των προαιρετικών service widgets. Ελέγξτε τον container user, τα writable paths και τον bound listener πριν το εκθέσετε. Εκτελέστε την πλήρη ενέργεια — φόρτωση services και bookmarks, κλήση αρκετών live widgets, δοκιμή αναζήτησης και restart μετά την επεξεργασία ενός YAML configuration file — και αποθηκεύστε την ακριβή image reference που παρήγαγε το αποτέλεσμα.

Διαχωρίστε τα replaceable containers από τα lasting data

Το durable recovery set αποτελείται από configuration files, bookmarks, services και custom assets. Κάντε mount το /app/config πριν από το bootstrap, γράψτε harmless sample data και αντικαταστήστε το container, ώστε να αποδείξετε ότι αυτή η διαδρομή είναι πράγματι persistent. Ένα volume προστατεύει τα δεδομένα από την αντικατάσταση του container, όχι όμως από απώλεια του host, accidental deletion ή corruption σε επίπεδο εφαρμογής.

Δημιουργήστε backups που κατανοούν την πηγή των δεδομένων: χρησιμοποιήστε logical dumps για live databases όταν απαιτείται και αντιγράψτε files μόνο από consistent state. Κρατήστε ένα encrypted αντίγραφο μακριά από το Homepage host. Το acceptance criterion για ένα restore είναι συγκεκριμένο — τα services, τα bookmarks, τα widgets και τα custom assets επιστρέφουν και όλα τα critical widgets διαχειρίζονται ορατά τις αστοχίες των downstream dependencies. Ο οδηγός για backups που έχουν δοκιμαστεί με restore εξηγεί γιατί η επιτυχία ενός job από μόνη της δεν επαρκεί.

Domains, proxy headers και port 3000

Ο browser, ο API client και το Homepage πρέπει να συμφωνούν σε ένα origin. Για να το εξασφαλίσετε, ορίστε allowed hosts για το ακριβές domain και το proxy hostname. Διατηρήστε το αρχικό host και protocol, κρατώντας παράλληλα το port 3000 μη διαθέσιμο ως ανταγωνιστική public address.

Ο οδηγός αντιμετώπισης προβλημάτων όταν το site είναι εκτός λειτουργίας βοηθά να ξεχωρίσετε μια μη προσβάσιμη route από μια εφαρμογή που απαντά. Αυτή η διάκριση έχει σημασία εδώ: το host απορρίπτεται ή το YAML indentation εμποδίζει τη φόρτωση του config. Μόνο το πρώτο διορθώνεται με αλλαγές στο ingress· το δεύτερο απαιτεί έλεγχο των logs, του state ή του workload του Homepage.

Αποφάσεις ασφάλειας ειδικά για το Homepage

Μην κληρονομείτε παραδοχές ασφάλειας από ένα local tutorial. Το ειδικό ζήτημα του Homepage είναι η αποθήκευση widget API keys σε public repository. Επομένως, το production πρέπει να ορίζει με ακρίβεια τα allowed hosts και να διατηρεί τα widget API keys σε environment ή σε secret-backed config, όχι σε public repository.

Το HOMEPAGE_ALLOWED_HOSTS ελέγχει τη συμπεριφορά και όχι την εμπιστευτικότητα· επικυρώστε τον τύπο και την τιμή του και αποθηκεύστε τα πραγματικά credentials του Homepage ξεχωριστά. Περιορίστε την πρόσβαση στο filesystem και στο network, προστατέψτε τα setup endpoints και ορίστε όρια για uploads, requests ή execution γύρω από το widget fan-out, τα αργά downstream APIs, το DNS resolution και το refresh rate του browser dashboard.

Πού μειώνει το Dockup την εργασία για το Homepage

Για το Homepage, το Dockup είναι πιο χρήσιμο στο boundary ανάμεσα σε ένα image και μια durable service. Διατηρεί συνδεδεμένα το route προς το 3000, το TLS, τις secret values και το storage κατά τις αντικαταστάσεις των containers, είτε το compute ανήκει στο Dockup είτε στον attached server σας.

Ολοκληρώστε με application knowledge: ορίστε allowed hosts για το ακριβές domain και το proxy hostname· επιτρέψτε και επαληθεύστε το read-only configuration και τα credentials των προαιρετικών service widgets· και εκτελέστε την εξής επαλήθευση: φορτώστε services και bookmarks, καλέστε αρκετά live widgets, δοκιμάστε την αναζήτηση και κάντε restart αφού επεξεργαστείτε ένα YAML configuration file. Κρατήστε το αποτέλεσμα ως deployment check, ώστε το επόμενο image update να αξιολογηθεί με βάση τη συμπεριφορά και όχι την κατάσταση του container.

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

Τι χρειάζεται το Homepage για ένα production deployment;

Δρομολογήστε το Homepage container στο port 3000 μέσω ενός HTTPS origin. Η εξωτερική απαίτηση για το delivery είναι read-only configuration και credentials για προαιρετικά service widgets. Μην θεωρήσετε το Homepage έτοιμο μέχρι να μπορείτε να φορτώσετε services και bookmarks, να καλέσετε αρκετά live widgets, να δοκιμάσετε την αναζήτηση και να κάνετε restart αφού επεξεργαστείτε ένα YAML configuration file.

Ποια δεδομένα του Homepage ανήκουν σε backup;

Κάντε persist το /app/config και συμπεριλάβετε configuration files, bookmarks, services και custom assets στο ίδιο recovery manifest. Ένα clean Homepage restore θεωρείται επιτυχές μόνο όταν επιστρέψουν τα services, τα bookmarks, τα widgets και τα custom assets και όλα τα critical widgets διαχειρίζονται ορατά τις αστοχίες των downstream dependencies.

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

Χρησιμοποιήστε HTTPS για το public Homepage origin και διατηρήστε το port 3000 στην internal route. Εφαρμόστε σωστά τη ρύθμιση του Homepage: ορίστε allowed hosts για το ακριβές domain και το proxy hostname. Για το Homepage, το HTTPS προστατεύει τα credentials ή το user content κατά τη μεταφορά και διατηρεί συνεπή τη client behavior που εξαρτάται από το origin.

Πώς πρέπει να δοκιμάζεται ένα upgrade του Homepage;

Κάντε restore το τρέχον state του Homepage σε ένα isolated deployment, εφαρμόστε την υποψήφια version και επαναλάβετε το acceptance transaction. Δώστε ιδιαίτερη προσοχή, επειδή τα configuration keys και τα widget integrations μπορούν να αλλάξουν, επομένως επικυρώστε το YAML και τη συμπεριφορά των providers πριν από ένα image update. Διατηρήστε το προηγούμενο Homepage image μέχρι να κατανοηθούν τα όρια του data migration και του rollback.