Orchestrateur go pour lancer la démo et mettre en place plusieurs instances docker

This commit is contained in:
2026-04-23 17:44:25 +02:00
parent 83ac67471e
commit 044a27aa1a
13 changed files with 1164 additions and 0 deletions

99
demo/README.md Normal file
View File

@@ -0,0 +1,99 @@
# Demo publique LoreMind
Instance de demo ephemere hebergee sur `loremind-demo.igmlcreation.fr`.
## Principe
Chaque visiteur recoit un trio isole `postgres + core + brain` spawne a la volee
par un orchestrateur Go, detruit au bout de 20 min. Donnees en memoire (tmpfs).
Max 10 sessions concurrentes.
Le mode demo est active via `DEMO_MODE=true` cote core :
- Settings et Export VTT masques cote frontend
- Endpoints `GET`/`PUT /api/settings` verrouilles (403) cote serveur
## Architecture
```
Internet
|
v
Traefik (service permanent sur le serveur, reseau "traefik")
|
v
Orchestrateur (Go, reseau "traefik" + "loremind-demo-sessions")
|
v (via Docker API, cree un trio par visiteur)
+------------------- reseau "loremind-demo-sessions" ---------------------+
| demo-<id>-postgres demo-<id>-core demo-<id>-brain |
+-------------------------------------------------------------------------+
```
L'orchestrateur fait aussi reverse proxy : il sert l'Angular statique et
transfere les `/api/*` vers le `core` de la session (via cookie).
## Deploiement
Prerequis sur le serveur :
- Reseau Traefik existant (`docker network ls | grep traefik`)
- Images `core` et `brain` pushees au registre (`TAG=latest` par defaut)
Procedure :
```bash
# Sur le serveur
git clone <repo>
cd LoreMind/demo
cp .env.example .env
# Editer .env si besoin
docker compose -f docker-compose.infra.yml up -d --build
```
Le premier `--build` compile l'orchestrateur + build l'Angular (5-10 min).
Les builds suivants sont incrementaux.
## Mise a jour
```bash
# Pull des nouvelles images core/brain
docker compose -f docker-compose.infra.yml pull
# Rebuild orchestrateur si son code a change
docker compose -f docker-compose.infra.yml up -d --build
```
Les sessions en cours sont tuees au redemarrage de l'orchestrateur.
## Observations
- `docker logs loremind-demo-orchestrator -f`
- `docker ps --filter "name=demo-"` (conteneurs de sessions actifs)
Pas d'endpoint de monitoring HTTP expose : volontaire pour eviter de leaker
des informations sur les sessions actives a des scrapers externes.
## Securite — points mis en place
- `dockerproxy` (tecnativa/docker-socket-proxy) expose l'API Docker en lecture
seule sauf pour Containers/Images/Networks ; pas d'EXEC, VOLUMES, BUILD.
- Rate limiting : 1 creation de session par IP / fenetre de 60s.
- Cookie session : HttpOnly + Secure + SameSite=Lax, 128 bits d'entropie.
- Conteneurs de session : `no-new-privileges`, `PidsLimit=200`, limites RAM/CPU.
- Timeouts HTTP anti-slowloris sur l'orchestrateur.
- Body max 10 Mo sur les proxys `/api/*`.
- Reseau `socket-proxy` interne (pas d'acces au host reseau).
## Securite — a surveiller / ameliorer plus tard
- Fail2ban cote host avec regle sur les 429/503 de Traefik.
- Rotation des logs Docker (`log-opts: max-size: 10m` dans `/etc/docker/daemon.json`).
- CapDrop sur les conteneurs de session (non configure : risque de casser
core/brain sans audit prealable).
- Ne JAMAIS mettre de vraie cle API LLM dans l'environnement des brain de demo.
## Desactiver la demo
```bash
docker compose -f docker-compose.infra.yml down
# Nettoyer les conteneurs de session residuels
docker ps -q --filter "name=demo-" | xargs -r docker rm -f
```