Zum Hauptinhalt springen
Zurück zur Kategorie

Ghost Installation: Self-Hosted Blog und Content-Plattform

Ghost Docker-Installation, Nginx Reverse Proxy, SSL-Zertifikat, Theme-Einrichtung, Mitgliedschafts- und Abonnementsystem, E-Mail-Newsletter und Production-Konfiguration.

Lesezeit: 13 dk Self-Hosting
ghostblogcmsself-hostingdockernewslettercontent-management
Autor
REXE Teknoloji Network & Security Team
Redaktion
REXE Teknoloji Technical Editorial
Erstveröffentlichung
Letzte Aktualisierung

Ghost Installation: Self-Hosted Blog und Content-Plattform

Ghost ist eine Open-Source-CMS-Plattform für modernes Blogging und Content-Publishing. Im Vergleich zu WordPress ist es schneller, sicherer und inhaltsorientiert. Es unterstützt auch Content-Monetarisierung mit Mitgliedschaftssystem, Newsletter und Zahlungsintegration.

Was ist Ghost?

Ghost ist ein Node.js-basiertes Headless-CMS und Publishing-Plattform. Hauptmerkmale:

  • Geschwindigkeit: Node.js-basiert, sehr schnelle Seitenladezeiten
  • SEO: Integrierte SEO-Tools und strukturierte Daten
  • Mitgliedschaft: Kostenloses und kostenpflichtiges Mitgliedschaftssystem
  • Newsletter: Integrierter E-Mail-Newsletter-Versand
  • Themes: Handlebars-basiertes Theme-System
  • API: REST-API für Headless-CMS-Nutzung

Systemanforderungen

  • Server mit Docker und Docker Compose
  • Mindestens 1 GB RAM (2 GB empfohlen)
  • MySQL 8.0 oder SQLite
  • Gültige Domain und SSL-Zertifikat

Docker-Installation

Production-Setup mit MySQL

hljs yaml
# docker-compose.yml
version: '3.8'

services:
  ghost:
    image: ghost:5-alpine
    container_name: ghost
    restart: unless-stopped
    depends_on:
      - db
    environment:
      database__client: mysql
      database__connection__host: db
      database__connection__user: ghost
      database__connection__password: starkes-passwort
      database__connection__database: ghost
      url: https://blog.example.com
      mail__transport: SMTP
      mail__options__host: smtp.mailgun.org
      mail__options__port: 587
      mail__options__auth__user: postmaster@mg.example.com
      mail__options__auth__pass: mailgun-api-key
      mail__from: noreply@example.com
    volumes:
      - ./ghost-content:/var/lib/ghost/content
    ports:
      - "127.0.0.1:2368:2368"

  db:
    image: mysql:8.0
    container_name: ghost-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: root-passwort
      MYSQL_DATABASE: ghost
      MYSQL_USER: ghost
      MYSQL_PASSWORD: starkes-passwort
    volumes:
      - mysql-data:/var/lib/mysql

volumes:
  mysql-data:
hljs bash
# Container starten
docker compose up -d

# Logs prüfen
docker logs ghost -f

Ghost erstellt die Datenbank beim ersten Start automatisch. Zugriff auf das Admin-Panel unter https://blog.example.com/ghost.

Nginx Reverse Proxy und SSL

hljs nginx
server {
    listen 80;
    server_name blog.example.com;
    return 301 https://$host$request_uri;
}

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

    ssl_certificate /etc/letsencrypt/live/blog.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/blog.example.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:2368;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
    }
}

Mitgliedschaft und Abonnement

Settings → Membership
- Kostenlose Mitglieder erlauben: Aktiviert
- Bezahlte Abonnements: Über Stripe
- Standard-Beitragszugriff: Öffentlich / Nur Mitglieder / Bezahlt

Stripe-Integration

Settings → Membership → Stripe
1. Stripe-Konto erstellen
2. API-Schlüssel eingeben
3. Webhook-Endpoint hinzufügen:
   https://blog.example.com/members/webhooks/stripe

E-Mail-Newsletter

hljs yaml
environment:
  mail__transport: SMTP
  mail__options__service: Mailgun
  mail__options__host: smtp.mailgun.org
  mail__options__port: 587
  mail__options__auth__user: postmaster@mg.example.com
  mail__options__auth__pass: mailgun-smtp-password
  mail__from: "Blog Name <noreply@example.com>"

Sicherung

hljs bash
# Ghost-Inhaltsverzeichnis sichern
tar -czf ghost-backup-$(date +%Y%m%d).tar.gz ./ghost-content/

# MySQL-Datenbank-Backup
docker exec ghost-db mysqldump -u ghost -pstarkes-passwort ghost > \
  ghost-db-$(date +%Y%m%d).sql

Fazit

Ghost ist eine leistungsstarke, moderne Alternative zu WordPress für Content-Publishing. Mit Docker-Deployment auf REXE-Servern können Sie in wenigen Minuten eine produktionsreife Ghost-Instanz betreiben.

Häufig gestellte Fragen

Ich kann nicht auf das Ghost-Admin-Panel zugreifen, erhalte einen 404-Fehler.

Prüfen Sie mit docker ps, ob der Ghost-Container läuft. Stellen Sie sicher, dass die URL-Umgebungsvariable korrekt gesetzt ist. Prüfen Sie die Nginx-Proxy-Konfiguration. Überprüfen Sie Ghost-Logs: docker logs ghost. Beim ersten Setup gehen Sie zu /ghost: https://blog.example.com/ghost.

E-Mail-Versand funktioniert nicht, Newsletter können nicht gesendet werden.

Prüfen Sie die SMTP-Einstellungen. Bei Mailgun stellen Sie sicher, dass die Domain verifiziert ist. Senden Sie eine Test-E-Mail über Ghost Admin Settings → Email. Im Mailgun-Sandbox-Modus können nur verifizierte Adressen empfangen. Aktivieren Sie die Mailgun-Domain für die Produktion.

Stripe-Zahlungsintegration funktioniert nicht.

Prüfen Sie, ob die Stripe-API-Schlüssel korrekt eingegeben sind (Live-Key, nicht Test-Key). Überprüfen Sie, ob der Webhook-Endpoint im Stripe-Dashboard hinzugefügt wurde. Stellen Sie sicher, dass die Ghost-URL HTTPS ist. Prüfen Sie Webhook-Ereignisse in den Stripe-Logs.

Wie aktualisiere ich Ghost?

Sichern Sie vor dem Update (Inhaltsverzeichnis + Datenbank). Laden Sie das neue Image mit docker compose pull herunter. Starten Sie den Container mit docker compose up -d neu. Ghost führt automatisch Datenbank-Migrationen durch. Bei großen Versionssprüngen (z.B. 4.x → 5.x) lesen Sie die Release Notes.

Ich habe ein benutzerdefiniertes Theme hochgeladen, aber es wird nicht angezeigt.

Stellen Sie sicher, dass die Theme-.zip-Datei die richtige Struktur hat (package.json und index.hbs sind erforderlich). Aktivieren Sie das Theme über Settings → Design → Activate. Prüfen Sie Ghost-Logs auf Theme-Fehler. Das Theme muss mit Ihrer Ghost-Version kompatibel sein.

Ghost ist sehr langsam, Seitenladezeiten sind lang.

Bei MySQL optimieren Sie die Datenbankverbindung. Fügen Sie gzip-Komprimierung und Browser-Caching in Nginx hinzu. Aktivieren Sie Caching in Ghost Settings → Labs. Erwägen Sie die Verwendung eines CDN (Cloudflare Free Plan). Erhöhen Sie den Server-RAM (mindestens 2 GB empfohlen).

Verwandte Artikel

NetzwerkverkehrEingehend GbpsAusgehend Gbps