Index denníkaDockup / poznámka z terénu
Note / self-host-ghost

Ako hostovať Ghost na vlastnej infraštruktúre v roku 2026: MySQL, newslettery a zálohy obsahu

Praktická príručka k hostovaniu Ghostu na vlastnej infraštruktúre, ktorá pokrýva Docker, porty, trvalé dáta, TLS, bezpečnosť, zálohy a zlyhania brániace produkčnému použitiu. Krok za krokom.

Neúspešné nasadenie Ghostu nemusí vždy spadnúť. Môže zobrazovať prihlasovaciu stránku, hoci je nastavenie url nastavené na HTTP alebo bol nahradený volume s obsahom. Namiesto toho začnite komplexnou kontrolou od začiatku do konca: dokončite nastavenie vlastníka, publikujte článok s obrázkom, prihláste člena na odber a odošlite testovací newsletter cez nakonfigurovaný e-mail.

Táto kontrola zodpovedá deklarovanému účelu Ghostu: publikačnej platforme s členstvami a newslettermi. Zároveň odhalí chýbajúce závislosti, nesprávne predpoklady o proxy a dočasné dáta skôr než kontrola dostupnosti.

Vymedzte runtime hranice Ghostu

Okolo Ghostu si vymedzte tri hranice: ingress na porte 2368, trvalý stav a podporné požiadavky. Kontajner je možné nahradiť, no za ďalšie dve oblasti musia byť explicitne určení vlastníci. Sieťový kontrakt Ghostu tvoria MySQL 8, SMTP a voliteľné object storage pre weby s veľkým objemom médií. Súkromné endpointy ponechajte na internom DNS, povoľte iba nevyhnutné odchádzajúce volania a Ghostu prideľte service credential s obmedzeným rozsahom.

Diagram je kompletný vtedy, keď čistý klient dokáže dokončiť nastavenie vlastníka, publikovať článok s obrázkom, prihlásiť člena na odber a odoslať testovací newsletter cez nakonfigurovaný e-mail. Zaznamenávajte časové a resource údaje pre MySQL queries, úložisko obrázkov, renderovanie témy, počet členov a limity poskytovateľa hromadnej pošty. Ak transakcia zlyhá, prvá hranica, ktorá sa nespráva podľa dokumentácie, ukáže, či treba preveriť routing, lokálnu kapacitu alebo podpornú službu.

Overte, že Ghost prežije nahradenie

Image kontajnera je možné znova stiahnuť, databázu MySQL spolu s témami, obrázkami a súbormi obsahu však nie. Pred bootstrapom pripojte /var/lib/ghost/content, zapíšte neškodné testovacie dáta a nahraďte kontajner, aby ste overili, že táto cesta je skutočne trvalá. Skontrolujte efektívny mount namiesto slepej dôvery v názov Compose súboru a overte, že runtime user môže zapisovať tam, kde to Ghost očakáva.

Zvoľte retention a umiestnenie mimo hostiteľa, potom si nacvičte obnovu bez zásahu do produkcie. Cvičenie je úspešné iba vtedy, keď sa vrátia články, členovia, newslettery, témy a obrázky a testovací člen dokáže otvoriť obnovenú publikáciu. Pri stave založenom na databáze kombinujte snapshoty úložiska s exportmi konzistentnými z pohľadu aplikácie, ako je opísané v článku obnova k určitému času verzus snapshoty.

Credentialy, roly a vystavené plochy

Špecifickým bezpečnostným rizikom aplikácie je používanie SQLite v nepodporovanej produkčnej topológii alebo únik mailových credentialov. Prevádzkovou odpoveďou je chrániť Ghost Admin, uchovávať mailové a databázové credentialy na serveri a nastaviť finálnu HTTPS URL ešte pred publikovaním. Bootstrap dokončite cez obmedzenú route a dočasný prístup na nastavenie ihneď potom odstráňte.

url je konfigurácia, nie secret; jeho hodnotu ponechajte explicitnú a chráňte samostatné credentialy používané Ghostom. Procesu Ghostu prideľte iba zdokumentované mounty a routes k závislostiam; vyhnite sa prístupu ku koreňu hostiteľa a k Docker socketu. Zaznamenávajte neúspešné autentifikácie a chyby konfigurácie, no redigujte tokeny, connection stringy a obsah používateľov.

Overte nasadenie Ghostu od začiatku do konca

Záznam o release Ghostu musí obsahovať fakty, nie konštatovanie „vyzerá to dobre“. Uložte vybraný digest image, checksum konfigurácie, verejný hostname a výsledok s časovou pečiatkou pre: dokončenie nastavenia vlastníka, publikovanie článku s obrázkom, prihlásenie člena na odber a odoslanie testovacieho newslettera cez nakonfigurovaný e-mail. Používajte vzorové dáta mimo produkcie, aby bolo možné kontrolu spustiť po každom nasadení.

Overte osobitne dve lifecycle udalosti. Nahradenie kontajnera musí zachovať bežnú prevádzku; čistá obnova musí preukázať, že sa vrátia články, členovia, newslettery, témy a obrázky a testovací člen dokáže otvoriť obnovenú publikáciu. Počas kontrol merajte MySQL queries, úložisko obrázkov, renderovanie témy, počet členov a limity poskytovateľa hromadnej pošty a výsledok uchovajte ako očakávaný envelope pre túto verziu.

Otestujte aj zamietnutú alebo neplatnú podmienku: dočasne testovacej identite odoberte prístup k MySQL 8, SMTP a voliteľnému object storage pre weby s veľkým objemom médií. Ghost by mal zlyhať diagnostikovateľným spôsobom a nemal by prepísať funkčný stav. Obnovte platnú podmienku, zopakujte testovaciu vzorku a priložte relevantné redigované logy. Tieto artefakty poskytnú pri budúcom rozhodovaní o rollbacke konkrétne dôkazy.

Základ pre Ghost v Dockeri

Počiatočné spustenie Ghostu udržujte dostatočne reprodukovateľné na to, aby ho bolo možné skontrolovať v pull requeste.

docker run -d \
  --name ghost \
  --restart unless-stopped \
  -p 127.0.0.1:2368:2368 \
  -v ghost-data:/var/lib/ghost/content \
  -e url=https://app.example.com \
  -e database__client=mysql \
  -e database__connection__host=mysql.internal \
  -e database__connection__user=ghost \
  -e database__connection__password=replace-with-a-strong-database-password \
  -e database__connection__database=ghost \
  ghost:latest

Po vytvorení reálnych dát sa nespoliehajte na latest. Zachyťte funkčný digest, používateľa kontajnera a vlastníctvo mountu. Sledujte aplikačný log počas celého testu — dokončenie nastavenia vlastníka, publikovanie článku s obrázkom, prihlásenie člena na odber a odoslanie testovacieho newslettera cez nakonfigurovaný e-mail — a pred nasmerovaním produkčnej traffic si poznamenajte všetky migrácie.

TLS je jednoduché, vygenerované URL však nie

Pred publikovaním nastavte url na finálnu HTTPS doménu. Zvolený hostname nasmerujte na port kontajnera 2368, preposielajte pôvodný host a HTTPS scheme a nezverejňujte druhý priamy origin.

Otestujte Ghost z čistého externého klienta. Oddeľte zlyhanie ingressu od známej hranice aplikácie — nastavenie url je HTTP alebo bol nahradený volume s obsahom. Chyba certifikátu, DNS alebo 502 patrí do routingu; požiadavka, ktorá dorazí do Ghostu a zlyhá neskôr, patrí do stavu aplikácie, kapacity alebo podpornej požiadavky. Príručka k TLS pre vlastnú doménu pokrýva prvú skupinu.

Kontroly kapacity a aktualizácie

Testy kapacity by mali overovať MySQL queries, úložisko obrázkov, renderovanie témy, počet členov a limity poskytovateľa hromadnej pošty, nie opakovanú požiadavku na /. Spustite scenár „dokončenie nastavenia vlastníka, publikovanie článku s obrázkom, prihlásenie člena na odber a odoslanie testovacieho newslettera cez nakonfigurovaný e-mail“ pri realistickej súbežnosti a zaznamenajte latenciu, chybovosť a rast úložiska.

Plánovanie aktualizácie musí počítať s týmto rizikom: Ghost migrations, očakávania runtime Node a custom themes treba testovať na klonovanom webe. Otestujte nové vydanie s reprezentatívnym vstupom, potom zopakujte akceptačnú transakciu a porovnajte výsledok. Ak je nastavenie url HTTP alebo bol nahradený volume s obsahom, zachyťte neúspešnú transakciu a preskúmajte prvú zapojenú hranicu namiesto predpokladu, že za problém môže ingress.

Presuňte opakovateľnú infraštruktúrnu prácu do Dockupu

Routing, certifikáty, nahrádzanie služieb a pripojené úložisko sú rozumnými cieľmi automatizácie. Dockup ich pre Ghost zabezpečí a môže provisionovať súvisiacu managed databázu alebo sa pripojiť k službám na vlastnom serveri zákazníka.

Nemal by však vymýšľať trust policy Ghostu. Po nasadení nastavte url na finálnu HTTPS doménu ešte pred publikovaním, vynúťte túto hranicu — chráňte Ghost Admin, uchovávajte mailové a databázové credentialy na serveri a nastavte finálnu HTTPS URL ešte pred publikovaním — a overte výsledok tohto scenára: dokončenie nastavenia vlastníka, publikovanie článku s obrázkom, prihlásenie člena na odber a odoslanie testovacieho newslettera cez nakonfigurovaný e-mail. Výsledkom je infraštruktúra na jedno kliknutie s akceptačným testom špecifickým pre aplikáciu.

Často kladené otázky

Čo Ghost potrebuje na produkčné nasadenie?

Nasmerujte kontajner Ghostu na porte 2368 cez jeden HTTPS origin. Sieťovú podpornú požiadavku tvoria MySQL 8, SMTP a voliteľné object storage pre weby s veľkým objemom médií. Ghost nepovažujte za pripravený, kým nedokážete dokončiť nastavenie vlastníka, publikovať článok s obrázkom, prihlásiť člena na odber a odoslať testovací newsletter cez nakonfigurovaný e-mail.

Ktoré dáta Ghostu patria do zálohy?

Zachovajte /var/lib/ghost/content a do rovnakého recovery manifestu zahrňte databázu MySQL spolu s témami, obrázkami a súbormi obsahu. Čistá obnova Ghostu je úspešná iba vtedy, keď sa vrátia články, členovia, newslettery, témy a obrázky a testovací člen dokáže otvoriť obnovenú publikáciu.

Vyžaduje Ghost HTTPS za reverse proxy?

Pre verejný origin Ghostu používajte HTTPS a port 2368 ponechajte na internej route. Nastavenie Ghostu aplikujte správne: pred publikovaním nastavte url na finálnu HTTPS doménu. V prípade Ghostu HTTPS chráni credentialy alebo obsah používateľov počas prenosu a udržiava konzistentné správanie klienta závislé od originu.

Ako testovať aktualizáciu Ghostu?

Obnovte aktuálny stav Ghostu do izolovaného nasadenia, aplikujte kandidátsku verziu a zopakujte jeho akceptačnú transakciu. Venujte tomu osobitnú pozornosť, pretože Ghost migrations, očakávania runtime Node a custom themes treba testovať na klonovanom webe. Predchádzajúci image Ghostu ponechajte, kým nebudete rozumieť hranici migrácie dát a rollbacku.