Πώς να κάνετε self-host το Directus το 2026: βάση δεδομένων, uploads και public URL
Κάντε self-host το Directus με σωστές θύρες, persistent storage, HTTPS, secrets, backups και ελέγχους αναβάθμισης. Μάθετε πώς να διορθώσετε περιπτώσεις όπου το database client είναι λάθος.
Αντιμετωπίστε το Directus ως ένα μικρό σύστημα και όχι ως ένα Docker image. Ο στόχος του Directus από την πλευρά του χρήστη είναι σαφής: REST και GraphQL API, καθώς και admin interface πάνω στα δεδομένα σας· η εγκατάσταση είναι αποδεκτή μόνο όταν μπορείτε να κάνετε bootstrap τον administrator, να δημιουργήσετε collection και role, να γράψετε μέσω REST, να κάνετε query μέσω GraphQL και να ανεβάσετε ένα αρχείο.
Αυτή η διάκριση αποκαλύπτει το failure mode που συναντούν οι operators μετά τοπικές δοκιμές: το database client είναι λάθος ή το upload storage δεν είναι εγγράψιμο. Κάνει επίσης το πλάνο για backup και upgrade αρκετά συγκεκριμένο ώστε να μπορεί να δοκιμαστεί.
Αποδείξτε ότι το Directus επιβιώνει από αντικατάσταση
Ένα container image μπορεί να ληφθεί ξανά· η βάση δεδομένων, τα uploads, τα extensions, τα flows και τα schema snapshots όχι. Κάντε mount το /directus/database πριν από το bootstrap, γράψτε ακίνδυνα sample data και αντικαταστήστε το container, ώστε να αποδείξετε ότι η συγκεκριμένη διαδρομή είναι πράγματι persistent. Ελέγξτε το effective mount αντί να εμπιστεύεστε ένα όνομα αρχείου Compose και βεβαιωθείτε ότι ο runtime user μπορεί να γράψει εκεί όπου αναμένει το Directus.
Επιλέξτε retention και έναν προορισμό εκτός host και, στη συνέχεια, κάντε πρόβα ανάκτησης χωρίς να αγγίξετε το production. Η δοκιμή θεωρείται επιτυχής μόνο όταν επανέλθουν το schema, τα roles, τα flows, τα items, τα extensions και τα uploads και περάσουν επιτυχώς τα probes τόσο του REST όσο και του GraphQL. Για state που βασίζεται σε database, συνδυάστε storage snapshots με application-consistent exports, όπως περιγράφεται στο point-in-time recovery έναντι snapshots.
Η production αρχιτεκτονική του Directus
Σχεδιάστε τρία όρια γύρω από το Directus: ingress προς τη θύρα 8055, durable state και supporting requirements. Το container μπορεί να αντικατασταθεί, όμως τα άλλα δύο χρειάζονται σαφείς owners. Το network contract του Directus είναι Postgres, καθώς και προαιρετικά Redis και object storage για deployments που χρειάζονται scaling. Κρατήστε τα private endpoints σε internal DNS, επιτρέψτε μόνο τις απαραίτητες outbound calls και δώστε στο Directus ένα scoped service credential.
Το διάγραμμα είναι ολοκληρωμένο όταν ένας clean client μπορεί να κάνει bootstrap τον administrator, να δημιουργήσει collection και role, να γράψει μέσω REST, να κάνει query μέσω GraphQL και να ανεβάσει ένα αρχείο. Καταγράψτε timing και resource data για το database connection pool, το API request concurrency, τα Flow workers, τη δημιουργία thumbnails και το upload storage. Αν η συναλλαγή αποτύχει, το πρώτο όριο που δεν συμπεριφέρεται όπως τεκμηριώνεται δείχνει αν πρέπει να διερευνήσετε το routing, την τοπική χωρητικότητα ή μια supporting service.
Αποδείξτε τη λειτουργία του Directus end to end
Δημιουργήστε ένα μικρό, disposable Directus fixture και διατηρήστε το για κάθε release. Το fixture πρέπει να ελέγχει το πραγματικό workflow: bootstrap του administrator, δημιουργία collection και role, εγγραφή μέσω REST, query μέσω GraphQL και upload ενός αρχείου. Καταγράψτε το image digest, το external hostname, τη διεύθυνση dependency και το αναμενόμενο αποτέλεσμα, ώστε ένας επόμενος operator να μπορεί να επαναλάβει τη δοκιμή χωρίς να χρειάζεται να ερμηνεύσει αυτόν τον οδηγό.
Εκτελέστε το fixture τρεις φορές. Αρχικά, χρησιμοποιήστε το fresh deployment. Έπειτα, αντικαταστήστε το container χωρίς να αγγίξετε το durable state. Τέλος, κάντε restore το backup σε ένα empty environment. Η τρίτη εκτέλεση θεωρείται επιτυχής μόνο όταν επανέλθουν το schema, τα roles, τα flows, τα items, τα extensions και τα uploads και περάσουν επιτυχώς τα probes τόσο του REST όσο και του GraphQL. Σε κάθε εκτέλεση, καταγράψτε latency και resource use γύρω από το database connection pool, το API request concurrency, τα Flow workers, τη δημιουργία thumbnails και το upload storage· αυτό γίνεται το baseline για τα alerts αντί για ένα αυθαίρετο ποσοστό CPU.
Τέλος, ελέγξτε σκόπιμα το negative path: αρνηθείτε προσωρινά στην test identity την πρόσβαση σε Postgres, καθώς και προαιρετικά σε Redis και object storage για deployments που χρειάζονται scaling. Επιβεβαιώστε ότι το Directus αποτυγχάνει εμφανώς χωρίς να καταστρέφει το state, επαναφέρετε τη σωστή συνθήκη και επαναλάβετε την επιτυχημένη συναλλαγή. Ένα release record που περιέχει αυτά τα τέσσερα αποτελέσματα αποτελεί ισχυρότερη ένδειξη από screenshots ενός dashboard ή από μια εφάπαξ απάντηση του curl.
Εκκινήστε το Directus με observable defaults
Εκκινήστε το Directus με τρόπο που κρατά το route private μέχρι να ολοκληρωθεί το bootstrap.
docker run -d \
--name directus \
--restart unless-stopped \
-p 127.0.0.1:8055:8055 \
-v directus-data:/directus/database \
-v directus-uploads:/directus/uploads \
-v directus-extensions:/directus/extensions \
-e SECRET=replace-with-a-long-random-value \
-e KEY=replace-with-a-second-long-random-value \
-e ADMIN_EMAIL=admin@example.com \
-e ADMIN_PASSWORD=replace-with-a-strong-bootstrap-password \
-e DB_CLIENT=sqlite3 \
-e DB_FILENAME=/directus/database/data.db \
-e PUBLIC_URL=https://app.example.com \
directus/directus:latest
Αν η process κάνει loop, συγκρίνετε τον expected user του image με τον owner κάθε mounted path. Αν παραμένει ενεργή, ελέγξτε το port 8055 τοπικά και περάστε αμέσως στο workflow: bootstrap του administrator, δημιουργία collection και role, εγγραφή μέσω REST, query μέσω GraphQL και upload ενός αρχείου. Κάντε version-pin το image μόνο αφού περάσει ο end-to-end έλεγχος και καταγράψτε την ακριβή configuration δίπλα στην υπηρεσία.
Credentials, roles και exposed surfaces
Κλείστε το bootstrap window αμέσως μόλις υπάρχει ο πρώτος trusted administrator. Η συγκεκριμένη παγίδα του Directus είναι να χρησιμοποιείτε το bootstrap admin password μετά το πρώτο login ή να κάνετε τυφλό rotation του SECRET· το ασφαλέστερο όριο είναι να αντικαταστήσετε τα bootstrap credentials, να χρησιμοποιείτε least-privilege roles και να διατηρείτε σταθερό το SECRET, επειδή προστατεύει τα application sessions και τα tokens.
Δημιουργήστε το SECRET μία φορά, κρατήστε το εκτός Git και διατηρήστε το μαζί με το recovery manifest, επειδή η αλλαγή του μπορεί να ακυρώσει encrypted ή signed application state. Η private networking πρέπει να μεταφέρει τα credentials των dependencies και τα roles μέσα στο Directus πρέπει να παρέχουν την ελάχιστη χρήσιμη ενέργεια. Κρατήστε τα ευαίσθητα request bodies και τα provider responses εκτός των routine logs.
Κάντε το public origin απολύτως σαφές
Αποφύγετε τα προσωρινά και τα μόνιμα public origins για το Directus. Αντί γι’ αυτό, ορίστε το PUBLIC_URL στην canonical HTTPS address, δείξτε το επιλεγμένο DNS name στο platform route και κάντε proxy μόνο προς τη θύρα 8055.
Εκτελέστε αυτή την ενέργεια εκτός host: bootstrap του administrator, δημιουργία collection και role, εγγραφή μέσω REST, query μέσω GraphQL και upload ενός αρχείου. Αν το ingress αποτύχει, ο οδηγός αντιμετώπισης προβλημάτων 502 καλύπτει τα λάθη σε ports και listeners. Αν το Directus λάβει το request αλλά το database client είναι λάθος ή το upload storage δεν είναι εγγράψιμο, τα στοιχεία πλέον δείχνουν πέρα από τον proxy.
Failure drills για το Directus
Για το Directus, παρακολουθείτε μια συναλλαγή και όχι απλώς μια process: bootstrap του administrator, δημιουργία collection και role, εγγραφή μέσω REST, query μέσω GraphQL και upload ενός αρχείου. Συνδυάστε το latency και το error rate του με το database connection pool, το API request concurrency, τα Flow workers, τη δημιουργία thumbnails και το upload storage, ώστε ένα alert να εντοπίζει το component που περιορίζει το σύστημα.
Η πρόβα του upgrade πρέπει να καλύπτει το γεγονός ότι τα schema migrations, τα extensions και η υποστήριξη database vendors του Directus πρέπει να ελέγχονται ως ενιαίο σύνολο. Κάντε restore, migrate και εκτελέστε τη συναλλαγή πριν από την αντικατάσταση στο production. Αν το database client είναι λάθος ή το upload storage δεν είναι εγγράψιμο, μην διαγράψετε δεδομένα για να κάνετε το startup να εμφανίζεται επιτυχές· συγκρίνετε με αυτή τη σειρά την έκδοση, τις variables, τα mounts και τη reachability των dependencies.
Τι πρέπει να αυτοματοποιεί το Dockup για το Directus
Το platform layer για το Directus αποτελείται από τη θύρα 8055, το ingress, το TLS, το runtime configuration, το storage και τη reachability των dependencies. Το Dockup μπορεί να αναπαράγει αυτά τα στοιχεία για τη δική του υποδομή ή για έναν server που συνδέει ο πελάτης.
Στη συνέχεια, ο operator ολοκληρώνει το product layer: ορίζει το PUBLIC_URL στην canonical HTTPS address· επιβάλλει αυτόν τον κανόνα πρόσβασης — αντικαταστήστε τα bootstrap credentials, χρησιμοποιήστε least-privilege roles και διατηρήστε σταθερό το SECRET, επειδή προστατεύει τα application sessions και τα tokens· και εκτελέστε «bootstrap του administrator, δημιουργία collection και role, εγγραφή μέσω REST, query μέσω GraphQL και upload ενός αρχείου». Η καταγραφή αυτής της δοκιμής μαζί με το deployment αποτρέπει τη σύγχυση μεταξύ automated provisioning και application readiness.
Συχνές ερωτήσεις
Τι χρειάζεται το Directus για production deployment;
Δρομολογήστε το Directus container στη θύρα 8055 μέσω ενός HTTPS origin. Η supporting network requirement είναι Postgres, καθώς και προαιρετικά Redis και object storage για deployments που χρειάζονται scaling. Μην θεωρήσετε το Directus έτοιμο μέχρι να μπορείτε να κάνετε bootstrap τον administrator, να δημιουργήσετε collection και role, να γράψετε μέσω REST, να κάνετε query μέσω GraphQL και να ανεβάσετε ένα αρχείο.
Ποια δεδομένα του Directus πρέπει να περιλαμβάνονται σε backup;
Κάντε persist το /directus/database και συμπεριλάβετε στο ίδιο recovery manifest τη βάση δεδομένων, τα uploads, τα extensions, τα flows και τα schema snapshots. Ένα clean Directus restore θεωρείται επιτυχές μόνο όταν επανέλθουν το schema, τα roles, τα flows, τα items, τα extensions και τα uploads και περάσουν επιτυχώς τα probes τόσο του REST όσο και του GraphQL.
Απαιτεί το Directus HTTPS πίσω από reverse proxy;
Χρησιμοποιήστε HTTPS για το public Directus origin και κρατήστε τη θύρα 8055 στο internal route. Εφαρμόστε σωστά τη ρύθμιση του Directus: ορίστε το PUBLIC_URL στην canonical HTTPS address. Για το Directus, το HTTPS προστατεύει τα credentials ή το περιεχόμενο των χρηστών κατά τη μεταφορά και διατηρεί συνεπή τη συμπεριφορά του client που εξαρτάται από το origin.
Πώς πρέπει να δοκιμάζεται ένα Directus upgrade;
Κάντε restore το τρέχον state του Directus σε ένα isolated deployment, εφαρμόστε την candidate version και επαναλάβετε την acceptance transaction. Δώστε ιδιαίτερη προσοχή, επειδή τα schema migrations, τα extensions και η υποστήριξη database vendors του Directus πρέπει να ελέγχονται ως ενιαίο σύνολο. Διατηρήστε το προηγούμενο Directus image μέχρι να κατανοήσετε τα όρια του data migration και του rollback.
