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

FeatureGhostWordPress
FokusBloggingAlles
PerformanceSchnellVariabel
EditorModern (Cards)Classic/Gutenberg
ThemesWeniger, modernerSehr viele
PluginsWeniger (Integrationen)Tausende
NewsletterIntegriertPlugin 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

BefehlFunktion
ghost installInstallation
ghost startStarten
ghost stopStoppen
ghost restartNeustarten
ghost updateAktualisieren
ghost backupBackup erstellen
ghost logLogs anzeigen
ghost doctorDiagnose

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.