services: app: build: context: ./src dockerfile: Dockerfile args: VITE_APP_ID: "formation-manager-itinova" VITE_OAUTH_PORTAL_URL: "https://manus.im" VITE_FRONTEND_FORGE_API_URL: "" VITE_APP_TITLE: "Gestion des Formations" container_name: formation-manager-itinova restart: unless-stopped env_file: - .env depends_on: formations-prod-db: condition: service_healthy networks: - web - formations-prod-internal labels: - "traefik.enable=true" - "traefik.http.routers.formations-prod.rule=Host(`formations.itinova.org`)" - "traefik.http.routers.formations-prod.entrypoints=websecure" - "traefik.http.routers.formations-prod.tls=true" - "traefik.http.routers.formations-prod.tls.certresolver=letsencrypt" - "traefik.http.routers.formations-prod.service=formations-prod-svc" - "traefik.http.services.formations-prod-svc.loadbalancer.server.port=3000" - "traefik.docker.network=web" formations-prod-db: image: mysql:8.0 container_name: formations-prod-db restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: formations_root_pass_2026_prod MYSQL_DATABASE: itinova_formations MYSQL_USER: formations_user MYSQL_PASSWORD: FormationsDB2026SecureProd! volumes: - formations_prod_db_data:/var/lib/mysql networks: - formations-prod-internal healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pformations_root_pass_2026_prod"] interval: 10s timeout: 5s retries: 5 start_period: 30s networks: web: external: true formations-prod-internal: driver: bridge volumes: formations_prod_db_data: