feat: exposition Traefik + provisioning auth (v0.21.0)

Backend exposé via Traefik+TLS (réseau traefik-public externe, labels,
CHLOVA_DOMAIN) — surface unique. Script provision-auth (hash scrypt +
TOTP otpauth + JWT). .env.example section API/UI. security.md : surface
exposée Phase 4. Compose revalidé.

Palier de risque : privilégié (exposition réseau) — non déployé ; auth
requise pour activer l'API.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kantin-Petit
2026-06-23 02:15:17 +02:00
parent 26debf2fe0
commit e97c885ebf
6 changed files with 80 additions and 4 deletions
+12
View File
@@ -42,5 +42,17 @@ CHLOVA_DB_PATH=./data/chlova.db # SQLite : table assets (need-review, Phase
# workflows-n8n/chlova-alerts.v1.0.0.json). Vide = alertes log-only (fail-safe).
# Peut contenir un token de chemin → secret, jamais commité.
ALERT_WEBHOOK_URL= # ex. http://n8n:5678/webhook/chlova-alert
# ── API/UI (Phase 4) — surface exposée, login fort ─────────────────────
# L'API/UI n'est ACTIVE que si les 4 valeurs ci-dessous sont présentes.
# Générer hash + secrets : `npm run provision-auth -- <user> <password>`.
CHLOVA_ADMIN_USER=
CHLOVA_ADMIN_PASSWORD_HASH= # SECRET — hash scrypt
CHLOVA_TOTP_SECRET= # SECRET — secret TOTP (2FA)
CHLOVA_JWT_SECRET= # SECRET — clé de signature JWT
# Origine CORS autorisée en DEV (Vite). En prod le SPA est servi same-origin.
CHLOVA_WEB_ORIGIN= # ex. http://localhost:5173 (dev uniquement)
# Domaine public derrière Traefik (label compose).
CHLOVA_DOMAIN=chlova.example.com
# Phase 1 : aucun port publié (Telegram en long-polling). Renseigné en P3+ si API/UI.
# CHLOVA_HTTP_PORT=8080