109 lines
4.0 KiB
YAML
109 lines
4.0 KiB
YAML
services:
|
|
init-config:
|
|
image: python:3.13-alpine
|
|
container_name: chatgpt2api-warp-init
|
|
working_dir: /app
|
|
volumes:
|
|
- ./config.json:/app/config.json
|
|
- ./scripts:/app/scripts:ro
|
|
environment:
|
|
CHATGPT2API_CONFIG_FILE: /app/config.json
|
|
CHATGPT2API_PROXY_RUNTIME_ENABLED: ${CHATGPT2API_PROXY_RUNTIME_ENABLED:-true}
|
|
CHATGPT2API_PROXY_RUNTIME_EGRESS_MODE: ${CHATGPT2API_PROXY_RUNTIME_EGRESS_MODE:-single_proxy}
|
|
CHATGPT2API_PROXY_RUNTIME_PROXY_URL: ${CHATGPT2API_PROXY_RUNTIME_PROXY_URL:-http://privoxy:8118}
|
|
CHATGPT2API_PROXY_RUNTIME_RESOURCE_PROXY_URL: ${CHATGPT2API_PROXY_RUNTIME_RESOURCE_PROXY_URL:-}
|
|
CHATGPT2API_PROXY_RUNTIME_SKIP_SSL_VERIFY: ${CHATGPT2API_PROXY_RUNTIME_SKIP_SSL_VERIFY:-false}
|
|
CHATGPT2API_PROXY_RUNTIME_RESET_STATUS_CODES: ${CHATGPT2API_PROXY_RUNTIME_RESET_STATUS_CODES:-403}
|
|
CHATGPT2API_PROXY_RUNTIME_CLEARANCE_ENABLED: ${CHATGPT2API_PROXY_RUNTIME_CLEARANCE_ENABLED:-true}
|
|
CHATGPT2API_PROXY_RUNTIME_CLEARANCE_MODE: ${CHATGPT2API_PROXY_RUNTIME_CLEARANCE_MODE:-flaresolverr}
|
|
CHATGPT2API_PROXY_RUNTIME_CLEARANCE_TIMEOUT_SEC: ${CHATGPT2API_PROXY_RUNTIME_CLEARANCE_TIMEOUT_SEC:-60}
|
|
CHATGPT2API_PROXY_RUNTIME_CLEARANCE_REFRESH_INTERVAL: ${CHATGPT2API_PROXY_RUNTIME_CLEARANCE_REFRESH_INTERVAL:-3600}
|
|
CHATGPT2API_PROXY_RUNTIME_WARM_UP_ON_START: ${CHATGPT2API_PROXY_RUNTIME_WARM_UP_ON_START:-false}
|
|
CHATGPT2API_PROXY_RUNTIME_BROWSER: ${CHATGPT2API_PROXY_RUNTIME_BROWSER:-chrome}
|
|
CHATGPT2API_PROXY_RUNTIME_USER_AGENT: ${CHATGPT2API_PROXY_RUNTIME_USER_AGENT:-}
|
|
CHATGPT2API_FLARESOLVERR_URL: ${CHATGPT2API_FLARESOLVERR_URL:-http://flaresolverr:8191}
|
|
command: ["python3", "/app/scripts/init_proxy_config.py"]
|
|
restart: "no"
|
|
|
|
warp-proxy:
|
|
image: caomingjun/warp:latest
|
|
container_name: chatgpt2api-warp-proxy
|
|
restart: unless-stopped
|
|
environment:
|
|
WARP_SLEEP: "2"
|
|
# 可选:填写 Cloudflare WARP+ License Key
|
|
# WARP_LICENSE_KEY: ${WARP_LICENSE_KEY:-}
|
|
cap_add:
|
|
- NET_ADMIN
|
|
- SYS_MODULE
|
|
sysctls:
|
|
net.ipv6.conf.all.disable_ipv6: 0
|
|
net.ipv4.conf.all.src_valid_mark: 1
|
|
ports:
|
|
- "127.0.0.1:${WARP_SOCKS_PORT:-40000}:1080"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "python3 -c \"import socket; s=socket.create_connection(('127.0.0.1', 1080), 5); s.close()\""]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
privoxy:
|
|
image: vimagick/privoxy:latest
|
|
container_name: chatgpt2api-privoxy
|
|
restart: unless-stopped
|
|
depends_on:
|
|
warp-proxy:
|
|
condition: service_started
|
|
volumes:
|
|
- ./scripts/privoxy-warp.conf:/etc/privoxy/config:ro
|
|
ports:
|
|
- "127.0.0.1:${PRIVOXY_PORT:-40080}:8118"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "nc -z 127.0.0.1 8118 || exit 1"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
|
|
flaresolverr:
|
|
image: ghcr.io/flaresolverr/flaresolverr:latest
|
|
container_name: chatgpt2api-flaresolverr
|
|
restart: unless-stopped
|
|
environment:
|
|
LOG_LEVEL: ${FLARESOLVERR_LOG_LEVEL:-info}
|
|
TZ: ${TZ:-Asia/Shanghai}
|
|
ports:
|
|
- "127.0.0.1:${FLARESOLVERR_PORT:-8191}:8191"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8191/ >/dev/null"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
app:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
image: chatgpt2api:warp
|
|
container_name: chatgpt2api-warp
|
|
restart: unless-stopped
|
|
depends_on:
|
|
init-config:
|
|
condition: service_completed_successfully
|
|
privoxy:
|
|
condition: service_started
|
|
flaresolverr:
|
|
condition: service_started
|
|
ports:
|
|
- "${CHATGPT2API_PORT:-3000}:80"
|
|
volumes:
|
|
- ./data:/app/data
|
|
- ./config.json:/app/config.json
|
|
environment:
|
|
STORAGE_BACKEND: ${STORAGE_BACKEND:-json}
|
|
DATABASE_URL: ${DATABASE_URL:-}
|
|
CHATGPT2API_AUTH_KEY: ${CHATGPT2API_AUTH_KEY:-}
|
|
CHATGPT2API_BASE_URL: ${CHATGPT2API_BASE_URL:-}
|