| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| services: |
| sub2api: |
| image: weishaw/sub2api:latest |
| container_name: sub2api |
| restart: unless-stopped |
| ulimits: |
| nofile: |
| soft: 100000 |
| hard: 100000 |
| ports: |
| - "${BIND_HOST:-0.0.0.0}:${SERVER_PORT:-8080}:8080" |
| volumes: |
| - sub2api_data:/app/data |
| extra_hosts: |
| - "host.docker.internal:host-gateway" |
| environment: |
| |
| |
| |
| - AUTO_SETUP=true |
|
|
| |
| |
| |
| - SERVER_HOST=0.0.0.0 |
| - SERVER_PORT=8080 |
| - SERVER_MODE=${SERVER_MODE:-release} |
| - RUN_MODE=${RUN_MODE:-standard} |
|
|
| |
| |
| |
| - DATABASE_HOST=${DATABASE_HOST:?DATABASE_HOST is required} |
| - DATABASE_PORT=${DATABASE_PORT:-5432} |
| - DATABASE_USER=${DATABASE_USER:-sub2api} |
| - DATABASE_PASSWORD=${DATABASE_PASSWORD:?DATABASE_PASSWORD is required} |
| - DATABASE_DBNAME=${DATABASE_DBNAME:-sub2api} |
| - DATABASE_SSLMODE=${DATABASE_SSLMODE:-disable} |
| - DATABASE_MAX_OPEN_CONNS=${DATABASE_MAX_OPEN_CONNS:-50} |
| - DATABASE_MAX_IDLE_CONNS=${DATABASE_MAX_IDLE_CONNS:-10} |
| - DATABASE_CONN_MAX_LIFETIME_MINUTES=${DATABASE_CONN_MAX_LIFETIME_MINUTES:-30} |
| - DATABASE_CONN_MAX_IDLE_TIME_MINUTES=${DATABASE_CONN_MAX_IDLE_TIME_MINUTES:-5} |
|
|
| |
| |
| |
| - REDIS_HOST=${REDIS_HOST:?REDIS_HOST is required} |
| - REDIS_PORT=${REDIS_PORT:-6379} |
| - REDIS_PASSWORD=${REDIS_PASSWORD:-} |
| - REDIS_DB=${REDIS_DB:-0} |
| - REDIS_POOL_SIZE=${REDIS_POOL_SIZE:-1024} |
| - REDIS_MIN_IDLE_CONNS=${REDIS_MIN_IDLE_CONNS:-10} |
| - REDIS_ENABLE_TLS=${REDIS_ENABLE_TLS:-false} |
|
|
| |
| |
| |
| - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@sub2api.local} |
| - ADMIN_PASSWORD=${ADMIN_PASSWORD:-} |
|
|
| |
| |
| |
| - JWT_SECRET=${JWT_SECRET:-} |
| - JWT_EXPIRE_HOUR=${JWT_EXPIRE_HOUR:-24} |
|
|
| |
| |
| |
| - TZ=${TZ:-Asia/Shanghai} |
|
|
| |
| |
| |
| - GEMINI_OAUTH_CLIENT_ID=${GEMINI_OAUTH_CLIENT_ID:-} |
| - GEMINI_OAUTH_CLIENT_SECRET=${GEMINI_OAUTH_CLIENT_SECRET:-} |
| - GEMINI_OAUTH_SCOPES=${GEMINI_OAUTH_SCOPES:-} |
| - GEMINI_QUOTA_POLICY=${GEMINI_QUOTA_POLICY:-} |
|
|
| |
| |
| - GEMINI_CLI_OAUTH_CLIENT_SECRET=${GEMINI_CLI_OAUTH_CLIENT_SECRET:-} |
| - ANTIGRAVITY_OAUTH_CLIENT_SECRET=${ANTIGRAVITY_OAUTH_CLIENT_SECRET:-} |
| - ANTIGRAVITY_USER_AGENT_VERSION=${ANTIGRAVITY_USER_AGENT_VERSION:-} |
|
|
| |
| |
| |
| |
| - GATEWAY_OPENAI_RESPONSE_HEADER_TIMEOUT=${GATEWAY_OPENAI_RESPONSE_HEADER_TIMEOUT:-0} |
| - GATEWAY_OPENAI_HTTP2_ENABLED=${GATEWAY_OPENAI_HTTP2_ENABLED:-true} |
| - GATEWAY_OPENAI_HTTP2_ALLOW_PROXY_FALLBACK_TO_HTTP1=${GATEWAY_OPENAI_HTTP2_ALLOW_PROXY_FALLBACK_TO_HTTP1:-true} |
| - GATEWAY_OPENAI_HTTP2_FALLBACK_ERROR_THRESHOLD=${GATEWAY_OPENAI_HTTP2_FALLBACK_ERROR_THRESHOLD:-2} |
| - GATEWAY_OPENAI_HTTP2_FALLBACK_WINDOW_SECONDS=${GATEWAY_OPENAI_HTTP2_FALLBACK_WINDOW_SECONDS:-60} |
| - GATEWAY_OPENAI_HTTP2_FALLBACK_TTL_SECONDS=${GATEWAY_OPENAI_HTTP2_FALLBACK_TTL_SECONDS:-600} |
| - GATEWAY_IMAGE_STREAM_DATA_INTERVAL_TIMEOUT=${GATEWAY_IMAGE_STREAM_DATA_INTERVAL_TIMEOUT:-900} |
| - GATEWAY_IMAGE_STREAM_KEEPALIVE_INTERVAL=${GATEWAY_IMAGE_STREAM_KEEPALIVE_INTERVAL:-10} |
| - GATEWAY_IMAGE_CONCURRENCY_ENABLED=${GATEWAY_IMAGE_CONCURRENCY_ENABLED:-false} |
| - GATEWAY_IMAGE_CONCURRENCY_MAX_CONCURRENT_REQUESTS=${GATEWAY_IMAGE_CONCURRENCY_MAX_CONCURRENT_REQUESTS:-0} |
| - GATEWAY_IMAGE_CONCURRENCY_OVERFLOW_MODE=${GATEWAY_IMAGE_CONCURRENCY_OVERFLOW_MODE:-reject} |
| - GATEWAY_IMAGE_CONCURRENCY_WAIT_TIMEOUT_SECONDS=${GATEWAY_IMAGE_CONCURRENCY_WAIT_TIMEOUT_SECONDS:-30} |
| - GATEWAY_IMAGE_CONCURRENCY_MAX_WAITING_REQUESTS=${GATEWAY_IMAGE_CONCURRENCY_MAX_WAITING_REQUESTS:-100} |
| healthcheck: |
| test: ["CMD", "wget", "-q", "-T", "5", "-O", "/dev/null", "http://localhost:8080/health"] |
| interval: 30s |
| timeout: 10s |
| retries: 3 |
| start_period: 30s |
|
|
| volumes: |
| sub2api_data: |
| driver: local |
|
|