# asset_helper —— 测试环境一键编排 # # 使用: # docker compose -f docker-compose.dev.yml up -d --build # # 与正式环境的差异: # 1. 项目名 / 容器名 / 网络 / 数据卷 全部带 -dev 后缀,与正式完全隔离 # 2. 微服务、Postgres、Redis 端口全部暴露宿主机,便于调试 # 3. 网关、前端使用不同对外端口,可与正式环境同机并存 # 4. 敏感值(JWT_SECRET、POSTGRES_PASSWORD)提供默认值,方便快速启动 name: asset-helper-dev services: # ============ 数据层 ============ user-db: image: postgres:18.3-alpine3.23 container_name: user-db-dev environment: - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} - POSTGRES_DB=user-db volumes: - user-postgres-data-dev:/var/lib/postgresql/data - ./backend/services/user-service/migrations:/docker-entrypoint-initdb.d:ro ports: - "${USER_POSTGRES_PORT:-20101}:5432" networks: - asset-helper-dev restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres} -d user-db"] interval: 10s timeout: 5s retries: 5 user-redis: image: redis:8.6.2-alpine container_name: user-redis-dev volumes: - user-redis-data-dev:/data ports: - "${USER_REDIS_PORT:-20103}:6379" networks: - asset-helper-dev restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 # ============ 用户微服务 ============ user-service: build: context: ./backend dockerfile: services/user-service/Dockerfile container_name: user-service-dev environment: - RUST_LOG=${RUST_LOG:-debug} - DATABASE_URL=postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@user-db:5432/user-db - REDIS_URL=redis://user-redis:6379/0 - SERVICE_NAME=user-service - SERVICE_PORT=8080 - JWT_SECRET=${JWT_SECRET:-dev-secret-key} ports: - "${USER_SERVICE_PORT:-20110}:8080" depends_on: user-db: condition: service_healthy user-redis: condition: service_healthy networks: - asset-helper-dev restart: unless-stopped # ============ API 网关 ============ gateway: build: context: ./backend/gateway dockerfile: Dockerfile container_name: api-gateway-dev ports: - "${GATEWAY_HTTP_PORT:-18080}:80" - "${GATEWAY_HTTPS_PORT:-18443}:443" depends_on: - user-service networks: - asset-helper-dev restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s timeout: 3s start_period: 5s retries: 3 # ============ 前端管理后台 ============ admin-web: build: context: ./frontend dockerfile: docker/Dockerfile container_name: asset-helper-admin-dev ports: - "${ADMIN_WEB_PORT:-18888}:80" depends_on: - gateway networks: - asset-helper-dev restart: unless-stopped networks: asset-helper-dev: name: asset-helper-dev driver: bridge volumes: user-postgres-data-dev: name: user-postgres-data-dev user-redis-data-dev: name: user-redis-data-dev