AriStockAI/docker-compose.yml
fanfpy f19ce5992f feat: 重构服务注册与发现机制,使用Consul进行集中管理
- 移除各服务的独立注册脚本,改为通过Consul配置文件集中管理
- 为所有服务添加健康检查端点
- 更新docker-compose配置,添加网络和健康检查依赖
- 修改data-service的启动命令和端口配置
- 禁用Consul的ACL以简化开发环境配置
2025-06-22 22:35:51 +08:00

138 lines
3.2 KiB
YAML

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