fundplatform/docker-compose.yml
zhangjf e52e2ba801 refactor: 简化租户元数据,移除冗余的 tenant-id
问题:metadata 中同时配置 tenant-id 和 tenant-group,但 tenant-id 未被使用

分析:
- tenant-id: 用于数据隔离,但实际由 TenantContextHolder 提供,元数据中的值无意义
- tenant-group: 用于服务路由,负载均衡器实际只使用此字段

解决方案:
1. 移除 metadata.tenant-id 配置
2. 只保留 metadata.tenant-group
3. 更新 NacosMetadataConfig,移除 tenant-id 处理
4. 更新 docker-compose.yml,移除 TENANT_ID 环境变量

配置简化:
  修改前: tenant-id + tenant-group 两个字段
  修改后: 只有 tenant-group 一个字段

实例类型:
  共享实例: tenant-group = "" (空)
  VIP实例:  tenant-group = "TENANT_VIP_001"
2026-02-19 21:26:06 +08:00

528 lines
13 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 资金服务平台 - Docker Compose 编排配置
# 版本: 1.1
# 支持多租户混合模式VIP专属实例 + 普通租户共享实例
version: '3.8'
services:
# ==================== 基础设施服务 ====================
# MySQL 数据库
mysql:
image: mysql:8.0
container_name: fund-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
MYSQL_DATABASE: fund_platform
TZ: Asia/Shanghai
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./docker/mysql/init:/docker-entrypoint-initdb.d:ro
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --default-authentication-plugin=mysql_native_password
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 5
networks:
- fund-network
# Redis 缓存
redis:
image: redis:7-alpine
container_name: fund-redis
restart: unless-stopped
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- fund-network
# Nacos 注册中心 & 配置中心
nacos:
image: nacos/nacos-server:v3.0.0
container_name: fund-nacos
restart: unless-stopped
environment:
MODE: standalone
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:-root123}
NACOS_AUTH_TOKEN: SecretKey012345678901234567890123456789012345678901234567890123456789
NACOS_AUTH_IDENTITY_KEY: serverIdentity
NACOS_AUTH_IDENTITY_VALUE: security
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
volumes:
- nacos_data:/home/nacos/logs
depends_on:
mysql:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/v1/console/health/readiness"]
interval: 30s
timeout: 10s
retries: 10
start_period: 60s
networks:
- fund-network
# ==================== 监控服务 ====================
# Prometheus 监控
prometheus:
image: prom/prometheus:v2.48.0
container_name: fund-prometheus
restart: unless-stopped
ports:
- "9090:9090"
volumes:
- ./docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
- ./docker/prometheus/rules:/etc/prometheus/rules:ro
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d'
- '--web.enable-lifecycle'
networks:
- fund-network
# Grafana 可视化
grafana:
image: grafana/grafana:10.2.0
container_name: fund-grafana
restart: unless-stopped
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD:-admin123}
GF_USERS_ALLOW_SIGN_UP: "false"
GF_SERVER_ROOT_URL: http://localhost:3000
ports:
- "3000:3000"
volumes:
- grafana_data:/var/lib/grafana
- ./docker/grafana/provisioning:/etc/grafana/provisioning:ro
- ./docker/grafana/dashboards:/var/lib/grafana/dashboards:ro
depends_on:
- prometheus
networks:
- fund-network
# ==================== 业务微服务 ====================
# API 网关
gateway:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-gateway
container_name: fund-gateway
restart: unless-stopped
environment:
SERVER_PORT: 8000
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8000:8000"
depends_on:
nacos:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/actuator/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
networks:
- fund-network
# ==================== 系统服务(多租户混合模式) ====================
# 系统服务 - 共享实例(供所有租户使用)
fund-sys:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-sys
container_name: fund-sys-shared
restart: unless-stopped
environment:
SERVER_PORT: 8100
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
REDIS_HOST: redis
REDIS_PORT: 6379
JAVA_OPTS: -Xms256m -Xmx512m
# 租户组 - 共享实例(空值,所有租户可用)
TENANT_GROUP: ""
ports:
- "8100:8100"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8100/actuator/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
networks:
- fund-network
# 系统服务 - VIP_001 专属实例
fund-sys-vip001:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-sys
container_name: fund-sys-vip001
restart: unless-stopped
environment:
SERVER_PORT: 8101
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
REDIS_HOST: redis
REDIS_PORT: 6379
JAVA_OPTS: -Xms256m -Xmx512m
# 租户组 - VIP_001 专属实例
TENANT_GROUP: "TENANT_VIP_001"
ports:
- "8101:8101"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8101/actuator/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 120s
networks:
- fund-network
# 系统服务 - VIP_002 专属实例(可选,按需启用)
# fund-sys-vip002:
# build:
# context: .
# dockerfile: Dockerfile
# args:
# MODULE: fund-sys
# container_name: fund-sys-vip002
# restart: unless-stopped
# environment:
# SERVER_PORT: 8102
# SPRING_PROFILES_ACTIVE: docker
# NACOS_SERVER_ADDR: nacos:8848
# NACOS_USERNAME: nacos
# NACOS_PASSWORD: nacos
# MYSQL_HOST: mysql
# MYSQL_PORT: 3306
# MYSQL_DB: fund_platform
# MYSQL_USER: root
# MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
# REDIS_HOST: redis
# REDIS_PORT: 6379
# JAVA_OPTS: -Xms256m -Xmx512m
# # 租户组 - VIP_002 专属实例
# TENANT_GROUP: "TENANT_VIP_002"
# ports:
# - "8102:8102"
# depends_on:
# nacos:
# condition: service_healthy
# mysql:
# condition: service_healthy
# redis:
# condition: service_healthy
# healthcheck:
# test: ["CMD", "curl", "-f", "http://localhost:8102/actuator/health"]
# interval: 30s
# timeout: 10s
# retries: 5
# start_period: 120s
# networks:
# - fund-network
# 客户服务
fund-cust:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-cust
container_name: fund-cust
restart: unless-stopped
environment:
SERVER_PORT: 8200
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8200:8200"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# 项目服务
fund-proj:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-proj
container_name: fund-proj
restart: unless-stopped
environment:
SERVER_PORT: 8300
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8300:8300"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# 需求工单服务
fund-req:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-req
container_name: fund-req
restart: unless-stopped
environment:
SERVER_PORT: 8400
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8400:8400"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# 支出服务
fund-exp:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-exp
container_name: fund-exp
restart: unless-stopped
environment:
SERVER_PORT: 8500
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8500:8500"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# 收款服务
fund-receipt:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-receipt
container_name: fund-receipt
restart: unless-stopped
environment:
SERVER_PORT: 8600
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8600:8600"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# 报表服务
fund-report:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-report
container_name: fund-report
restart: unless-stopped
environment:
SERVER_PORT: 8700
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8700:8700"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# 文件服务
fund-file:
build:
context: .
dockerfile: Dockerfile
args:
MODULE: fund-file
container_name: fund-file
restart: unless-stopped
environment:
SERVER_PORT: 8800
SPRING_PROFILES_ACTIVE: docker
NACOS_SERVER_ADDR: nacos:8848
NACOS_USERNAME: nacos
NACOS_PASSWORD: nacos
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_DB: fund_platform
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD:-root123}
JAVA_OPTS: -Xms256m -Xmx512m
ports:
- "8800:8800"
depends_on:
nacos:
condition: service_healthy
mysql:
condition: service_healthy
networks:
- fund-network
# ==================== 网络配置 ====================
networks:
fund-network:
driver: bridge
name: fund-network
# ==================== 数据卷 ====================
volumes:
mysql_data:
name: fund-mysql-data
redis_data:
name: fund-redis-data
nacos_data:
name: fund-nacos-data
prometheus_data:
name: fund-prometheus-data
grafana_data:
name: fund-grafana-data