# asset_helper —— 正式环境一键编排 # # 使用: # 1. 复制 .env.example 为 .env,填入 JWT_SECRET 等敏感值 # 2. docker compose up -d --build # # 暴露端口(默认): # - 80/443 网关(对外) # - 20080 前端管理后台(对外) # 微服务、Postgres、Redis 仅在内部网络可达,不暴露宿主机端口。 name: asset-helper services: # ============ 数据层 ============ user-db: image: postgres:18.3-alpine3.23 container_name: user-db environment: - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?need POSTGRES_PASSWORD in .env} - POSTGRES_DB=user-db volumes: - user-postgres-data:/var/lib/postgresql/data - ./backend/services/user-service/migrations:/docker-entrypoint-initdb.d:ro networks: - asset-helper 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 volumes: - user-redis-data:/data networks: - asset-helper 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 environment: - RUST_LOG=${RUST_LOG:-info} - DATABASE_URL=postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD}@user-db:5432/user-db - REDIS_URL=redis://user-redis:6379/0 - SERVICE_NAME=user-service - SERVICE_PORT=8080 - JWT_SECRET=${JWT_SECRET:?need JWT_SECRET in .env} depends_on: user-db: condition: service_healthy user-redis: condition: service_healthy networks: - asset-helper restart: unless-stopped # ============ API 网关 ============ gateway: build: context: ./backend/gateway dockerfile: Dockerfile container_name: api-gateway ports: - "${GATEWAY_HTTP_PORT:-80}:80" - "${GATEWAY_HTTPS_PORT:-443}:443" depends_on: - user-service networks: - asset-helper 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 ports: - "${ADMIN_WEB_PORT:-20080}:80" depends_on: - gateway networks: - asset-helper restart: unless-stopped networks: asset-helper: name: asset-helper driver: bridge volumes: user-postgres-data: name: user-postgres-data user-redis-data: name: user-redis-data