In diesem Beitrag gehe ich auf das Konfiguration von Ghost mithilfe von Docker-Compose ein. Die Applikation wird sich hinter einem Nginx Reverse Proxy befinden.
Erstellen der Docker-Compose Konfiguration
Als Docker-Image für Ghost werde ich das offizielle Docker-Image von Ghost verwenden. Ebenso wird das in der Dokumentation beschriebene MySQL-Image in der Version 5.7
als MySQL-Datenbank verwendet.
Ghost Konfigurieren
Ghost kann mithilfe von Umgebungsvariablen konfiguriert werden.
Mit Umgebungsvariablen kann die Struktur der üblichen Konfiguration im .json
Format abgebildet werden.
Die Umgebungsvariablen müssen klein geschrieben werden und es wird ein doppelter Unterstrich verwendet um Verschachtelung abzudecken.
Beispiel (json-Konfiguration):
"database": {
"client": "mysql",
"connection": {
"host": "127.0.0.1",
"port": 3306,
"user": "your_database_user",
"password": "your_database_password",
"database": "your_database_name"
}
}
Beispiel (Umgebungsvariablen):
database__client=mysql
database__connection__host=127.0.0.1
database__connection__port=3306
database__connection__user=your_database_user
database__connection__password=your_database_password
database__connection__database=your_database_name
Daten Persistieren
Damit die Daten auch beim Löschen der Container bestehen bleiben müssen volumes
angelegt werden.
Daten wie z.B. Bilder werden von Ghost im Verzeichnis /var/lib/ghost/content
gespeichert. Alle MySQL Daten werden vom MySQL-Container im Ordner /var/lib/mysql
gespeichert.
Für diese Pfade müssen in der Docker-Compose Konfiguration volumes
definiert werden und im jeweiligen Container an den Pfad gebunden werden.
Finale Docker-Compose Konfiguration
version: '3.1'
services:
ghost:
image: ghost:3-alpine
ports:
- 127.0.0.1:2368:2368
environment:
# Datenbankverbindung
database__client: mysql
database__connection__host: ghost_db
database__connection__user: root
database__connection__password: ersetzenDurchEinSicheresPasswort
database__connection__database: ghost
# Email Konfiguration
mail__transport: 'SMTP'
mail__from: 'Mein Blog <mail@mail.mail>'
mail__options__service: 'SMTP'
mail__options__host: 'smtp.mail.server'
mail__options__port: '587'
mail__options__auth__user: 'mail@mail.mail'
mail__options__auth__pass: 'dasMailPasswort'
url: https://blog.example.com
volumes:
- ghost_content:/var/lib/ghost/content
restart: always
depends_on:
- ghost_db
ghost_db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: ersetzenDurchEinSicheresPasswort
volumes:
- ghost_data:/var/lib/mysql
volumes:
ghost_data:
ghost_content:
Starten der Docker-Compose Konfiguration
Nun kann die Docker-Compose Konfiguration schon gestartet werden:
docker-compose pull
docker-compose up -d
Die Anwendung läuft nun Lokal auf dem Host-Gerät und kann unter Port 2368
erreicht werden (nur auf dem ausführenden Gerät).
Nginx Reverse Proxy Konfigurieren
Nginx Installieren (Debian / Ubuntu)
sudo apt update
sudo apt install nginx
Sollte eine Firewall auf dem Host aktiviert sein, so kann nun der Port 80
sowie 443
freigegeben werden.
Nginx Reverse Proxy Konfigurieren
In der folgenden Konfiguration wird die Domain festgelegt unter welcher Ghost später erreichbar sein wird. Außerdem wird festgelegt auf welchen Host sowie Port "weitergeleitet" werden soll.
Hierfür muss zunächst eine neue Konfiguration für Nginx angelegt werden. Erstelle hierfür eine neue Datei unter /etc/nginx/sites-available/
welche am besten nach der Domain welche verwendet werden soll benannt ist (zur Übersicht).
sudo nano /etc/nginx/sites-available/blog.example.com
Erstelle nun folgende Konfiguration:
server {
# Port für den Zugriff von Außen
listen 80;
listen [::]:80;
# Auflistung von Domains (Leerzeichen getrennt)
# auf welche diese Konfiguration
# zutreffen soll
server_name blog.example.com;
location / {
# Lokaler Ghost Host (http)
proxy_pass http://localhost: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;
}
}
Anschließend muss die Konfiguration Nginx zugänglich gemacht werden. Hierfür kann ein Symbolischer Link zum sites-enabled
Ordner erstellt werden.
sudo ln -s /etc/nginx/sites-available/blog.example.com /etc/nginx/sites-enabled
Anschließend kann die Nginx-Konfiguration mithilfe von sudo nginx -t
überprüft werden. Sind keine Fehler vorhanden kann nun der Nginx-Dienst neu gestartet werden und somit die Konfiguration übernommen werden.
sudo service nginx restart
Konfiguration von TLS mit Let's Encrypt
Installieren von Certbot
Solltest du noch nicht Certbot auf dem Host installiert haben, kannst du dies einfach mit der Anleitung von Certbot machen: https://certbot.eff.org/
Wähle auf der Seite einfach Nginx
als Software und das Betriebssystem des Servers aus. Anschließend steht eine Anleitung zur Installation bereit.
Zertifikat generieren
Wie auch in der Anleitung des Certbot beschrieben kann nun ein Zertifikat automatisch generiert und eingebunden werden. Führe dafür folgenden Befehl aus:
sudo certbot --nginx
Wähle anschließend die Domain aus für welche das Zertifikat erstellt werden soll.
Fertig! Du solltest nun auf deinen Ghost Blog zugreifen können.
Unter /ghost
kannst du dir nun einen Admin Account anlegen und loslegen.