name: ${COMPOSE_PROJECT_NAME:-zhixing-system} services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${ZHIXING_POSTGRES_DB:-zhixing} POSTGRES_PASSWORD: ${ZHIXING_POSTGRES_PASSWORD:-zhixing} POSTGRES_USER: ${ZHIXING_POSTGRES_USER:-zhixing} healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 volumes: - postgres-data:/var/lib/postgresql/data server: build: context: ./zhixing-server target: production depends_on: postgres: condition: service_healthy restart: unless-stopped environment: ZHIXING_APP_ENV: production ZHIXING_DATABASE_URL: ${ZHIXING_DATABASE_URL:-postgresql://zhixing:zhixing@postgres:5432/zhixing} ZHIXING_LOG_LEVEL: ${ZHIXING_LOG_LEVEL:-INFO} ZHIXING_MARKET_DATA_CSV_ROOT: /app/data/market-data ZHIXING_TUSHARE_TOKEN: ${ZHIXING_TUSHARE_TOKEN:-} init: true expose: - "8000" healthcheck: test: - CMD - python - -c - "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/healthz')" interval: 30s timeout: 5s retries: 3 start_period: 10s volumes: - market-data:/app/data/market-data web: build: context: ./zhixing-web target: production restart: unless-stopped depends_on: server: condition: service_healthy environment: API_UPSTREAM: http://server:8000 init: true ports: - "127.0.0.1:${ZHIXING_WEB_PORT:-8111}:80" migrate: profiles: ["jobs"] build: context: ./zhixing-server target: production command: ["alembic", "upgrade", "head"] depends_on: postgres: condition: service_healthy environment: ZHIXING_DATABASE_URL: ${ZHIXING_DATABASE_URL:-postgresql://zhixing:zhixing@postgres:5432/zhixing} market-sync: profiles: ["jobs"] build: context: ./zhixing-server target: production command: ["market-data-sync"] depends_on: migrate: condition: service_completed_successfully environment: ZHIXING_DATABASE_URL: ${ZHIXING_DATABASE_URL:-postgresql://zhixing:zhixing@postgres:5432/zhixing} ZHIXING_MARKET_DATA_CSV_ROOT: /app/data/market-data ZHIXING_TUSHARE_TOKEN: ${ZHIXING_TUSHARE_TOKEN:-} volumes: - market-data:/app/data/market-data volumes: market-data: postgres-data: