version: '3.8' networks: backend-network: driver: bridge services: # Nginx 网关 nginx: container_name: backend-nginx image: nginx:1.25-alpine ports: - "8080:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - gateway networks: - backend-network # 网关服务 gateway: container_name: backend-gateway build: context: . dockerfile: ./gateway/Dockerfile ports: - "8000:8000" volumes: - ./gateway/cmd:/app/cmd - ./gateway/internal:/app/internal - ./shared:/shared depends_on: - user-svc - redis networks: - backend-network # 用户服务 user-svc: container_name: backend-user-svc build: context: . dockerfile: ./services/user-svc/Dockerfile ports: - "9000:9000" volumes: - ./services/user-svc/cmd:/app/cmd - ./services/user-svc/internal:/app/internal - ./services/user-svc/proto:/app/proto - ./shared:/shared depends_on: postgres: condition: service_healthy networks: - backend-network # 数据库 postgres: container_name: backend-postgres image: postgres:18.3-alpine3.23 environment: POSTGRES_USER: admin POSTGRES_PASSWORD: password POSTGRES_DB: backend ports: - "5432:5432" volumes: - postgres-data:/var/lib/postgresql/data - ./services/user-svc/migrations:/docker-entrypoint-initdb.d networks: - backend-network healthcheck: test: ["CMD-SHELL", "pg_isready -U admin -d backend"] interval: 5s timeout: 5s retries: 5 # Redis redis: container_name: backend-redis image: redis:8.6.2-alpine ports: - "6379:6379" volumes: - redis-data:/var/lib/redis/data networks: - backend-network volumes: postgres-data: redis-data: