erp-java/docker-compose.yml.bak

652 lines
17 KiB
YAML

version: '3.8'
services:
# ============================================================
# 基础设施服务
# ============================================================
# MySQL数据库
mysql:
image: mysql:8.0
container_name: erp-mysql
environment:
MYSQL_ROOT_PASSWORD: root123456
MYSQL_DATABASE: erp_java
MYSQL_USER: erp_user
MYSQL_PASSWORD: erp123456
ports:
- "3307:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./infrastructure/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max_connections=1000
networks:
- erp-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot123456"]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
# Redis缓存
redis:
image: redis:7-alpine
container_name: erp-redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes --requirepass redis123456 --maxmemory 512mb --maxmemory-policy allkeys-lru
networks:
- erp-network
healthcheck:
test: ["CMD", "redis-cli", "-a", "redis123456", "ping"]
interval: 10s
timeout: 5s
retries: 5
# Nacos服务注册与配置中心
nacos:
image: nacos/nacos-server:v2.2.3
container_name: erp-nacos
environment:
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql
MYSQL_SERVICE_DB_NAME: nacos_config
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: root123456
NACOS_AUTH_ENABLE: "true"
NACOS_AUTH_TOKEN: "SecretKey012345678901234567890123456789012345678901234567890123456789"
NACOS_AUTH_IDENTITY_KEY: "serverIdentity"
NACOS_AUTH_IDENTITY_VALUE: "security"
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
volumes:
- nacos_logs:/home/nacos/logs
- nacos_data:/home/nacos/data
depends_on:
mysql:
condition: service_healthy
networks:
- erp-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8848/nacos/"]
interval: 15s
timeout: 10s
retries: 5
start_period: 60s
# RocketMQ
rocketmq:
image: apache/rocketmq:5.1.4
container_name: erp-rocketmq
ports:
- "9876:9876"
- "10909:10909"
- "10911:10911"
- "10912:10912"
environment:
NAMESRV_ADDR: "localhost:9876"
JAVA_OPTS: "-Xms1g -Xmx1g"
volumes:
- rocketmq_logs:/home/rocketmq/logs
- rocketmq_store:/home/rocketmq/store
networks:
- erp-network
command: sh mqnamesrv
healthcheck:
test: ["CMD", "sh", "/usr/sbin/rocketmq-ce", "namesrv", "-n", "localhost:9876"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
# RocketMQ Broker
rocketmq-broker:
image: apache/rocketmq:5.1.4
container_name: erp-rocketmq-broker
ports:
- "10911:10911"
environment:
NAMESRV_ADDR: "rocketmq:9876"
JAVA_OPTS: "-Xms1g -Xmx1g -Xmn512m"
volumes:
- rocketmq_store:/home/rocketmq/store
depends_on:
- rocketmq
networks:
- erp-network
command: sh mqbroker -n rocketmq:9876 -c ../conf/broker.conf
# RocketMQ控制台
rocketmq-console:
image: apacherocketmq/rocketmq-dashboard:latest
container_name: erp-rocketmq-console
ports:
- "8080:8080"
environment:
JAVA_OPTS: "-Drocketmq.namesrv.addr=rocketmq:9876 -Dserver.port=8080"
depends_on:
- rocketmq
networks:
- erp-network
# Seata分布式事务
seata:
image: seataio/seata-server:1.7.1
container_name: erp-seata
ports:
- "8091:8091"
- "7091:7091"
environment:
SEATA_IP: seata
SEATA_PORT: "8091"
STORE_MODE: db
SERVER_NODE: "1"
volumes:
- ./infrastructure/seata/registry.conf:/seata-server/resources/registry.conf
- ./infrastructure/seata/file.conf:/seata-server/resources/file.conf
depends_on:
mysql:
condition: service_healthy
nacos:
condition: service_started
networks:
- erp-network
# SkyWalking OAP
skywalking-oap:
image: apache/skywalking-oap-server:9.7.0
container_name: erp-skywalking-oap
ports:
- "11800:11800"
- "12800:12800"
environment:
SW_STORAGE: elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
depends_on:
elasticsearch:
condition: service_healthy
networks:
- erp-network
# SkyWalking UI
skywalking-ui:
image: apache/skywalking-ui:9.7.0
container_name: erp-skywalking-ui
ports:
- "8081:8080"
environment:
SW_OAP_ADDRESS: skywalking-oap:12800
depends_on:
- skywalking-oap
networks:
- erp-network
# Elasticsearch
elasticsearch:
image: elasticsearch:7.17.16
container_name: erp-elasticsearch
environment:
discovery.type: single-node
ES_JAVA_OPTS: -Xms512m -Xmx512m
xpack.security.enabled: "false"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
networks:
- erp-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"]
interval: 15s
timeout: 10s
retries: 5
start_period: 60s
# MinIO对象存储
minio:
image: minio/minio:latest
container_name: erp-minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin123
volumes:
- minio_data:/data
command: server /data --console-address ":9001"
networks:
- erp-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 15s
timeout: 10s
retries: 3
start_period: 30s
# ============================================================
# API网关
# ============================================================
gateway:
build:
context: ./gateway
dockerfile: docker/Dockerfile
container_name: erp-gateway
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JWT_SECRET=your-256-bit-secret-key-for-jwt-token-generation-erp
- JAVA_OPTS=-Xms256m -Xmx512m -XX:+UseG1GC
volumes:
- gateway_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
nacos:
condition: service_healthy
redis:
condition: service_healthy
# ============================================================
# 业务微服务
# ============================================================
user-service:
build:
context: .
dockerfile: services/user-service/Dockerfile
container_name: erp-user-service
ports:
- "8082:8082"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- user_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8082/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
admin-service:
build:
context: .
dockerfile: services/admin-service/Dockerfile
container_name: erp-admin-service
ports:
- "8081:8081"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- admin_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8081/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
product-service:
build:
context: .
dockerfile: services/product-service/Dockerfile
container_name: erp-product-service
ports:
- "8083:8083"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- product_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8083/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
order-service:
build:
context: .
dockerfile: services/order-service/Dockerfile
container_name: erp-order-service
ports:
- "8084:8082"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- ORDER_SERVICE_PORT=8082
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- order_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8082/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
inventory-service:
build:
context: .
dockerfile: services/inventory-service/Dockerfile
container_name: erp-inventory-service
ports:
- "8085:8084"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- inventory_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8084/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
tenant-service:
build:
context: .
dockerfile: services/tenant-service/Dockerfile
container_name: erp-tenant-service
ports:
- "8086:8083"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- tenant_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8083/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
file-service:
build:
context: .
dockerfile: services/file-service/Dockerfile
container_name: erp-file-service
ports:
- "8090:8082"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- MINIO_ENDPOINT=http://minio:9000
- MINIO_ACCESS_KEY=minioadmin
- MINIO_SECRET_KEY=minioadmin123
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- file_logs:/app/logs
- file_storage:/app/storage
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8082/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
minio:
condition: service_healthy
nacos:
condition: service_healthy
scheduled-task-service:
build:
context: .
dockerfile: services/scheduled-task-service/Dockerfile
container_name: erp-scheduled-task-service
ports:
- "8091:8088"
environment:
- SPRING_PROFILES_ACTIVE=docker
- NACOS_SERVER_ADDR=nacos:8848
- NACOS_NAMESPACE=${NACOS_NAMESPACE:-public}
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=erp_java
- DB_USERNAME=erp_user
- DB_PASSWORD=erp123456
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=redis123456
- JAVA_OPTS=-Xms512m -Xmx1024m -XX:+UseG1GC
volumes:
- task_logs:/app/logs
networks:
- erp-network
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8088/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
nacos:
condition: service_healthy
# ============================================================
# 可选服务(按需启用,注释掉不需要的服务以节省资源)
# ============================================================
# report-service:
# build:
# context: .
# dockerfile: services/report-service/Dockerfile
# container_name: erp-report-service
# ports:
# - "8092:8084"
# environment:
# - SPRING_PROFILES_ACTIVE=docker
# - NACOS_SERVER_ADDR=nacos:8848
# - DB_HOST=mysql
# - DB_PORT=3306
# - DB_NAME=erp_java
# - DB_USERNAME=erp_user
# - DB_PASSWORD=erp123456
# - REDIS_HOST=redis
# - REDIS_PORT=6379
# - REDIS_PASSWORD=redis123456
# networks:
# - erp-network
# restart: unless-stopped
# depends_on:
# mysql:
# condition: service_healthy
# redis:
# condition: service_healthy
# ============================================================
# 网络定义
# ============================================================
networks:
erp-network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
# ============================================================
# 持久化卷
# ============================================================
volumes:
mysql_data:
redis_data:
nacos_logs:
nacos_data:
rocketmq_logs:
rocketmq_store:
elasticsearch_data:
minio_data:
gateway_logs:
user_logs:
admin_logs:
product_logs:
order_logs:
inventory_logs:
tenant_logs:
file_logs:
file_storage:
task_logs: