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/opt/scripts/sync-dev-prod.sh
Richtungdev → prod
Pre-ChecksContract Validation, PHPStan, PHP-CS-Fixer, Composer Audit, Semgrep, PHPUnit
RollbackAus /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

ContractPrüftBlockiert bei
View Structure v1.0CRUD-Views, StrukturCritical
HTML Tables v1.0Modals, Aktionen-SpalteCritical
CSS Contract v1.0Stylelint-RegelnMajor
Python Pipeline v1.0Ruff, mypyMajor
Layered Architecture v1.0Layer-GrenzenCritical
Betriebsdokumentation v1.1Docs-StrukturMajor

Script: /opt/scripts/contract-check.sh

Dokumentation: Contracts

Check 2: PHP Quality Check

ToolPrüftBlockiert bei
PHPStan + Strict RulesTypen, Null-Safety, BugsErrors
PHP-CS-FixerPSR-12 Code StyleStyle Issues
Composer AuditDependency CVEsVulnerabilities
SemgrepOWASP SecuritySecurity 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: /opt/scripts/contract-check.sh

# PHP Quality Check fehlgeschlagen:
❌ SYNC ABGEBROCHEN: PHP Quality Check fehlgeschlagen
   Behebe die Fehler und versuche es erneut.
   Tipp: /opt/scripts/php-check.sh /var/www/dev.campus.systemische-tools.de --fix

Deployment ausführen

Standard-Deployment

/opt/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/*
[2/6] HTML Tables Contract v1.0
  OK HTML Tables geprüft
[3/6] CSS Contract v1.0
  OK Stylelint passed
[4/6] Python Pipeline Contract v1.0
  OK Ruff + mypy passed
[5/6] Layered Architecture Contract v1.0
  OK Layer-Grenzen eingehalten
[6/6] Betriebsdokumentation Contract v1.1
  OK Dokumentation strukturell korrekt

=== Ergebnis ===
Critical: 0
Major: 0
Minor: 0

PASSED: Alle Contracts erfüllt

=== PHP Quality Check ===
[1/4] PHPStan - Static Analysis + Strict Rules
✓ PHPStan: OK
[2/4] PHP-CS-Fixer - Code Style (PSR-12)
✓ PHP-CS-Fixer: OK
[3/4] Composer Audit - Dependency Vulnerabilities
✓ Composer Audit: No vulnerabilities
[4/4] Semgrep - OWASP Security Scan
✓ Semgrep: No vulnerabilities

=== Summary ===
All checks passed!

=== PHPUnit Tests ===
PHPUnit 12.5.4
✓ All tests passed!

sending incremental file list
src/Controller/
src/Controller/HomeController.php
...
=== Sync abgeschlossen ===

Was wird synchronisiert

VerzeichnisInhaltrsync-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.phpEntry Point-av
public/.htaccessApache Config-av

Was wird NICHT synchronisiert

Nach dem Sync

Das Script führt automatisch /opt/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/

# Beispiel-Ausgabe:
# drwxr-xr-x 2 root root 4096 Dec 19 23:39 2025-12-19_23-38
# drwxr-xr-x 2 root root 4096 Dec 20 03:00 2025-12-20_03-00

Schritt 2: Backup-Inhalt prüfen

# Inhalt des Backups anzeigen
ls -lh /backup/2025-12-20_03-00/

# Dateien im www-Archiv auflisten
tar -tzf /backup/2025-12-20_03-00/www.tar.gz | head -20

Schritt 3a: 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
/opt/scripts/fix-permissions.sh

Schritt 3b: Einzelne Dateien wiederherstellen

# Nur bestimmte Datei extrahieren
tar -xzf /backup/2025-12-20_03-00/www.tar.gz \
    -C / var/www/prod.campus.systemische-tools.de/src/Controller/HomeController.php

# Ganzes Verzeichnis extrahieren
tar -xzf /backup/2025-12-20_03-00/www.tar.gz \
    -C / var/www/prod.campus.systemische-tools.de/src/Controller/

Schritt 4: 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:
# 1. Aus Dump extrahieren
sed -n '/^-- Current Database: `ki_system`/,/^-- Current Database:/p' \
    /backup/2025-12-20_03-00/mariadb_all.sql > /tmp/ki_system.sql

# 2. Wiederherstellen
mariadb ki_system < /tmp/ki_system.sql

Schritt 5: Verifizieren

# Website prüfen
curl -I https://campus.systemische-tools.de

# Logs prüfen
tail -20 /var/www/prod.campus.systemische-tools.de/storage/logs/*.log

Notfall-Rollback (Schnell)

Wenn die Produktion sofort wiederhergestellt werden muss:

# 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
/opt/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

Checkliste nach Deployment

Troubleshooting

Contract Validation bricht ab

# Contracts einzeln prüfen
/opt/scripts/contract-check.sh

# Häufige Violations:
# - page-container in View (FRB-001) → Entfernen
# - Modal in View (NAV-002) → Durch URL ersetzen
# - Fehlender Breadcrumb (SHW-001) → Hinzufügen
# - Layer-Violation → Import korrigieren

# Dokumentation:
# /docs/modul/contracts

Sync-Script bricht ab

# Fehler anzeigen
/opt/scripts/php-check.sh /var/www/dev.campus.systemische-tools.de

# Style-Fehler automatisch beheben
/opt/scripts/php-check.sh /var/www/dev.campus.systemische-tools.de --fix

# Tests einzeln ausführen
/opt/scripts/php-test.sh /var/www/dev.campus.systemische-tools.de

Produktion zeigt Fehler nach Sync

# 1. Fehler identifizieren
tail -50 /var/www/prod.campus.systemische-tools.de/storage/logs/error.log

# 2. Schneller Rollback
LATEST=$(ls -1d /backup/*/ | tail -1)
cd / && tar -xzf "${LATEST}www.tar.gz" var/www/prod.campus.systemische-tools.de
/opt/scripts/fix-permissions.sh

# 3. Auf dev debuggen und erneut deployen

Berechtigungsfehler

/opt/scripts/fix-permissions.sh

Apache-Cache leeren

systemctl reload apache2