Ghost in a container

Kurt Klinner

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.