Anleitung für Ghost CMS hinter Traefik
In dieser kurzen Anleitung zeige ich, wie man das CMS Ghost hinter einem Traefik Proxy zum Laufen bekommt.
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.