Dieses Projekt läuft vollständig in Docker. Es müssen keine weiteren Tools installiert werden.
- Docker Desktop (Mac/Windows) oder Docker + Docker Compose Plugin (Linux)
git clone https://github.com/cevi/cevi-drupal.git
cd cevi-drupal
cp .env.example .env # Werte anpassen falls nötig (Standardwerte funktionieren für Entwicklung)
docker compose up -d --buildWenn kein Datenbank-Dump vorhanden ist, richtet dieses Skript eine frische Drupal-Instanz mit dem Cevi-Theme und der vollständigen Konfiguration ein:
docker compose exec drupal sh /cevi-install.shDas Skript führt folgende Schritte aus:
drush si— Drupal mit deutschem Standard-Profil installieren- UUIDs setzen (Site, Sprache, Shortcuts) — nötig für sauberen Config-Import
- Standard-Felder entfernen, die mit der Cevi-Konfiguration kollidieren
drush cim— vollständige Konfiguration importieren (Theme, Module, Content-Typen)
Anschliessend Frontend-Assets bauen (läuft im separaten Node-Container):
docker compose run --rm node-builder sh -c "npm ci && npm run build"Danach Login-Link ausgeben und im Browser öffnen — Drupal setzt kein Standardpasswort, der Link aus drush uli ist der einzige Zugang.
# Unkomprimiert:
docker compose exec -T mariadb mysql -udrupal -pdrupal drupal < pfad/zum/dump.sql
# Gzip-komprimiert:
gunzip -c pfad/zum/dump.sql.gz | docker compose exec -T mariadb mysql -udrupal -pdrupal drupal
# Cache leeren nach Import:
docker compose exec drupal php vendor/bin/drush crdocker compose exec drupal php vendor/bin/drush uliSeite unter http://localhost öffnen — fertig.
Alle Befehle ohne
-fnutzen automatischdocker-compose.override.yml(Dev-Modus).
# Stack starten / stoppen
docker compose up -d --build
docker compose down
# Drush (Drupal CLI)
docker compose exec drupal php vendor/bin/drush cr # Cache leeren
docker compose exec drupal php vendor/bin/drush cim -y # Konfiguration importieren
docker compose exec drupal php vendor/bin/drush cex -y # Konfiguration exportieren
docker compose exec drupal php vendor/bin/drush uli # Admin-Login-Link
# Composer
docker compose exec drupal php /usr/bin/composer require drupal/token
# DB-Export
docker compose exec -T mariadb mysqldump -udrupal -pdrupal drupal | gzip > db_dumps/export-$(date +%Y-%m-%d).sql.gz
# Logs
docker compose logs -f
# Shell im Drupal-Container
docker compose exec drupal sh
# Frontend-Assets neu kompilieren (danach Stack neu bauen, damit das Image die aktuellen Assets enthält)
docker compose run --rm node-builder sh -c "npm ci && npm run build"
docker compose up -d --build
# Frontend-Watch-Modus
docker compose run --rm node-builder npm run watchgit clone https://github.com/cevi/cevi-drupal.git /opt/cevi-drupal
cd /opt/cevi-drupal
cp .env.example .env
# .env bearbeiten: sichere Passwörter, DRUPAL_HASH_SALT, CADDY_DOMAIN, DRUPAL_TRUSTED_HOSTS setzen
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildCaddy beschafft automatisch Let's-Encrypt-Zertifikate für Apex- und www-Domain. Vor dem ersten Start zwei DNS-A-Records auf die VM-IP setzen:
example.com A <VM-IP>
www.example.com A <VM-IP>Anfragen an www.example.com werden dauerhaft auf example.com (HTTPS) umgeleitet.
DRUPAL_TRUSTED_HOSTS=^example\.com$ setzen (nur Apex — www erreicht Drupal nie).
# DB-Dump auf die VM kopieren, dann:
docker compose -f docker-compose.yml -f docker-compose.prod.yml exec -T mariadb \
mysql -u"$DRUPAL_DB_USER" -p"$DRUPAL_DB_PASS" "$DRUPAL_DB_NAME" < dump.sql
# Hochgeladene Dateien kopieren
docker run --rm -v cevi-drupal_drupal_files:/target -v $(pwd):/src alpine \
tar xzf /src/files.tar.gz -C /targetgit pull
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --buildDer Entrypoint führt beim Start automatisch drush updb + drush cr aus.
┌──────────────────────────────────────────────┐
│ Internet │
└──────────────────────────────────────────────┘
│ :80 / :443
┌───────┴─────┐ ┌───────────┐ ┌─────────┐
│ Caddy │───►│ Drupal │───►│ MariaDB │
│ (HTTPS+TLS) │ │ (php-fpm) │ │ (Daten) │
└─────────────┘ └───────────┘ └─────────┘