497 lines
14 KiB
YAML
497 lines
14 KiB
YAML
# ============================================================
|
|
# Node-01 Docker Compose 配置
|
|
# 主节点: MySQL Master, Redis Master, Nacos, NameServer, MinIO, 微服务
|
|
# 使用方式: docker compose --env-file config/.env.node-01 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-master.cnf:/etc/mysql/conf.d/my.cnf:ro
|
|
command:
|
|
- --character-set-server=utf8mb4
|
|
- --collation-server=utf8mb4_unicode_ci
|
|
- --server-id=1
|
|
- --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-master.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.101}
|
|
- 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
|
|
|
|
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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- GATEWAY_IP=${HOST_IP:-192.168.1.101}
|
|
- JAVA_OPTS=-Xms256m -Xmx512m
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9000/actuator/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- NACOS_SERVERS=${NACOS_SERVERS:-192.168.1.101:8848,192.168.1.102:8848,192.168.1.103:8848}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- AUTH_IP=${HOST_IP:-192.168.1.101}
|
|
- JAVA_OPTS=-Xms256m -Xmx512m
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9001/actuator/health"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 3
|
|
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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- USER_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- CONTENT_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- COMMENT_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- RECOMMEND_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_NACOS_DISCOVERY_IP=${HOST_IP:-192.168.1.101}
|
|
- 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
|
|
- SPRING_CLOUD_SENTINEL_CLIENT_IP=${HOST_IP:-192.168.1.101}
|
|
- ADMIN_IP=${HOST_IP:-192.168.1.101}
|
|
- JAVA_OPTS=-Xms256m -Xmx512m
|
|
depends_on:
|
|
nacos:
|
|
condition: service_healthy
|
|
mysql:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
networks:
|
|
- ha-network
|
|
|
|
# ==================== 负载均衡 ====================
|
|
|
|
nginx:
|
|
image: nginx:alpine
|
|
container_name: nginx-lb
|
|
restart: always
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
volumes:
|
|
- ./config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
|
- ./config/nginx/conf.d:/etc/nginx/conf.d:ro
|
|
- nginx_logs:/var/log/nginx
|
|
depends_on:
|
|
- video-gateway
|
|
networks:
|
|
- ha-network
|
|
|
|
networks:
|
|
ha-network:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
mysql_data:
|
|
redis_data:
|
|
sentinel_data:
|
|
nacos_logs:
|
|
minio_data:
|
|
nginx_logs:
|