Files
ttstd-infinite-canvas/docker-compose.deploy.yml
ddcat666 b2184a6e4a fix(deploy): 在线更新 - 兼容旧版 Host Updater 升级到独立 Agent 容器
v1.5.8.x 的 Host Updater 只注入 backend/web 镜像且不生成 Agent Token,目标 Compose 强制要求 CANVAS_YINGCE_AGENT_IMAGE 与 YINGCE_AGENT_TOKEN 导致预检失败。部署 Compose 缺省时回退到同版本 Agent 镜像标签与更新器 Token,新版更新器后续更新仍写入 digest 与独立 Token;拉取阶段同时拉取 yingce-agent 镜像,避免摘要校验找不到本地镜像。
2026-09-30 14:39:55 +08:00

113 lines
4.2 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_DB: ${POSTGRES_DB:-open_ai_canvas}
POSTGRES_USER: ${POSTGRES_USER:-open_ai_canvas}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?请先运行一键部署脚本生成数据库密码}
volumes:
- ${CANVAS_POSTGRES_DATA_PATH:-postgres-data}:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 10
restart: unless-stopped
redis:
image: redis:7.4-alpine
command: ["redis-server", "--appendonly", "yes", "--appendfsync", "everysec"]
volumes:
- ${CANVAS_REDIS_DATA_PATH:-redis-data}:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 10
restart: unless-stopped
migrate:
image: ${CANVAS_BACKEND_IMAGE:?请先配置 CANVAS_BACKEND_IMAGE(必须包含镜像 digest)}
entrypoint: ["migrate-schema"]
command: ["up"]
environment:
CANVAS_BACKEND_DATA_DIR: /data
CANVAS_DATABASE_DRIVER: postgres
DATABASE_URL: ${DATABASE_URL:?请先运行一键部署脚本生成数据库连接}
depends_on:
postgres:
condition: service_healthy
yingce-agent:
# 让旧更新器也能完成本次升级;新版更新器在后续更新中会固定为镜像 digest。
image: ${CANVAS_YINGCE_AGENT_IMAGE:-ghcr.io/ddcat-ai/open-ai-canvas-yingce-agent:${CANVAS_IMAGE_TAG:?请先配置 CANVAS_IMAGE_TAG}}
environment:
YINGCE_AGENT_TOKEN: ${YINGCE_AGENT_TOKEN:-${CANVAS_UPDATER_TOKEN:?请先配置 YINGCE_AGENT_TOKEN}}
MAX_CONCURRENT_SESSIONS: ${YINGCE_AGENT_MAX_SESSIONS:-30}
NODE_MAX_OLD_SPACE_SIZE: ${YINGCE_AGENT_NODE_MEMORY_MB:-512}
healthcheck:
test: ["CMD", "wget", "-qO-", "http://127.0.0.1:8081/healthz"]
interval: 10s
timeout: 3s
retries: 10
start_period: 10s
restart: unless-stopped
backend:
image: ${CANVAS_BACKEND_IMAGE:?请先配置 CANVAS_BACKEND_IMAGE(必须包含镜像 digest)}
environment:
CANVAS_BACKEND_ADDR: ":8080"
CANVAS_BACKEND_DATA_DIR: /data
CANVAS_AUTO_MIGRATE: "false"
CANVAS_SHUTDOWN_TIMEOUT: ${CANVAS_SHUTDOWN_TIMEOUT:-10m}
CANVAS_DATABASE_DRIVER: postgres
DATABASE_URL: ${DATABASE_URL:?请先运行一键部署脚本生成数据库连接}
REDIS_URL: redis://redis:6379/0
CANVAS_WORKER_CONCURRENCY: ${CANVAS_WORKER_CONCURRENCY:-3}
CANVAS_CHANNEL_CONCURRENCY: ${CANVAS_CHANNEL_CONCURRENCY:-3}
CANVAS_REGISTRATION_ENABLED: ${CANVAS_REGISTRATION_ENABLED:-false}
CANVAS_ALLOW_PRIVATE_UPSTREAMS: ${CANVAS_ALLOW_PRIVATE_UPSTREAMS:-false}
CANVAS_ALLOWED_PRIVATE_UPSTREAM_HOSTS: ${CANVAS_ALLOWED_PRIVATE_UPSTREAM_HOSTS:-}
CANVAS_CORS_ORIGINS: ${CANVAS_CORS_ORIGINS:-}
CANVAS_PUBLIC_BASE_URL: ${CANVAS_PUBLIC_BASE_URL:-}
CANVAS_UPDATER_SOCKET: /run/open-ai-canvas-updater/updater.sock
CANVAS_UPDATER_TOKEN: ${CANVAS_UPDATER_TOKEN:-}
YINGCE_AGENT_URL: http://yingce-agent:8081
YINGCE_AGENT_TOKEN: ${YINGCE_AGENT_TOKEN:-${CANVAS_UPDATER_TOKEN:?请先配置 YINGCE_AGENT_TOKEN}}
YINGCE_AGENT_BRIDGE_HOST: backend
CANVAS_LOG_LEVEL: ${CANVAS_LOG_LEVEL:-info}
CANVAS_LOG_FORMAT: ${CANVAS_LOG_FORMAT:-text}
GIN_MODE: release
volumes:
- ${CANVAS_DATA_PATH:-backend-data}:/data
- ${CANVAS_UPDATER_SOCKET_DIR:-/run/open-ai-canvas-updater}:/run/open-ai-canvas-updater
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
migrate:
condition: service_completed_successfully
yingce-agent:
condition: service_healthy
restart: unless-stopped
stop_grace_period: ${CANVAS_SHUTDOWN_TIMEOUT:-10m}
web:
image: ${CANVAS_WEB_IMAGE:?请先配置 CANVAS_WEB_IMAGE(必须包含镜像 digest)}
ports:
- "${CANVAS_HTTP_PORT:-3000}:3000"
volumes:
# Keep hashed chunks from the current and previous web releases for old tabs.
- ${CANVAS_WEB_DATA_PATH:-web-data}:/usr/share/nginx/html
depends_on:
backend:
condition: service_healthy
restart: unless-stopped
volumes:
backend-data:
postgres-data:
redis-data:
web-data: