services: backend: build: context: ./backend dockerfile: Dockerfile args: - USE_CHINA_MIRROR=${USE_CHINA_MIRROR:-false} container_name: preset-market-backend ports: - "${PORT:-8000}:8000" env_file: - .env environment: - DATABASE_URL=sqlite+aiosqlite:///./preset_market.db - HOST=0.0.0.0 - PORT=8000 - UPLOAD_DIR=/app/uploads volumes: - ./backend/uploads:/app/uploads - ./backend/preset_market.db:/app/preset_market.db - ${PLUGIN_DATA_DIR:-./plugin_data}:/app/plugin_data:ro restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s frontend: build: context: ./frontend dockerfile: Dockerfile args: - VITE_API_URL=${VITE_API_URL:-http://localhost:8000} - USE_CHINA_MIRROR=${USE_CHINA_MIRROR:-false} container_name: preset-market-frontend ports: - "${FRONTEND_PORT:-5173}:80" depends_on: backend: condition: service_healthy restart: unless-stopped healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"] interval: 30s timeout: 10s retries: 3