services: nginx: image: nginx:alpine container_name: im-nginx restart: always ports: - "8009:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - user-service - contact-service - group-service - message-service - file-service - connector-service networks: - im-net consul: image: consul:1.15 container_name: im-consul restart: always volumes: - ./consul/data:/consul/data command: "agent -server -bootstrap-expect=1 -ui -client=0.0.0.0" ports: - "8501:8500" networks: - im-net mysql: image: mysql:8.0 container_name: im-mysql restart: always environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?MYSQL_ROOT_PASSWORD is required} MYSQL_DATABASE: im_db MYSQL_USER: im MYSQL_PASSWORD: ${MYSQL_PASSWORD:?MYSQL_PASSWORD is required} ports: - "3307:3306" command: --default-authentication-plugin=mysql_native_password volumes: - mysql-data:/var/lib/mysql networks: - im-net redis: image: redis:7 container_name: im-redis restart: always command: redis-server --appendonly yes ports: - "6380:6379" volumes: - redis-data:/data networks: - im-net rabbitmq: image: rabbitmq:3-management container_name: im-rabbitmq restart: always environment: RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:?RABBITMQ_DEFAULT_USER is required} RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:?RABBITMQ_DEFAULT_PASS is required} ports: - "5673:5672" - "15673:15672" volumes: - rabbitmq-data:/var/lib/rabbitmq networks: - im-net # ── 业务服务 ────────────────────────────────────── user-service: image: reg.nxsir.cn/im/user-service:latest container_name: im-user-service restart: always depends_on: consul: condition: service_started mysql: condition: service_started redis: condition: service_started rabbitmq: condition: service_started ports: - "5001:8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 CONSUL_URL: http://consul:8500 networks: - im-net contact-service: image: reg.nxsir.cn/im/contact-service:latest container_name: im-contact-service restart: always depends_on: consul: condition: service_started mysql: condition: service_started redis: condition: service_started rabbitmq: condition: service_started user-service: condition: service_started ports: - "5002:8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 CONSUL_URL: http://consul:8500 networks: - im-net group-service: image: reg.nxsir.cn/im/group-service:latest container_name: im-group-service restart: always depends_on: consul: condition: service_started mysql: condition: service_started redis: condition: service_started rabbitmq: condition: service_started user-service: condition: service_started ports: - "5003:8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 CONSUL_URL: http://consul:8500 InternalApiKey: ${IM_INTERNAL_API_KEY:?IM_INTERNAL_API_KEY is required} networks: - im-net message-service: image: reg.nxsir.cn/im/message-service:latest container_name: im-message-service restart: always depends_on: consul: condition: service_started mysql: condition: service_started redis: condition: service_started rabbitmq: condition: service_started user-service: condition: service_started contact-service: condition: service_started group-service: condition: service_started ports: - "5004:8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 CONSUL_URL: http://consul:8500 InternalApiKey: ${IM_INTERNAL_API_KEY:?IM_INTERNAL_API_KEY is required} networks: - im-net file-service: image: reg.nxsir.cn/im/file-service:latest container_name: im-file-service restart: always depends_on: consul: condition: service_started mysql: condition: service_started redis: condition: service_started rabbitmq: condition: service_started group-service: condition: service_started ports: - "5005:8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 CONSUL_URL: http://consul:8500 InternalApiKey: ${IM_INTERNAL_API_KEY:?IM_INTERNAL_API_KEY is required} networks: - im-net connector-service: image: reg.nxsir.cn/im/connector-service:latest container_name: im-connector-service restart: always depends_on: consul: condition: service_started redis: condition: service_started rabbitmq: condition: service_started message-service: condition: service_started ports: - "5008:8080" environment: ASPNETCORE_ENVIRONMENT: Production ASPNETCORE_URLS: http://+:8080 CONSUL_URL: http://consul:8500 networks: - im-net networks: im-net: driver: bridge volumes: mysql-data: redis-data: rabbitmq-data: