Protokoll #23884
| ID | 23884 |
|---|---|
| Zeitstempel | 2025-12-27 15:29:22.878077 |
| Client | root |
| IP | Warning: Undefined array key "request_ip" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 Deprecated: htmlspecialchars(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 13 |
| Modell | claude-sonnet-4-20250514 |
| Status | completed |
| Tokens | 2,614 (Input: 0, Output: 0) |
| Dauer | 95 ms |
| Request-Zeit | Warning: Undefined array key "request_timestamp" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 18 |
| Response-Zeit | - |
Warning: Undefined array key "error_message" in /var/www/dev.campus.systemische-tools.de/src/View/protokoll/show.php on line 22
Request
{
"event": "PreToolUse",
"tool_name": "mcp__mcp-docs__docs_get",
"tool_input": {
"id": 58
}
}
Response
{
"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\/server\\\">Server<\/a> » Deployment\\n<\/nav>\\n\\n<h1>Deployment & Rollback<\/h1>\\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\/modul\/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[2\/6] HTML Tables Contract v1.0\\n OK HTML Tables geprüft\\n[3\/6] CSS Contract v1.0\\n OK Stylelint passed\\n[4\/6] Python Pipeline Contract v1.0\\n OK Ruff + mypy passed\\n[5\/6] Layered Architecture Contract v1.0\\n OK Layer-Grenzen eingehalten\\n[6\/6] Betriebsdokumentation Contract v1.1\\n OK Dokumentation strukturell korrekt\\n\\n=== Ergebnis ===\\nCritical: 0\\nMajor: 0\\nMinor: 0\\n\\nPASSED: Alle Contracts erfüllt\\n\\n=== PHP Quality Check ===\\n[1\/4] PHPStan - Static Analysis + Strict Rules\\n✓ PHPStan: OK\\n[2\/4] PHP-CS-Fixer - Code Style (PSR-12)\\n✓ PHP-CS-Fixer: OK\\n[3\/4] Composer Audit - Dependency Vulnerabilities\\n✓ Composer Audit: No vulnerabilities\\n[4\/4] Semgrep - OWASP Security Scan\\n✓ Semgrep: No vulnerabilities\\n\\n=== Summary ===\\nAll checks passed!\\n\\n=== PHPUnit Tests ===\\nPHPUnit 12.5.4\\n✓ All tests passed!\\n\\nsending incremental file list\\nsrc\/Controller\/\\nsrc\/Controller\/HomeController.php\\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 (Verzeichnis existiert nur lokal)<\/li>\\n <li><strong>*.log in src\/, app\/<\/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\/\\n\\n# Beispiel-Ausgabe:\\n# drwxr-xr-x 2 root root 4096 Dec 19 23:39 2025-12-19_23-38\\n# drwxr-xr-x 2 root root 4096 Dec 20 03:00 2025-12-20_03-00<\/code><\/pre>\\n\\n<h3>Schritt 2: Backup-Inhalt prüfen<\/h3>\\n<pre><code># Inhalt des Backups anzeigen\\nls -lh \/backup\/2025-12-20_03-00\/\\n\\n# Dateien im www-Archiv auflisten\\ntar -tzf \/backup\/2025-12-20_03-00\/www.tar.gz | head -20<\/code><\/pre>\\n\\n<h3>Schritt 3a: 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 3b: Einzelne Dateien wiederherstellen<\/h3>\\n<pre><code># Nur bestimmte Datei extrahieren\\ntar -xzf \/backup\/2025-12-20_03-00\/www.tar.gz \\\\\\n -C \/ var\/www\/prod.campus.systemische-tools.de\/src\/Controller\/HomeController.php\\n\\n# Ganzes Verzeichnis extrahieren\\ntar -xzf \/backup\/2025-12-20_03-00\/www.tar.gz \\\\\\n -C \/ var\/www\/prod.campus.systemische-tools.de\/src\/Controller\/<\/code><\/pre>\\n\\n<h3>Schritt 4: 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:\\n# 1. Aus Dump extrahieren\\nsed -n '\/^-- Current Database: `ki_system`\/,\/^-- Current Database:\/p' \\\\\\n \/backup\/2025-12-20_03-00\/mariadb_all.sql > \/tmp\/ki_system.sql\\n\\n# 2. Wiederherstellen\\nmariadb ki_system < \/tmp\/ki_system.sql<\/code><\/pre>\\n\\n<h3>Schritt 5: Verifizieren<\/h3>\\n<pre><code># Website prüfen\\ncurl -I https:\/\/campus.systemische-tools.de\\n\\n# Logs prüfen\\ntail -20 \/var\/www\/prod.campus.systemische-tools.de\/storage\/logs\/*.log<\/code><\/pre>\\n\\n<h2>Notfall-Rollback (Schnell)<\/h2>\\n<p>Wenn die Produktion sofort wiederhergestellt werden muss:<\/p>\\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 Back... [TRUNCATED-e9a727adbaca8fc0]"
}
]
}