services: postgres: image: postgres:18.3-alpine3.23 container_name: trade-postgres environment: POSTGRES_USER: trade POSTGRES_PASSWORD: trade POSTGRES_DB: futures volumes: - pgdata:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U trade -d futures"] interval: 5s timeout: 5s retries: 5 restart: unless-stopped logging: driver: json-file options: max-size: "10m" max-file: "3" tushare: image: registry.fishestlife.com/trade-tushare:latest container_name: trade-tushare env_file: ./tushare/.env environment: - DATABASE_URL=postgresql://trade:trade@postgres:5432/futures depends_on: postgres: condition: service_healthy ports: - "4001:8000" command: ["uvicorn", "src.api:app", "--host", "0.0.0.0", "--port", "8000"] restart: unless-stopped logging: driver: json-file options: max-size: "10m" max-file: "3" web: image: registry.fishestlife.com/trade-web:latest container_name: trade-web env_file: ./web/backend/.env environment: - LISTEN_ADDR=:8080 - DATABASE_URL=postgres://trade:trade@postgres:5432/futures?sslmode=disable - AUTH_DB_PATH=/app/auth/auth.db depends_on: - postgres ports: - "4000:8080" volumes: - ./data:/app/auth restart: unless-stopped logging: driver: json-file options: max-size: "10m" max-file: "3" volumes: pgdata: