# HSAP — Huaxu Sentinel Active Safety Platform # 用法: # docker compose up -d # 仅平台 # docker compose -f docker-compose.yml -f docker-compose.cvat.yml up -d # 平台 + CVAT 标注引擎 name: hsap x-platform-env: &platform-env AS_DB_HOST: postgres AS_DB_PORT: "5432" AS_DB_USER: as_platform AS_DB_PASSWORD: as_platform AS_DB_NAME: as_platform AS_REDIS_URL: redis://redis:6379/0 AS_JOB_EXECUTOR: worker AS_DEV_AUTH: "true" AS_FORCE_DEV_AUTH: "true" AS_JWT_SECRET: dev-docker-secret AS_FRONTEND_URL: http://127.0.0.1:8787 FEISHU_REDIRECT_URI: http://127.0.0.1:8787/api/v1/auth/feishu/callback # 容器内 workspace 挂载点(宿主机路径由 compose volumes 的 AS_WORKSPACE_ROOT 决定) AS_WORKSPACE_ROOT: /data/workspace AS_DATA_LAKE_ROOT: /data/data # CVAT 标注引擎(合并 docker-compose.cvat.yml 时生效;无需 CVAT 账号) CVAT_HOST: ${CVAT_HOST:-http://hsap-cvat-server:8080} CVAT_PUBLIC_URL: ${CVAT_PUBLIC_URL:-http://127.0.0.1:8080} x-platform-volumes: &platform-volumes - .:/data/hsap - ${AS_WORKSPACE_ROOT:-./.workspace-stub}:/data/workspace:ro - ${AS_DATA_LAKE_HOST:-../data}:/data/data services: postgres: image: postgres:16-alpine container_name: hsap-postgres restart: unless-stopped environment: POSTGRES_USER: as_platform POSTGRES_PASSWORD: as_platform POSTGRES_DB: as_platform ports: - "${AS_DB_PORT:-5432}:5432" volumes: - hsap_pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U as_platform -d as_platform"] interval: 5s timeout: 5s retries: 8 networks: default: aliases: - postgres redis: image: redis:7-alpine container_name: hsap-redis restart: unless-stopped ports: - "${AS_REDIS_PORT:-6379}:6379" volumes: - hsap_redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 8 networks: default: aliases: - redis platform: build: context: . dockerfile: Dockerfile container_name: hsap-platform restart: unless-stopped env_file: - manifests/feishu.env ports: - "${AS_PLATFORM_PORT:-8787}:8787" environment: <<: *platform-env volumes: *platform-volumes depends_on: postgres: condition: service_healthy redis: condition: service_healthy worker: build: context: . dockerfile: Dockerfile container_name: hsap-worker restart: unless-stopped env_file: - manifests/feishu.env environment: <<: *platform-env volumes: *platform-volumes command: ["python", "scripts/worker.py"] depends_on: platform: condition: service_started postgres: condition: service_healthy redis: condition: service_healthy # 可选:S3 兼容暂存(联调)— docker compose --profile minio up -d minio: image: minio/minio:latest container_name: hsap-minio profiles: ["minio"] restart: unless-stopped command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin_change_me} ports: - "${MINIO_API_PORT:-9000}:9000" - "${MINIO_CONSOLE_PORT:-9001}:9001" volumes: - hsap_minio_data:/data healthcheck: test: ["CMD", "curl", "-f", "http://127.0.0.1:9000/minio/health/live"] interval: 15s timeout: 5s retries: 5 start_period: 15s minio-init: image: minio/mc:latest container_name: hsap-minio-init profiles: ["minio"] depends_on: minio: condition: service_healthy environment: MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin_change_me} MINIO_BUCKET: ${MINIO_BUCKET:-hsap-staging} entrypoint: > /bin/sh -c " mc alias set local http://minio:9000 $$MINIO_ROOT_USER $$MINIO_ROOT_PASSWORD && mc mb -p local/$$MINIO_BUCKET || true && mc anonymous set download local/$$MINIO_BUCKET || true " restart: "no" volumes: hsap_pgdata: hsap_redis: hsap_minio_data: