version: '3.8' networks: microservice-network: driver: bridge services: consul: image: consul:1.15 container_name: ari-consul restart: always ports: - "8500:8500" # Consul Web UI - "8600:8600/udp" # DNS服务 volumes: - ./consul/config:/consul/config command: "consul agent -dev -config-dir=/consul/config -client=0.0.0.0" networks: - microservice-network healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8500/v1/status/leader"] interval: 10s timeout: 5s retries: 3 traefik: image: traefik:v2.9 container_name: ari-traefik restart: always depends_on: consul: condition: service_healthy ports: - "80:80" # 主入口 - "8080:8080" # Dashboard volumes: - ./traefik/traefik.yml:/etc/traefik/traefik.yml - /var/run/docker.sock:/var/run/docker.sock:ro command: - --providers.consulcatalog=true - --providers.consulcatalog.endpoint.address=consul:8500 - --providers.consulcatalog.exposedbydefault=false - --api.dashboard=true - --log.level=INFO networks: - microservice-network labels: - "traefik.enable=true" - "traefik.http.routers.traefik-dashboard.rule=PathPrefix(`/dashboard`) || PathPrefix(`/api`)" - "traefik.http.routers.traefik-dashboard.service=api@internal" - "traefik.http.routers.traefik-dashboard.entrypoints=web" data-service: build: ./services/data-service container_name: ari-data-service restart: always depends_on: consul: condition: service_healthy expose: - "8000" networks: - microservice-network environment: - SERVICE_NAME=data-service quant-service: build: ./services/quant-service container_name: ari-quant-service restart: always depends_on: consul: condition: service_healthy expose: - "8001" networks: - microservice-network environment: - SERVICE_NAME=quant-service emotion-service: build: ./services/emotion-service container_name: ari-emotion-service restart: always depends_on: consul: condition: service_healthy expose: - "8002" networks: - microservice-network environment: - SERVICE_NAME=emotion-service recommend-service: build: ./services/recommend-service container_name: ari-recommend-service restart: always depends_on: consul: condition: service_healthy expose: - "8003" networks: - microservice-network environment: - SERVICE_NAME=recommend-service user-service: build: ./services/user-service container_name: ari-user-service restart: always depends_on: consul: condition: service_healthy expose: - "8004" networks: - microservice-network environment: - SERVICE_NAME=user-service frontend: build: ./services/frontend container_name: ari-frontend restart: always depends_on: - data-service - quant-service - emotion-service - recommend-service - user-service expose: - "80" networks: - microservice-network environment: - SERVICE_NAME=frontend