Seit einigen Jahren nutze und schätze ich Ghost als Plattform für Blogs. Nachdem ich mal wieder ein Projekt für meinen Sommerurlaub gebraucht habe und es seit einiger Zeit auch ein offizielles Ghost Docker Image gibt, machte ich mich daran meine Blogs zu migrieren.
Vorarbeiten
Als erstes hab ich mir das aktuelle Image per
docker pull ghost
gezogen.
Für die Migration des Blogs sind das content Verzeichnis sowie das zentrale Konfigurationsfile namens config.production.json relevant. Nachdem die Ghost Instanz angehalten wurde, kopierte ich die beiden in ein dediziertes neues Verzeichnis
cp -r <PATH_TO_GHOST>/content <DOCKERDIRECTORY>
cp <PATH_TO_GHOST>/config.production.json <DOCKERDIRECTORY>
Um sicherzustellen, dass die Dateien / Verzeichnisse im Container nutzbar sind, muss sichergestellt werden, dass man die UID und GID auf 1000 setzt (welches der Benutzer-/Gruppenid des Ghost Runtime Users innerhalb des Containers entspricht)
chown -R 1000:1000 content/ config.production.json
Falls der Docker Daemon bereits läuft, kann man den Container direkt starten
docker run -d --rm --name ghost \
-e url=https://mobux.de \
-p 127.0.0.1:2368:2368 \
-v <DOCKERDIRECTORY/content/:/var/lib/ghost/content \
-v <DOCKERDIRECTORY>/config.production.json:/var/lib/ghost/config.production.json \
-e NODE_ENV=production \
-d ghost:2.29.1
Mit obigen Befehl
- nutzen wir die aktuelle Version des Ghost Docker images (-d ghost:2.29.1)
- binden wir den Port 2368 des Containers auf 127.0.0.1:2368 auf unserem Server
- mounten wir das content Verzeichnis nach /var/lib/ghost/content innerhalb des containers
- mounten wir das config.production.json file nach /var/lib/ghost/config.production.json
Et voila, schon läuft die Blogsoftware inkl. des ursprünglichen Content innerhalb eines Docker Containers.
Docker Compose
Um das ganze docker-compose tauglich zu machen, habe ich das ganze dann noch in ein entsprechendes yaml File gepackt
version: '3.1'
services:
ghost:
container_name: ghost
image: ghost:2.29.1
restart: always
ports:
- 127.0.0.1:2368:2368
volumes:
- ./content:/var/lib/ghost/content
- ./config.production.json:/var/lib/ghost/config.production.json
Vorausgesetzt wir sind im richtigen Verzeichnis oder geben die Information voll qualifiziert an, reicht
docker-compose up -d
aus, um den Container zu starten
Aktualisierungen
Habe ich bisher immer die ghost-cli genutzt (bzw. mit den neueren Versionen benutzen müssen), so ist nun eine Anpassung der Version im docker-compose.yml gefolgt von
docker-compose pull
und
docker-compose up -d
ausreichend, um zu Aktualisieren.