services: redis: image: redis:7-alpine container_name: gptgrok2api-go-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes"] volumes: - ./data/redis:/data app: build: context: . dockerfile: Dockerfile.golang image: ${CHATGPT2API_GO_IMAGE:-gptgrok2api-go:local} container_name: gptgrok2api-go restart: unless-stopped ports: - "${CHATGPT2API_GO_PORT:-3000}:80" volumes: - ./data:/app/data - ./logs:/app/logs environment: CHATGPT2API_AUTH_KEY: ${CHATGPT2API_AUTH_KEY:-} CHATGPT2API_ADMIN_KEY: ${CHATGPT2API_ADMIN_KEY:-} GO_CONFIG_PATH: ${GO_CONFIG_PATH:-/app/data/config.json} GO_UPSTREAM_URL: ${GO_UPSTREAM_URL:-} GO_UPSTREAM_API_KEY: ${GO_UPSTREAM_API_KEY:-} GO_PUBLIC_BASE_URL: ${GO_PUBLIC_BASE_URL:-} GO_QUEUE_BACKEND: ${GO_QUEUE_BACKEND:-redis} GO_REDIS_ADDR: ${GO_REDIS_ADDR:-redis:6379} TZ: ${TZ:-Asia/Shanghai} networks: default: upstream: aliases: - gptgrok2api-go image-queue-redis: image: redis:7.4-alpine container_name: chatgpt2api-image-queue-redis restart: unless-stopped command: ["redis-server", "--appendonly", "yes", "--appendfsync", "everysec", "--maxmemory", "2gb", "--maxmemory-policy", "noeviction"] volumes: - ./data/go-image-redis:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 image-gateway: build: context: ./go-image-gateway image: chatgpt2api/go-image-gateway:local container_name: chatgpt2api-image-gateway restart: unless-stopped depends_on: image-queue-redis: condition: service_healthy app: condition: service_started environment: IMAGE_GATEWAY_REDIS_ADDR: image-queue-redis:6379 IMAGE_GATEWAY_BACKEND_URL: http://app/v1/images/generations IMAGE_GATEWAY_SCHEDULER_URL: http://app/internal/image-scheduler IMAGE_GATEWAY_MONITOR_URL: http://app/internal/image-monitor IMAGE_GATEWAY_LOG_URL: http://app/internal/logs/call IMAGE_GATEWAY_SCHEDULER_KEY: ${IMAGE_SCHEDULER_INTERNAL_KEY:-} IMAGE_GATEWAY_AUTH_KEYS_FILE: /etc/image-gateway/auth_keys.json IMAGE_GATEWAY_AUTH_KEY: ${CHATGPT2API_AUTH_KEY:-} # Defaults sized for a small host; raise workers for higher throughput. IMAGE_GATEWAY_WORKERS: ${IMAGE_GATEWAY_WORKERS:-8} IMAGE_GATEWAY_QUEUE_CAPACITY: ${IMAGE_GATEWAY_QUEUE_CAPACITY:-1000} IMAGE_GATEWAY_BACKEND_TIMEOUT_SECS: ${IMAGE_GATEWAY_BACKEND_TIMEOUT_SECS:-900} IMAGE_GATEWAY_TASK_TTL_SECS: ${IMAGE_GATEWAY_TASK_TTL_SECS:-86400} IMAGE_GATEWAY_MAX_ATTEMPTS: ${IMAGE_GATEWAY_MAX_ATTEMPTS:-1} # 25 MiB accepts typical image requests while limiting memory pressure. IMAGE_GATEWAY_MAX_BODY_MB: ${IMAGE_GATEWAY_MAX_BODY_MB:-25} ports: - "127.0.0.1:${IMAGE_GATEWAY_PORT:-3001}:8080" volumes: - ./data/auth_keys.json:/etc/image-gateway/auth_keys.json:ro networks: default: aliases: - image-gateway healthcheck: test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8080/health"] interval: 10s timeout: 3s retries: 5 networks: upstream: external: true name: gptgrok2api_default