Ghost CMS mit Docker und Traefik einrichten (Anleitung)
Ghost CMS mit Docker hinter einem Traefik Reverse Proxy betreiben. Schritt-für-Schritt-Anleitung für dein eigenes Blog-System mit SSL und Domain – jetzt starten!
Inhaltsverzeichnis
Content-Management-Systeme sind zum Beispiel dann wichtig, wenn man einen Blog erstellen möchte, aber die Autoren weder HTML noch Markdown Dateien anlegen möchten.
Das beliebteste CMS ist WordPress, laut Statista mit einem Anteil von 64 %. In 2021 laufen über 30 % aller Webseiten mit WordPress. Es ist vermutlich dadurch so beliebt, dass es einfach zu nutzen ist und sehr viele Erweiterungen dafür existieren. Jedoch gibt es auch viele andere Content Management Systeme.
Ghost - Just A Blogging Platform
Ich möchte hier Ghost nutzen. Ghost wurde ehemals als reine Blogging Plattform beworben, inzwischen hat es sich weit entwickelt (und zwar sowohl positiv als auch negativ). Ghost nutzt Node.js und ist grundsätzlich schneller als WordPress. Bei Bedarf ist es auch möglich Ghost (wie auch WordPress) headless zu benutzen. Die Open Source Software kann auch durch viele Plugins erweitert werden. Ein wichtiges Feature ist der leistungsstarke visuelle Editor mit vertrauten Formatierungsoptionen und der Möglichkeit, dynamischen Inhalt nahtlos hinzuzufügen.
Ghost: Turn your audience into a business
The world’s most popular modern publishing platform for creating a new media platform. Used by Apple, SkyNews, Buffer, OpenAI, and thousands more.
— Ghost.org

Ghost CMS installieren
Voraussetzung ist ein Server mit Docker. Hier setze ich voraus, dass Traefik als Proxy-Manager installiert wurde, wie in meiner anderen Anleitung beschrieben.
Nachdem die Verbindung mit dem Server hergestellt wurde ssh benutzername@server-ip kann mit der Installation begonnen werden.
cd ~/docker
mkdir appdata/ghost
mkdir appdata/ghost/content
mkdir appdata/ghost/db
nano .env
In die Datei tragen wir eine neue Zeile ein mit GHOST_DB_PASSWORD=einsicherespassword. Anschließend erstellen wir eine neue docker-compose Datei mit nano docker-compose-ghost.yml.
Ich möchte nicht die eingebaute SQLite Datenbank nutzen, sondern eine separate Datenbank anlegen. Dank Traefik gestaltet sich die Verbindung ziemlich einfach.
version: "3.7"
### NETWORKS ###
networks:
web:
external:
name: web
ghost-internal:
external: false
default:
driver: bridge
### SERVICES ###
services:
ghost:
container_name: ghost
image: ghost:latest
restart: unless-stopped
networks:
- ghost-internal
- web
security_opt:
- no-new-privileges:true
environment:
- database__client=mysql
- database__connection__host=ghost-db
- database__connection__user=root
- database__connection__password=$GHOST_DB_PASSWORD
- database__connection__database=ghost
- url=https://ghost.$DOMAINNAME
volumes:
- $DOCKERDIR/appdata/ghost/content:/var/lib/ghost/content
labels:
- "traefik.enable=true"
- "traefik.http.routers.ghost-rtr.entrypoints=https"
- "traefik.http.routers.ghost-rtr.rule=Host(`ghost.$DOMAINNAME`)"
- "traefik.http.routers.ghost-rtr.tls=true"
- "traefik.http.routers.ghost-rtr.service=ghost-svc"
- "traefik.http.services.ghost-svc.loadbalancer.server.port=2368"
- "traefik.http.routers.ghost-rtr.middlewares=chain-no-auth@file"
depends_on:
- ghost-db
ghost-db:
container_name: ghost-db
image: mariadb:latest
restart: unless-stopped
networks:
- ghost-internal
security_opt:
- no-new-privileges:true
environment:
- MYSQL_ROOT_PASSWORD=$GHOST_DB_PASSWORD
volumes:
- $DOCKERDIR/appdata/ghost/db:/var/lib/mysql
labels:
- "traefik.enable=false"
Achtung: Die Funktionen mit den Mitgliedschaften lassen sich seit Version 4 nicht mehr ausschalten, dies könnte je nach Einsatzart datenschutzrechtlich bedenklich sein. Es ist möglich entweder auf Version zu wechseln mit image: ghost:3 statt ghost:latest oder ein Theme zu nehmen, welches die Funktionalität nicht unterstützt.
Update: Ab Version 4.4 ist die Funktionalität wieder integriert 😀

Der Container lässt sich über docker-compose -f docker-compose-ghost.yml up -d starten. Unter “ghost.domain.de/ghost” lässt sich der Admin-Account einrichten. In den Einstellungen lässt sich die Seite auch auf Privat stellen und dadurch mit einem Passwort versehen.

Ghost aktualisieren
Wenn ein neues Release von Ghost (das Folgende gilt nicht nur für Ghost, sondern alle Container) bereitgestellt wird, lässt sich das auch relativ leicht auf den neuesten Stand bringen.
cd ~/docker
lazydocker
In Lazydocker sehe ich unter Images mein Ghost Image.

Das Image ist nicht mehr das neuste. Ich stoppe den Ghost Container, lade das neuste Image und starte den Ghost Container.
docker-compose -f docker-compose-ghost down
docker pull ghost
docker-compose -f docker-compose-ghost up -d
Das Update ist damit fertig.

Verwandte Artikel
Blog mit Gatsby.js und Ghost CMS erstellen und veröffentlichen
Schritt-für-Schritt-Anleitung: Erstelle einen Blog mit Gatsby.js und Ghost als headless CMS. Richte alles auf deinem VPS ein und veröffentliche deine Webseite.
Anleitung für Mailserver Mailcow hinter Traefik mit Docker
Eigener Mailserver mit Mailcow und Docker einrichten. Hinter Traefik als Reverse Proxy mit SSL, Spam-Filter und Webmail. Schritt-für-Schritt zum eigenen Mailserver!
n8n mit Docker und Traefik: Workflow-Automatisierung
n8n mit Docker und Traefik einrichten: Automatisiere Workflows effizient. Mit Reverse-Proxy, SSL und Beispielen – Prozesse automatisieren und Zeit sparen!
Plausible Analytics mit Docker & Traefik installieren
Installiere die datenschutzfreundliche Google Analytics Alternative Plausible mit Docker und Traefik. Self-hosted Web-Analytics auf dem eigenen Server.