Go workspace (go.work) with 5 microservices + shared library: - gateway (8080), auth-service (8081), purchaser-service (8082) - textile-service (8083), washing-service (8084) - shared: proto definitions, common packages Infrastructure: docker-compose for local dev, K8s manifests for K3s cluster deployment (mysql/redis/etcd + traefik ingress). Frontend (iloom-flatten) added as git submodule. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
151 lines
4.8 KiB
YAML
151 lines
4.8 KiB
YAML
# 使用方式:
|
||
# 独立模式(开发):docker compose up
|
||
# - 启动本地 MySQL,自动初始化 muyu + iloom 表
|
||
# - gRPC 服务需要另外启动 muyu-apiserver(cd ../muyu-apiserver/deploy && docker compose up)
|
||
#
|
||
# 集成模式(与 muyu-apiserver 联合):
|
||
# 1. cd ../muyu-apiserver/deploy && docker compose up
|
||
# 2. 设置环境变量指向 muyu 的服务:
|
||
# export DB_DSN="root:muyu2026@tcp(muyu-mysql:3306)/muyu_wms?parseTime=true&charset=utf8mb4"
|
||
# export MUYU_SYSTEM_RPC_ADDR=muyu-system-rpc:9001
|
||
# export MUYU_INVENTORY_RPC_ADDR=muyu-inventory-rpc:9002
|
||
# 3. docker compose --profile integrated up
|
||
|
||
services:
|
||
mysql:
|
||
image: mysql:8.0
|
||
environment:
|
||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-muyu2026}
|
||
MYSQL_DATABASE: ${MYSQL_DATABASE:-muyu_wms}
|
||
TZ: Asia/Shanghai
|
||
ports:
|
||
- "${MYSQL_PORT:-3306}:3306"
|
||
volumes:
|
||
- mysql_data:/var/lib/mysql
|
||
- ../muyu-apiserver/deploy/mysql/init.sql:/docker-entrypoint-initdb.d/01-muyu.sql
|
||
- ./scripts/init-iloom.sql:/docker-entrypoint-initdb.d/02-iloom.sql
|
||
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
|
||
healthcheck:
|
||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-p${MYSQL_ROOT_PASSWORD:-muyu2026}"]
|
||
interval: 5s
|
||
timeout: 5s
|
||
retries: 10
|
||
|
||
gateway:
|
||
build:
|
||
context: .
|
||
dockerfile: gateway/Dockerfile
|
||
ports:
|
||
- "${GATEWAY_PORT:-8080}:8080"
|
||
environment:
|
||
- PORT=8080
|
||
- JWT_SECRET=${JWT_SECRET:-muyu-wms-jwt-secret-key-2026}
|
||
- AUTH_SERVICE_URL=http://auth-service:8081
|
||
- PURCHASER_SERVICE_URL=http://purchaser-service:8082
|
||
- TEXTILE_SERVICE_URL=http://textile-service:8083
|
||
- WASHING_SERVICE_URL=http://washing-service:8084
|
||
- ALLOW_ORIGINS=${ALLOW_ORIGINS:-http://localhost:3015}
|
||
depends_on:
|
||
auth-service:
|
||
condition: service_healthy
|
||
purchaser-service:
|
||
condition: service_healthy
|
||
textile-service:
|
||
condition: service_healthy
|
||
washing-service:
|
||
condition: service_healthy
|
||
|
||
auth-service:
|
||
build:
|
||
context: .
|
||
dockerfile: auth-service/Dockerfile
|
||
ports:
|
||
- "${AUTH_SERVICE_PORT:-8081}:8081"
|
||
environment:
|
||
- PORT=8081
|
||
- DB_DSN=${DB_DSN:-root:muyu2026@tcp(mysql:3306)/muyu_wms?parseTime=true&charset=utf8mb4}
|
||
- JWT_SECRET=${JWT_SECRET:-muyu-wms-jwt-secret-key-2026}
|
||
- JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET:-muyu-wms-jwt-refresh-2026}
|
||
- MUYU_SYSTEM_RPC_ADDR=${MUYU_SYSTEM_RPC_ADDR:-system-rpc:9001}
|
||
depends_on:
|
||
mysql:
|
||
condition: service_healthy
|
||
healthcheck:
|
||
test: ["CMD", "wget", "-qO-", "http://localhost:8081/health"]
|
||
interval: 10s
|
||
timeout: 3s
|
||
retries: 3
|
||
|
||
purchaser-service:
|
||
build:
|
||
context: .
|
||
dockerfile: purchaser-service/Dockerfile
|
||
ports:
|
||
- "${PURCHASER_SERVICE_PORT:-8082}:8082"
|
||
environment:
|
||
- PORT=8082
|
||
- DB_DSN=${DB_DSN:-root:muyu2026@tcp(mysql:3306)/muyu_wms?parseTime=true&charset=utf8mb4}
|
||
- INTERNAL_SERVICE_KEY=${INTERNAL_SERVICE_KEY:-internal-service-shared-secret}
|
||
- MUYU_INVENTORY_RPC_ADDR=${MUYU_INVENTORY_RPC_ADDR:-inventory-rpc:9002}
|
||
depends_on:
|
||
mysql:
|
||
condition: service_healthy
|
||
healthcheck:
|
||
test: ["CMD", "wget", "-qO-", "http://localhost:8082/health"]
|
||
interval: 10s
|
||
timeout: 3s
|
||
retries: 3
|
||
|
||
textile-service:
|
||
build:
|
||
context: .
|
||
dockerfile: textile-service/Dockerfile
|
||
ports:
|
||
- "${TEXTILE_SERVICE_PORT:-8083}:8083"
|
||
environment:
|
||
- PORT=8083
|
||
- DB_DSN=${DB_DSN:-root:muyu2026@tcp(mysql:3306)/muyu_wms?parseTime=true&charset=utf8mb4}
|
||
- INTERNAL_SERVICE_KEY=${INTERNAL_SERVICE_KEY:-internal-service-shared-secret}
|
||
- PURCHASER_SERVICE_URL=http://purchaser-service:8082
|
||
depends_on:
|
||
mysql:
|
||
condition: service_healthy
|
||
healthcheck:
|
||
test: ["CMD", "wget", "-qO-", "http://localhost:8083/health"]
|
||
interval: 10s
|
||
timeout: 3s
|
||
retries: 3
|
||
|
||
washing-service:
|
||
build:
|
||
context: .
|
||
dockerfile: washing-service/Dockerfile
|
||
ports:
|
||
- "${WASHING_SERVICE_PORT:-8084}:8084"
|
||
environment:
|
||
- PORT=8084
|
||
- DB_DSN=${DB_DSN:-root:muyu2026@tcp(mysql:3306)/muyu_wms?parseTime=true&charset=utf8mb4}
|
||
- INTERNAL_SERVICE_KEY=${INTERNAL_SERVICE_KEY:-internal-service-shared-secret}
|
||
- PURCHASER_SERVICE_URL=http://purchaser-service:8082
|
||
depends_on:
|
||
mysql:
|
||
condition: service_healthy
|
||
healthcheck:
|
||
test: ["CMD", "wget", "-qO-", "http://localhost:8084/health"]
|
||
interval: 10s
|
||
timeout: 3s
|
||
retries: 3
|
||
|
||
frontend:
|
||
build:
|
||
context: .
|
||
dockerfile: iloom-flatten/Dockerfile
|
||
ports:
|
||
- "${FRONTEND_PORT:-3015}:3015"
|
||
depends_on:
|
||
gateway:
|
||
condition: service_started
|
||
|
||
volumes:
|
||
mysql_data:
|