Yellow CMS in Docker

Ich bin aktuell auf der Suche nach dem perfekten Setup für kleine, schnelle Webprojekte. Mein Fokus liegt dabei auf leichten Blogsystemen, die ohne aufgeblähte Datenbank auskommen (Flat-File) und sich nahtlos in eine Docker-Infrastruktur integrieren lassen.

Da für das von mir gewählte Yellow CMS kein offizielles Image auf Docker Hub existiert, habe ich mir kurzerhand selbst eine Lösung "gebastelt".

Das Setup: Schlank und Flexibel

Das Ziel war ein Setup, das beim ersten Start automatisch die neueste Version des CMS lädt, aber dennoch persistenten Speicher für die Inhalte nutzt.

Hier ist mein Blueprint:

1. Das Dockerfile

Als Basis dient PHP 8.2 mit Apache. Da Yellow CMS für die Bildverarbeitung und das Handling von Plugins einige Erweiterungen benötigt, installieren wir GD und zip direkt mit.

Dockerfile

FROM php:8.2-apache

# Installation der benötigten Pakete
RUN apt-get update && apt-get install -y \
    git \
    zip \
    unzip \
    curl \
    libjpeg-dev \
    libpng-dev \
    libfreetype6-dev \
    libzip-dev \
    && docker-php-ext-configure gd --with-jpeg --with-freetype \
    && docker-php-ext-install gd zip \
    && a2enmod rewrite headers \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Apache Konfiguration anpassen (wichtig für Pretty URLs)
RUN sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf

WORKDIR /var/www/html

2. Die docker-compose.yml

Der Clou liegt im entrypoint. Falls der Web-Ordner leer ist, zieht sich der Container automatisch das aktuelle Release von GitHub. So sparen wir uns das manuelle Herunterladen der Files.

services:
  cms:
    build: .
    container_name: yellow_cms
    restart: unless-stopped
    ports:
      - "8080:80"
    volumes:
      - ./www:/var/www/html
      - ./log/apache2:/var/log/apache2
    entrypoint: >
      bash -c "
      if [ ! -f /var/www/html/yellow.php ]; then
        echo 'Initialisiere Yellow CMS...';
        curl -L https://github.com/datenstrom/yellow/archive/refs/heads/master.zip -o /tmp/yellow.zip;
        unzip /tmp/yellow.zip -d /tmp/;
        cp -a /tmp/yellow-*/. /var/www/html/;
        rm -rf /tmp/yellow.zip /tmp/yellow-*;
      fi;
      chown -R www-data:www-data /var/www/html;
      exec apache2-foreground;
      "

Startschuss: So bringst du es zum Laufen

Sobald die beiden Dateien im selben Verzeichnis liegen, reichen drei Befehle aus, um dein neues Blogsystem zu starten:

Image bauen:

docker compose build

Container im Hintergrund starten:

docker compose up -d

Logs prüfen (optional):

docker compose logs -f

Nach dem Start ist das CMS unter http://localhost:8080 erreichbar. Da alle Daten im lokalen ./www Ordner liegen, ist das Backup ein Kinderspiel: Einfach den Ordner kopieren, fertig!

Mein Fazit bisher: Yellow CMS ist extrem flink. In Kombination mit Docker hat man in weniger als zwei Minuten eine einsatzbereite Umgebung, die man ohne Datenbank-Altlasten überall hin migrieren kann.