Cum să găzduiești Gotenberg în regim self-hosted în 2026: HTML în PDF, timeout-uri și fonturi
Implementează Gotenberg cu portul corect, storage persistent, TLS, autentificare și backupuri. Depanează situațiile în care requesturile folosesc câmpul multipart greșit în producție.
O implementare Gotenberg care eșuează nu se oprește întotdeauna. Poate servi o pagină de autentificare în timp ce requesturile folosesc câmpul multipart greșit sau conversiile depășesc timeout-urile proxy-ului. Începe în schimb cu o verificare end-to-end: trimite HTML și assets ca date multipart, generează un PDF, repetă cu un document Office și verifică endpointul de health după fiecare conversie.
Această verificare corespunde scopului documentat al Gotenberg: un serviciu HTTP care convertește fișiere HTML, Markdown și Office în PDF. De asemenea, scoate mai devreme la iveală dependențele lipsă, presupunerile greșite despre proxy și datele efemere decât o verificare de uptime.
Porturi, procese și servicii private
Nu lăsa imaginea Gotenberg să stabilească accidental arhitectura pentru producție. Imaginea furnizează un proces pe portul 3000; storage-ul, routing-ul și cerințele externe au în continuare nevoie de cicluri de viață stabilite deliberat. Cerința de runtime local este existența unei rezerve suficiente de CPU și memorie pentru workerii Chromium și LibreOffice. Testează această limită înainte de publicare și din nou după înlocuirea unui container.
Implementarea este pregătită pentru teste mai aprofundate atunci când poate trimite HTML și assets ca date multipart, poate genera un PDF, poate repeta operațiunea cu un document Office și poate verifica endpointul de health după fiecare conversie. Urmărește tranzacția în loguri și monitorizează numărul de procese Chromium și LibreOffice, spațiul temporar pe disc, complexitatea documentelor și timeout-urile proxy-ului. Aceste observații arată dacă topologia actuală izolează componenta potrivită.
Fă recuperarea Gotenberg măsurabilă
În interiorul imaginii standard Gotenberg nu este așteptată existența unei stări de aplicație care să poată fi scrisă. Nu păstra date persistente ale aplicației; păstrează fonturile, template-urile și configurația de deployment, inclusiv digestul fixat și configurația de routing verificată, în loc să faci backup pentru un filesystem gol al containerului.
Creează Gotenberg de la zero pe o altă gazdă și verifică dacă fonturile personalizate, template-urile și flagurile de comandă pot fi reproduse și dacă documentele cunoscute sunt randate cu numărul de pagini așteptat. Dacă adaugi o bază de date separată, un room server sau un layer de autentificare, atribuie explicit acelei componente propriul responsabil pentru recuperare. Ghidul de la Git la producție arată cum un artifact reproductibil înlocuiește backupul unui container.
Notează comanda de rebuild și testul cu rezultat cunoscut împreună cu release-ul. Un plan de recuperare stateless reușește prin reproducerea comportamentului din inputuri de încredere; nu ar trebui să depindă de copierea unui container opac aflat în execuție.
Redu autoritatea deținută de Gotenberg
Activul valoros din Gotenberg este calea de cod care procesează inputul utilizatorului. Riscul specific aplicației este permiterea conversiilor publice fără restricții de dimensiune și timeout; în producție, endpointurile de conversie ar trebui să rămână private sau să impună controale de dimensiune, rată și timeout înainte de acceptarea fișierelor care nu sunt de încredere.
Containerul standard nu are un secret de administrator, așadar autentificarea aparține rutei HTTPS dacă serviciul este privat. Fixează buildul, evită mounturile largi de filesystem și limitează numărul de procese Chromium și LibreOffice, spațiul temporar pe disc, complexitatea documentelor și timeout-urile proxy-ului. Folosește un input de test cunoscut pentru a confirma că buildul servit produce rezultatul așteptat după fiecare actualizare.
Criteriul de lansare pentru Gotenberg
Transformă smoke test-ul Gotenberg într-o comandă de release repetabilă sau într-un runbook scurt. Rezultatul trebuie să demonstreze următoarea stare: trimite HTML și assets ca date multipart, generează un PDF, repetă cu un document Office și verifică endpointul de health după fiecare conversie. Înregistrează versiunea aplicației, digestul containerului, hostname-ul rutei și identificatorul datelor de test împreună cu rezultatul.
Rulează aceeași verificare după o înlocuire obișnuită a containerului și după restaurarea fără date persistente ale aplicației; păstrează fonturile, template-urile și configurația de deployment în altă parte. Restaurarea a reușit atunci când fonturile personalizate, template-urile și flagurile de comandă pot fi reproduse, iar documentele cunoscute sunt randate cu numărul de pagini așteptat. Compară durata și consumul asociate numărului de procese Chromium și LibreOffice, spațiului temporar pe disc, complexității documentelor și timeout-urilor proxy-ului; o schimbare mare merită investigată chiar dacă acțiunea finală trece în continuare.
Apoi testează un failure sigur: trimite un input inofensiv apropiat de limita de resurse sau de format asociată acestei granițe: requesturile folosesc câmpul multipart greșit sau conversiile depășesc timeout-urile proxy-ului. Confirmă că Gotenberg semnalează problema și revine la normal fără modificări manuale distructive. Păstrează doar fragmentul de log necesar, cu datele sensibile eliminate. Acest criteriu în patru părți acoperă pornirea, persistența, recuperarea și gestionarea erorilor.
Fă pornirea Gotenberg reproductibilă
Folosește o comandă care expune fiecare alegere importantă. Această configurație de bază leagă Gotenberg de loopback-ul gazdei, adaugă mounturile de date cunoscute și furnizează prima setare necesară. Confirmă cerința locală înainte de expunere: existența unei rezerve suficiente de CPU și memorie pentru workerii Chromium și LibreOffice.
docker run -d \
--name gotenberg \
--restart unless-stopped \
-p 127.0.0.1:3000:3000 \
gotenberg/gotenberg:8
Înlocuiește tagurile mobile cu o versiune testată sau cu un digest. După pornire, verifică docker logs --tail 200 gotenberg și confirmă că procesul ascultă pe portul 3000. Apoi execută acțiunea de acceptanță Gotenberg; un răspuns de la pagina root nu poate demonstra că întregul scenariu reușește: trimite HTML și assets ca date multipart, generează un PDF, repetă cu un document Office și verifică endpointul de health după fiecare conversie.
Împiedică succesul proxy-ului să mascheze eșecul aplicației
Alege hostname-ul final pentru Gotenberg înainte ca utilizatorii să salveze callbackuri sau setări de client, apoi expune API-ul de conversie prin HTTPS sau printr-un domeniu intern privat. Ruta platformei ar trebui să termine TLS o singură dată și să direcționeze traficul către portul privat 3000.
Rulează tranzacția de acceptanță din exterior. Dacă clientul nu ajunge niciodată la Gotenberg, folosește checklistul de validare SSL pentru verificările DNS și ale certificatului. Dacă requestul ajunge la Gotenberg, dar requesturile folosesc câmpul multipart greșit sau conversiile depășesc timeout-urile proxy-ului, nu mai modifica redirecturile proxy-ului și inspectează în schimb limita specifică aplicației.
Verificări de capacitate și upgrade
Indicatorul util pentru serviciul Gotenberg este finalizarea cu succes a operațiunii „trimite HTML și assets ca date multipart, generează un PDF, repetă cu un document Office și verifică endpointul de health după fiecare conversie”. Corelează rezultatul cu numărul de procese Chromium și LibreOffice, spațiul temporar pe disc, complexitatea documentelor și timeout-urile proxy-ului; o pagină root verde nu spune nimic despre compatibilitatea rezultatului sau epuizarea resurselor.
Înainte de a înlocui imaginea, ține cont de acest risc: rutele API, flagurile Chromium și comportamentul LibreOffice se pot schimba între versiunile majore Gotenberg. Testează inputuri reprezentative și de limită pe ambele versiuni și păstrează digestul vechi până când candidatul trece verificările. Dacă requesturile folosesc câmpul multipart greșit sau conversiile depășesc timeout-urile proxy-ului, inspectează formatul requestului, comportamentul clientului și logurile de runtime înainte de a modifica setările de rută sau storage.
Unde elimină Dockup efortul pentru Gotenberg
Un template Gotenberg disponibil printr-un singur click ar trebui să includă digestul imaginii, portul 3000, temporizarea health check-ului, domeniul și TLS. Deoarece serviciul de bază este stateless, Dockup îl poate recrea direct pe infrastructura de calcul Dockup sau pe o mașină atașată, fără să pretindă că un volum gol este un backup.
După lansare, expune API-ul de conversie prin HTTPS sau printr-un domeniu intern privat. Dockup ar trebui să păstreze setările de runtime Gotenberg în timp ce operatorul confirmă această cerință locală: existența unei rezerve suficiente de CPU și memorie pentru workerii Chromium și LibreOffice. Verifică următorul rezultat: trimite HTML și assets ca date multipart, generează un PDF, repetă cu un document Office și verifică endpointul de health după fiecare conversie. Orice extensie stateful ulterioară trebuie să-și declare propriul mount, secret și test de restaurare, fără să schimbe în tăcere semnificația template-ului de bază.
Întrebări frecvente
De ce are nevoie Gotenberg pentru un deployment în producție?
Direcționează containerul Gotenberg prin portul 3000 către o singură origine HTTPS. Cerința de runtime local este existența unei rezerve suficiente de CPU și memorie pentru workerii Chromium și LibreOffice. Nu considera Gotenberg pregătit până când nu poți trimite HTML și assets ca date multipart, genera un PDF, repeta cu un document Office și verifica endpointul de health după fiecare conversie.
Ce date Gotenberg trebuie incluse într-un backup?
Imaginea standard Gotenberg nu are un mount obligatoriu pentru datele aplicației. Păstrează configurația de deployment și fă backup separat pentru orice stare conectată; recuperarea este validată atunci când fonturile personalizate, template-urile și flagurile de comandă pot fi reproduse, iar documentele cunoscute sunt randate cu numărul de pagini așteptat.
Are Gotenberg nevoie de HTTPS în spatele unui reverse proxy?
Folosește HTTPS pentru originea publică Gotenberg și păstrează portul 3000 pe ruta internă. Aplică corect setarea Gotenberg: expune API-ul de conversie prin HTTPS sau printr-un domeniu intern privat. Pentru Gotenberg, HTTPS protejează credentialele sau conținutul utilizatorilor în tranzit și menține consecvent comportamentul clientului dependent de origine.
Cum ar trebui testat un upgrade Gotenberg?
Implementează imaginea Gotenberg candidată lângă cea actuală și repetă tranzacția de acceptanță cu un input cunoscut. Acordă o atenție deosebită acestui aspect, deoarece rutele API, flagurile Chromium și comportamentul LibreOffice se pot schimba între versiunile majore Gotenberg. Containerul standard nu are migrare de date, așa că păstrează digestul anterior până când verificările de rezultat și compatibilitate trec cu succes.
