Ghost hosten op een Managed VPS betekent dat u uw artikelen publiceert, uw leden verzamelt en uw nieuwsbrieven verstuurt vanaf een machine die van u is, en die ons team bijwerkt en dag en nacht in de gaten houdt. Ghost is opensourcesoftware onder de MIT-licentie. Deze gids volgt de officiële documentatie: Ghost-CLI of Docker Compose, MySQL, HTTPS, e-mails, back-ups en updates.
Door Simon Vasconcelos Lee
Gepubliceerd op 9 november 2026Leestijd: 13 minuten
content, en werk bij met ghost update of docker compose pull: het project publiceert elke week updates.Ghost is een professioneel en vrij publicatieplatform, geschreven voor Node.js. Het brengt op één plek samen wat een onafhankelijke publicatie vaak uit meerdere tools opbouwt.
Volgens de documentatie heeft het product bij zelf hosten dezelfde functies. Wat eromheen zit, komt op u neer: het versturen van de nieuwsbrieven, de webanalyse, een CDN en de volledige back-ups van de site.
Ghost wordt gepubliceerd onder de MIT-licentie. Ze staat toe de software te gebruiken, te kopiëren, te wijzigen, samen te voegen, te publiceren, te verspreiden, in sublicentie te geven en te verkopen, onder één voorwaarde: de copyrightvermelding en de tekst van de licentie blijven in elke kopie staan. U kunt Ghost dus in een bedrijf laten draaien, aanpassen en er voor uw klanten op publiceren, zonder een licentie te kopen.
De licentie dekt de code. De naam en het logo zijn van Ghost Foundation en vallen onder haar merkenbeleid: lees het als u een aanbod rond de software bouwt. Ghost is een gedeponeerd merk van Ghost Foundation.
This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. In het Nederlands: deze publicatie is onafhankelijk van Ghost Foundation en is niet aan haar gelieerd, noch door haar toegestaan, gesponsord of goedgekeurd.
Het project documenteert twee wegen voor productie. Ghost-CLI is de installatie die het officieel aanbeveelt, en Docker Compose is een “preview”, die het zelf gloednieuw noemt. Het geeft ook aan naar deze Docker-tooling toe te werken in plaats van Ghost-CLI verder te ontwikkelen, en het levert een assistent om van de ene naar de andere over te stappen.
| Punt | Ghost-CLI | Docker Compose (preview) |
|---|---|---|
| Systeem | Ubuntu 22.04, 24.04 of 26.04 | Een Linux-server met Docker 20.10.13 of nieuwer |
| Geheugen | Minstens 1 GB | Het project noemt als voorbeeld een server met 2 GB en 1 processor |
| Webserver en HTTPS | Nginx en een Let’s Encrypt-certificaat, geplaatst door Ghost-CLI | Caddy, in een container, die TLS afhandelt |
| Database | MySQL 8.0 of 8.4, op de server geïnstalleerd | MySQL in een container |
| Webanalyse | Niet compatibel | Beschikbaar, met een Tinybird-account |
| Sociaal netwerk (ActivityPub) | De dienst die het project host, gratis binnen zijn gebruiksgrenzen | Dezelfde dienst standaard, of uw eigen, zelf gehost |
Laat het domein naar de server wijzen vóór de installatie: het certificaat wordt tijdens de installatie geplaatst. Op een Simafri-VPS komen de bezoekers binnen op de poorten 80 en 443, onder de domeinnaam van de server, met A- en AAAA-records. Het adres van de site schrijft u volledig uit, met zijn protocol, zoals https://example.com: een IP-adres veroorzaakt fouten.
Behalve het hierboven genoemde geheugen noemt het project geen cijfers voor schijf of belasting: de grootte hangt af van uw verkeer, uw afbeeldingen en uw media. Beschrijf op een managed VPS uw publicatie aan ons, dan raden wij u de passende grootte aan.
Ghost-CLI gebruikt u met een gebruiker die niet root is en niet ghost heet, want die naam botst met het hulpprogramma. Maak hem aan vanuit het rootaccount en vervang user door de gekozen naam:
adduser <user>
usermod -aG sudo <user>
su - <user>
Werk het systeem bij, installeer Nginx (minstens 1.9.5 voor SSL) en MySQL. De regel ufw opent HTTP en HTTPS als deze firewall actief is:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server
Op recente versies van Ubuntu authenticeert het rootaccount van MySQL zich via een socket, wat Ghost niet ondersteunt. Geef het een wachtwoord:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit
Ghost vraagt Node.js 22: de versies 20, 21, 23 en nieuwer worden niet ondersteund. Het project vraagt het voor het hele systeem te installeren, op deze manier:
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 wordt in zijn eigen map geïnstalleerd, met een bepaalde eigenaar en bepaalde rechten. Vervang sitename door de naam van uw keuze:
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
De opdracht stelt dan zijn vragen, en het project raadt aan bij elke voorgestelde stap ja te antwoorden:
https://.localhost als host, root en het hierboven ingestelde wachtwoord, daarna de naam van de database, die Ghost-CLI aanmaakt.De site antwoordt dan, en https://example.com/ghost nodigt u uit het account van de eigenaar aan te maken. Wordt de installatie onderbroken, dan hervat ghost setup de configuratie; mislukt ze, dan ruimt ghost uninstall beter op dan het verwijderen van de map. ghost doctor controleert het systeem op elk moment.
Het project presenteert deze methode als een “preview”: in zijn ogen is ze gloednieuw. Zij is het die het zelf hosten van webanalyse en ActivityPub mogelijk maakt.
Haal op een server waar Docker is geïnstalleerd de officiële tooling op in /opt/ghost en kopieer de twee voorbeeldbestanden:
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
Vul in het bestand .env deze waarden in:
DOMAIN: het domein van de site, bijvoorbeeld example.com.ADMIN_DOMAIN: een apart domein voor het beheer, als u dat wilt.DATABASE_ROOT_PASSWORD en DATABASE_PASSWORD: twee wachtwoorden die u genereert met openssl rand -hex 32. Ze liggen voorgoed vast: is de database eenmaal geïnitialiseerd, dan breekt het wijzigen ervan de verbinding.Haal in caddy/Caddyfile het commentaar weg bij het blok dat bij uw geval past: doorverwijzing van www naar het kale domein, of omgekeerd, of een apart beheerdomein. Start daarna Ghost en rond de installatie af op /ghost:
docker compose pull
docker compose up -d
HTTP_PORT en HTTPS_PORT als Ghost achter een andere reverse proxy komt. MySQL blijft op het interne netwerk van de containers.data/ghost en de database in data/mysql, twee locaties die u in .env kunt instellen.-f compose.yml -f compose.ipv6.yml toe aan uw opdrachten docker compose up.De analyse vraagt een Tinybird-account, een externe dienst. Meld u vanuit /opt/ghost aan, implementeer de configuratie en haal de tokens op die u in .env plakt, sectie “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 werkt meteen met de dienst die het project host, gratis binnen gebruiksgrenzen die de documentatie publiceert. Om uw eigen dienst zelf te hosten, haalt u het commentaar weg bij ACTIVITYPUB_TARGET=activitypub:8080. Activeer daarna in .env het gewenste profiel of de gewenste profielen en start de containers opnieuw:
COMPOSE_PROFILES=analytics,activitypub
docker compose pull
docker compose up -d
Voor ActivityPub vraagt het project ook Ghost en Caddy opnieuw aan te maken, met docker compose up -d --force-recreate ghost caddy.
Na het klonen en configureren kopieert bash scripts/migrate.sh de map content, importeert de database in de MySQL-container en start Caddy in plaats van Nginx. Het stelt voor Nginx te stoppen, waardoor de site offline gaat: antwoord nee als er andere sites op de server draaien. Het verwijdert geen enkel gegeven. bash recovery_instructions.sh herstelt de oorspronkelijke site als u de migratie onderbreekt.
Het beheer van Ghost moet via HTTPS lopen, en het project beveelt HTTPS voor de hele site aan: zonder gaan gebruikersnamen en wachtwoorden leesbaar over de lijn. Met Docker Compose zorgt Caddy ervoor. Met Ghost-CLI plaatst de installatie het certificaat, en een opdracht doet dat achteraf:
ghost setup ssl
Om het adres van een met Ghost-CLI geïnstalleerde site te wijzigen, werkt ghost config url https://example.com de configuratie bij en past ghost restart haar toe.
Het project raadt ook een apart beheerdomein aan, dat het aanvalsoppervlak verkleint. Het pad blijft /ghost/. Bij Ghost-CLI geeft u het op in config.production.json:
"admin": {
"url": "https://admin.example.com"
}
Vul bij Docker Compose ADMIN_DOMAIN in, haal het commentaar weg bij zijn blok in het Caddyfile en voer docker compose up -d --force-recreate ghost caddy uit. Ook dit domein heeft zijn A- en AAAA-records nodig.
MySQL 8 is de enige database die het project in productie ondersteunt. Ghost-CLI wordt geïnstalleerd met MySQL 8.0 of 8.4, en het Compose-bestand levert een MySQL 8.0-image.
ghost config database.client, in de map van de site, geeft aan welke database wordt gebruikt.Ghost onderscheidt twee soorten verzending, die niet dezelfde weg volgen. Dit is het belangrijkste punt om na de installatie in te stellen.
| Verzending | Voorbeelden | Wat haar draagt |
|---|---|---|
| Transactioneel | Uitnodigingen van het team, vergeten wachtwoorden, registraties en aanmeldlinks van leden, aanmeldcode vanaf een nieuw apparaat | De configuratie mail van Ghost, via SMTP |
| Nieuwsbrieven | De artikelen die naar uw leden worden verstuurd | De API van Mailgun, waarvan u de sleutels invoert in de instellingen “Email newsletter” |
De documentatie rekent deze configuratie tot de vereisten in productie. Ghost stuurt ook een code per e-mail wanneer het een aanmelding vanaf een nieuw apparaat opmerkt: stel deze relay in voordat u uw team uitnodigt.
Op een Simafri-VPS loopt het verzenden via een geauthenticeerde SMTP-relay, op poort 587: het adres van een e-mailaccount dat u al hebt, of 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 en requireTLS: Ghost verstuurt via Nodemailer, waarvan de documentatie secure op false vraagt op poort 587, waarna de verbinding overgaat op STARTTLS. requireTLS weigert het verzenden als die overgang mislukt. Het voorbeeldbestand van de repository noemt poort 465 en secure=true: vervang deze twee regels.from bevat een echt, gelezen adres, wat volgens het project de bezorgbaarheid verbetert, en de SPF-, DKIM- en DMARC-records van het verzenddomein maken de instelling compleet.De SMTP-relay dekt de nieuwsbrieven niet. Volgens de documentatie gebeurt massaverzending niet via SMTP en is Mailgun tot nu toe de enige dienst voor massaverzending die Ghost ondersteunt. U maakt uw Mailgun-account aan en voert de API-sleutels ervan in de instellingen van Ghost in.
Verstuurt u uw artikelen niet per e-mail, dan hebt u geen Mailgun-account nodig: die instellingen kunt u negeren. Geeft u de voorkeur aan een andere nieuwsbriefdienst, dan stelt het project voor uw leden ernaar te synchroniseren, bijvoorbeeld met Zapier of de integratiegidsen.
Ghost kent drie niveaus van kopie, en ze bevatten niet hetzelfde. Om een site identiek te herbouwen, vraagt het project rechtstreeks een back-up te maken van de database en de map content.
| Methode | Wat ze bevat | Voor welk gebruik |
|---|---|---|
ghost backup (Ghost-CLI) | Een zip: inhoud in JSON, leden in CSV, thema's, afbeeldingen, bestanden en media, routes en doorverwijzingen | De voorzorgsmaatregel vóór een update |
| Export vanuit het beheer | Een zip: inhoud en instellingen, leden, statistieken van artikelen, thema's, routes en doorverwijzingen, naar keuze. Geen reacties, geen activiteitsgeschiedenis van leden, geen media | Het verplaatsen van de inhoud naar een andere site |
Database en map content | Alle gegevens | Herstel na een calamiteit, of een exacte kopie |
De export vindt u in “Settings”, “Advanced”, “Import/Export”, tabblad “Export”, knop “All data”. Voor de volledige kopie met Ghost-CLI staan het MySQL-account en de naam van de database die u moet overnemen in 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/
Met Docker Compose bewaart de officiële tooling de inhoud in data/ghost. De dump volgt de vorm die de MySQL-image geeft, en het rootwachtwoord zit al in de container. Bewaar ook een kopie van .env en van het 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
Kopieer deze bestanden van de server af, met rsync of scp, en test het terugzetten op een testmachine. Begint u opnieuw vanuit een export met betalende leden, koppel dan hetzelfde Stripe-account vóór u uw leden importeert.
Het project publiceert elke week updates en herinnert eraan dat een openbare webserver bijgewerkt moet blijven. Lees de release-opmerkingen en voer daarna de opdracht van uw methode uit.
ghost check-update
ghost backup
ghost update
ghost update --rollback keert terug naar de vorige versie als een update verkeerd afloopt.content blijft tijdens de updates ongemoeid.ghost update [version] --force uit met uw huidige versie, want de binaire afhankelijkheden zijn voor een bepaalde versie van Node.js gecompileerd.cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune
De laatste regel, optioneel, verwijdert de oude images. Laat GHOST_VERSION in .env als commentaar staan: een vastgelegde versie blokkeert deze updateopdrachten.
De documentatie geeft meerdere instellingen voor een server in productie:
mysql_secure_installation uit na een geslaagde installatie met Ghost-CLI.Voor de belasting plaatst het project een CDN en een cachelaag voor Ghost. Het preciseert dat clustering en sharding niet worden ondersteund: één enkele instantie bedient de site, en de cache vangt het verkeer op.
Self-hosting vraagt dat u naast de applicatie ook de server beheert. Op een managed VPS neemt ons team de server voor zijn rekening en houdt het uw instantie proactief in de gaten; Ghost blijft uw software, met zijn instellingen en gegevens.
| Onderwerp | Ons team | U |
|---|---|---|
| De server | Systeem- en beveiligingsupdates, ingrepen op de server inbegrepen | Het moment dat bij uw activiteit past |
| De monitoring | Server 24 uur per dag en 7 dagen per week bewaakt, met ingrijpen zonder op uw oproep te wachten | Uw inhoud, uw leden en uw abonnementen |
| Ghost | Proactief toezicht: fouten, vertragingen en schijfruimte opgespoord, correctie aangeraden | De installatie, de updates, de instellingen, de SMTP-relay en het Mailgun-account, die u toepast, zelf of via uw AI-assistent |
| De back-ups | Elke nacht, versleuteld en buiten de machine bewaard; terugzetten inbegrepen | Het verzoek om terug te zetten, wanneer u dat nodig hebt |
| De migratie | Uw huidige server gemigreerd, gratis | Het moment van de overschakeling |
Wilt u liever dat ons team in de applicatie zelf ingrijpt, dan wordt die dienstverlening per uur of tegen een vast bedrag gefactureerd, met een offerte voordat het werk begint.
Met een Managed VPS van Simafri houdt ons team de server van uw Ghost-instantie up-to-date, bewaakt hem dag en nacht en grijpt in zonder op uw oproep te wachten; het houdt ook uw instantie proactief in de gaten en raadt u de nuttige correcties aan, die u toepast, zelf of via uw AI-assistent. De back-ups worden elke nacht versleuteld en buiten de machine bewaard, het terugzetten is inbegrepen, en de migratie van uw huidige server is gratis.
Ja. Ghost valt onder de MIT-licentie: u mag het in een bedrijf gebruiken en aanpassen, zolang u de licentievermelding behoudt. Wat overblijft, zijn de diensten eromheen: de server, de e-mailrelay, Mailgun als u nieuwsbrieven verstuurt, Tinybird als u de analyse ervan wilt.
Het project beveelt Ubuntu 22.04, 24.04 of 26.04, Nginx, Node.js 22, MySQL 8.0 of 8.4, systemd, minstens 1 GB geheugen, een domein en een gebruiker die niet root is aan. Voor Docker Compose noemt het als voorbeeld een server met 2 GB en 1 processor.
Ghost-CLI is de installatie die het project voor productie aanbeveelt. Docker Compose is een preview, de enige die webanalyse en zelf gehoste ActivityPub toelaat, en het project zegt naar deze tooling toe te werken. Een assistent maakt de overstap van Ghost-CLI naar Docker Compose mogelijk.
In productie is MySQL 8 de enige ondersteunde database. Het project raadt een herinstallatie op MySQL 8 aan vanuit SQLite, en een migratie naar MySQL 8 vanuit MariaDB. Zijn documentatie voorziet niet in PostgreSQL.
Nee. SMTP dient voor de transactionele e-mails: uitnodigingen, wachtwoorden, aanmeldlinks van leden. De nieuwsbrieven vragen de API van Mailgun, de enige ondersteunde dienst voor massaverzending. Verstuurt u uw artikelen niet per e-mail, dan is er geen Mailgun-account nodig.
Maak voor een volledig herstel een back-up van de MySQL-database met mysqldump en van de map content met tar. De opdracht ghost backup maakt vóór een update een zip. De export vanuit het beheer laat de reacties, de activiteitsgeschiedenis van leden en de media buiten beschouwing.
Voer met Ghost-CLI ghost backup en daarna ghost update uit in de map van de site, en ghost update --rollback bij problemen. Voer met Docker Compose git pull, docker compose pull en docker compose up -d uit in /opt/ghost.
Een managed VPS dekt de server: systeem, beveiliging, monitoring en back-ups. Ons team houdt ook uw instantie proactief in de gaten en raadt u de nuttige correcties aan, die u toepast. Een ingreep in de applicatie wordt per uur of tegen een vast bedrag gefactureerd.
Simafri
Laten we het over uw website hebben
Vertel ons in een paar woorden over uw project: wij nemen snel contact met u op.
Bedankt! Uw aanvraag is verzonden. We nemen spoedig contact met u op.
Liever per e-mail? Schrijf ons op support@simafri.com.