name: canvashub services: sidecar: build: context: ../ dockerfile: docker/Dockerfile image: canvashub:latest container_name: canvashub-sidecar entrypoint: ["sidecar-entrypoint.sh"] ports: - "18080:18080" environment: - CHATGPT_POOL_HOST=0.0.0.0 - CHATGPT_POOL_AUTH_KEY=${CHATGPT_POOL_AUTH_KEY:-} volumes: - canvashub_data:/app/data command: > uvicorn sidecars.account_service:app --host 0.0.0.0 --port 18080 restart: unless-stopped server: build: context: ../ dockerfile: docker/Dockerfile image: canvashub:latest container_name: canvashub-server ports: - "18463:18463" environment: # settings.json 写入 volume 以持久化 - APP_SETTINGS_PATH=/app/data/settings.json # auth_key 由 entrypoint 生成写入 settings.json,env 可覆盖 - CHATGPT_POOL_AUTH_KEY=${CHATGPT_POOL_AUTH_KEY:-} # 访问密码 - MINIAPP_ACCESS_PASSWORD=${MINIAPP_ACCESS_PASSWORD:-} # Telegram(后端读取 CHAT_ID 而非 TELEGRAM_CHAT_ID) - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-} - CHAT_ID=${CHAT_ID:-} # 图片生成提供商 - COMFY_BASE_URL=${COMFY_BASE_URL:-} - THIRD_PARTY_IMAGE_API_KEY=${THIRD_PARTY_IMAGE_API_KEY:-} - THIRD_PARTY_IMAGE_API_BASE_URL=${THIRD_PARTY_IMAGE_API_BASE_URL:-} - GOOGLE_API_KEY=${GOOGLE_API_KEY:-} - GOOGLE_API_BASE_URL=${GOOGLE_API_BASE_URL:-} - NANO_BANANA_API_KEY=${NANO_BANANA_API_KEY:-} - NANO_BANANA_API_BASE_URL=${NANO_BANANA_API_BASE_URL:-} - CODEX_API_AUTH_FILE=${CODEX_API_AUTH_FILE:-} - CODEX_API_BASE=${CODEX_API_BASE:-} - SPELL_API_KEY=${SPELL_API_KEY:-} - SPELL_API_URL=${SPELL_API_URL:-} - PROMPT_SKILL_PROVIDER=${PROMPT_SKILL_PROVIDER:-} # 运行时 - MAX_CONCURRENT_TASKS=${MAX_CONCURRENT_TASKS:-} - COMFY_TASK_TIMEOUT_SECONDS=${COMFY_TASK_TIMEOUT_SECONDS:-} volumes: - canvashub_data:/app/data command: ["python", "server.py"] depends_on: - sidecar restart: unless-stopped volumes: canvashub_data: