# ========================================================================== # LoreMind Demo - Infra permanente # -------------------------------------------------------------------------- # - dockerproxy : expose un subset restreint de l'API Docker a l'orchestrateur # (lecture seule sauf containers/images/networks). Remplace le mount direct # de /var/run/docker.sock : meme avec RCE sur l'orchestrateur, un attaquant # ne peut pas exec sur l'hote, creer des volumes, ni lire le daemon. # - orchestrator : sert l'Angular et proxy les /api/* vers les sessions. # # Les conteneurs de session sont crees dynamiquement par l'orchestrateur. # ========================================================================== services: dockerproxy: image: tecnativa/docker-socket-proxy:latest container_name: loremind-demo-dockerproxy restart: unless-stopped environment: # Minimum requis par l'orchestrateur. CONTAINERS: 1 IMAGES: 1 NETWORKS: 1 POST: 1 # Tout le reste reste a 0 (defaut) : pas d'EXEC, VOLUMES, BUILD, AUTH, # SYSTEM, INFO, SWARM, SECRETS, CONFIGS, NODES, etc. volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - socket-proxy # Pas de ports exposes : accessible uniquement via le reseau socket-proxy. orchestrator: container_name: loremind-demo-orchestrator depends_on: - dockerproxy build: context: ../ dockerfile: demo/orchestrator/Dockerfile restart: unless-stopped environment: # L'orchestrateur parle a dockerproxy au lieu du socket direct. DOCKER_HOST: tcp://dockerproxy:2375 REGISTRY: ${REGISTRY:-git.igmlcreation.fr} TAG: ${TAG:-latest} MAX_SESSIONS: ${MAX_SESSIONS:-10} SESSION_TTL_MINUTES: ${SESSION_TTL_MINUTES:-20} CORE_MEMORY_MB: ${CORE_MEMORY_MB:-700} BRAIN_MEMORY_MB: ${BRAIN_MEMORY_MB:-300} POSTGRES_MEMORY_MB: ${POSTGRES_MEMORY_MB:-200} SESSIONS_NETWORK: loremind-demo-sessions BRAIN_INTERNAL_SECRET_DEFAULT: ${BRAIN_INTERNAL_SECRET_DEFAULT:-change-me} # Rate limit : 1 creation par IP par fenetre (en secondes). RATE_LIMIT_WINDOW_SECONDS: ${RATE_LIMIT_WINDOW_SECONDS:-60} # Domaine public : propage aux cores de session pour configurer CORS. DEMO_HOST: ${DEMO_HOST:-loremind-demo.igmlcreation.fr} networks: - traefik - sessions - socket-proxy labels: - "traefik.enable=true" - "traefik.http.routers.loremind-demo.rule=Host(`${DEMO_HOST:-loremind-demo.igmlcreation.fr}`)" - "traefik.http.routers.loremind-demo.entrypoints=websecure" - "traefik.http.routers.loremind-demo.tls.certresolver=letsencrypt" - "traefik.http.services.loremind-demo.loadbalancer.server.port=80" networks: traefik: external: true name: ${TRAEFIK_NETWORK:-traefik} sessions: # Reseau interne pour les trios de session. Pas d'acces Internet direct # (sauf via le DNS Docker), pas expose au host. name: loremind-demo-sessions driver: bridge socket-proxy: # Reseau prive entre dockerproxy et orchestrateur. Isole du reste. name: loremind-demo-socket-proxy driver: bridge internal: true