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:
@@ -96,15 +96,25 @@ services:
|
||||
- mcp-portainer
|
||||
networks:
|
||||
- chlova-internal
|
||||
# Phase 1 : surface Telegram en long-polling → AUCUN port publié.
|
||||
# Phases ultérieures (API/UI) : exposer UNIQUEMENT ce service derrière
|
||||
# Traefik + TLS et/ou VPN mesh. Voir infra/networks.md.
|
||||
- traefik-public # API/UI exposée via Traefik (Phase 4)
|
||||
# Phase 4 : SEUL service exposé, via Traefik + TLS (jamais de port publié en
|
||||
# direct). L'API/UI ne s'active que si l'auth est configurée (.env).
|
||||
labels:
|
||||
traefik.enable: "true"
|
||||
traefik.docker.network: traefik-public
|
||||
traefik.http.routers.chlova.rule: Host(`${CHLOVA_DOMAIN:-chlova.example.com}`)
|
||||
traefik.http.routers.chlova.entrypoints: websecure
|
||||
traefik.http.routers.chlova.tls: "true"
|
||||
traefik.http.routers.chlova.tls.certresolver: le
|
||||
traefik.http.services.chlova.loadbalancer.server.port: "8080"
|
||||
|
||||
networks:
|
||||
chlova-internal:
|
||||
internal: true # aucune route vers l'extérieur
|
||||
chlova-egress:
|
||||
driver: bridge # sortie contrôlée (Ollama → ollama.com), egress filtré côté hôte
|
||||
traefik-public:
|
||||
external: true # réseau Traefik existant du homelab
|
||||
|
||||
volumes:
|
||||
ollama-data:
|
||||
|
||||
Reference in New Issue
Block a user