Slik drifter du Ghost selv i 2026: MySQL, nyhetsbrev og sikkerhetskopiering av innhold
En praktisk guide til å drifte Ghost selv, med Docker, porter, persistent data, TLS, sikkerhet, sikkerhetskopier og feilene som hindrer produksjonsbruk. Steg for steg.
En mislykket Ghost-deployment krasjer ikke alltid. Den kan vise en innloggingsside selv om url-innstillingen er HTTP eller content-volumet er erstattet. Start i stedet med en ende-til-ende-sjekk: fullfør eieroppsettet, publiser et innlegg med et bilde, abonner på et medlem og send et testnyhetsbrev via konfigurert e-post.
Denne sjekken samsvarer med det dokumenterte formålet til Ghost: en publiseringsplattform med medlemskap og nyhetsbrev. Den avdekker også manglende avhengigheter, feil antakelser om proxyen og ephemeral data tidligere enn en uptime-sjekk kan.
Tegn grensene for Ghost-runtime
Tegn tre grenser rundt Ghost: ingress til port 2368, persistent state og støttende krav. Containeren kan erstattes, men de to andre trenger tydelige eiere. Nettverkskontrakten for Ghost er MySQL 8, SMTP og valgfri object storage for nettsteder med mye medieinnhold. Hold private endepunkter på intern DNS, tillat bare nødvendige utgående kall og gi Ghost en avgrenset service credential.
Diagrammet er komplett når en ren klient kan fullføre eieroppsettet, publisere et innlegg med et bilde, abonnere på et medlem og sende et testnyhetsbrev via konfigurert e-post. Samle inn tids- og ressursdata for MySQL-spørringer, bildelagring, theme-rendering, antall medlemmer og grensene hos bulk-mail-leverandøren. Hvis transaksjonen feiler, viser den første grensen som ikke oppfører seg som dokumentert om du bør undersøke routing, lokal kapasitet eller en støttetjeneste.
Bevis at Ghost overlever utskifting
Et container image kan lastes ned på nytt, men MySQL-databasen samt themes, bilder og innholdsfiler kan ikke det. Monter /var/lib/ghost/content før bootstrap, skriv ufarlige eksempeldata og erstatt containeren for å bevise at banen faktisk er persistent. Inspiser det effektive mountet i stedet for å stole på et Compose-filnavn, og kontroller at runtime-brukeren kan skrive der Ghost forventer det.
Velg retention og en ekstern destinasjon, og øv på recovery uten å berøre produksjon. Øvelsen er bare godkjent når innlegg, medlemmer, nyhetsbrev, themes og bilder er tilbake, og et testmedlem kan åpne den gjenopprettede publikasjonen. For databasebasert state bør du kombinere storage snapshots med applikasjonskonsistente exporter som beskrevet i point-in-time recovery versus snapshots.
Credentials, roller og eksponerte flater
Den applikasjonsspesifikke sikkerhetsrisikoen er å bruke SQLite i en produksjonstopologi som ikke støttes, eller å lekke mail credentials. Det operative svaret er å beskytte Ghost Admin, oppbevare mail- og databasecredentials på serversiden og sette den endelige HTTPS-URL-en før publisering. Fullfør bootstrap via en begrenset route, og fjern midlertidig tilgang til oppsettet umiddelbart etterpå.
url er konfigurasjon, ikke en hemmelighet; hold verdien eksplisitt, samtidig som du beskytter de separate credentialene Ghost bruker. Gi Ghost-prosessen bare de dokumenterte mountene og dependency-routene; unngå tilgang til host root og Docker socket. Logg mislykkede autentiseringsforsøk og konfigurasjonsfeil, men rediger bort tokens, connection strings og brukerinnhold.
Bevis Ghost-deploymenten ende til ende
Release-dokumentasjonen for Ghost trenger fakta, ikke «ser bra ut». Lagre valgt image digest, konfigurasjonssjekksum, offentlig hostname og et tidsstemplet resultat for: fullfør eieroppsettet, publiser et innlegg med et bilde, abonner på et medlem og send et testnyhetsbrev via konfigurert e-post. Bruk eksempeldata utenfor produksjon, slik at sjekken kan kjøres etter hver deployment.
Bevis to lifecycle-hendelser separat. En utskifting av containeren må bevare normal drift; en ren recovery må vise at innlegg, medlemmer, nyhetsbrev, themes og bilder kommer tilbake, og at et testmedlem kan åpne den gjenopprettede publikasjonen. Mens sjekkene kjører, måler du MySQL-spørringer, bildelagring, theme-rendering, antall medlemmer og grensene hos bulk-mail-leverandøren, og beholder resultatet som forventet rammeverk for denne versjonen.
Test også en avvist eller ugyldig tilstand: nekt testidentiteten midlertidig tilgang til MySQL 8, SMTP og valgfri object storage for nettsteder med mye medieinnhold. Ghost skal feile på en måte som gjør feilen diagnostiserbar, og skal ikke overskrive frisk state. Gjenopprett den gyldige tilstanden, kjør eksempelet på nytt og legg ved relevante redigerte logger. Disse artefaktene gir en fremtidig rollback-beslutning konkrete bevis.
Et Docker-baselineoppsett for Ghost
Hold den første Ghost-invokeringen reproduserbar nok til å kunne gjennomgås i en pull request.
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
Ikke stol på latest etter at det finnes reelle data. Ta vare på den fungerende digest-en, container-brukeren og eierskapet til mountet. Følg applikasjonsloggen gjennom en komplett test — fullfør eieroppsettet, publiser et innlegg med et bilde, abonner på et medlem og send et testnyhetsbrev via konfigurert e-post — og noter eventuelle migreringer før du legger routen bak produksjonstrafikk.
TLS er enkelt; genererte URL-er er ikke
Sett url til det endelige HTTPS-domenet før publisering. Send det valgte hostnavnet til containerport 2368, videresend den opprinnelige hosten og HTTPS-skjemaet, og unngå å publisere en ekstra direkte origin.
Test Ghost fra en ren ekstern klient. Skill ingress-feil fra den kjente applikasjonsgrensen — url-innstillingen er HTTP eller content-volumet er erstattet. En sertifikat-, DNS- eller 502-feil hører til routing; en request som når Ghost og feiler senere, hører til applikasjonens state, kapasitet eller et støttende krav. Guiden til TLS for custom domains dekker den første gruppen.
Kapasitets- og oppgraderingssjekker
Kapasitetstester bør utøve MySQL-spørringer, bildelagring, theme-rendering, antall medlemmer og grensene hos bulk-mail-leverandøren, ikke en gjentatt request til /. Kjør scenarioet «fullfør eieroppsettet, publiser et innlegg med et bilde, abonner på et medlem og send et testnyhetsbrev via konfigurert e-post» med realistisk samtidighet, og registrer latency, feilrate og vekst i lagringsforbruket.
Oppgraderingsplanleggingen må ta høyde for denne risikoen: Ghost-migreringer, forventninger til Node-runtime og custom themes bør testes på et klonet nettsted. Test den nye releasen med representative inputdata, gjenta deretter akseptansetransaksjonen og sammenlign resultatet. Hvis url-innstillingen er HTTP eller content-volumet er erstattet, må du dokumentere den mislykkede transaksjonen og undersøke den første involverte grensen i stedet for å anta at ingressen er ansvarlig.
Flytt det repeterbare infrastrukturarbeidet til Dockup
Routing, sertifikater, utskifting av tjenester og tilknyttet storage er fornuftige mål for automatisering. Dockup håndterer dette for Ghost og kan provisjonere den tilknyttede managed databasen eller koble til tjenester på kundens egen server.
Det Dockup ikke bør finne på, er trust policy-en for Ghost. Etter deployment setter du url til det endelige HTTPS-domenet før publisering, håndhever denne grensen — beskytt Ghost Admin, oppbevar mail- og databasecredentials på serversiden og sett den endelige HTTPS-URL-en før publisering — og verifiserer resultatet av dette scenarioet: fullfør eieroppsettet, publiser et innlegg med et bilde, abonner på et medlem og send et testnyhetsbrev via konfigurert e-post. Resultatet er infrastruktur med ett klikk og en applikasjonsspesifikk akseptansetest.
Vanlige spørsmål
Hva trenger Ghost for en produksjonsdeployment?
Rout Ghost-containeren på port 2368 gjennom én HTTPS-origin. Det støttende nettverkskravet er MySQL 8, SMTP og valgfri object storage for nettsteder med mye medieinnhold. Ikke erklær Ghost klar før du kan fullføre eieroppsettet, publisere et innlegg med et bilde, abonnere på et medlem og sende et testnyhetsbrev via konfigurert e-post.
Hvilke Ghost-data bør inkluderes i en sikkerhetskopi?
Gjør /var/lib/ghost/content persistent, og inkluder MySQL-databasen samt themes, bilder og innholdsfiler i samme recovery-manifest. En ren Ghost-restore er bare godkjent når innlegg, medlemmer, nyhetsbrev, themes og bilder er tilbake, og et testmedlem kan åpne den gjenopprettede publikasjonen.
Krever Ghost HTTPS bak en reverse proxy?
Bruk HTTPS for den offentlige Ghost-origin-en, og hold port 2368 på den interne routen. Bruk Ghost-innstillingen riktig: sett url til det endelige HTTPS-domenet før publisering. For Ghost beskytter HTTPS credentials eller brukerinnhold under overføring og sørger for konsistent klientoppførsel som er avhengig av origin.
Hvordan bør en Ghost-oppgradering testes?
Gjenopprett den nåværende Ghost-staten i en isolert deployment, bruk kandidatversjonen og gjenta akseptansetransaksjonen. Vær spesielt oppmerksom, fordi Ghost-migreringer, forventninger til Node-runtime og custom themes bør testes på et klonet nettsted. Behold det forrige Ghost-imaget til datamigrerings- og rollback-grensen er forstått.
