# 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--postgres demo--core demo--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 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 ```