ITSM/docs/BETRIEB.md

70 lines
3.5 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ITSM — Betriebshandbuch
Stand: 2026-07-15. Produktivinstanz: SRV1361746 (`/docker/itsm/`), Port 8090.
## 1. ENV-Variablen
| Variable | Pflicht | Bedeutung |
|---|---|---|
| `DATABASE_URL` | ja | `postgresql://itsm:...@postgres:5432/itsm` |
| `ITSM_BIND` | | Bind-Adresse (Default `0.0.0.0:8090`) |
| `ITSM_HTTPS` | | `1` = Secure-Cookies + HSTS (hinter TLS-Terminierung setzen) |
| `ITSM_TRUSTED_PROXY_COUNT` | | Anzahl vertrauenswürdiger Reverse-Proxies; nur dann zählt X-Forwarded-For |
| `ITSM_SESSION_HOURS` | | Session-Lebensdauer (Default 8) |
| `ITSM_LOGIN_MAX_ATTEMPTS` / `ITSM_LOGIN_WINDOW_MINUTES` | | Rate-Limit (Default 5 / 15) |
| `ITSM_PASSWORD_MIN_LENGTH` | | Default 12 |
| `AES_DASHBOARD_URL` | | AES-Service im Katalog |
| `FORGE_BASE_URL` / `FORGE_SERVICE_TOKEN` | | Repo-Edit aus Change-Tickets; ohne = Feature deaktiviert |
| `RUST_LOG` | | z. B. `info` |
Hinweis: `ITSM_SECRET_KEY` (Flask-Ära) wird nicht mehr genutzt und kann aus
der Server-`.env` entfernt werden.
## 2. Deployment / Update (SRV1361746)
cd /docker/itsm
rm -rf src && git clone --depth 1 https://git1.mrmoe.de/mscadm/ITSM.git src
docker compose build itsm # Multi-Stage-Build, ~3 min
docker compose up -d # Postgres läuft weiter, nur App wird getauscht
curl -s localhost:8090/health # {"db":"ok","status":"ok"}
Es wird KEIN Code mehr beim Container-Start gezogen (früherer bootstrap.sh-
Mechanismus ist abgeschafft) — ein Neustart startet exakt das gebaute Image.
Schema-Migrationen laufen idempotent beim App-Start.
Rollback: `docker-compose.yml.flask-backup` liegt als letzter Flask-Stand in
`/docker/itsm/`; für das Rust-Image genügt `git clone` eines älteren Tags/
Commits nach `src/` + erneutes `build`.
### Zugang zum Server
Zwei gleichwertige Wege: (a) PuTTY-Session SRV1361746, (b) hPanel →
VPS 1361746 → Button "Terminal" (Browser-Terminal, bereits als root
eingeloggt). Weg (b) hat sich als der robustere erwiesen, wenn lokal keine
SSH-Sitzung offen ist.
## 3. Backup & Retention
- Täglicher pg_dump: `deploy/backup.sh` via Cron `0 3 * * *` nach
`/docker/itsm/backups/` (14 Tage Rotation). Live-Daten: Bind-Mount
`/docker/itsm/pgdata` (kein anonymes Docker-Volume).
- DSGVO-Retention: Hintergrundtask löscht gelöste/geschlossene Tickets und
Audit-Einträge nach Mandanten-Fristen; Sessions/Login-Versuche werden
mitbereinigt. Manuell: Admin → Einstellungen → "Jetzt manuell bereinigen".
## 4. Troubleshooting
| Symptom | Ursache / Abhilfe |
|---|---|
| Login schlägt für Bestandskonto fehl | Hash-Prefix prüfen: `docker exec itsm_postgres psql -U itsm -d itsm -c "SELECT email,left(password_hash,16) FROM users;"``pbkdf2:`/`scrypt:` = Werkzeug-Altbestand (wird unterstützt, ab Commit f732392 auch scrypt), `$argon2id$` = migriert. |
| "Zu viele Fehlversuche" (429) | Rate-Limit-Sperre; wartet 15 min oder `DELETE FROM login_attempts;` |
| 500er | `docker logs itsm_app --tail 50` (tracing-Log) |
| Health rot | DB-Verbindung prüfen (`docker ps`, `pg_isready`) |
| Repo-Edit-Button fehlt | FORGE_BASE_URL nicht gesetzt, Rolle < change_manager, oder Ticket ist kein freigegebener Change (gewollt, ADR-004) |
| Alle Sessions ungültig nach Deploy | erwartungsgemäß NICHT der Fall (Sessions liegen in der DB); falls doch: sessions-Tabelle prüfen |
## 5. Monitoring-Punkte
- `GET /health` (Docker-HEALTHCHECK eingebaut, curl-basiert)
- Audit-Log (Admin-UI) für login_failed/login_rate_limited-Häufungen
- Backup-Log `/docker/itsm/backup.log`