{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_get",
"tool_input": {
"path": "\/betrieb\/deployment"
}
}
{
"tool_response": [
{
"type": "text",
"text": "{\n \"success\": true,\n \"doc\": {\n \"id\": 58,\n \"parent_id\": 55,\n \"slug\": \"deployment\",\n \"path\": \"\/betrieb\/deployment\",\n \"title\": \"Deployment\",\n \"description\": \"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.\",\n \"content\": \"<nav class=\\\"breadcrumb\\\">\\n <a href=\\\"\/docs\\\">Dokumentation<\/a> » <a href=\\\"\/docs\/betrieb\\\">Betrieb<\/a> » Deployment\\n<\/nav>\\n\\n<h1>Deployment & Rollback<\/h1>\\n<p class=\\\"doc-meta\\\"><strong>Erstellt:<\/strong> 2025-12-20 | <strong>Aktualisiert:<\/strong> 2025-12-27<\/p>\\n\\n<p>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.<\/p>\\n\\n<table>\\n <tr><th>Script<\/th><td>\/opt\/scripts\/sync-dev-prod.sh<\/td><\/tr>\\n <tr><th>Richtung<\/th><td>dev → prod<\/td><\/tr>\\n <tr><th>Pre-Checks<\/th><td>Contract Validation, PHPStan, PHP-CS-Fixer, Composer Audit, Semgrep, PHPUnit<\/td><\/tr>\\n <tr><th>Rollback<\/th><td>Aus \/backup\/ wiederherstellen<\/td><\/tr>\\n<\/table>\\n\\n<h2>Pre-Deployment Checks<\/h2>\\n<p>Das Sync-Script führt automatisch alle Quality- und Security-Checks durch. Bei Fehlern wird der Sync abgebrochen.<\/p>\\n\\n<h3>Check 1: Contract Validation<\/h3>\\n<table>\\n <tr><th>Contract<\/th><th>Prüft<\/th><th>Blockiert bei<\/th><\/tr>\\n <tr><td>View Structure v1.0<\/td><td>CRUD-Views, Struktur<\/td><td>Critical<\/td><\/tr>\\n <tr><td>HTML Tables v1.0<\/td><td>Modals, Aktionen-Spalte<\/td><td>Critical<\/td><\/tr>\\n <tr><td>CSS Contract v1.0<\/td><td>Stylelint-Regeln<\/td><td>Major<\/td><\/tr>\\n <tr><td>Python Pipeline v1.0<\/td><td>Ruff, mypy<\/td><td>Major<\/td><\/tr>\\n <tr><td>Layered Architecture v1.0<\/td><td>Layer-Grenzen<\/td><td>Critical<\/td><\/tr>\\n <tr><td>Betriebsdokumentation v1.1<\/td><td>Docs-Struktur<\/td><td>Major<\/td><\/tr>\\n<\/table>\\n<p><strong>Script:<\/strong> <code>\/opt\/scripts\/contract-check.sh<\/code><\/p>\\n<p><strong>Dokumentation:<\/strong> <a href=\\\"\/docs\/betrieb\/contracts\\\">Contracts<\/a><\/p>\\n\\n<h3>Check 2: PHP Quality Check<\/h3>\\n<table>\\n <tr><th>Tool<\/th><th>Prüft<\/th><th>Blockiert bei<\/th><\/tr>\\n <tr><td>PHPStan + Strict Rules<\/td><td>Typen, Null-Safety, Bugs<\/td><td>Errors<\/td><\/tr>\\n <tr><td>PHP-CS-Fixer<\/td><td>PSR-12 Code Style<\/td><td>Style Issues<\/td><\/tr>\\n <tr><td>Composer Audit<\/td><td>Dependency CVEs<\/td><td>Vulnerabilities<\/td><\/tr>\\n <tr><td>Semgrep<\/td><td>OWASP Security<\/td><td>Security Findings<\/td><\/tr>\\n<\/table>\\n\\n<h3>Check 3: PHPUnit Tests<\/h3>\\n<p>Alle Unit-Tests im <code>tests\/<\/code> Verzeichnis müssen bestehen.<\/p>\\n\\n<h3>Bei fehlgeschlagenen Checks<\/h3>\\n<pre><code># Contract Validation fehlgeschlagen:\\n❌ SYNC ABGEBROCHEN: Contract Validation fehlgeschlagen\\n Behebe die Contract-Violations und versuche es erneut.\\n Tipp: \/opt\/scripts\/contract-check.sh\\n\\n# PHP Quality Check fehlgeschlagen:\\n❌ SYNC ABGEBROCHEN: PHP Quality Check fehlgeschlagen\\n Behebe die Fehler und versuche es erneut.\\n Tipp: \/opt\/scripts\/php-check.sh \/var\/www\/dev.campus.systemische-tools.de --fix<\/code><\/pre>\\n\\n<h2>Deployment ausführen<\/h2>\\n\\n<h3>Standard-Deployment<\/h3>\\n<pre><code>\/opt\/scripts\/sync-dev-prod.sh<\/code><\/pre>\\n\\n<h3>Erwartete Ausgabe (Erfolg)<\/h3>\\n<pre><code>=== Sync Dev → Prod: Sat Dec 20 10:00:00 CET 2025 ===\\n\\n=== Contract Validation ===\\n[1\/6] View Structure Contract v1.0\\n OK tasks\/*\\n OK content\/*\\n...\\n\\n=== PHP Quality Check ===\\n[1\/4] PHPStan - Static Analysis + Strict Rules\\n✓ PHPStan: OK\\n...\\n\\n=== Summary ===\\nAll checks passed!\\n\\n=== PHPUnit Tests ===\\nPHPUnit 12.5.4\\n✓ All tests passed!\\n\\nsending incremental file list\\n...\\n=== Sync abgeschlossen ===<\/code><\/pre>\\n\\n<h2>Was wird synchronisiert<\/h2>\\n<table>\\n <tr><th>Verzeichnis<\/th><th>Inhalt<\/th><th>rsync-Flags<\/th><\/tr>\\n <tr><td>src\/<\/td><td>Backend (MVC)<\/td><td>--delete (entfernt gelöschte Dateien)<\/td><\/tr>\\n <tr><td>app\/<\/td><td>Frontend (MVP)<\/td><td>--delete<\/td><\/tr>\\n <tr><td>routes\/<\/td><td>Web-Routes<\/td><td>-av<\/td><\/tr>\\n <tr><td>config\/<\/td><td>Autoloader (ohne config.php)<\/td><td>--exclude='config.php'<\/td><\/tr>\\n <tr><td>public\/css\/<\/td><td>Stylesheets<\/td><td>--exclude='static-docs'<\/td><\/tr>\\n <tr><td>public\/js\/<\/td><td>JavaScript<\/td><td>-av<\/td><\/tr>\\n <tr><td>public\/images\/<\/td><td>Bilder<\/td><td>-av<\/td><\/tr>\\n <tr><td>public\/index.php<\/td><td>Entry Point<\/td><td>-av<\/td><\/tr>\\n <tr><td>public\/.htaccess<\/td><td>Apache Config<\/td><td>-av<\/td><\/tr>\\n<\/table>\\n\\n<h2>Was wird NICHT synchronisiert<\/h2>\\n<ul>\\n <li><strong>config\/config.php<\/strong> - Umgebungsspezifische Einstellungen (APP_DEBUG=false, DB-Credentials)<\/li>\\n <li><strong>storage\/<\/strong> - Logs, Cache, Sessions<\/li>\\n <li><strong>*.log<\/strong> - Log-Dateien werden via --exclude ausgeschlossen<\/li>\\n <li><strong>public\/static-docs\/<\/strong> - Statische Dokumentation<\/li>\\n<\/ul>\\n\\n<h2>Nach dem Sync<\/h2>\\n<p>Das Script führt automatisch <code>\/opt\/scripts\/fix-permissions.sh<\/code> aus, um die Dateiberechtigungen (www-data:www-data, 755) zu setzen.<\/p>\\n\\n<h2>Rollback-Verfahren<\/h2>\\n<p>Bei Problemen nach dem Deployment kann der vorherige Stand aus dem Backup wiederhergestellt werden.<\/p>\\n\\n<h3>Schritt 1: Backup identifizieren<\/h3>\\n<pre><code># Verfügbare Backups anzeigen\\nls -la \/backup\/<\/code><\/pre>\\n\\n<h3>Schritt 2: Vollständiger Rollback (prod)<\/h3>\\n<pre><code># Prod-Verzeichnis komplett wiederherstellen\\ncd \/\\ntar -xzf \/backup\/2025-12-20_03-00\/www.tar.gz var\/www\/prod.campus.systemische-tools.de\\n\\n# Berechtigungen setzen\\n\/opt\/scripts\/fix-permissions.sh<\/code><\/pre>\\n\\n<h3>Schritt 3: Datenbank-Rollback (falls nötig)<\/h3>\\n<pre><code># Dump entpacken\\ngunzip -k \/backup\/2025-12-20_03-00\/mariadb_all.sql.gz\\n\\n# Datenbank wiederherstellen\\nmariadb < \/backup\/2025-12-20_03-00\/mariadb_all.sql\\n\\n# Oder einzelne Datenbank:\\nsed -n '\/^-- Current Database: `ki_dev`\/,\/^-- Current Database:\/p' \\\\\\n \/backup\/2025-12-20_03-00\/mariadb_all.sql > \/tmp\/ki_dev.sql\\nmariadb ki_dev < \/tmp\/ki_dev.sql<\/code><\/pre>\\n\\n<h2>Notfall-Rollback (Schnell)<\/h2>\\n<pre><code># Letztes Backup finden\\nLATEST=$(ls -1d \/backup\/*\/ | tail -1)\\n\\n# Vollständiger Prod-Rollback\\ncd \/ && tar -xzf \\\"${LATEST}www.tar.gz\\\" var\/www\/prod.campus.systemische-tools.de\\n\\n# Berechtigungen\\n\/opt\/scripts\/fix-permissions.sh\\n\\n# Verifizieren\\ncurl -I https:\/\/campus.systemische-tools.de<\/code><\/pre>\\n\\n<h2>Workflow<\/h2>\\n<pre><code>┌─────────────────────────────────────────────────────────────┐\\n│ DEPLOYMENT WORKFLOW │\\n├─────────────────────────────────────────────────────────────┤\\n│ │\\n│ 1. ENTWICKLUNG │\\n│ └── Änderungen auf dev.campus.systemische-tools.de │\\n│ ↓ │\\n│ 2. TESTEN │\\n│ └── Funktionalität auf dev prüfen │\\n│ ↓ │\\n│ 3. PRE-CHECKS (automatisch) │\\n│ ├── Contract Validation (6 Contracts) │\\n│ ├── PHPStan (Typen, Bugs) │\\n│ ├── PHP-CS-Fixer (Style) │\\n│ ├── Composer Audit (CVEs) │\\n│ ├── Semgrep (Security) │\\n│ └── PHPUnit (Tests) │\\n│ ↓ OK ↓ FAIL │\\n│ 4. SYNC ABBRUCH │\\n│ └── rsync dev → prod └── Fehler beheben │\\n│ ↓ │\\n│ 5. VERIFIZIEREN │\\n│ └── Produktion prüfen │\\n│ ↓ OK ↓ PROBLEM │\\n│ FERTIG ROLLBACK │\\n│ └── Aus Backup wiederherstellen│\\n│ │\\n└─────────────────────────────────────────────────────────────┘<\/code><\/pre>\\n\\n<h2>Checkliste vor Deployment<\/h2>\\n<ul>\\n <li>Änderungen auf dev getestet?<\/li>\\n <li>Browser-Cache gelöscht beim Testen?<\/li>\\n <li>Keine sensiblen Daten im Code?<\/li>\\n <li>Datenbank-Migrationen berücksichtigt?<\/li>\\n <li>Backup vorhanden? (<code>ls \/backup\/<\/code>)<\/li>\\n<\/ul>\\n\\n<h2>Verwandte Themen<\/h2>\\n<ul>\\n <li><a href=\\\"\/docs\/betrieb\/backup\\\">Backup<\/a> - Tägliche Sicherung<\/li>\\n <li><a href=\\\"\/docs\/betrieb\/contracts\\\">Contracts<\/a> - Contract-System<\/li>\\n <li><a href=\\\"\/docs\/qualitaet\/php-quality\\\">PHP-Quality<\/a> - Qualitätsprüfung<\/li>\\n<\/ul>\",\n \"status\": \"published\",\n \"sort_order\": 3,\n \"depth\": 1,\n \"created_at\": \"2025-12-20T11:13:58\",\n \"updated_at\": \"2025-12-27T15:58:19\"\n }\n}"
}
]
}