2026-02-28 15:29:16 +08:00
|
|
|
services:
|
|
|
|
|
mysql:
|
2026-06-15 09:20:56 +08:00
|
|
|
image: mysql:8.4
|
2026-02-28 15:29:16 +08:00
|
|
|
container_name: muyu-mysql
|
|
|
|
|
restart: always
|
|
|
|
|
environment:
|
2026-06-17 23:16:28 +08:00
|
|
|
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:?Set MYSQL_ROOT_PASSWORD in .env}
|
2026-02-28 15:29:16 +08:00
|
|
|
MYSQL_DATABASE: muyu_wms
|
|
|
|
|
TZ: Asia/Shanghai
|
|
|
|
|
ports:
|
2026-06-14 12:38:46 +08:00
|
|
|
- "${MYSQL_PORT:-13306}:3306"
|
2026-02-28 15:29:16 +08:00
|
|
|
volumes:
|
|
|
|
|
- ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
|
|
|
|
|
- ../data/mysql:/var/lib/mysql
|
|
|
|
|
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 5
|
|
|
|
|
|
|
|
|
|
redis:
|
|
|
|
|
image: redis:7-alpine
|
|
|
|
|
container_name: muyu-redis
|
|
|
|
|
restart: always
|
|
|
|
|
ports:
|
2026-06-14 12:38:46 +08:00
|
|
|
- "${REDIS_PORT:-16379}:6379"
|
2026-02-28 15:29:16 +08:00
|
|
|
volumes:
|
|
|
|
|
- ../data/redis:/data
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 5
|
|
|
|
|
|
2026-03-30 02:53:55 +00:00
|
|
|
postgres:
|
|
|
|
|
image: postgres:16
|
|
|
|
|
container_name: muyu-postgres
|
|
|
|
|
restart: always
|
|
|
|
|
environment:
|
|
|
|
|
POSTGRES_USER: muyu
|
2026-06-17 23:16:28 +08:00
|
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env}
|
2026-03-30 02:53:55 +00:00
|
|
|
POSTGRES_DB: muyu_crm
|
|
|
|
|
TZ: Asia/Shanghai
|
|
|
|
|
ports:
|
|
|
|
|
- "5432:5432"
|
|
|
|
|
volumes:
|
|
|
|
|
- ./postgres/init-crm.sql:/docker-entrypoint-initdb.d/init.sql
|
|
|
|
|
- ../data/postgres:/var/lib/postgresql/data
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD-SHELL", "pg_isready -U muyu -d muyu_crm"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 8
|
|
|
|
|
|
2026-02-28 15:29:16 +08:00
|
|
|
etcd:
|
|
|
|
|
image: quay.io/coreos/etcd:v3.5.17
|
|
|
|
|
container_name: muyu-etcd
|
|
|
|
|
restart: always
|
|
|
|
|
command:
|
|
|
|
|
- etcd
|
|
|
|
|
- --name=default
|
|
|
|
|
- --data-dir=/etcd-data
|
|
|
|
|
- --listen-client-urls=http://0.0.0.0:2379
|
2026-06-14 15:24:02 +08:00
|
|
|
- --advertise-client-urls=http://127.0.0.1:2379
|
2026-02-28 15:29:16 +08:00
|
|
|
- --listen-peer-urls=http://0.0.0.0:2380
|
2026-06-14 15:24:02 +08:00
|
|
|
- --initial-advertise-peer-urls=http://127.0.0.1:2380
|
|
|
|
|
- --initial-cluster=default=http://127.0.0.1:2380
|
2026-02-28 15:29:16 +08:00
|
|
|
- --initial-cluster-state=new
|
|
|
|
|
ports:
|
|
|
|
|
- "2379:2379"
|
|
|
|
|
healthcheck:
|
|
|
|
|
test: ["CMD", "etcdctl", "endpoint", "health"]
|
|
|
|
|
interval: 10s
|
|
|
|
|
timeout: 5s
|
|
|
|
|
retries: 5
|
|
|
|
|
|
|
|
|
|
system-rpc:
|
|
|
|
|
build:
|
|
|
|
|
context: ..
|
|
|
|
|
dockerfile: deploy/Dockerfile.system
|
|
|
|
|
container_name: muyu-system-rpc
|
|
|
|
|
restart: always
|
|
|
|
|
depends_on:
|
|
|
|
|
mysql:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
redis:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
etcd:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
environment:
|
|
|
|
|
TZ: Asia/Shanghai
|
2026-06-17 23:16:28 +08:00
|
|
|
MYSQL_DSN: "root:${MYSQL_ROOT_PASSWORD}@tcp(mysql:3306)/muyu_wms?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
|
2026-02-28 15:29:16 +08:00
|
|
|
|
|
|
|
|
inventory-rpc:
|
|
|
|
|
build:
|
|
|
|
|
context: ..
|
|
|
|
|
dockerfile: deploy/Dockerfile.inventory
|
|
|
|
|
container_name: muyu-inventory-rpc
|
|
|
|
|
restart: always
|
|
|
|
|
depends_on:
|
|
|
|
|
mysql:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
redis:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
etcd:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
environment:
|
|
|
|
|
TZ: Asia/Shanghai
|
2026-06-17 23:16:28 +08:00
|
|
|
MYSQL_DSN: "root:${MYSQL_ROOT_PASSWORD}@tcp(mysql:3306)/muyu_wms?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
|
2026-02-28 15:29:16 +08:00
|
|
|
|
2026-06-15 09:20:56 +08:00
|
|
|
purchase-rpc:
|
|
|
|
|
build:
|
|
|
|
|
context: ..
|
|
|
|
|
dockerfile: deploy/Dockerfile.purchase
|
|
|
|
|
container_name: muyu-purchase-rpc
|
|
|
|
|
restart: always
|
|
|
|
|
depends_on:
|
|
|
|
|
mysql:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
redis:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
etcd:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
environment:
|
|
|
|
|
TZ: Asia/Shanghai
|
2026-06-17 23:16:28 +08:00
|
|
|
MYSQL_DSN: "root:${MYSQL_ROOT_PASSWORD}@tcp(mysql:3306)/muyu_wms?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
|
2026-06-15 09:20:56 +08:00
|
|
|
|
2026-07-04 02:29:54 +00:00
|
|
|
production-rpc:
|
|
|
|
|
build:
|
|
|
|
|
context: ..
|
|
|
|
|
dockerfile: deploy/Dockerfile.production
|
|
|
|
|
container_name: muyu-production-rpc
|
|
|
|
|
restart: always
|
|
|
|
|
ports:
|
|
|
|
|
- "9004:9004"
|
|
|
|
|
depends_on:
|
|
|
|
|
mysql:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
redis:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
etcd:
|
|
|
|
|
condition: service_healthy
|
|
|
|
|
volumes:
|
|
|
|
|
- ./etc/production.yaml:/etc/muyu/production.yaml
|
|
|
|
|
environment:
|
|
|
|
|
TZ: Asia/Shanghai
|
|
|
|
|
MYSQL_DSN: "root:${MYSQL_ROOT_PASSWORD}@tcp(mysql:3306)/muyu_wms?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
|
|
|
|
|
|
2026-02-28 15:29:16 +08:00
|
|
|
gateway:
|
|
|
|
|
build:
|
|
|
|
|
context: ..
|
|
|
|
|
dockerfile: deploy/Dockerfile.gateway
|
|
|
|
|
container_name: muyu-gateway
|
|
|
|
|
restart: always
|
|
|
|
|
ports:
|
|
|
|
|
- "8888:8888"
|
|
|
|
|
depends_on:
|
2026-06-15 09:20:56 +08:00
|
|
|
system-rpc:
|
|
|
|
|
condition: service_started
|
|
|
|
|
inventory-rpc:
|
|
|
|
|
condition: service_started
|
|
|
|
|
purchase-rpc:
|
|
|
|
|
condition: service_started
|
2026-07-04 02:29:54 +00:00
|
|
|
production-rpc:
|
|
|
|
|
condition: service_started
|
2026-06-15 09:20:56 +08:00
|
|
|
postgres:
|
|
|
|
|
condition: service_healthy
|
2026-02-28 15:29:16 +08:00
|
|
|
environment:
|
|
|
|
|
TZ: Asia/Shanghai
|
2026-06-17 23:16:28 +08:00
|
|
|
MYSQL_DSN: "root:${MYSQL_ROOT_PASSWORD}@tcp(mysql:3306)/muyu_wms?charset=utf8mb4&parseTime=true&loc=Asia%2FShanghai"
|
|
|
|
|
POSTGRES_DSN: "postgres://muyu:${POSTGRES_PASSWORD}@postgres:5432/muyu_crm?sslmode=disable"
|
|
|
|
|
ACCESS_SECRET: ${ACCESS_SECRET:?Set ACCESS_SECRET in .env}
|
2026-02-28 15:29:16 +08:00
|
|
|
|
|
|
|
|
nginx:
|
|
|
|
|
image: nginx:alpine
|
|
|
|
|
container_name: muyu-nginx
|
|
|
|
|
restart: always
|
|
|
|
|
ports:
|
2026-06-14 12:38:46 +08:00
|
|
|
- "${NGINX_PORT:-18080}:80"
|
2026-02-28 15:29:16 +08:00
|
|
|
volumes:
|
|
|
|
|
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
|
|
|
|
|
- ../../muyu-portal/dist:/usr/share/nginx/html
|
|
|
|
|
- ../data/uploads:/usr/share/nginx/uploads
|
|
|
|
|
depends_on:
|
|
|
|
|
- gateway
|