ITSM/docs/BETRIEB.md

3.5 KiB
Executable File
Raw Blame History

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