# Déploiement local du site Omnex (control-plane). # Postgres = base de données (GORM) # Redis = sessions utilisateurs # API = backend Go/Gin (avec worker Helm pour les démos) # Web = SPA React/Vite servie par nginx (proxy /api → backend) # # Démarrage : cp .env.example .env && docker compose up --build # Site : http://localhost:3000 # API : http://localhost:8080/healthz # # Pour les démos : les charts Helm doivent être dans ./deploy/chart-gestion/ # Le kubeconfig est monté automatiquement depuis ~/.kube/config services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-omnex} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-omnex} POSTGRES_DB: ${POSTGRES_DB:-omnex} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-omnex} -d ${POSTGRES_DB:-omnex}"] interval: 5s timeout: 3s retries: 10 # Pas de port exposé : accès interne uniquement (défense en profondeur). redis: image: redis:7-alpine restart: unless-stopped command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:-omnexredis}", "--maxmemory", "256mb", "--maxmemory-policy", "allkeys-lru"] volumes: - redisdata:/data healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-omnexredis}", "ping"] interval: 5s timeout: 3s retries: 10 api: build: context: ./control-plane/api restart: unless-stopped depends_on: postgres: condition: service_healthy redis: condition: service_healthy environment: OMNEX_ENV: ${OMNEX_ENV:-dev} OMNEX_ADDR: ":8080" OMNEX_JWT_SECRET: ${OMNEX_JWT_SECRET} OMNEX_ALLOWED_ORIGINS: ${OMNEX_ALLOWED_ORIGINS:-http://localhost:3000,http://localhost:5173} OMNEX_DATABASE_URL: "host=postgres user=${POSTGRES_USER:-omnex} password=${POSTGRES_PASSWORD:-omnex} dbname=${POSTGRES_DB:-omnex} port=5432 sslmode=disable" OMNEX_REDIS_URL: "redis://:${REDIS_PASSWORD:-omnexredis}@redis:6379/0" OMNEX_SEED_USERNAME: ${OMNEX_SEED_USERNAME:-admin} OMNEX_SEED_PASSWORD: ${OMNEX_SEED_PASSWORD} OMNEX_DEMO_DOMAIN: ${OMNEX_DEMO_DOMAIN:-demo.omnex.app} FRONTEND_IMAGE_APP: ${FRONTEND_IMAGE_APP:-xor1234/frontend-mln:latest} BACKEND_IMAGE_APP: ${BACKEND_IMAGE_APP:-xor1234/backend-mln:latest} # Kubeconfig pour accéder au cluster Kubernetes (optionnel - si non fourni, utilise InClusterConfig) KUBECONFIG: /kubeconfig/config volumes: - ./deploy/chart-gestion:/charts:ro - /home/xor_fakers/.kube/config:/kubeconfig/config:ro # ← Fichier, pas répertoire ports: - "8080:8080" web: build: context: ./web args: # Vide = même origine : nginx proxifie /api vers le backend. VITE_API_URL: "" restart: unless-stopped depends_on: api: condition: service_healthy ports: - "3000:80" volumes: pgdata: redisdata: