docker-compose.yml 3.79 KB
# HaHRCS Docker Compose 完整部署配置
# @author zzy
# 使用方式: docker-compose up -d
services:
  rabbitmq:
    image: masstransit/rabbitmq:4.1.3
    container_name: hahrcs_rabbitmq
    ports:
      - 5672:5672
      - 15672:15672
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    networks:
      - hahrcs-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "rabbitmq-diagnostics", "check_running"]
      interval: 30s
      timeout: 10s
      retries: 3

  redis:
    image: redis:7.2-alpine
    command: /bin/sh -c "redis-server --requirepass hu@Heng_!"
    restart: unless-stopped
    container_name: hahrcs_redis
    ports:
      - "7379:6379"
    volumes:
      - redis_data:/data
    networks:
      - hahrcs-network
    healthcheck:
      test: ["CMD", "redis-cli", "-a", "hu@Heng_!", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3

  postgres:
    image: postgis/postgis:15-3.4
    container_name: hahrcs_postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: hah_rcs
      POSTGRES_USER: sa_user
      POSTGRES_PASSWORD: hu@Heng_!
    ports:
      - "5432:5432"
    networks:
      - hahrcs-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U sa_user -d hah_rcs"]
      interval: 30s
      timeout: 10s
      retries: 3

  emqx:
    image: emqx/emqx:5.5
    container_name: hahrcs_emqx
    environment:
      EMQX_DASHBOARD__DEFAULT_USERNAME: hahrcs
      EMQX_DASHBOARD__DEFAULT_PASSWORD: hu@Heng_!
      EMQX_AUTH__USER__1__USERNAME: hahrcs
      EMQX_AUTH__USER__1__PASSWORD: hu@Heng_!
      EMQX_LISTENERS__TCP__DEFAULT__BIND: "0.0.0.0:1883"
      EMQX_LISTENERS__WS__DEFAULT__BIND: "0.0.0.0:8083"
    ports:
      - "1883:1883"
      - "8083:8083"
      - "8084:8084"
      - "18083:18083"
    volumes:
      - emqx_data:/opt/emqx/data
      - emqx_log:/opt/emqx/log
    networks:
      - hahrcs-network
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "emqx", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3

  # 后端 API 服务
  api:
    build:
      context: ./Rcs.Api
      dockerfile: Dockerfile
    image: hahrcs/api:latest
    container_name: hahrcs_api
    ports:
      - "5000:5000"
    volumes:
      - ./uploads:/app/uploads
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - ASPNETCORE_URLS=http://+:5000
      # 覆盖数据库连接(使用 Docker 服务名)
      - AppSettings__ConnSql__ConnectionString=Host=postgres;Port=5432;Database=hah_rcs;Username=sa_user;Password=hu@Heng_!
      # 覆盖 Redis 连接
      - AppSettings__Redis__Host=redis
      - AppSettings__Redis__Port=6379
      - AppSettings__Redis__Password=hu@Heng_!
      # 覆盖 RabbitMQ 连接
      - AppSettings__RabbitMq__Host=rabbitmq
      - AppSettings__RabbitMq__Port=5672
      # 覆盖 MQTT 连接
      - AppSettings__Mqtt__Broker=emqx
      - AppSettings__Mqtt__Port=1883
      # 覆盖自定义服务地址(如果需要外部访问,保持原 IP 或改为实际地址)
      - AppSettings__ExternalBaseUrl=http://172.16.41.30:5000
    networks:
      - hahrcs-network
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      rabbitmq:
        condition: service_healthy
      emqx:
        condition: service_healthy

  # 前端 Nginx 服务
  nginx:
    image: nginx:1.25-alpine
    container_name: hahrcs_nginx
    ports:
      - "8899:80"
    volumes:
      - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./html/dist:/usr/share/nginx/html:ro
    networks:
      - hahrcs-network
    restart: unless-stopped
    depends_on:
      - api

volumes:
  rabbitmq_data:
  redis_data:
  postgres_data:
  emqx_data:
  emqx_log:

networks:
  hahrcs-network:
    driver: bridge