Files
leocrm/ENTERPRISE_READINESS_PLAN.md
T

204 lines
7.5 KiB
Markdown
Raw Normal View History

# LeoCRM — Enterprise-Readiness Plan (Reduziert)
**Ziel:** KI und Business-Plattform für kleine bis mittlere Firmen (max. 500 Mitarbeiter)
**Erstellt:** 2026-08-20
**Abgeschlossen:** 2026-08-20
**Prinzip:** Nur was wirklich fehlt. Kein Over-Engineering. Basis ist schon im Code vorhanden.
**Status:** ✅ Alle 11 Punkte umgesetzt
---
## Was schon funktioniert (keine Action nötig)
| Bereich | Status | Details |
|---------|--------|--------|
| Rate Limiting | ✅ Basis da | `GeneralRateLimitMiddleware` aktiv, `RateLimitPolicy` Enum, LLM Cost-Protection |
| Audit Log | ✅ Komplett | `AuditLog` Model, `log_audit()`, Routes, Frontend Page — läuft |
| Health Checks | ✅ Da | `/health/live`, `/health/ready`, `/health` |
| Error Tracking | ✅ Da | `record_error()`, structlog, trace_id |
| Graceful Shutdown | ✅ Da | Connection Draining, 30s Timeout |
| Metrics | ✅ Da | Prometheus Endpoint `/api/v1/metrics` |
| Soft Delete | ✅ Da | `deleted_at` auf allen Entitäten, Hard-Delete mit `?gdpr=true` |
| Outbox Retention | ✅ Da | ARQ-Job, 30 Tage, hourly Cleanup |
| Backup Script | ✅ Da | `scripts/backup.py` (pg_dump + files) |
| Restore Script | ✅ Da | `scripts/restore.py`, `scripts/restore_test.sh` |
| ARQ Scheduler | ✅ Da | Cron-Jobs mit Redis Lock, 38 registrierte Jobs |
---
## Was umgesetzt wurde (alle 11 Punkte done)
### 1. ✅ RLS für 10 Tabellen — done
10 Tabellen haben RLS (Tenant-Isolation):
- `ai_decision_records`, `approval_requests`, `automation_agent_run_steps`, `outbox_deliveries`, `roles`, `sequences`, `wiki_articles`, `wiki_article_versions`, `wiki_categories`, `marketplace_listings`
**Umgesetzt:**
- Migration 0129: `ALTER TABLE ... ENABLE ROW LEVEL SECURITY` + `CREATE POLICY tenant_isolation`
- Test-DB + Produktion
- RLS-Test: Cross-Tenant-Zugriff blockiert
---
### 2. ✅ Test-DB auf Alembic umgestellt — done
**Umgesetzt:**
- conftest.py: Alembic-Migrationen statt `create_all()`
- RLS-Policies in Test-DB aktiv
- Test-Isolation: TRUNCATE zwischen Tests
- Echte Integration-Tests statt Mock-Tests
---
### 3. ✅ Multi-Tenant Prüfung — done
**Umgesetzt:**
- ORM Auto-Filter verifiziert (tenant_id wird automatisch gefiltert)
- Routes ohne Tenant-Check identifiziert
- Cross-Tenant Integration-Tests
- 20 Tabellen ohne RLS klassifiziert (10 absichtlich, 10 mit RLS → Punkt 1)
---
### 4. ✅ Security Audit — done
**Umgesetzt (Code-Level, automatisiert):**
- SQL Injection: `grep -rn 'text(\|execute(\|raw' app/routes/`
- XSS: Frontend `dangerouslySetInnerHTML` geprüft
- Auth Bypass: Routes ohne `require_permission` oder `get_current_user` identifiziert
- Secret Exposure: API-Keys/Tokens im Code geprüft
- Dependency Audit: `pip-audit` + `npm audit`
- Login-Brute-Force-Schutz: Rate-Limit auf Login-Route (5 Versuche)
**Externer Pen-Test:** Bei Bedarf später.
---
### 5. ✅ Monitoring System Dashboard — done
**Backend:**
- `app/routes/system_dashboard.py` — Admin-only Route
- Sammelt: Health, DB-Stats, Redis-Stats, Worker-Queue, Active Users, Error-Rate, LLM Costs
- Bei Problemen: `post_system_message()` an Communication-System
- Endpoints: `GET /api/v1/system/dashboard`, `GET /api/v1/system/alerts`
**Frontend:**
- `frontend/src/pages/SystemDashboard.tsx` — Admin-only Page
- Sidebar-Eintrag (nur für Admins sichtbar)
- Cards: System Health, DB, Redis, Worker, Errors, LLM Costs
- Alert-Feed: System-Messages aus Communication-System
---
### 6. ✅ Backup Automation — done
**Umgesetzt:**
- `auto_backup_job` ARQ-Job registriert (ruft `scripts/backup.py` auf)
- Cron-Schedule: Täglich 03:00 Uhr (einstellbar in Settings)
- Settings: `backup_enabled`, `backup_interval`, `backup_retention_days`, `backup_destination`
- Backup-Verifizierung: Manifest prüfen nach Backup
- Bei Fehler: System-Message an Communication-System
- API: `GET/PUT /api/v1/system-settings/backup-config`, `POST /api/v1/system-settings/backup-now`, `GET /api/v1/system-settings/backup-history`
---
### 7. ✅ Audit Log Retention + Export — done
**Umgesetzt:**
- Config: `audit_retention_days: int = 365` (einstellbar)
- ARQ-Cron-Job: Audit-Logs älter als Retention archivieren
- Route: `GET /api/v1/audit-log/export` (CSV/JSON Export, Streaming)
- Route: `DELETE /api/v1/audit-log/retention` (Retention Cleanup, Admin-only)
- Tamper-Proof: DELETE auf AuditLog nur mit `?gdpr=true` + Admin
---
### 8. ✅ Trash Cleanup — done
**Umgesetzt:**
- Config: `trash_retention_days: int = 90` (einstellbar)
- ARQ-Cron-Job: `cleanup_expired_trash``deleted_at < now() - retention_days` endgültig löschen
- Bei Löschung: Audit-Log Eintrag
---
### 9. ✅ Incident Response Runbook — done
**Umgesetzt:**
- `docs/incident-response-runbook.md` geschrieben:
- Server-Ausfall: Coolify Restart → Health-Check → System-Message
- DB-Crash: PostgreSQL Restart → Migration-Check → Backup-Restore
- Redis-Crash: Redis Restart → Session-Check
- Security-Breach: Logs prüfen → Password-Reset → Audit-Log Export
- Alerting kommt über System Dashboard (Punkt 5)
---
### 10. ✅ Performance Tests — done
**Umgesetzt:**
- locust/k6: Login, Contact-List, Search unter Last (10, 50, 100 User)
- Baseline gemessen: Response-Time, Error-Rate, Throughput
- Bottlenecks identifiziert (N+1 Queries, fehlende Indexes)
- Bei Bedarf optimiert
---
### 11. ✅ Documentation — done
**Umgesetzt:**
- README.md ✅ (aktualisiert)
- docs/api-documentation.md — Neue Routes ergänzt
- docs/monitoring.md — System Dashboard, Alerting
- docs/admin-guide.md — Backup, Restore, Monitoring, System Dashboard
- docs/security_kernel.md — RLS, Audit, Pen-Test
- docs/test-strategy.md — Test-DB, Integration-Tests
- docs/incident-response-runbook.md — Runbook (Punkt 9)
- docs/infrastructure.md — Docker-Compose, Coolify, ARQ Worker
- docs/deploy-guide.md — Fast-deploy, Server-Info
- PROGRESS.md — Enterprise-Readiness Status
---
## Was weggelassen wurde (nicht nötig für KMU)
| Bereich | Grund weggelassen |
|---------|------------------|
| Per-User Rate Limiting | Globales Rate-Limiting reicht, Login-Brute-Force-Schutz in Punkt 4 |
| Per-Tenant Rate Limiting | Nicht nötig für KMU bis 500 Mitarbeiter |
| Externer Pen-Test | Bei Bedarf später, Code-Level Audit reicht erstmal |
| DSGVO-Lösch-Workflow | In Phase K geplant |
| Post-Mortem Template | Runbook reicht |
| HA/Scaling | Architektur unterstützt es, bei Bedarf einfach mehr Instanzen |
| API Versioning | v1 ausreichend, v2 bei Bedarf neuer Prefix |
| Compliance (Phase K) | Geplant, separat |
| 300+ Integration-Tests | Test-DB Fix + schrittweise Migration der Mock-Tests |
| 30+ E2E Tests | Vorhandene E2E Tests erweitern bei Bedarf |
| Cross-Module Tests | Bei Bedarf, nicht als Pflicht |
---
## Zusammenfassung — Alle 11 Punkte done
| # | Bereich | Aufwand | Status |
|---|---------|--------|-------|
| 1 | RLS für 10 Tabellen | 0.5 Tage | ✅ Done |
| 2 | Test-DB auf Alembic | 1 Tag | ✅ Done |
| 3 | Multi-Tenant Prüfung | 1 Tag | ✅ Done |
| 4 | Security Audit (Code-Level) | 1 Tag | ✅ Done |
| 5 | Monitoring System Dashboard | 2 Tage | ✅ Done |
| 6 | Backup Automation | 1 Tag | ✅ Done |
| 7 | Audit Log Retention + Export | 0.5 Tage | ✅ Done |
| 8 | Trash Cleanup | 0.5 Tage | ✅ Done |
| 9 | Incident Response Runbook | 0.5 Tage | ✅ Done |
| 10 | Performance Tests | 1 Tag | ✅ Done |
| 11 | Documentation | 1 Tag | ✅ Done |
**Gesamtaufwand:** ~10 Tage (statt 45 Tage)
**Keine neuen Tabellen. Keine neuen Plugins.** Alles aufbauend auf vorhandenem Code.
---
*Ende des reduzierten Enterprise-Readiness Plans — alle 11 Punkte umgesetzt.*