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

Πώς να φιλοξενήσετε μόνοι σας το Gotenberg το 2026: HTML σε PDF, χρονικά όρια και γραμματοσειρές

Αναπτύξτε το Gotenberg με τη σωστή θύρα, ανθεκτικό storage, TLS, authentication και backup. Αντιμετωπίστε προβλήματα όταν τα requests χρησιμοποιούν λάθος multipart field σε production.

Μια αποτυχημένη ανάπτυξη του Gotenberg δεν προκαλεί πάντα crash. Μπορεί να εμφανίζει σελίδα login ενώ τα requests χρησιμοποιούν λάθος multipart field ή οι μετατροπές ξεπερνούν τα proxy timeouts. Ξεκινήστε με έναν end-to-end έλεγχο: στείλτε HTML και assets ως multipart data, δημιουργήστε ένα PDF, επαναλάβετε με ένα Office document και ελέγξτε το health endpoint μετά από κάθε μετατροπή.

Ο έλεγχος αυτός αντιστοιχεί στον καταγεγραμμένο σκοπό του Gotenberg: μια HTTP service που μετατρέπει αρχεία HTML, Markdown και Office σε PDF. Παράλληλα, αποκαλύπτει νωρίτερα απ’ ό,τι ένα uptime probe τυχόν missing dependencies, λανθασμένες παραδοχές για το proxy και ephemeral data.

Θύρες, processes και private services

Μην αφήσετε το image του Gotenberg να καθορίσει κατά λάθος την architecture του production. Το image παρέχει ένα process στη θύρα 3000· το storage, το routing και οι εξωτερικές απαιτήσεις χρειάζονται ξεχωριστά, προσεκτικά σχεδιασμένα lifecycles. Η απαίτηση του local runtime είναι επαρκής διαθέσιμη CPU και μνήμη για τα Chromium και LibreOffice workers. Ελέγξτε αυτό το όριο πριν από την έκθεση στο κοινό και ξανά μετά από αντικατάσταση του container.

Η ανάπτυξη είναι έτοιμη για πιο εκτενείς ελέγχους όταν μπορεί να στείλει HTML και assets ως multipart data, να δημιουργήσει ένα PDF, να επαναλάβει τη διαδικασία με ένα Office document και να ελέγξει το health endpoint μετά από κάθε μετατροπή. Παρακολουθήστε το transaction στα logs και ελέγξτε το πλήθος των Chromium και LibreOffice processes, το temporary disk, την πολυπλοκότητα των documents και τα proxy timeouts. Αυτές οι παρατηρήσεις δείχνουν αν η τρέχουσα topology απομονώνει το σωστό component.

Κάντε το recovery του Gotenberg μετρήσιμο

Μέσα στο standard Gotenberg image δεν αναμένεται writable application state. Μην διατηρείτε durable app data· κρατήστε τις γραμματοσειρές, τα templates και τη configuration της ανάπτυξης, συμπεριλαμβανομένων του pinned digest και της ελεγμένης route configuration, αντί να κάνετε backup ενός άδειου container filesystem.

Δημιουργήστε το Gotenberg από την αρχή σε άλλο host και επαληθεύστε ότι οι custom γραμματοσειρές, τα templates και τα command flags μπορούν να αναπαραχθούν και ότι τα γνωστά documents αποδίδονται με τον αναμενόμενο αριθμό σελίδων. Αν προστεθεί ξεχωριστή database, room server ή authentication layer, αναθέστε ρητά σε κάθε component τον δικό του υπεύθυνο για το recovery. Ο οδηγός από το Git έως το production δείχνει πώς ένα reproducible artifact αντικαθιστά ένα container backup.

Καταγράψτε την εντολή rebuild και το test γνωστού αποτελέσματος μαζί με το release. Ένα stateless recovery plan πετυχαίνει αναπαράγοντας τη συμπεριφορά από αξιόπιστα inputs· δεν θα πρέπει να εξαρτάται από την αντιγραφή ενός opaque running container.

Περιορίστε τα δικαιώματα του Gotenberg

Το σημαντικό asset στο Gotenberg είναι το code path που διαχειρίζεται το user input. Ο ειδικός για την εφαρμογή κίνδυνος είναι να επιτρέπονται unrestricted public conversions χωρίς ελέγχους μεγέθους και timeout· στο production τα conversion endpoints θα πρέπει να παραμένουν private ή να εφαρμόζουν ελέγχους μεγέθους, rate και timeout πριν επιτρέψουν untrusted files.

Το standard container δεν διαθέτει administrator secret, επομένως το authentication ανήκει στο HTTPS route όταν η service είναι private. Κάντε pin το build, αποφύγετε τα broad filesystem mounts και περιορίστε το πλήθος των Chromium και LibreOffice processes, το temporary disk, την πολυπλοκότητα των documents και τα proxy timeouts. Χρησιμοποιήστε γνωστό test input για να επιβεβαιώσετε ότι το build που σερβίρεται παράγει το αναμενόμενο output μετά από κάθε update.

Το release gate του Gotenberg

Μετατρέψτε το Gotenberg smoke test σε επαναχρησιμοποιήσιμη release command ή σε σύντομο runbook. Το output του πρέπει να αποδεικνύει το εξής αποτέλεσμα: στείλτε HTML και assets ως multipart data, δημιουργήστε ένα PDF, επαναλάβετε με ένα Office document και ελέγξτε το health endpoint μετά από κάθε μετατροπή. Καταγράψτε μαζί με το αποτέλεσμα την έκδοση της εφαρμογής, το container digest, το route hostname και το αναγνωριστικό των test data.

Εκτελέστε τον ίδιο έλεγχο μετά από μια συνηθισμένη αλλαγή container και αφού επαναφέρετε μηδενικά durable app data· διατηρήστε τις γραμματοσειρές, τα templates και τη configuration της ανάπτυξης αλλού. Το restore έχει ολοκληρωθεί με επιτυχία όταν οι custom γραμματοσειρές, τα templates και τα command flags μπορούν να αναπαραχθούν και τα γνωστά documents αποδίδονται με τον αναμενόμενο αριθμό σελίδων. Συγκρίνετε τα timings και την κατανάλωση που σχετίζονται με το πλήθος των Chromium και LibreOffice processes, το temporary disk, την πολυπλοκότητα των documents και τα proxy timeouts· μια μεγάλη αλλαγή αξίζει διερεύνηση ακόμη κι όταν η τελική ενέργεια εξακολουθεί να ολοκληρώνεται επιτυχώς.

Στη συνέχεια, δοκιμάστε μια ασφαλή αποτυχία: υποβάλετε harmless input κοντά στο όριο πόρων ή format που σχετίζεται με αυτό το boundary: τα requests χρησιμοποιούν λάθος multipart field ή οι μετατροπές ξεπερνούν τα proxy timeouts. Επιβεβαιώστε ότι το Gotenberg εμφανίζει το fault και επιστρέφει σε κανονική λειτουργία χωρίς καταστροφικές χειροκίνητες αλλαγές. Διατηρήστε μόνο το απαραίτητο, redacted απόσπασμα του log. Αυτό το gate τεσσάρων μερών καλύπτει το startup, το persistence, το recovery και το failure handling.

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

Χρησιμοποιήστε μια command που εκθέτει κάθε σημαντική επιλογή. Αυτό το baseline κάνει bind το Gotenberg στο host loopback, προσθέτει τα γνωστά data mounts και παρέχει το πρώτο απαιτούμενο setting. Επιβεβαιώστε την απαίτηση του local runtime πριν από την έκθεση: επαρκής διαθέσιμη CPU και μνήμη για τα Chromium και LibreOffice workers.

docker run -d \
  --name gotenberg \
  --restart unless-stopped \
  -p 127.0.0.1:3000:3000 \
  gotenberg/gotenberg:8

Αντικαταστήστε τα floating tags με μια tested version ή digest. Μετά το startup, ελέγξτε το docker logs --tail 200 gotenberg και επιβεβαιώστε ότι το process ακούει στη θύρα 3000. Στη συνέχεια, εκτελέστε το Gotenberg acceptance action· μια απόκριση από το root page δεν μπορεί να αποδείξει ότι το πλήρες σενάριο ολοκληρώνεται επιτυχώς: στείλτε HTML και assets ως multipart data, δημιουργήστε ένα PDF, επαναλάβετε με ένα Office document και ελέγξτε το health endpoint μετά από κάθε μετατροπή.

Αποτρέψτε το proxy success από το να καλύπτει το application failure

Επιλέξτε το τελικό hostname του Gotenberg πριν οι χρήστες αποθηκεύσουν callbacks ή client settings και, στη συνέχεια, εκθέστε το conversion API μέσω HTTPS ή ενός private internal domain. Το platform route θα πρέπει να κάνει terminate το TLS μία φορά και να κατευθύνεται στην private port 3000.

Εκτελέστε το acceptance transaction externally. Αν ο client δεν φτάνει ποτέ στο Gotenberg, χρησιμοποιήστε το checklist επικύρωσης SSL για ελέγχους DNS και certificate. Αν το request φτάνει στο Gotenberg αλλά τα requests χρησιμοποιούν λάθος multipart field ή οι μετατροπές ξεπερνούν τα proxy timeouts, σταματήστε να αλλάζετε τα proxy redirects και ελέγξτε το application-specific boundary.

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

Ο χρήσιμος δείκτης service για το Gotenberg είναι η επιτυχής ολοκλήρωση του «στείλτε HTML και assets ως multipart data, δημιουργήστε ένα PDF, επαναλάβετε με ένα Office document και ελέγξτε το health endpoint μετά από κάθε μετατροπή». Συνδυάστε αυτό το αποτέλεσμα με το πλήθος των Chromium και LibreOffice processes, το temporary disk, την πολυπλοκότητα των documents και τα proxy timeouts· μια πράσινη root page δεν λέει τίποτα για τη συμβατότητα του output ή την εξάντληση πόρων.

Πριν αντικαταστήσετε το image, υπολογίστε τον εξής κίνδυνο: τα API routes, τα Chromium flags και η συμπεριφορά του LibreOffice μπορεί να αλλάξουν μεταξύ major εκδόσεων του Gotenberg. Ελέγξτε representative και boundary inputs και στις δύο εκδόσεις και διατηρήστε το παλιό digest μέχρι να περάσει ο candidate. Αν τα requests χρησιμοποιούν λάθος multipart field ή οι μετατροπές ξεπερνούν τα proxy timeouts, ελέγξτε το request format, τη συμπεριφορά του client και τα runtime logs πριν αλλάξετε τις ρυθμίσεις route ή storage.

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

Ένα one-click template για το Gotenberg θα πρέπει να κωδικοποιεί το image digest, τη θύρα 3000, το health timing, το domain και το TLS. Επειδή η base service είναι stateless, το Dockup μπορεί να την αναδημιουργήσει απευθείας σε Dockup compute ή σε attached machine, χωρίς να προσποιείται ότι ένα άδειο volume αποτελεί backup.

Μετά το launch, εκθέστε το conversion API μέσω HTTPS ή ενός private internal domain. Το Dockup θα πρέπει να διατηρεί τα runtime settings του Gotenberg ενώ ο operator επιβεβαιώνει την εξής απαίτηση του local runtime: επαρκής διαθέσιμη CPU και μνήμη για τα Chromium και LibreOffice workers. Επαληθεύστε το εξής αποτέλεσμα: στείλτε HTML και assets ως multipart data, δημιουργήστε ένα PDF, επαναλάβετε με ένα Office document και ελέγξτε το health endpoint μετά από κάθε μετατροπή. Κάθε μεταγενέστερη stateful επέκταση πρέπει να δηλώνει το δικό της mount, secret και restore test, αντί να αλλάζει αθόρυβα τη σημασία του base template.

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

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

Δρομολογήστε το Gotenberg container στη θύρα 3000 μέσω ενός HTTPS origin. Η απαίτηση του local runtime είναι επαρκής διαθέσιμη CPU και μνήμη για τα Chromium και LibreOffice workers. Μην θεωρήσετε το Gotenberg έτοιμο μέχρι να μπορείτε να στείλετε HTML και assets ως multipart data, να δημιουργήσετε ένα PDF, να επαναλάβετε με ένα Office document και να ελέγξετε το health endpoint μετά από κάθε μετατροπή.

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

Το standard Gotenberg image δεν διαθέτει απαιτούμενο application-data mount. Διατηρήστε τη configuration της ανάπτυξής του και κάντε ξεχωριστό backup σε οποιοδήποτε connected state· το recovery περνά όταν οι custom γραμματοσειρές, τα templates και τα command flags μπορούν να αναπαραχθούν και τα γνωστά documents αποδίδονται με τον αναμενόμενο αριθμό σελίδων.

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

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

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

Αναπτύξτε το candidate Gotenberg image δίπλα στο τρέχον και επαναλάβετε το acceptance transaction με γνωστό input. Δώστε ιδιαίτερη προσοχή, επειδή τα API routes, τα Chromium flags και η συμπεριφορά του LibreOffice μπορεί να αλλάξουν μεταξύ major εκδόσεων του Gotenberg. Το standard container δεν διαθέτει data migration, επομένως διατηρήστε το προηγούμενο digest μέχρι να ολοκληρωθούν επιτυχώς οι έλεγχοι output και συμβατότητας.