128 lines
4.5 KiB
Markdown
128 lines
4.5 KiB
Markdown
|
|
# Incident Response Runbook — LeoCRM
|
||
|
|
|
||
|
|
## Schnellreferenz
|
||
|
|
|
||
|
|
| Szenario | Erste Maßnahme | Escalation |
|
||
|
|
|----------|---------------|------------|
|
||
|
|
| Server offline | Coolify Dashboard prüfen | SSH: root@46.225.91.159 |
|
||
|
|
| DB offline | `docker exec postgres-* psql -U crm_user -d crm_db -c "SELECT 1"` | Backup restore prüfen |
|
||
|
|
| Redis offline | `docker exec redis-* redis-cli ping` | Worker neustarten |
|
||
|
|
| App 500 Errors | `docker logs crm_app-* --tail 100` | Logs in Coolify prüfen |
|
||
|
|
| Worker hängt | `docker logs crm_worker-* --tail 100` | ARQ Queue in Redis prüfen |
|
||
|
|
| Disk full | `df -h` + `docker system prune` | Alte Backups löschen |
|
||
|
|
| Deploy failed | Coolify Deploy Logs | Git Status prüfen |
|
||
|
|
|
||
|
|
## 1. Server offline
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- https://crm.media-on.de nicht erreichbar
|
||
|
|
- Coolify (https://server.media-on.de) nicht erreichbar
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. SSH versuchen: `ssh root@46.225.91.159`
|
||
|
|
2. Wenn SSH geht: `docker ps` — welche Container laufen?
|
||
|
|
3. Coolify neustarten: `docker restart coolify`
|
||
|
|
4. Traefik prüfen: `docker logs coolify-proxy --tail 50`
|
||
|
|
5. Wenn Hetzner VPS offline: Hetzner Console (https://console.hetzner.cloud) → Server neustarten
|
||
|
|
|
||
|
|
## 2. Datenbank offline
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- Health Check: `database: down`
|
||
|
|
- App: 500 Errors auf allen API-Routen
|
||
|
|
- Frontend: "Verbindung fehlgeschlagen"
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. Container prüfen: `docker ps | grep postgres`
|
||
|
|
2. Logs: `docker logs postgres-xf7smknlger3hvkrsb910tui-* --tail 100`
|
||
|
|
3. Verbindung testen: `docker exec postgres-* psql -U crm_user -d crm_db -c "SELECT 1"`
|
||
|
|
4. Wenn DB nicht startet: Disk voll? `df -h`
|
||
|
|
5. Wenn DB korrupt: Backup restore mit `python scripts/restore.py`
|
||
|
|
6. Benachrichtigung: System Dashboard → Alerts → Notification an Admin
|
||
|
|
|
||
|
|
## 3. Redis offline
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- Sessions funktionieren nicht (Login loop)
|
||
|
|
- Worker-Jobs werden nicht ausgeführt
|
||
|
|
- WebSocket-Chat funktioniert nicht
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. Container prüfen: `docker ps | grep redis`
|
||
|
|
2. Logs: `docker logs redis-xf7smknlger3hvkrsb910tui-* --tail 50`
|
||
|
|
3. Neustart: `docker restart redis-xf7smknlger3hvkrsb910tui-*`
|
||
|
|
4. Wenn Redis korrupt: `docker exec redis-* redis-cli FLUSHALL` (Achtung: löscht Sessions!)
|
||
|
|
5. Worker neustarten: `docker restart crm_worker-xf7smknlger3hvkrsb910tui-*`
|
||
|
|
|
||
|
|
## 4. App 500 Errors
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- API-Routen returnieren 500
|
||
|
|
- Frontend zeigt Fehlermeldungen
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. Logs: `docker logs crm_app-xf7smknlger3hvkrsb910tui-* --tail 100`
|
||
|
|
2. Health Check: `curl https://crm.media-on.de/api/v1/health`
|
||
|
|
3. Wenn Migration fehlt: `docker exec crm_app-* python -m alembic upgrade head`
|
||
|
|
4. Wenn Plugin fehlerhaft: Plugin in Settings deaktivieren
|
||
|
|
5. Wenn Code-Bug: Fix committen + pushen + `bash scripts/fast-deploy.sh full`
|
||
|
|
|
||
|
|
## 5. Worker hängt
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- Background-Jobs werden nicht ausgeführt (Mail-Sync, Backups, Search-Index)
|
||
|
|
- ARQ Queue wächst
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. Logs: `docker logs crm_worker-xf7smknlger3hvkrsb910tui-* --tail 100`
|
||
|
|
2. Redis Queue prüfen: `docker exec redis-* redis-cli LLEN arq:queue`
|
||
|
|
3. Worker neustarten: `docker restart crm_worker-xf7smknlger3hvkrsb910tui-*`
|
||
|
|
4. Wenn Queue voll: `docker exec redis-* redis-cli DEL arq:queue` (Achtung: löscht ausstehende Jobs!)
|
||
|
|
|
||
|
|
## 6. Disk full
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- DB kann nicht schreiben
|
||
|
|
- Uploads schlagen fehl
|
||
|
|
- Backups schlagen fehl
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. Disk prüfen: `df -h`
|
||
|
|
2. Docker cleanup: `docker system prune -a --volumes` (Achtung: nur ungenutzte Container/Images)
|
||
|
|
3. Alte Backups löschen: `ls /backups/ | head -20` + `rm -rf /backups/leocrm_backup_oldest`
|
||
|
|
4. Logs löschen: `docker logs crm_app-* --tail 0 2>&1 | wc -l` + `truncate -s 0 $(docker inspect --format='{{.LogPath}}' crm_app-*)`
|
||
|
|
5. Temp-Dateien: `rm -rf /tmp/leocrm_*`
|
||
|
|
|
||
|
|
## 7. Deploy failed
|
||
|
|
|
||
|
|
### Symptome
|
||
|
|
- Coolify zeigt Deploy Status: `failed`
|
||
|
|
- App läuft noch mit altem Code
|
||
|
|
|
||
|
|
### Maßnahmen
|
||
|
|
1. Coolify Deploy Logs prüfen (https://server.media-on.de)
|
||
|
|
2. Git Status: `git status && git log --oneline -5`
|
||
|
|
3. Lokal bauen: `cd frontend && npm run build` — tsc errors?
|
||
|
|
4. Backend import testen: `/opt/venv/bin/python -c "import app.main"`
|
||
|
|
5. Fix committen + pushen + neu deployen
|
||
|
|
|
||
|
|
## Post-Mortem Template
|
||
|
|
|
||
|
|
```markdown
|
||
|
|
## Incident: [Titel]
|
||
|
|
- **Datum**: YYYY-MM-DD HH:MM
|
||
|
|
- **Dauer**: X Minuten/Stunden
|
||
|
|
- **Auswirkung**: [Welche User/Funktionen betroffen]
|
||
|
|
- **Ursache**: [Root Cause]
|
||
|
|
- **Lösung**: [Was wurde getan]
|
||
|
|
- **Lessons Learned**: [Was können wir besser machen]
|
||
|
|
- **Action Items**: [Konkrete Aufgaben um Wiederholung zu verhindern]
|
||
|
|
```
|
||
|
|
|
||
|
|
## Kontakt
|
||
|
|
|
||
|
|
- Server: root@46.225.91.159 (SSH Key: ~/.ssh/id_ed25519)
|
||
|
|
- Coolify: https://server.media-on.de
|
||
|
|
- Forgejo: https://forgejo.media-on.de/Leopoldadmin/leocrm
|
||
|
|
- App: https://crm.media-on.de
|