# Traefik Dynamic Configuration for Blue-Green Deployment # This file is watched by Traefik and reloaded on changes # Traffic weights are updated by scripts/ci/switch-traffic.sh # # Current active stack is determined by weights: # - blue=100, green=0 -> Blue is active # - blue=0, green=100 -> Green is active # - Gradual: 75/25, 50/50, 25/75 for canary deployments http: # ======================================== # Routers - Route traffic to weighted services # ======================================== routers: # Frontend router with weighted service mvp-frontend-bluegreen: rule: "(Host(`motovaultpro.com`) || Host(`www.motovaultpro.com`)) && !PathPrefix(`/api`)" entryPoints: - websecure tls: certResolver: letsencrypt service: mvp-frontend-weighted priority: 10 # Backend API router with weighted service mvp-backend-bluegreen: rule: "(Host(`motovaultpro.com`) || Host(`www.motovaultpro.com`)) && PathPrefix(`/api`)" entryPoints: - websecure tls: certResolver: letsencrypt service: mvp-backend-weighted priority: 20 # Health check router (always routes to active stack) mvp-backend-health: rule: "(Host(`motovaultpro.com`) || Host(`www.motovaultpro.com`)) && Path(`/api/health`)" entryPoints: - websecure tls: certResolver: letsencrypt service: mvp-backend-weighted priority: 30 # ======================================== # Services - Weighted load balancers # ======================================== services: # Frontend weighted service # Weights are updated by switch-traffic.sh mvp-frontend-weighted: weighted: services: - name: mvp-frontend-blue-svc weight: 100 - name: mvp-frontend-green-svc weight: 0 healthCheck: {} # Backend weighted service # Weights are updated by switch-traffic.sh mvp-backend-weighted: weighted: services: - name: mvp-backend-blue-svc weight: 100 - name: mvp-backend-green-svc weight: 0 healthCheck: {} # Individual stack services mvp-frontend-blue-svc: loadBalancer: servers: - url: "http://mvp-frontend-blue:3000" healthCheck: path: / interval: 10s timeout: 3s passHostHeader: true mvp-frontend-green-svc: loadBalancer: servers: - url: "http://mvp-frontend-green:3000" healthCheck: path: / interval: 10s timeout: 3s passHostHeader: true mvp-backend-blue-svc: loadBalancer: servers: - url: "http://mvp-backend-blue:3001" healthCheck: path: /health interval: 10s timeout: 3s passHostHeader: true mvp-backend-green-svc: loadBalancer: servers: - url: "http://mvp-backend-green:3001" healthCheck: path: /health interval: 10s timeout: 3s passHostHeader: true # Maintenance mode service (optional) mvp-maintenance: loadBalancer: servers: - url: "http://mvp-maintenance:80"