Ghost als Alternative zu Wordpress
Ghost ist ein Blog CMS, das ebenso wie Wordpress Open Source ist. Obwohl Ghost bereits seit 2013 existiert, ist es in Deutschland immer noch recht unbekannt. Den Vorteil gegenüber Wordpress sehe ich in dem schlankem Design des CMS, das insbesondere ohne Plugins auskommt. Das Wegfallen von Plugins bedeutet vor allem, dass es keinen aufgeblähten Code und keine Inkompatibilitäten gibt. Der Ghost Code bleibt unverändert und schlank. Die gestiegene Performance ist sofort spürbar. Ghost möchte nicht nur eine Alternative zu Wordpress bieten, sondern Journalismus mit neuen Möglichkeiten der Monetarisierung ausstatten. Die dazu vorhandene Paywall mit Memberships wird von mir nicht verwendet.
Ghost kann online genutzt oder als Docker Image selbst gehosted werden. Für mein HomeLab mit Traefik und Portainer habe ich über Docker Compose eine Instanz installiert, auf dem dieser Blog läuft.
version: '3.7'
services:
ghost:
image: ghost:alpine
container_name: ghost
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
- internal
environment:
# see https://ghost.org/docs/config/#configuration-options
- 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:
- content:/var/lib/ghost/content
labels:
- "traefik.enable=true"
- "traefik.http.routers.ghost.rule=Host(`$GHOST_DOMAINNAME`)"
- "traefik.http.routers.ghost.entrypoints=websecure"
- "traefik.http.services.ghost.loadbalancer.server.port=2368"
- "traefik.http.routers.ghost.service=ghost"
- "traefik.http.routers.ghost.tls.certresolver=leresolver"
- "traefik.docker.network=proxy"
depends_on:
- ghost-db
ghost-db:
image: mariadb:latest
container_name: ghost-db
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- internal
environment:
- MYSQL_ROOT_PASSWORD=$GHOST_DB_PASSWORD
volumes:
- db:/var/lib/mysql
volumes:
content:
db:
networks:
proxy:
external: true
internal:
external: false
Auch für dieses Projekt sind zwei Variablenwerte an die eigene Umgebung anzupassen.
GHOST_DOMAINNAME=blog.example.com
GHOST_DB_PASSWORD=geheim