# ============================================================ # Node-02 Docker Compose 配置 # 从节点: MySQL Slave, Redis Slave, Nacos, NameServer, Broker-A, MinIO, 微服务 # 使用方式: docker compose --env-file config/.env.node-02 up -d # ============================================================ services: # ==================== 基础设施 ==================== mysql: image: mysql:8.0 container_name: mysql restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123456} MYSQL_DATABASE: ${MYSQL_DATABASE:-video_platform} MYSQL_USER: ${MYSQL_USER:-video} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-video123} volumes: - mysql_data:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d - ./config/mysql/my-slave.cnf:/etc/mysql/conf.d/my.cnf:ro command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --server-id=2 - --log-bin=mysql-bin - --binlog-format=ROW - --gtid-mode=ON - --enforce-gtid-consistency=ON healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-root123456}"] interval: 10s timeout: 5s retries: 10 networks: - ha-network redis: image: redis:7.0-alpine container_name: redis restart: always ports: - "6379:6379" volumes: - redis_data:/data - ./config/redis/redis-slave.conf:/usr/local/etc/redis/redis.conf:ro command: redis-server /usr/local/etc/redis/redis.conf healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD:-redis_HA_Cluster_2024}", "ping"] interval: 10s timeout: 5s retries: 5 networks: - ha-network redis-sentinel: image: redis:7.0-alpine container_name: redis-sentinel restart: always ports: - "26379:26379" volumes: - sentinel_data:/data - ./config/redis/sentinel.conf:/usr/local/etc/redis/sentinel.conf command: sh -c "cp /usr/local/etc/redis/sentinel.conf /data/sentinel.conf && redis-sentinel /data/sentinel.conf" depends_on: redis: condition: service_healthy networks: - ha-network nacos: image: nacos/nacos-server:v2.3.2 container_name: nacos restart: always ports: - "8848:8848" - "9848:9848" - "9849:9849" environment: - MODE=cluster - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - NACOS_SERVER_IP=${HOST_IP:-192.168.1.102} - NACOS_APPLICATION_PORT=8848 - SPRING_DATASOURCE_PLATFORM=mysql - MYSQL_SERVICE_HOST=mysql - MYSQL_SERVICE_PORT=3306 - MYSQL_SERVICE_DB_NAME=nacos_config - MYSQL_SERVICE_USER=root - MYSQL_SERVICE_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true - NACOS_AUTH_ENABLE=true - NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 - NACOS_AUTH_IDENTITY_KEY=serverIdentity - NACOS_AUTH_IDENTITY_VALUE=security - JVM_XMS=512m - JVM_XMX=512m volumes: - nacos_logs:/home/nacos/logs healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/liveness"] interval: 10s timeout: 5s retries: 10 depends_on: mysql: condition: service_healthy networks: - ha-network rmqnamesrv: image: apache/rocketmq:5.1.4 container_name: rmqnamesrv restart: always ports: - "9876:9876" environment: - JAVA_OPT_EXT=-server -Xms256m -Xmx256m command: sh mqnamesrv healthcheck: test: ["CMD-SHELL", "pgrep -f 'NamesrvStartup' || exit 1"] interval: 10s timeout: 5s retries: 10 start_period: 30s networks: - ha-network rmqbroker: image: apache/rocketmq:5.1.4 user: root container_name: rmqbroker restart: always ports: - "10909:10909" - "10911:10911" - "10912:10912" environment: - NAMESRV_ADDR=${NAMESRV_ADDR:-192.168.1.101:9876;192.168.1.102:9876;192.168.1.103:9876} - JAVA_OPT_EXT=-server -Xms512m -Xmx512m volumes: - ./config/rocketmq/broker-a.conf:/home/rocketmq/rocketmq-5.1.4/conf/broker.conf:ro - rmqbroker_logs:/home/rocketmq/logs - rmqbroker_store:/home/rocketmq/store command: sh mqbroker -c /home/rocketmq/rocketmq-5.1.4/conf/broker.conf depends_on: rmqnamesrv: condition: service_healthy networks: - ha-network minio: image: quay.io/minio/minio container_name: minio restart: always ports: - "9100:9000" - "9101:9001" environment: - MINIO_ROOT_USER=minioadmin - MINIO_ROOT_PASSWORD=minioadmin123 volumes: - minio_data:/data command: server /data --console-address ":9001" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] interval: 10s timeout: 5s retries: 5 networks: - ha-network sentinel: image: sentinel-dashboard:1.8.6 container_name: sentinel restart: always ports: - "8880:8080" environment: - JAVA_OPTS=-Xms128m -Xmx256m - SERVER_PORT=8080 - DASHBOARD_SERVER=localhost:8080 - PROJECT_NAME=sentinel-dashboard networks: - ha-network # ==================== 微服务 ==================== video-gateway: build: context: ./video-gateway dockerfile: Dockerfile container_name: video-gateway restart: always ports: - "9000:9000" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - GATEWAY_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy networks: - ha-network video-auth: build: context: ./video-auth dockerfile: Dockerfile container_name: video-auth restart: always ports: - "9001:9001" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - AUTH_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy mysql: condition: service_healthy redis: condition: service_healthy networks: - ha-network video-user: build: context: ./video-user dockerfile: Dockerfile container_name: video-user restart: always ports: - "9002:9002" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - USER_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy mysql: condition: service_healthy redis: condition: service_healthy networks: - ha-network video-content: build: context: ./video-content dockerfile: Dockerfile container_name: video-content restart: always ports: - "9003:9003" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} - ROCKETMQ_HOST=rmqnamesrv - ROCKETMQ_PORT=9876 - MINIO_HOST=minio - MINIO_PORT=9000 - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin123 - MINIO_BUCKET=video-platform - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - CONTENT_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy mysql: condition: service_healthy redis: condition: service_healthy rmqnamesrv: condition: service_healthy minio: condition: service_healthy networks: - ha-network video-comment: build: context: ./video-comment dockerfile: Dockerfile container_name: video-comment restart: always ports: - "9004:9004" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - COMMENT_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy mysql: condition: service_healthy redis: condition: service_healthy networks: - ha-network video-recommend: build: context: ./video-recommend dockerfile: Dockerfile container_name: video-recommend restart: always ports: - "9005:9005" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - RECOMMEND_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy mysql: condition: service_healthy redis: condition: service_healthy networks: - ha-network video-admin: build: context: ./video-admin dockerfile: Dockerfile container_name: video-admin restart: always ports: - "9006:9006" environment: - SPRING_PROFILES_ACTIVE=ha - NACOS_HOST=nacos - NACOS_PORT=8848 - NACOS_USERNAME=nacos - NACOS_PASSWORD=nacos - SPRING_CLOUD_NACOS_DISCOVERY_USERNAME=nacos - SPRING_CLOUD_NACOS_DISCOVERY_PASSWORD=nacos - SPRING_CLOUD_NACOS_CONFIG_USERNAME=nacos - SPRING_CLOUD_NACOS_CONFIG_PASSWORD=nacos - MYSQL_HOST=mysql - MYSQL_PORT=3306 - MYSQL_USERNAME=root - MYSQL_PASSWORD=${MYSQL_ROOT_PASSWORD:-root123456} - REDIS_HOST=redis - REDIS_PORT=6379 - REDIS_PASSWORD=${REDIS_PASSWORD:-redis_HA_Cluster_2024} - SENTINEL_DASHBOARD_HOST=sentinel - SENTINEL_DASHBOARD_PORT=8080 - ADMIN_IP=${HOST_IP:-192.168.1.102} - JAVA_OPTS=-Xms256m -Xmx512m depends_on: nacos: condition: service_healthy mysql: condition: service_healthy redis: condition: service_healthy networks: - ha-network networks: ha-network: driver: bridge volumes: mysql_data: redis_data: sentinel_data: nacos_logs: rmqbroker_logs: rmqbroker_store: minio_data: