services: app: build: context: . dockerfile: Dockerfile args: VITE_APP_ID: ${VITE_APP_ID} VITE_OAUTH_PORTAL_URL: ${VITE_OAUTH_PORTAL_URL} VITE_APP_TITLE: ${VITE_APP_TITLE} VITE_FRONTEND_FORGE_API_URL: ${VITE_FRONTEND_FORGE_API_URL} VITE_FRONTEND_FORGE_API_KEY: ${VITE_FRONTEND_FORGE_API_KEY} VITE_ANALYTICS_ENDPOINT: ${VITE_ANALYTICS_ENDPOINT} VITE_ANALYTICS_WEBSITE_ID: ${VITE_ANALYTICS_WEBSITE_ID} VITE_APP_LOGO: ${VITE_APP_LOGO} image: formation-manager-itinova-app:v2 container_name: formation-manager-itinova restart: unless-stopped env_file: - .env environment: NODE_ENV: production PORT: 3000 TRUST_PROXY: 1 volumes: - /opt/manus-deploy/apps/formation-manager-itinova/uploads:/app/uploads networks: - web labels: - "traefik.enable=true" - "traefik.docker.network=web" - "traefik.http.routers.formations-prod.entrypoints=websecure" - "traefik.http.routers.formations-prod.rule=Host(`formations.itinova.org`) || Host(`formations.santinova-soft.org`)" - "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" networks: web: external: true