Ghost ist eine moderne, Open-Source-Blogging-Plattform. Sie ist schneller als WordPress, bietet integriertes Newsletter-Management und einen schönen Editor.

Warum Ghost?

Vorteile

- Schnell (Node.js-basiert)
- Moderner Editor (Markdown)
- Integrierte Newsletter
- SEO-optimiert
- Membership-Funktionen
- Minimalistisches Design

Ghost vs. WordPress

| Feature | Ghost | WordPress | |---------|-------|-----------| | Fokus | Blogging | Alles | | Performance | Schnell | Variabel | | Editor | Modern (Cards) | Classic/Gutenberg | | Themes | Weniger, moderner | Sehr viele | | Plugins | Weniger (Integrationen) | Tausende | | Newsletter | Integriert | Plugin nötig |

Voraussetzungen

Systemanforderungen

- Ubuntu 20.04/22.04 oder Debian 11/12
- 1 GB RAM (2 GB empfohlen)
- Node.js 18.x LTS
- MySQL 8.0
- Nginx
- Domain mit SSL

Installation

Node.js installieren

# NodeSource Repository
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

# Node.js installieren
apt install -y nodejs

# Version prüfen
node -v
npm -v

MySQL installieren

apt install mysql-server

# Sicherheit konfigurieren
mysql_secure_installation

Datenbank erstellen

mysql -u root -p
CREATE DATABASE ghost_production;
CREATE USER 'ghost'@'localhost' IDENTIFIED BY 'SicheresPasswort!';
GRANT ALL PRIVILEGES ON ghost_production.* TO 'ghost'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Nginx installieren

apt install nginx
systemctl enable --now nginx

Ghost-CLI installieren

npm install ghost-cli@latest -g

Ghost-Benutzer erstellen

adduser ghost
usermod -aG sudo ghost

Ghost-Verzeichnis vorbereiten

mkdir -p /var/www/ghost
chown ghost:ghost /var/www/ghost
chmod 775 /var/www/ghost

Ghost installieren

Als ghost-Benutzer

su - ghost
cd /var/www/ghost

# Ghost installieren
ghost install

Setup-Fragen

? Enter your blog URL: https://blog.example.com
? Enter your MySQL hostname: localhost
? Enter your MySQL username: ghost
? Enter your MySQL password: SicheresPasswort!
? Enter your Ghost database name: ghost_production
? Do you wish to set up Nginx? Yes
? Do you wish to set up SSL? Yes
? Enter your email: admin@example.com
? Do you wish to set up Systemd? Yes
? Do you want to start Ghost? Yes

Manueller Setup

Falls automatisches Setup fehlschlägt:

ghost install --no-setup
ghost setup

Erste Schritte

Admin-Bereich

URL: https://blog.example.com/ghost

1. Account erstellen 2. Blog-Titel setzen 3. Einladungen versenden (optional)

Wichtige Einstellungen

Settings → General:
- Site title
- Site description
- Site timezone

Settings → Design:
- Theme wählen
- Navigation anpassen

Settings → Email newsletter:
- Newsletter aktivieren
- Mailgun einrichten

Konfiguration

config.production.json

// /var/www/ghost/config.production.json

{
  "url": "https://blog.example.com",
  "server": {
    "port": 2368,
    "host": "127.0.0.1"
  },
  "database": {
    "client": "mysql",
    "connection": {
      "host": "localhost",
      "user": "ghost",
      "password": "SicheresPasswort!",
      "database": "ghost_production"
    }
  },
  "mail": {
    "transport": "SMTP",
    "options": {
      "host": "smtp.example.com",
      "port": 587,
      "auth": {
        "user": "mail@example.com",
        "pass": "mailpasswort"
      }
    }
  },
  "logging": {
    "transports": ["file", "stdout"]
  },
  "paths": {
    "contentPath": "/var/www/ghost/content"
  }
}

Änderungen anwenden

ghost restart

E-Mail einrichten

Mailgun (empfohlen)

{
  "mail": {
    "transport": "SMTP",
    "options": {
      "service": "Mailgun",
      "auth": {
        "user": "postmaster@mg.example.com",
        "pass": "mailgun-api-key"
      }
    }
  }
}

SMTP-Server

{
  "mail": {
    "transport": "SMTP",
    "options": {
      "host": "smtp.example.com",
      "port": 587,
      "secure": false,
      "auth": {
        "user": "mail@example.com",
        "pass": "passwort"
      }
    }
  }
}

Themes

Theme installieren

cd /var/www/ghost/content/themes/
git clone https://github.com/TryGhost/Casper.git
ghost restart

Oder über Admin

Settings → Design → Change theme → Upload theme

Beliebte Themes

Kostenlos:
- Casper (Standard)
- Starter
- Edition

Premium:
- Massively
- Attila
- Cflavor

Backup

Manuelles Backup

# Als ghost-Benutzer
cd /var/www/ghost
ghost backup

Backup-Skript

#!/bin/bash
# /usr/local/bin/ghost-backup.sh

DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/ghost"
GHOST_DIR="/var/www/ghost"

mkdir -p $BACKUP_DIR

# Ghost-Backup
cd $GHOST_DIR
sudo -u ghost ghost backup

# Backup verschieben
mv $GHOST_DIR/backup-*.zip $BACKUP_DIR/ghost-$DATE.zip

# Datenbank separat
mysqldump -u ghost -p'passwort' ghost_production | gzip > $BACKUP_DIR/db-$DATE.sql.gz

# Alte Backups löschen
find $BACKUP_DIR -type f -mtime +30 -delete

Backup wiederherstellen

cd /var/www/ghost

# Ghost stoppen
ghost stop

# Datenbank wiederherstellen
mysql -u ghost -p ghost_production < backup.sql

# Content wiederherstellen
unzip backup.zip -d content/

# Ghost starten
ghost start

Update

Ghost aktualisieren

cd /var/www/ghost

# Backup erstellen
ghost backup

# Update durchführen
ghost update

Auf spezifische Version

ghost update --v5.0.0

Ghost CLI-Befehle

# Status
ghost status

# Starten
ghost start

# Stoppen
ghost stop

# Neustarten
ghost restart

# Logs anzeigen
ghost log

# Version
ghost version

# Konfiguration
ghost config

# Backup
ghost backup

# Update
ghost update

# Doctor (Probleme diagnostizieren)
ghost doctor

Performance-Optimierung

Nginx-Caching

# /etc/nginx/sites-available/ghost

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=ghost_cache:10m inactive=60m;

server {
    listen 443 ssl http2;
    server_name blog.example.com;

    location / {
        proxy_cache ghost_cache;
        proxy_cache_valid 60m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_revalidate on;

        proxy_pass http://127.0.0.1:2368;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Content-Caching

location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

Sicherheit

Firewall

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 22/tcp
ufw enable

Regelmäßige Updates

# Sicherheitsupdates
apt update && apt upgrade -y

# Ghost-Updates
cd /var/www/ghost
ghost update

Backup-Strategie

- Tägliche Datenbank-Backups
- Wöchentliche Content-Backups
- Externe Speicherung (S3, Remote)

Troubleshooting

Ghost startet nicht

# Logs prüfen
ghost log

# Doctor ausführen
ghost doctor

# Node-Version prüfen
node -v  # Muss 18.x sein

502 Bad Gateway

# Ghost läuft?
ghost status

# Port belegt?
netstat -tlnp | grep 2368

# Nginx-Config prüfen
nginx -t

Berechtigungsprobleme

# Besitzer korrigieren
chown -R ghost:ghost /var/www/ghost

# Berechtigungen
chmod -R 755 /var/www/ghost

Zusammenfassung

| Befehl | Funktion | |--------|----------| | ghost install | Installation | | ghost start | Starten | | ghost stop | Stoppen | | ghost restart | Neustarten | | ghost update | Aktualisieren | | ghost backup | Backup erstellen | | ghost log | Logs anzeigen | | ghost doctor | Diagnose |

Fazit

Ghost ist eine moderne Alternative zu WordPress für Blogger und Publisher. Die Installation mit Ghost-CLI ist unkompliziert, und die integrierten Newsletter-Funktionen machen externe Tools überflüssig. Achten Sie auf regelmäßige Updates und Backups. Für größere Installationen empfiehlt sich ein CDN wie Cloudflare.