无限画布无限画布

生产部署与 Docker 回收

生产服务版本清单、窄部署和只读优先的 Docker 回收流程

当前正式画布:ecs110-us

ic.xshow.live 的权威运行位置是 ecs110-us,容器使用独立的 unix:///run/xcamshow-docker.sock 和 ic-canvas-* 命名。不要把本页下方针对旧 ecs110 Compose 的命令直接用于美国正式栈,也不要解除旧默认 Docker daemon 的 mask。先只读确认目标和现有镜像:

ssh ecs110-us 'docker -H unix:///run/xcamshow-docker.sock ps --filter name=ic-canvas --format "{{.Names}} {{.Image}}"'

正式更新顺序是:本地分支形成候选提交 → 在 ecs110 隔离目录验证同一候选 SHA → 推送 GZ GitHub → 在美国栈以该完整 SHA 构建或取得不可变镜像 → 保留旧镜像与完整运行环境 → 只更新受影响的 ic-canvas-* 服务 → 执行 scripts/verify-production-runtime.sh 对应的美国运行时检查与实际功能验收。美国 Web 的运行环境必须完整包含数据库、Redis、OAuth、VDE、DramaClaw、Media Worker 等绑定;只覆盖镜像的部分 Compose 文件不能替代完整环境。运行配置、回滚入口和验收记录见仓库中的 reports/canvas-us-cutover/VERIFICATION.md。

更新共享 Nginx 入口前持有 /run/lock/xcamshow-edge-config.lock,仅改 IC 的 server 块。生产容器操作只允许窄服务更新,不执行 down、--remove-orphans、-v 或 prune。部署后的容器镜像、源码 SHA、健康状态、公共域名功能和旧镜像回滚路径都核对通过后,才算完成。

旧 ecs110 Compose 清单(兼容参考)

权威版本清单

deploy/production-manifest.json 是各生产服务镜像和源码 SHA 的唯一版本清单。 deploy/compose.production-images.yml 必须由以下命令生成并校验:

python3 scripts/render-production-compose.py --output deploy/compose.production-images.yml
python3 scripts/render-production-compose.py --output deploy/compose.production-images.yml --check

不同服务允许使用不同的已验证 SHA,但每个差异都必须显式出现在 manifest 中。

单服务窄部署

先执行 dry-run:

PRODUCTION_RUNTIME_ENV=/path/to/runtime.env scripts/deploy-production-service.sh web --dry-run

验证候选提交后才执行单服务更新:

IC_PRODUCTION_DEPLOY_ACK=narrow-service-only \
PRODUCTION_RUNTIME_ENV=/path/to/runtime.env \
scripts/deploy-production-service.sh web --apply

脚本固定使用根 Compose、生产端口覆盖和一个 canonical image overlay,禁止继续叠加历史发布 overlay。它只执行 up -d --no-deps --no-build SERVICE,不执行 down、--remove-orphans、volume 或 prune 操作,并在更新后运行生产验收。

回滚时将 manifest 中该服务镜像恢复为上一个已验证镜像,重新生成 overlay,再对同一服务执行窄部署。

Docker 资产审计和回收

默认只读盘点:

python3 scripts/docker-maintenance.py audit > /path/to/inventory.json
python3 scripts/docker-maintenance.py plan --output /path/to/cleanup-plan.json

未显式传入 --allow-project 时,停止容器候选集合为空。生产保护项目即使显式传入也不会进入候选。计划文件内容决定确认哈希,Docker 状态或计划发生变化后需要重新审核。

执行分为三个独立阶段:build-cache、stopped-containers、images。脚本永远不删除 volume、network 或运行容器,也不调用 docker system prune、docker volume prune。

On this page