Deployn

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.

Anleitung für Ghost CMS hinter Traefik-heroimage

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 - The Professional Publishing Platform

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 😀

Zugriffseinstellungen im Ghost Dashboard

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. Passwort für gesamte Seite

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.

Ghost:latest vom 11. April

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. Neueres Image


Diese Website verwendet Cookies. Diese sind notwendig, um die Funktionalität der Website zu gewährleisten. Weitere Informationen finden Sie in der Datenschutzerklärung