Deployment & Rollback
Synchronisiert Code-Änderungen von der Entwicklungsumgebung zur Produktion. Ermöglicht sicheres Testen auf dev bevor Änderungen live gehen. Bei Problemen kann auf den letzten Stand zurückgerollt werden.
| Script | /var/www/scripts/sync-dev-prod.sh |
|---|---|
| Richtung | dev → prod |
| Pre-Checks | Contract Validation, PHPStan, PHP-CS-Fixer, Composer Audit, Semgrep, PHPUnit |
| Rollback | Aus /backup/ wiederherstellen |
Pre-Deployment Checks
Das Sync-Script führt automatisch alle Quality- und Security-Checks durch. Bei Fehlern wird der Sync abgebrochen.
Check 1: Contract Validation
| Contract | Prüft | Blockiert bei |
|---|---|---|
| View Structure v1.0 | CRUD-Views, Struktur | Critical |
| HTML Tables v1.0 | Modals, Aktionen-Spalte | Critical |
| CSS Contract v1.0 | Stylelint-Regeln | Major |
| Python Pipeline v1.0 | Ruff, mypy | Major |
| Layered Architecture v1.0 | Layer-Grenzen | Critical |
| Betriebsdokumentation v1.1 | Docs-Struktur | Major |
Script: /var/www/scripts/contract-check.sh
Dokumentation: Contracts
Check 2: PHP Quality Check
| Tool | Prüft | Blockiert bei |
|---|---|---|
| PHPStan + Strict Rules | Typen, Null-Safety, Bugs | Errors |
| PHP-CS-Fixer | PSR-12 Code Style | Style Issues |
| Composer Audit | Dependency CVEs | Vulnerabilities |
| Semgrep | OWASP Security | Security Findings |
Check 3: PHPUnit Tests
Alle Unit-Tests im tests/ Verzeichnis müssen bestehen.
Bei fehlgeschlagenen Checks
# Contract Validation fehlgeschlagen:
❌ SYNC ABGEBROCHEN: Contract Validation fehlgeschlagen
Behebe die Contract-Violations und versuche es erneut.
Tipp: /var/www/scripts/contract-check.sh
# PHP Quality Check fehlgeschlagen:
❌ SYNC ABGEBROCHEN: PHP Quality Check fehlgeschlagen
Behebe die Fehler und versuche es erneut.
Tipp: /var/www/scripts/php-check.sh /var/www/dev.campus.systemische-tools.de --fix
Deployment ausführen
Standard-Deployment
/var/www/scripts/sync-dev-prod.sh
Erwartete Ausgabe (Erfolg)
=== Sync Dev → Prod: Sat Dec 20 10:00:00 CET 2025 ===
=== Contract Validation ===
[1/6] View Structure Contract v1.0
OK tasks/*
OK content/*
...
=== PHP Quality Check ===
[1/4] PHPStan - Static Analysis + Strict Rules
✓ PHPStan: OK
...
=== Summary ===
All checks passed!
=== PHPUnit Tests ===
PHPUnit 12.5.4
✓ All tests passed!
sending incremental file list
...
=== Sync abgeschlossen ===
Was wird synchronisiert
| Verzeichnis | Inhalt | rsync-Flags |
|---|---|---|
| src/ | Backend (MVC) | --delete (entfernt gelöschte Dateien) |
| app/ | Frontend (MVP) | --delete |
| routes/ | Web-Routes | -av |
| config/ | Autoloader (ohne config.php) | --exclude='config.php' |
| public/css/ | Stylesheets | --exclude='static-docs' |
| public/js/ | JavaScript | -av |
| public/images/ | Bilder | -av |
| public/index.php | Entry Point | -av |
| public/.htaccess | Apache Config | -av |
Was wird NICHT synchronisiert
- config/config.php - Umgebungsspezifische Einstellungen (APP_DEBUG=false, DB-Credentials)
- storage/ - Logs, Cache, Sessions
- *.log - Log-Dateien werden via --exclude ausgeschlossen
- public/static-docs/ - Statische Dokumentation
Nach dem Sync
Das Script führt automatisch /var/www/scripts/fix-permissions.sh aus, um die Dateiberechtigungen (www-data:www-data, 755) zu setzen.
Rollback-Verfahren
Bei Problemen nach dem Deployment kann der vorherige Stand aus dem Backup wiederhergestellt werden.
Schritt 1: Backup identifizieren
# Verfügbare Backups anzeigen
ls -la /backup/
Schritt 2: Vollständiger Rollback (prod)
# Prod-Verzeichnis komplett wiederherstellen
cd /
tar -xzf /backup/2025-12-20_03-00/www.tar.gz var/www/prod.campus.systemische-tools.de
# Berechtigungen setzen
/var/www/scripts/fix-permissions.sh
Schritt 3: Datenbank-Rollback (falls nötig)
# Dump entpacken
gunzip -k /backup/2025-12-20_03-00/mariadb_all.sql.gz
# Datenbank wiederherstellen
mariadb < /backup/2025-12-20_03-00/mariadb_all.sql
# Oder einzelne Datenbank:
sed -n '/^-- Current Database: `ki_dev`/,/^-- Current Database:/p' \
/backup/2025-12-20_03-00/mariadb_all.sql > /tmp/ki_dev.sql
mariadb ki_dev < /tmp/ki_dev.sql
Notfall-Rollback (Schnell)
# Letztes Backup finden
LATEST=$(ls -1d /backup/*/ | tail -1)
# Vollständiger Prod-Rollback
cd / && tar -xzf "${LATEST}www.tar.gz" var/www/prod.campus.systemische-tools.de
# Berechtigungen
/var/www/scripts/fix-permissions.sh
# Verifizieren
curl -I https://campus.systemische-tools.de
Workflow
┌─────────────────────────────────────────────────────────────┐
│ DEPLOYMENT WORKFLOW │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. ENTWICKLUNG │
│ └── Änderungen auf dev.campus.systemische-tools.de │
│ ↓ │
│ 2. TESTEN │
│ └── Funktionalität auf dev prüfen │
│ ↓ │
│ 3. PRE-CHECKS (automatisch) │
│ ├── Contract Validation (6 Contracts) │
│ ├── PHPStan (Typen, Bugs) │
│ ├── PHP-CS-Fixer (Style) │
│ ├── Composer Audit (CVEs) │
│ ├── Semgrep (Security) │
│ └── PHPUnit (Tests) │
│ ↓ OK ↓ FAIL │
│ 4. SYNC ABBRUCH │
│ └── rsync dev → prod └── Fehler beheben │
│ ↓ │
│ 5. VERIFIZIEREN │
│ └── Produktion prüfen │
│ ↓ OK ↓ PROBLEM │
│ FERTIG ROLLBACK │
│ └── Aus Backup wiederherstellen│
│ │
└─────────────────────────────────────────────────────────────┘
Checkliste vor Deployment
- Änderungen auf dev getestet?
- Browser-Cache gelöscht beim Testen?
- Keine sensiblen Daten im Code?
- Datenbank-Migrationen berücksichtigt?
- Backup vorhanden? (
ls /backup/)
Verwandte Themen
- Backup - Tägliche Sicherung
- Contracts - Contract-System
- PHP-Quality - Qualitätsprüfung