OPS Roadmap — Professionelles Betriebs-Setup
Executive Overview — all summaries for decision-makers.
Priorisierte Checkliste für MQA Group. Status: [ ] offen · [~] in Arbeit · [x] erledigt
Phase 1 — Foundation (Woche 1–2)
Ownership & Zugänge
- [~] Cloudflare auf MQA-Organisations-Account migrieren → R2 ✅ · DNS offen → CLOUDFLARE-MIGRATION
- [x] Render im MQA Team-Account
- [x] GitHub unter
MQA-Group(privat) - [ ] GitHub Branch Protection auf
main+develop: PR required, CI Success, 1 Review (benötigt GitHub Pro/Team für private Repos) - [ ] Mindestens 2 Admin-Zugänge pro Plattform (Render, Cloudflare, Azure)
CI/CD
- [x] GitHub Actions CI (Build Frontend + Backend, Gate-Job CI Success)
- [x] PR-/Issue-Templates, Dependabot, CODEOWNERS → GITHUB-FLOW
- [ ] Dependabot PRs regelmäßig mergen (Security-Patches priorisieren)
- [ ] Render Preview Deploys optional für PRs
Staging
- [x] Staging-Services deployen (
render-staging.yaml) → STAGING-SETUP · live auf Render - [x] DNS:
staging.portal.mqa.group,staging.api.mqa.group - [ ] Separate Azure AD App Registration für Staging
- [ ] Staging-DB: eigene Render Postgres (kein Prod-Snapshot ohne Anonymisierung)
Backup
- [x] Restore-Script + Runbook dokumentiert
- [x] Backup-Script (
backend/scripts/backup-production-db.sh) - [ ] Monatlicher pg_dump → Cloudflare R2 (Cron auf Render oder GitHub Action)
- [ ] Vierteljährlicher Restore-Test (Termin im Kalender)
Security (sofort)
- [x] CORS für
portal.mqa.group - [x] Auto-Seed beim Deploy deaktiviert
- [x] Offene APIs abgesichert (Email, PDF, AI, Analytics reads)
- [x]
/uploadsauth-geschützt - [x] CRON fail-closed
- [x] Mock-Login in Production blockiert
- [ ] Postgres IP-Allowlist einschränken (nicht
0.0.0.0/0) - [ ] Secret Rotation nach Cloudflare-Migration (R2 Keys, JWT optional)
Phase 2 — Hardening (Woche 3–6)
Application Security
- [x] HTML-Sanitization (DOMPurify) für E-Mail/Policy-Views
- [x] Security Headers am Frontend (
serve.json) - [x] Authentifizierte PDF-Downloads (fetch + Blob)
- [ ] HttpOnly Cookie-Auth evaluieren (JWT aus sessionStorage entfernen)
- [ ] IDOR-Fixes: Policies, Media, Project-Inquiries, Risks
- [ ] Uploads vollständig auf R2 (kein lokales
/uploadsauf Render)
Monitoring
- [ ] Uptime-Monitoring (Better Stack / UptimeRobot) → MONITORING
- [ ] Sentry (Backend + Frontend)
- [ ] Render Alert bei Deploy-Failure + 5xx-Spike
Compliance (GDPR / NGO)
- [ ] Verarbeitungsverzeichnis: Portal-Datenflüsse referenzieren
- [ ] Incident Response Plan (72h-Meldefrist)
- [ ] Audit-Log Retention-Policy definieren
- [ ] Externer Pentest (optional, empfohlen vor Donor-Daten Live)
Phase 3 — Enterprise (optional)
- [ ] Status-Page (status.mqa.group)
- [ ] Offsite-Backup unabhängig von Render
- [ ] Postgres RLS für Defense-in-Depth
- [ ] WAF-Regeln (Cloudflare Pro)
- [ ] SOC2/ISO-Dokumentation an Portal anbinden
Verantwortlichkeiten (Vorschlag)
| Bereich | Rolle |
|---|---|
| Render Deploy / Env | Lead Developer |
| Cloudflare DNS + R2 | MQA IT + Developer |
| Azure AD / OAuth | MQA IT |
| Backup-Tests | Dev + Compliance |
| Security Reviews | Dev (quartalsweise) |
Änderungshistorie
| Datum | Änderung |
|---|---|
| 2026-08-03 | GitHub Flow: CI Gate, PR/Issue-Templates, Dependabot, GITHUB-FLOW.md |
| 2026-08-03 | Initiale Roadmap, Security-Fixes Phase 1, CI, Doku-Set |