At hoste Ghost på en Managed VPS betyder at udgive dine artikler, samle dine medlemmer og sende dine nyhedsbreve fra en maskine, der er din egen, og som vores teams holder opdateret og overvåger dag og nat. Ghost er fri software under MIT-licensen. Denne guide følger den officielle dokumentation: Ghost-CLI eller Docker Compose, MySQL, HTTPS, e-mails, backup og opdateringer.
Af Simon Vasconcelos Lee
Udgivet den 9. november 2026Læsetid: 13 minutter
content, og opdatér derefter med ghost update eller docker compose pull: projektet udgiver opdateringer hver uge.Ghost er en professionel og fri publiceringsplatform, skrevet til Node.js. Den samler på ét sted, hvad en uafhængig publikation ofte sætter sammen af flere værktøjer.
Ifølge dokumentationen har produktet de samme funktioner i selvhosting. Det, der omgiver det, er dit eget ansvar: afsendelse af nyhedsbreve, webanalyse, et CDN og komplette backup af websitet.
Ghost udgives under MIT-licensen. Den tillader at bruge, kopiere, ændre, sammenflette, udgive, distribuere, underlicensiere og sælge softwaren på én betingelse: at bevare copyright-meddelelsen og licensteksten i enhver kopi. Du kan altså køre Ghost i din virksomhed, tilpasse den og udgive for dine kunder med den uden at skulle købe en licens.
Licensen dækker koden. Navnet og logoet tilhører Ghost Foundation og hører under dets varemærkepolitik: læs den, hvis du bygger et tilbud op omkring softwaren. Ghost er et registreret varemærke tilhørende Ghost Foundation.
This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. På dansk: denne publikation er uafhængig af Ghost Foundation og er hverken tilknyttet, godkendt, sponsoreret eller bekræftet af den.
Projektet dokumenterer to veje til produktion. Ghost-CLI er den installation, det officielt anbefaler, og Docker Compose er en «preview», som det selv kalder helt ny. Det oplyser også, at det bevæger sig mod dette Docker-værktøj frem for at videreudvikle Ghost-CLI, og det leverer en guide til at gå fra den ene til den anden.
| Punkt | Ghost-CLI | Docker Compose (preview) |
|---|---|---|
| System | Ubuntu 22.04, 24.04 eller 26.04 | En Linux-server med Docker 20.10.13 eller nyere |
| Hukommelse | Mindst 1 GB | Projektet nævner som eksempel en server med 2 GB og 1 processor |
| Webserver og HTTPS | Nginx og et certifikat fra Let's Encrypt, installeret af Ghost-CLI | Caddy, i en container, som håndterer TLS |
| Database | MySQL 8.0 eller 8.4 installeret på serveren | MySQL i en container |
| Webanalyse | Ikke kompatibel | Tilgængelig, med en Tinybird-konto |
| Socialt netværk (ActivityPub) | Den tjeneste, projektet selv hoster, gratis inden for sine brugsgrænser | Den samme tjeneste som standard, eller din egen, selvhostet |
Lad domænet pege på serveren før installationen: certifikatet installeres under opsætningen. På en Simafri VPS kommer de besøgende ind på port 80 og 443, under serverens domænenavn, med A- og AAAA-records. Websitets adresse skrives fuldt ud, med sin protokol, som https://example.com: en IP-adresse giver fejl.
Ud over den hukommelse, der er angivet ovenfor, opgiver projektet hverken disk eller belastning: størrelsen afhænger af din trafik, dine billeder og dine medier. På en Managed VPS beskriver du blot din publikation for os, og vi anbefaler den størrelse, der passer.
Ghost-CLI bruges med en bruger, der ikke er root, og hvis navn ikke er ghost, fordi dette navn er i konflikt med værktøjet. Opret den fra root-kontoen, og erstat user med det valgte navn:
adduser <user>
usermod -aG sudo <user>
su - <user>
Opdatér systemet, og installér Nginx (mindst 1.9.5 til SSL) og MySQL. Linjen med ufw åbner HTTP og HTTPS, hvis denne firewall er aktiv:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server
På nyere versioner af Ubuntu godkendes MySQL's root-konto via socket, hvilket Ghost ikke understøtter. Giv den en adgangskode:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit
Ghost kræver Node.js 22: versionerne 20, 21, 23 og senere understøttes ikke. Projektet beder om at installere den for hele systemet på denne måde:
sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=22
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y
sudo npm install ghost-cli@latest -g
Ghost installeres i sin egen mappe, med en bestemt ejer og bestemte rettigheder. Erstat sitename med det navn, du vælger:
sudo mkdir -p /var/www/sitename
sudo chown <user>:<user> /var/www/sitename
sudo chmod 775 /var/www/sitename
cd /var/www/sitename
ghost install
Kommandoen stiller derefter sine spørgsmål, og projektet anbefaler at svare ja til hvert foreslået trin:
https://.localhost som vært, root og den adgangskode, der blev sat ovenfor, derefter databasens navn, som Ghost-CLI opretter.Websitet svarer nu, og https://example.com/ghost inviterer dig til at oprette ejerens konto. Hvis installationen afbrydes, genoptager ghost setup konfigurationen; hvis den fejler, rydder ghost uninstall bedre op end at slette mappen. ghost doctor kontrollerer systemet når som helst.
Projektet præsenterer denne metode som en «preview»: den er helt ny i dets øjne. Det er den, der gør det muligt selv at hoste webanalyse og ActivityPub.
På en server, hvor Docker er installeret, henter du det officielle værktøj i /opt/ghost og kopierer dets to eksempelfiler:
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
I filen .env angiver du disse værdier:
DOMAIN: websitets domæne, for eksempel example.com.ADMIN_DOMAIN: et separat domæne til administrationen, hvis du ønsker det.DATABASE_ROOT_PASSWORD og DATABASE_PASSWORD: to adgangskoder trukket med openssl rand -hex 32. De fastlægges én gang for alle: når databasen er initialiseret, ødelægger det forbindelsen at ændre dem.I caddy/Caddyfile fjerner du kommentarmarkeringen fra den blok, der svarer til dit tilfælde: omdirigering fra www til det nøgne domæne eller omvendt, eller separat administrationsdomæne. Start derefter Ghost, og afslut opsætningen på /ghost:
docker compose pull
docker compose up -d
HTTP_PORT og HTTPS_PORT, hvis Ghost kommer bag en anden reverse proxy. MySQL forbliver på containernes interne netværk.data/ghost og databasen i data/mysql, to placeringer, der kan indstilles i .env.-f compose.yml -f compose.ipv6.yml til dine kommandoer docker compose up.Analysen kræver en Tinybird-konto, en ekstern tjeneste. Fra /opt/ghost logger du ind, udruller dens konfiguration og henter de tokens, der skal indsættes i .env, afsnittet «Tinybird configuration»:
docker compose run --rm tinybird-login
docker compose run --rm tinybird-sync
docker compose run --rm tinybird-deploy
docker compose run --rm tinybird-login get-tokens
ActivityPub fungerer straks med den tjeneste, projektet selv hoster, gratis inden for brugsgrænser, som dens dokumentation offentliggør. For selv at hoste din egen fjerner du kommentarmarkeringen fra ACTIVITYPUB_TARGET=activitypub:8080. Slå derefter den eller de ønskede profiler til i .env, og start containerne igen:
COMPOSE_PROFILES=analytics,activitypub
docker compose pull
docker compose up -d
Til ActivityPub beder projektet om også at genskabe Ghost og Caddy, med docker compose up -d --force-recreate ghost caddy.
Efter kloningen og konfigurationen kopierer bash scripts/migrate.sh mappen content, importerer databasen i MySQL-containeren og starter Caddy i stedet for Nginx. Det foreslår at stoppe Nginx, hvilket tager websitet offline: svar nej, hvis andre websites kører på serveren. Det sletter ingen data. bash recovery_instructions.sh genopretter det oprindelige website, hvis du afbryder migreringen.
Ghosts administration skal gå via HTTPS, og projektet anbefaler HTTPS for hele websitet: uden det sendes loginoplysninger og adgangskoder i klartekst. Med Docker Compose klarer Caddy det. Med Ghost-CLI installerer installationen certifikatet, og en kommando gør det bagefter:
ghost setup ssl
For at ændre adressen på et website installeret med Ghost-CLI opdaterer ghost config url https://example.com konfigurationen, og ghost restart anvender den.
Projektet anbefaler også et separat administrationsdomæne, som mindsker angrebsfladen. Stien forbliver /ghost/. Med Ghost-CLI angives det i config.production.json:
"admin": {
"url": "https://admin.example.com"
}
Med Docker Compose angiver du ADMIN_DOMAIN, fjerner kommentarmarkeringen fra dens blok i Caddyfile og kører docker compose up -d --force-recreate ghost caddy. Dette domæne har også brug for sine A- og AAAA-records.
MySQL 8 er den eneste database, som projektet understøtter i produktion. Ghost-CLI installeres med MySQL 8.0 eller 8.4, og Compose-filen leverer et MySQL 8.0-image.
ghost config database.client, i websitets mappe, viser, hvilken database der bruges.Ghost skelner mellem to former for afsendelse, som ikke går samme vej. Det er det vigtigste punkt at få sat op efter installationen.
| Afsendelse | Eksempler | Hvad der bærer den |
|---|---|---|
| Transaktionel | Invitationer til teamet, glemte adgangskoder, medlemmernes tilmeldinger og loginlinks, loginkode fra en ny enhed | Ghosts konfiguration mail, via SMTP |
| Nyhedsbreve | De artikler, der sendes til dine medlemmer | Mailguns API, hvis nøgler indtastes under indstillingerne «Email newsletter» |
Dokumentationen klassificerer denne konfiguration som påkrævet i produktion. Ghost sender også en kode pr. e-mail, når det registrerer et login fra en ny enhed: indstil dette relay, før du inviterer dit team.
På en Simafri VPS går afsendelsen gennem et autentificeret SMTP-relay på port 587: adressen på en mailkonto, du allerede har, eller Simafri Suite.
"mail": {
"transport": "SMTP",
"from": "'Acme Support' <support@example.com>",
"options": {
"host": "smtp.example.com",
"port": 587,
"secure": false,
"requireTLS": true,
"auth": {
"user": "support@example.com",
"pass": "1234567890"
}
}
}
mail__transport=SMTP
mail__options__host=smtp.example.com
mail__options__port=587
mail__options__secure=false
mail__options__requireTLS=true
mail__options__auth__user=support@example.com
mail__options__auth__pass=1234567890
mail__from="'Acme Support' <support@example.com>"
docker compose up -d --force-recreate ghost
secure og requireTLS: Ghost sender via Nodemailer, hvis dokumentation kræver secure sat til false på port 587, hvor forbindelsen derefter skifter til STARTTLS. requireTLS afviser afsendelsen, hvis dette skift fejler. Repositoryets eksempelfil angiver port 465 og secure=true: erstat disse to linjer.from bærer en rigtig adresse, der bliver læst, hvilket ifølge projektet forbedrer leveringen, og afsenderdomænets SPF-, DKIM- og DMARC-records fuldender indstillingen.SMTP-relayet dækker ikke nyhedsbreve. Ifølge dokumentationen sker masseudsendelse ikke via SMTP, og Mailgun er i dag den eneste tjeneste til masseudsendelse, som Ghost understøtter. Du opretter din Mailgun-konto og indtaster dens API-nøgler i Ghosts indstillinger.
Hvis du ikke sender dine artikler pr. e-mail, har du ikke brug for nogen Mailgun-konto: disse indstillinger kan ignoreres. Hvis du foretrækker et andet nyhedsbrevsværktøj, foreslår projektet at synkronisere dine medlemmer til det, for eksempel med Zapier eller dets integrationsguider.
Ghost tilbyder tre niveauer af kopi, og de indeholder ikke det samme. For at genopbygge et website identisk beder projektet om at tage backup direkte af databasen og mappen content.
| Metode | Hvad den indeholder | Til hvilken brug |
|---|---|---|
ghost backup (Ghost-CLI) | En zip: indhold i JSON, medlemmer i CSV, temaer, billeder, filer og medier, ruter og omdirigeringer | Forholdsreglen før en opdatering |
| Eksport fra administrationen | En zip: indhold og indstillinger, medlemmer, artiklernes statistik, temaer, ruter og omdirigeringer, efter valg. Hverken kommentarer, medlemmernes aktivitetshistorik eller medier | Flytning af indholdet til et andet website |
Database og mappen content | Samtlige data | Genopretning efter en katastrofe eller en nøjagtig kopi |
Eksporten findes under «Settings», «Advanced», «Import/Export», fanen «Export», knappen «All data». Til den komplette kopi, med Ghost-CLI, står MySQL-kontoen og databasens navn, som skal overføres, i config.production.json:
mkdir -p ~/ghost-backups
mysqldump -u ghost_user -p ghost_production > ~/ghost-backups/ghost_backup.sql
cd /var/www/sitename
tar czf ~/ghost-backups/ghost_content_backup.tar.gz content/
Med Docker Compose opbevarer det officielle værktøj indholdet i data/ghost. Dumpet følger den form, MySQL-imaget giver, og root-adgangskoden findes allerede i containeren. Behold også en kopi af .env og Caddyfile.
cd /opt/ghost
mkdir -p ~/ghost-backups
docker compose exec -T db sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' > ~/ghost-backups/ghost_backup.sql
tar czf ~/ghost-backups/ghost_content_backup.tar.gz data/ghost
cd /var/www/sitename
ghost stop
mysql -u ghost_user -p ghost_production < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
sudo chown -R ghost:ghost content
ghost restart
cd /opt/ghost
docker compose stop ghost
docker compose exec -T db sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" ghost' < ~/ghost-backups/ghost_backup.sql
tar xzf ~/ghost-backups/ghost_content_backup.tar.gz
docker compose start ghost
Kopiér disse filer væk fra serveren med rsync eller scp, og lav en prøvegendannelse på en testmaskine. Hvis du starter forfra fra en eksport med betalende medlemmer, skal du tilslutte den samme Stripe-konto, før du importerer dine medlemmer.
Projektet udgiver opdateringer hver uge og minder om, at en offentlig webserver skal holdes opdateret. Læs versionsnoterne, og kør derefter kommandoen for din metode.
ghost check-update
ghost backup
ghost update
ghost update --rollback vender tilbage til den forrige version, hvis en opdatering går galt.content bliver, hvor den er, under opdateringerne.ghost update [version] --force med din nuværende version, for dens binære afhængigheder er kompileret til en bestemt version af Node.js.cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune
Den sidste linje, som er valgfri, fjerner de gamle images. Lad GHOST_VERSION stå som kommentar i .env: at fastlåse en version blokerer disse opdateringskommandoer.
Dokumentationen giver flere indstillinger til en server i produktion:
mysql_secure_installation efter en vellykket Ghost-CLI-installation.Til belastningen placerer projektet et CDN og et cachelag foran Ghost. Det præciserer, at clustering og sharding ikke understøttes: én enkelt instans betjener websitet, og cachen tager trafikken.
Selvhosting kræver, at du holder serveren ud over selve applikationen. På en Managed VPS tager vores teams sig af serveren og følger din instans proaktivt; Ghost forbliver din software, med dens indstillinger og data.
| Emne | Vores teams | Dig |
|---|---|---|
| Serveren | Opdateringer af system og sikkerhed, indgreb på serveren inkluderet | Det tidspunkt, der passer til din drift |
| Overvågningen | Serveren følges døgnet rundt, alle ugens dage, med indgreb uden at vente på dit opkald | Dit indhold, dine medlemmer og dine abonnementer |
| Ghost | Proaktiv opfølgning: fejl, langsomme svartider og diskplads opdages, og en rettelse anbefales | Installation, opdateringer, indstillinger, SMTP-relay og Mailgun-konto, som du gennemfører, selv eller med din AI-assistent |
| Backup | Hver nat, krypteret og opbevaret uden for maskinen; gendannelse inkluderet | Anmodningen om gendannelse, når du får brug for den |
| Migreringen | Din nuværende server flyttes, uden beregning | Tidspunktet for omlægningen |
Hvis du foretrækker, at vores teams griber ind i selve applikationen, faktureres den ydelse pr. time eller som fast pris, med et overslag oplyst før indgrebet.
Med en Managed VPS fra Simafri holder vores teams serveren bag din Ghost-instans opdateret, overvåger den dag og nat og griber ind uden at vente på dit opkald; de følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører, selv eller med din AI-assistent. Backup krypteres hver nat og opbevares uden for maskinen, gendannelsen er inkluderet, og migreringen af din nuværende server sker uden beregning.
Ja. Ghost er under MIT-licensen: du kan bruge den i din virksomhed og tilpasse den, så længe licensmeddelelsen bevares. Tilbage er tjenesterne omkring den: serveren, e-mailrelayet, Mailgun, hvis du sender nyhedsbreve, og Tinybird, hvis du vil have dens analyse.
Projektet anbefaler Ubuntu 22.04, 24.04 eller 26.04, Nginx, Node.js 22, MySQL 8.0 eller 8.4, systemd, mindst 1 GB hukommelse, et domæne og en bruger, der ikke er root. Til Docker Compose nævner det som eksempel en server med 2 GB og 1 processor.
Ghost-CLI er den installation, projektet anbefaler til produktion. Docker Compose er en preview, den eneste der giver mulighed for selvhostet webanalyse og ActivityPub, og projektet siger, at det bevæger sig mod dette værktøj. En guide gør det muligt at gå fra Ghost-CLI til Docker Compose.
I produktion er MySQL 8 den eneste understøttede database. Projektet anbefaler en nyinstallation på MySQL 8 fra SQLite og en migrering til MySQL 8 fra MariaDB. Dets dokumentation indeholder ikke PostgreSQL.
Nej. SMTP bruges til transaktionelle e-mails: invitationer, adgangskoder og medlemmernes loginlinks. Nyhedsbreve kræver Mailguns API, den eneste understøttede tjeneste til masseudsendelse. Sender du ikke artikler pr. e-mail, er der ikke brug for nogen Mailgun-konto.
Til en komplet genopretning tager du backup af MySQL-databasen med mysqldump og af mappen content med tar. Kommandoen ghost backup producerer en zip før en opdatering. Eksporten fra administrationen udelader kommentarer, medlemmernes aktivitetshistorik og medier.
Med Ghost-CLI kører du ghost backup og derefter ghost update i websitets mappe og ghost update --rollback, hvis der opstår et problem. Med Docker Compose kører du git pull, docker compose pull og docker compose up -d i /opt/ghost.
En Managed VPS dækker serveren: system, sikkerhed, overvågning og backup. Vores teams følger også din instans proaktivt og anbefaler dig de nyttige rettelser, som du gennemfører. Et indgreb i selve applikationen faktureres pr. time eller som fast pris.
Simafri
Lad os tale om din hjemmeside
Fortæl os om dit projekt med få ord: vi vender hurtigt tilbage til dig.
Tak! Din forespørgsel er sendt. Vi vender tilbage til dig hurtigst muligt.
Foretrækker du e-mail? Skriv til os på support@simafri.com.