117 lines
3.2 KiB
YAML
117 lines
3.2 KiB
YAML
# 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"
|