From a55d2bcf4b50aff5977759a7faa2a7709b78f7a2 Mon Sep 17 00:00:00 2001 From: host Date: Mon, 26 Oct 2026 10:36:42 +0800 Subject: [PATCH] Production docker tasks: --docker-runtime runsc in autoscaler unit One-off worker verification passed before this flip (2026-10-26): production-shaped docker task (apparmor=docker-codex, pids-limit 512, tenant isolation, egress proxy 8888, --docker-runtime runsc) completed in 60s with gpt-6.1-sol, worktree quadruple + proof verified, template and tenant repo copies clean. README now states the production state. --- cloud/README.md | 4 +++- deploy/autoscaler/codex-autoscaler.service | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cloud/README.md b/cloud/README.md index 4b92002..8797beb 100644 --- a/cloud/README.md +++ b/cloud/README.md @@ -500,7 +500,9 @@ interrupted 且终态任务 cancel 返回 400、心跳后 sweep 不扫刚心跳 `--docker-pids-limit`(默认 512,防 fork 炸弹); `--docker-runtime`(不传 = docker 默认 runc;传 `runsc` = 任务容器走 gVisor syscall 沙箱,需 daemon 已注册该 runtime, - 否则起容器失败;生产切换前须经一次性 worker 模型任务验证); + 否则起容器失败;生产 autoscaler 已配 runsc:2026-10-26 + 一次性 worker 模型任务验证通过,60 秒 completed, + AppArmor docker-codex + 租户隔离 + egress 代理组合可用); `--egress-proxy-port`(0 = 不启用;生产配 8888):启用后 Docker 任务容器的 HTTP(S) 出口全部走宿主上的 Tinyproxy (见 `deploy/egress/`:FilterDefaultDeny 白名单,只放行 diff --git a/deploy/autoscaler/codex-autoscaler.service b/deploy/autoscaler/codex-autoscaler.service index 0123e3f..a2e3918 100644 --- a/deploy/autoscaler/codex-autoscaler.service +++ b/deploy/autoscaler/codex-autoscaler.service @@ -14,7 +14,7 @@ EnvironmentFile=/etc/codex-app-server/env # scaler 会按实例强制追加;--db 只给 scaler,scaler 会补给 worker。 # 注意:启用 autoscaler 后必须停掉静态 codex-cloud-worker, # 否则两边同时派任务(scaler 只管理 autoscale-* 实例)。 -ExecStart=/usr/bin/python3 -m cloud.autoscaler --db /var/lib/codex-app-server/control.db --interval 30 --min-workers 1 --max-workers 2 --per-worker-capacity 2 --scale-down-after 3 --drain-timeout 60 --state-file /var/lib/codex-app-server/autoscaler-state.json --log-dir /var/lib/codex-app-server/autoscaler-logs -- --interval 10 --config /opt/codex-app-server/host-config-docker.json --executor docker --docker-image codex-app-server:latest --docker-user 1003:1004 --docker-cpus 2 --docker-memory 2g --docker-extra-mounts /opt/codex-app-server/work:/app/work,/var/lib/codex-app-server/codex-home:/var/lib/codex-app-server/codex-home,/var/lib/codex-app-server/repos:/var/lib/codex-app-server/repos,/var/lib/codex-app-server/test-repo:/var/lib/codex-app-server/test-repo --repos-dir /var/lib/codex-app-server/repos --tenant-isolation --tenants-root /var/lib/codex-app-server/tenants --tenant-template-home /var/lib/codex-app-server/codex-home --tenant-template-repo /var/lib/codex-app-server/test-repo --docker-security-opt apparmor=docker-codex --docker-pids-limit 512 --egress-proxy-port 8888 +ExecStart=/usr/bin/python3 -m cloud.autoscaler --db /var/lib/codex-app-server/control.db --interval 30 --min-workers 1 --max-workers 2 --per-worker-capacity 2 --scale-down-after 3 --drain-timeout 60 --state-file /var/lib/codex-app-server/autoscaler-state.json --log-dir /var/lib/codex-app-server/autoscaler-logs -- --interval 10 --config /opt/codex-app-server/host-config-docker.json --executor docker --docker-image codex-app-server:latest --docker-user 1003:1004 --docker-cpus 2 --docker-memory 2g --docker-extra-mounts /opt/codex-app-server/work:/app/work,/var/lib/codex-app-server/codex-home:/var/lib/codex-app-server/codex-home,/var/lib/codex-app-server/repos:/var/lib/codex-app-server/repos,/var/lib/codex-app-server/test-repo:/var/lib/codex-app-server/test-repo --repos-dir /var/lib/codex-app-server/repos --tenant-isolation --tenants-root /var/lib/codex-app-server/tenants --tenant-template-home /var/lib/codex-app-server/codex-home --tenant-template-repo /var/lib/codex-app-server/test-repo --docker-security-opt apparmor=docker-codex --docker-pids-limit 512 --egress-proxy-port 8888 --docker-runtime runsc Restart=on-failure RestartSec=10 # 停 scaler 时要等它把 worker 优雅排空(drain 60 秒 + 缓冲),