Ghost auf einem Managed VPS zu hosten heißt, Ihre Artikel zu veröffentlichen, Ihre Mitglieder zu versammeln und Ihre Newsletter zu versenden, von einer Maschine aus, die Ihnen gehört und die unsere Teams aktuell halten und Tag und Nacht beaufsichtigen. Ghost ist freie Software unter der MIT-Lizenz. Dieser Leitfaden folgt der offiziellen Dokumentation: Ghost-CLI oder Docker Compose, MySQL, HTTPS, E-Mails, Backups und Updates.
Von Simon Vasconcelos Lee
Veröffentlicht am 9. November 2026Lesezeit: 13 Minuten
content und aktualisieren Sie dann mit ghost update oder docker compose pull: Das Projekt veröffentlicht jede Woche Updates.Ghost ist eine professionelle, freie Publishing-Plattform, geschrieben für Node.js. Sie vereint an einem Ort, was eine unabhängige Publikation sonst oft aus mehreren Werkzeugen zusammensetzt.
Laut der Dokumentation hat das Produkt beim Selbsthosting dieselben Funktionen. Was darum herum liegt, fällt Ihnen zu: der Versand der Newsletter, die Web-Analytics, ein CDN und die vollständigen Backups der Website.
Ghost wird unter der MIT-Lizenz veröffentlicht. Sie erlaubt, die Software zu nutzen, zu kopieren, zu ändern, zusammenzuführen, zu veröffentlichen, zu verbreiten, unterzulizenzieren und zu verkaufen, unter einer Bedingung: der Copyright-Hinweis und der Lizenztext bleiben in jeder Kopie erhalten. Sie können Ghost also im Unternehmen betreiben, anpassen und dort für Ihre Kunden veröffentlichen, ohne eine Lizenz zu kaufen.
Die Lizenz deckt den Code ab. Name und Logo gehören der Ghost Foundation und unterliegen ihrer Markenrichtlinie: Lesen Sie sie, wenn Sie rund um die Software ein Angebot aufbauen. Ghost ist eine eingetragene Marke der Ghost Foundation.
This publication is independent of and not affiliated with, authorized, sponsored, or approved by Ghost Foundation. Auf Deutsch: Diese Publikation ist unabhängig von der Ghost Foundation und steht weder in Verbindung mit ihr noch ist sie von ihr autorisiert, gesponsert oder genehmigt.
Das Projekt dokumentiert zwei Wege für die Produktion. Ghost-CLI ist die Installation, die es offiziell empfiehlt, und Docker Compose ist eine „Preview“, die es als ganz neu bezeichnet. Es gibt außerdem an, auf diese Docker-Werkzeuge zuzugehen, statt Ghost-CLI weiterzuentwickeln, und liefert einen Assistenten für den Wechsel von der einen zur anderen.
| Punkt | Ghost-CLI | Docker Compose (Preview) |
|---|---|---|
| System | Ubuntu 22.04, 24.04 oder 26.04 | Ein Linux-Server mit Docker 20.10.13 oder neuer |
| Arbeitsspeicher | Mindestens 1 GB | Das Projekt nennt als Beispiel einen Server mit 2 GB und 1 Prozessor |
| Webserver und HTTPS | Nginx und ein Zertifikat von Let’s Encrypt, von Ghost-CLI eingerichtet | Caddy in einem Container, der TLS übernimmt |
| Datenbank | MySQL 8.0 oder 8.4, auf dem Server installiert | MySQL in einem Container |
| Web-Analytics | Nicht kompatibel | Verfügbar, mit einem Tinybird-Konto |
| Soziales Netzwerk (ActivityPub) | Der vom Projekt gehostete Dienst, innerhalb seiner Nutzungsgrenzen kostenlos | Standardmäßig derselbe Dienst, oder Ihr eigener, selbst gehosteter |
Lassen Sie die Domain vor der Installation auf den Server zeigen: Das Zertifikat wird während der Einrichtung ausgestellt. Auf einem Simafri-VPS kommen die Besucher über die Ports 80 und 443 an, unter dem Domainnamen des Servers, mit A- und AAAA-Einträgen. Die Adresse der Website wird vollständig mit ihrem Protokoll geschrieben, etwa https://example.com: Eine IP-Adresse führt zu Fehlern.
Über den oben genannten Arbeitsspeicher hinaus nennt das Projekt weder Festplatte noch Last: Die Größe hängt von Ihrem Traffic, Ihren Bildern und Ihren Medien ab. Auf einem Managed VPS beschreiben Sie uns Ihre Publikation, und wir empfehlen Ihnen die passende Größe.
Ghost-CLI wird mit einem Benutzer verwendet, der nicht root ist und nicht ghost heißt, denn dieser Name kollidiert mit dem Werkzeug. Legen Sie ihn vom Konto root aus an und ersetzen Sie user durch den gewählten Namen:
adduser <user>
usermod -aG sudo <user>
su - <user>
Aktualisieren Sie das System und installieren Sie Nginx (mindestens 1.9.5 für SSL) und MySQL. Die Zeile ufw öffnet HTTP und HTTPS, falls diese Firewall aktiv ist:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx
sudo ufw allow 'Nginx Full'
sudo apt-get install mysql-server
Auf neueren Ubuntu-Versionen authentifiziert sich das MySQL-Konto root über einen Socket, was Ghost nicht unterstützt. Geben Sie ihm ein Passwort:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY '<your-new-root-password>';
FLUSH PRIVILEGES;
exit
Ghost verlangt Node.js 22: Die Versionen 20, 21, 23 und höher werden nicht unterstützt. Das Projekt verlangt, es systemweit zu installieren, und zwar so:
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 wird in einem eigenen Ordner installiert, mit einem bestimmten Eigentümer und bestimmten Rechten. Ersetzen Sie sitename durch einen Namen Ihrer Wahl:
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
Der Befehl stellt dann seine Fragen, und das Projekt empfiehlt, bei jedem vorgeschlagenen Schritt mit Ja zu antworten:
https://.localhost als Host, root und das oben gesetzte Passwort, dann der Name der Datenbank, die Ghost-CLI anlegt.Die Website antwortet nun, und https://example.com/ghost fordert Sie auf, das Konto des Eigentümers anzulegen. Wird die Installation unterbrochen, setzt ghost setup die Konfiguration fort; scheitert sie, räumt ghost uninstall besser auf als das Löschen des Ordners. ghost doctor prüft das System jederzeit.
Das Projekt stellt diese Methode als „Preview“ vor: Aus seiner Sicht ist sie ganz neu. Mit ihr lassen sich Web-Analytics und ActivityPub selbst hosten.
Holen Sie auf einem Server, auf dem Docker installiert ist, die offiziellen Werkzeuge nach /opt/ghost und kopieren Sie ihre beiden Beispieldateien:
git clone https://github.com/TryGhost/ghost-docker.git /opt/ghost && cd /opt/ghost
cp .env.example .env
cp caddy/Caddyfile.example caddy/Caddyfile
Tragen Sie in der Datei .env diese Werte ein:
DOMAIN: die Domain der Website, zum Beispiel example.com.ADMIN_DOMAIN: eine getrennte Domain für die Administration, wenn Sie möchten.DATABASE_ROOT_PASSWORD und DATABASE_PASSWORD: zwei Passwörter, erzeugt mit openssl rand -hex 32. Sie werden ein für alle Mal festgelegt: Ist die Datenbank initialisiert, bricht die Verbindung ab, wenn man sie ändert.Entfernen Sie in caddy/Caddyfile die Kommentarzeichen des Blocks, der zu Ihrem Fall passt: Weiterleitung von www auf die Domain ohne Präfix oder umgekehrt oder getrennte Administrations-Domain. Starten Sie dann Ghost und schließen Sie die Einrichtung auf /ghost ab:
docker compose pull
docker compose up -d
HTTP_PORT und HTTPS_PORT, falls Ghost hinter einen anderen Reverse Proxy kommt. MySQL bleibt im internen Netz der Container.data/ghost und die Datenbank in data/mysql, zwei Orte, die sich in der .env einstellen lassen.-f compose.yml -f compose.ipv6.yml in Ihren Befehlen docker compose up.Die Analytics verlangen ein Tinybird-Konto, einen externen Dienst. Melden Sie sich aus /opt/ghost an, deployen Sie seine Konfiguration und holen Sie die Tokens, die in die .env gehören, Abschnitt „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 funktioniert von Anfang an mit dem vom Projekt gehosteten Dienst, kostenlos innerhalb von Nutzungsgrenzen, die seine Dokumentation veröffentlicht. Um Ihren eigenen zu hosten, entfernen Sie das Kommentarzeichen bei ACTIVITYPUB_TARGET=activitypub:8080. Aktivieren Sie dann in der .env das oder die gewünschten Profile und starten Sie die Container neu:
COMPOSE_PROFILES=analytics,activitypub
docker compose pull
docker compose up -d
Für ActivityPub verlangt das Projekt, auch Ghost und Caddy neu zu erstellen, mit docker compose up -d --force-recreate ghost caddy.
Nach dem Klonen und der Konfiguration kopiert bash scripts/migrate.sh den Ordner content, importiert die Datenbank in den MySQL-Container und startet Caddy anstelle von Nginx. Es bietet an, Nginx zu stoppen, was die Website offline nimmt: Antworten Sie mit Nein, wenn auf dem Server andere Websites laufen. Es löscht keine Daten. bash recovery_instructions.sh stellt die ursprüngliche Website wieder her, wenn Sie die Migration abbrechen.
Die Administration von Ghost muss über HTTPS laufen, und das Projekt empfiehlt HTTPS für die ganze Website: Ohne es wandern Benutzernamen und Passwörter im Klartext. Mit Docker Compose übernimmt Caddy das. Mit Ghost-CLI richtet die Installation das Zertifikat ein, und ein Befehl holt es nachträglich nach:
ghost setup ssl
Um die Adresse einer mit Ghost-CLI installierten Website zu ändern, aktualisiert ghost config url https://example.com die Konfiguration, und ghost restart wendet sie an.
Das Projekt rät außerdem zu einer getrennten Administrations-Domain, die die Angriffsfläche verkleinert. Der Pfad bleibt /ghost/. Bei Ghost-CLI wird sie in der config.production.json deklariert:
"admin": {
"url": "https://admin.example.com"
}
Tragen Sie bei Docker Compose ADMIN_DOMAIN ein, entfernen Sie die Kommentarzeichen seines Blocks im Caddyfile und führen Sie docker compose up -d --force-recreate ghost caddy aus. Auch diese Domain braucht ihre A- und AAAA-Einträge.
MySQL 8 ist die einzige Datenbank, die das Projekt in der Produktion unterstützt. Ghost-CLI wird mit MySQL 8.0 oder 8.4 installiert, und die Compose-Datei liefert ein MySQL-8.0-Image.
ghost config database.client zeigt im Ordner der Website, welche Datenbank genutzt wird.Ghost unterscheidet zwei Versandarten, die nicht denselben Weg nehmen. Das ist der wichtigste Punkt, den Sie nach der Installation einstellen müssen.
| Versand | Beispiele | Was ihn trägt |
|---|---|---|
| Transaktional | Einladungen des Teams, vergessene Passwörter, Registrierungen und Anmelde-Links der Mitglieder, Anmeldecode von einem neuen Gerät | Die Konfiguration mail von Ghost, per SMTP |
| Newsletter | Die an Ihre Mitglieder gesendeten Artikel | Die API von Mailgun, deren Schlüssel in den Einstellungen „Email newsletter“ eingetragen werden |
Die Dokumentation stuft diese Konfiguration in der Produktion als erforderlich ein. Ghost sendet außerdem einen Code per E-Mail, wenn es eine Anmeldung von einem neuen Gerät erkennt: Richten Sie dieses Relay ein, bevor Sie Ihr Team einladen.
Auf einem Simafri-VPS läuft der Versand über ein authentifiziertes SMTP-Relay auf Port 587: die Adresse eines Postfachs, das Sie bereits haben, oder 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 und requireTLS: Ghost sendet über Nodemailer, dessen Dokumentation auf Port 587 secure auf false verlangt, wobei die Verbindung danach auf STARTTLS wechselt. requireTLS verweigert den Versand, wenn dieser Wechsel scheitert. Die Beispieldatei des Repositorys gibt Port 465 und secure=true an: Ersetzen Sie diese beiden Zeilen.from trägt eine echte, gelesene Adresse, was laut Projekt die Zustellbarkeit verbessert, und die SPF-, DKIM- und DMARC-Einträge der Versanddomain runden die Einstellung ab.Das SMTP-Relay deckt die Newsletter nicht ab. Laut Dokumentation erfolgt der Massenversand nicht per SMTP, und Mailgun ist bislang der einzige Dienst für den Massenversand, den Ghost unterstützt. Sie legen Ihr Mailgun-Konto an und tragen dessen API-Schlüssel in den Einstellungen von Ghost ein.
Wenn Sie Ihre Artikel nicht per E-Mail versenden, brauchen Sie kein Mailgun-Konto: Diese Einstellungen können Sie ignorieren. Wenn Sie ein anderes Newsletter-Werkzeug bevorzugen, schlägt das Projekt vor, Ihre Mitglieder dorthin zu synchronisieren, zum Beispiel mit Zapier oder seinen Integrationsanleitungen.
Ghost bietet drei Stufen der Kopie, und sie enthalten nicht dasselbe. Um eine Website identisch wieder aufzubauen, verlangt das Projekt, die Datenbank und den Ordner content direkt zu sichern.
| Methode | Was sie enthält | Wofür |
|---|---|---|
ghost backup (Ghost-CLI) | Ein Zip: Inhalte als JSON, Mitglieder als CSV, Themes, Bilder, Dateien und Medien, Routen und Weiterleitungen | Die Vorsichtsmaßnahme vor einem Update |
| Export aus der Administration | Ein Zip: Inhalte und Einstellungen, Mitglieder, Statistiken der Artikel, Themes, Routen und Weiterleitungen, nach Wahl. Weder Kommentare noch Aktivitätsverlauf der Mitglieder noch Medien | Der Umzug der Inhalte auf eine andere Website |
Datenbank und Ordner content | Die Gesamtheit der Daten | Die Wiederherstellung nach einem Schadensfall oder eine exakte Kopie |
Der Export steht unter „Settings“, „Advanced“, „Import/Export“, Reiter „Export“, Schaltfläche „All data“. Für die vollständige Kopie mit Ghost-CLI stehen das MySQL-Konto und der Name der Datenbank, die Sie übernehmen müssen, in der 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/
Mit Docker Compose bewahren die offiziellen Werkzeuge den Inhalt in data/ghost auf. Der Dump übernimmt die Form, die das MySQL-Image vorgibt, und das Root-Passwort steckt schon im Container. Bewahren Sie auch eine Kopie der .env und des Caddyfile auf.
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
Kopieren Sie diese Dateien mit rsync oder scp vom Server weg und machen Sie einen Wiederherstellungstest auf einer Testmaschine. Wenn Sie von einem Export mit zahlenden Mitgliedern neu starten, verbinden Sie dasselbe Stripe-Konto, bevor Sie Ihre Mitglieder importieren.
Das Projekt veröffentlicht jede Woche Updates und erinnert daran, dass ein öffentlicher Webserver aktuell bleiben muss. Lesen Sie die Release Notes und führen Sie dann den Befehl Ihrer Methode aus.
ghost check-update
ghost backup
ghost update
ghost update --rollback geht auf die vorherige Version zurück, wenn ein Update schiefgeht.content bleibt bei den Updates erhalten.ghost update [version] --force mit Ihrer aktuellen Version aus, denn seine binären Abhängigkeiten sind für eine bestimmte Version von Node.js kompiliert.cd /opt/ghost
git pull
docker compose pull
docker compose up -d
docker image prune
Die letzte Zeile, optional, entfernt die alten Images. Lassen Sie GHOST_VERSION in der .env auskommentiert: Eine festgelegte Version blockiert diese Update-Befehle.
Die Dokumentation nennt mehrere Einstellungen für einen Server in der Produktion:
mysql_secure_installation nach einer erfolgreichen Ghost-CLI-Installation aus.Für die Last setzt das Projekt ein CDN und eine Cache-Schicht vor Ghost. Es stellt klar, dass Clustering und Sharding nicht unterstützt werden: Eine einzige Instanz bedient die Website, und der Cache fängt den Traffic ab.
Beim Selbsthosting müssen Sie neben der Anwendung auch den Server betreuen. Auf einem Managed VPS übernehmen unsere Teams den Server und betreuen Ihre Instanz proaktiv; Ghost bleibt Ihre Software, mit ihren Einstellungen und Daten.
| Thema | Unsere Teams | Sie |
|---|---|---|
| Der Server | System- und Sicherheitsupdates, Eingriffe am Server inbegriffen | Der Zeitpunkt, der zu Ihrem Betrieb passt |
| Die Überwachung | Server rund um die Uhr im Blick, mit Eingriff, ohne auf Ihren Anruf zu warten | Ihre Inhalte, Ihre Mitglieder und Ihre Abos |
| Ghost | Proaktive Betreuung: Fehler, lange Antwortzeiten und Speicherplatz erkannt, Korrektur empfohlen | Installation, Updates, Einstellungen, SMTP-Relay und Mailgun-Konto, die Sie umsetzen, selbst oder mit Ihrem KI-Assistenten |
| Die Backups | Jede Nacht, verschlüsselt und außerhalb der Maschine aufbewahrt; Wiederherstellung inbegriffen | Die Wiederherstellungsanfrage, wenn Sie sie brauchen |
| Die Migration | Ihr aktueller Server wird kostenlos migriert | Der Zeitpunkt der Umstellung |
Wenn unsere Teams lieber in der Anwendung selbst eingreifen sollen, wird diese Leistung nach Stunden oder pauschal abgerechnet, mit einem Kostenvoranschlag vor dem Eingriff.
Mit einem Managed VPS von Simafri halten unsere Teams den Server Ihrer Ghost-Instanz aktuell, überwachen ihn Tag und Nacht und greifen ein, ohne auf Ihren Anruf zu warten; sie betreuen auch Ihre Instanz proaktiv und empfehlen Ihnen die sinnvollen Korrekturen, die Sie umsetzen, selbst oder mit Ihrem KI-Assistenten. Die Backups werden jede Nacht verschlüsselt und außerhalb der Maschine aufbewahrt, ihre Wiederherstellung ist inbegriffen, und die Migration Ihres aktuellen Servers ist kostenlos.
Ja. Ghost steht unter der MIT-Lizenz: Sie können es im Unternehmen einsetzen und anpassen, solange der Lizenzhinweis erhalten bleibt. Bleiben die Dienste darum herum: der Server, das E-Mail-Relay, Mailgun, wenn Sie Newsletter versenden, Tinybird, wenn Sie seine Analytics möchten.
Das Projekt empfiehlt Ubuntu 22.04, 24.04 oder 26.04, Nginx, Node.js 22, MySQL 8.0 oder 8.4, systemd, mindestens 1 GB Arbeitsspeicher, eine Domain und einen Benutzer, der nicht root ist. Für Docker Compose nennt es als Beispiel einen Server mit 2 GB und 1 Prozessor.
Ghost-CLI ist die Installation, die das Projekt für die Produktion empfiehlt. Docker Compose ist eine Preview, die als einzige selbst gehostete Web-Analytics und ActivityPub erlaubt, und das Projekt gibt an, auf diese Werkzeuge zuzugehen. Ein Assistent ermöglicht den Wechsel von Ghost-CLI zu Docker Compose.
In der Produktion ist MySQL 8 die einzige unterstützte Datenbank. Das Projekt empfiehlt von SQLite aus eine Neuinstallation auf MySQL 8 und von MariaDB aus eine Migration auf MySQL 8. PostgreSQL sieht seine Dokumentation nicht vor.
Nein. SMTP dient den transaktionalen E-Mails: Einladungen, Passwörter, Anmelde-Links der Mitglieder. Die Newsletter brauchen die API von Mailgun, den einzigen unterstützten Dienst für den Massenversand. Wenn Sie keine Artikel per E-Mail versenden, ist kein Mailgun-Konto nötig.
Für eine vollständige Wiederherstellung sichern Sie die MySQL-Datenbank mit mysqldump und den Ordner content mit tar. Der Befehl ghost backup erzeugt vor einem Update ein Zip. Der Export aus der Administration lässt Kommentare, den Aktivitätsverlauf der Mitglieder und die Medien aus.
Führen Sie mit Ghost-CLI im Ordner der Website ghost backup und dann ghost update aus, und bei Problemen ghost update --rollback. Führen Sie mit Docker Compose in /opt/ghost git pull, docker compose pull und docker compose up -d aus.
Ein Managed VPS deckt den Server ab: System, Sicherheit, Überwachung und Backups. Unsere Teams betreuen auch Ihre Instanz proaktiv und empfehlen Ihnen die sinnvollen Korrekturen, die Sie umsetzen. Ein Eingriff in der Anwendung wird nach Stunden oder pauschal abgerechnet.
Simafri
Sprechen wir über Ihr Vorhaben
Sagen Sie uns in wenigen Worten, was Sie brauchen: Wir melden uns schnell bei Ihnen.
Vielen Dank! Ihre Anfrage wurde gesendet. Wir melden uns in Kürze bei Ihnen.
Sie schreiben lieber eine E-Mail? Schreiben Sie uns an support@simafri.com.