- 人工智能
- AI 应用
- 交互助手
- AI Agent
【免费下载链接】ironclaw
IronClaw is an Agent OS focused on privacy, security and extensibility
本篇指南围绕仓库内 Railway 沙箱运维手册 展开,面向需要将 IronClaw Reborn 控制服务以hosted-single-tenant-volume-sandboxed-railway形态部署到 Railway 的工程师。它说明如何用 Railway CLI(由Dockerfile内置)驱动沙箱生命周期、如何把持久状态收敛到 Railway Volume、如何在单个 Token 纪律与单副本约束下完成一次可复核的预览部署,并给出可直接照做的 7 步运维检查清单。读完本文,你将掌握该预览 profile 的完整部署形态、凭据边界、网络语义澄清,以及控制服务重启/崩溃后的沙箱回收验证方法。
一、状态与适用范围:这是一份"预览专属"的运行手册
该运行手册只面向一种部署形态:hosted-single-tenant-volume-sandboxed-railway。它精确部署一个IronClaw 控制服务副本,持久状态落在 Railway Volume 上,沙箱生命周期由Dockerfile内置的 Railway CLI 驱动。文档明确强调:这不是生产多副本拓扑。
1.1 Railway Sandboxes 属 Priority Boarding 实验特性
Railway Sandboxes 属于 Priority Boarding(优先候补)功能,其程序化操作面(sandbox API 与 CLI 命令)仍可能变动。因此每次运维前必须:
- 用镜像中固定的 Railway CLI 版本执行
railway sandbox --help,核对当前命令行为; - 复核 Railway 官方当前发布的沙箱文档与 API 行为;
- 绝不脱离
Dockerfile单独升级 CLI——CLI 版本由 Dockerfile 的RAILWAY_CLI_VERSION构建参数钉死,脱离镜像升级会破坏"镜像即环境"的可复现性。
从源码结构看,这种"预览"定位同样体现在 profile.rs:HostedSingleTenantVolumeSandboxedRailway被注释为"hosted single-tenant volume profile whose per-user sandbox lifecycle is provided by Railway Sandboxes and durable Railway checkpoints",与本地 Docker 沙箱 profile 并列但语义独立。
1.2 项目与环境的 ID 纪律
本手册适用于一个指定的 Railway 项目和一个指定的环境。任何运维动作都不得依赖 CLI 当前所在目录、CLI 的当前项目或默认环境,必须显式记录并传入两个 ID:
RAILWAY_PROJECT_ID=<designated-preview-project-id> RAILWAY_ENVIRONMENT_ID=<designated-preview-environment-id>这两个值必须作为 CLI 的项目/环境选择器显式传递,不得从其他 Railway 项目拷贝或指向其他项目。
二、镜像与凭据边界:固定版本 CLI + 单 Token 纪律
2.1 Dockerfile 如何内置并校验 Railway CLI
Dockerfile 的多阶段构建中,railway_cli阶段按TARGETARCH下载 Railway CLI 并校验发布 checksum,之后只把可执行文件拷贝进最终镜像:
amd64→x86_64-unknown-linux-gnu,固定 SHA-256:33addd7729e99291f329ac671b02e9fe14fec8b7d9cdc11be77569739dae5c0earm64→aarch64-unknown-linux-musl,固定 SHA-256:11c24392e5e3551687c5e35ade2eec63e2ea7689603117de83f4f480dbb2d2a7- 其他架构直接报错退出(
unsupported Railway CLI architecture)
下载后经sha256sum -c -校验、解包、install -m 0755安装,并在最终 runtime 阶段通过COPY --from=railway_cli /usr/local/bin/railway /usr/local/bin/railway带入。没有任何 Railway 凭据作为 Docker 构建参数、环境指令、镜像层或文件进入镜像。
2.2 两种 Token 的语义与互斥规则
运行时最多只向控制服务提供一个Token,且必须通过 Railway 指定的 Secret 机制注入:
| 变量 | 作用域 | 适用场景 |
|---|---|---|
RAILWAY_TOKEN | 项目级 | 优先使用。动作仅限本预览项目时选择它 |
RAILWAY_API_TOKEN | 账户/工作区级 | 仅当沙箱操作确实需要更广的账户/工作区权限时才使用 |
两条硬性规则:
- Railway CLI 会拒绝同时存在两个变量的进程——同一运行时环境中两者不能共存;
- 任一 Token 都不得放入
config.toml、源代码控制、Docker 构建参数、日志输出或 sandbox-worker 环境。
控制服务可以使用所选 Token 调用 Railway API,但不可信的 worker 绝不能拿到它。这是"凭据保持 host-side"原则在凭据注入层的体现。
三、必须的部署形态(Required Deployment Shape)
在 Railway 服务上配置以下全部要素:
3.1 基础配置
- Dockerfile 路径:
Dockerfile;Start Command 留空,让镜像 entrypoint 自行构造ironclaw serve命令(entrypoint.sh 在无参数时执行exec ironclaw serve --host "$host" --port "$port",host 在 Railway 环境下自动解析为0.0.0.0)。 - Profile:
IRONCLAW_REBORN_PROFILE=hosted-single-tenant-volume-sandboxed-railway。该值对应 profile.rs 中的HostedSingleTenantVolumeSandboxedRailway枚举变体,且local_runtime_storage_subdir()将其与本地 Docker 沙箱 profile 复用同一存储子目录hosted-single-tenant-volume-sandboxed——即执行运输层不同,但 IronClaw 的持久应用状态不另存一份。 - 持久 Volume:挂载到
/data。entrypoint 从RAILWAY_VOLUME_MOUNT_PATH推导IRONCLAW_REBORN_HOME(默认取$RAILWAY_VOLUME_MOUNT_PATH/ironclaw-reborn),并对此 profile 族在无 Volume 时 fail closed——除非显式设置一次性测试覆盖开关IRONCLAW_REBORN_ALLOW_EPHEMERAL_RAILWAY=true。
entrypoint 的 fail-closed 逻辑在 entrypoint.sh 中非常严格:只要检测到 Railway 运行时标记(RAILWAY_ENVIRONMENT/RAILWAY_PROJECT_ID/RAILWAY_SERVICE_ID任一存在),且未显式允许临时部署,就会校验IRONCLAW_REBORN_HOME与IRONCLAW_REBORN_WORKSPACE_ROOT都解析后位于RAILWAY_VOLUME_MOUNT_PATH之下(用readlink -m做规范化比较,防止..段或符号链接逃逸出挂载点)。这保证了"项目文件看似持久、实际落在临时目录"这类静默失败不会发生。
3.2 单副本纪律
- 只允许一个 IronClaw 副本。不要启用水平扩展、不要部署第二个控制服务、不要针对同一份 Volume-backed 状态做并发部署叠加;
- 预览被判定健康前必须缩回一个副本;
- 从源码结构看,这一约束与 ironclaw_sandbox/README.md 描述的"一个 IronClaw 进程在同一时间独占一个本地 Docker workspace root,并通过 transport 级 owner lock 保证互斥"同源:沙箱状态与工作区根目录都要求进程级单点归属,多副本会破坏该前提。
3.3 传输缓存容量与空闲超时
- 预览 transport 每个进程最多跟踪4,096 条用户生命周期条目;达到容量时逐出最久未使用的空闲条目,绝不会逐出被活动命令持有的条目(对应 tests.rs 中
with_cli_and_capacity构造的容量/驱逐测试面); - Railway 默认空闲超时是5 分钟,可通过
IRONCLAW_REBORN_RAILWAY_IDLE_TIMEOUT_MINUTES调整(组合层 sandbox.rs 的build_railway_user_sandbox_binding接收idle_timeout_minutes并调用with_idle_timeout_minutes落进RailwayPreviewSandboxConfig)。
3.4 检查点(Checkpoint)与资源泄漏兜底
- IronClaw 在每条命令完成后尝试对用户工作区做 checkpoint;
- 优雅关闭时,控制服务尝试重试陈旧 checkpoint,并销毁该进程拥有的活跃 Railway 沙箱;
- 托管部署中关闭时间有限,而崩溃根本无法执行清理,因此配置的空闲超时是资源泄漏的硬兜底:崩溃后,残留沙箱必须在空闲超时内过期。
3.5 与 Volume 的分工
Volume 是 IronClaw 持久状态的边界:它跨控制服务重启保留 Reborn home、libSQL 支撑的 runtime/control-plane 状态,以及进程 checkpoint。Railway Sandbox checkpoint 只是该沙箱自身文件系统的快照,它不替代 IronClaw 的持久 checkpoint,也不替代 Railway Volume——两者是不同层级的持久化。
3.6 WebUI 与 LLM 密钥
常规 WebUI 与 LLM 密钥配置遵循 Docker 部署指南:包括IRONCLAW_REBORN_WEBUI_TOKEN、IRONCLAW_REBORN_WEBUI_USER_ID、NEARAI_API_KEY(镜像内置 config 默认选择 NearAI 作为[llm.default]提供方),以及可选的 Google SSO 变量。本手册不为这些值发明新变量或硬编码,直接沿用部署指南的清单。
四、Worker 网络边界:Railway NAT 语义澄清
4.1 每命令一个全新 inner Docker worker
每条命令都在其 Railway Sandbox 内的全新 inner Docker worker 容器中运行。这是因为 Railway 不跨外层 exec 调用保留 inner mount namespace(ironclaw_sandbox/README.md 明确说明 Railway 预览 transport 保持每用户沙箱与 checkpointed workspace,但每条命令启动全新 inner worker,且不使用本地持久 Docker 容器的生命周期机制)。
4.2 网络默认:启用 Docker 默认网络
Railway 预览部署工厂启用了该 worker 的默认 Docker 网络,从而通过外层沙箱的Railway NAT提供直接出网(egress)。--network none只是 ad-hoc transport 的 fail-closed 构造默认,在本 profile 中并不激活。Railway 控制服务自身也需要出网才能调用 Railway 的 sandbox API。
4.3 ISOLATED ≠ Docker --network none
不要把 Railway Sandbox 的ISOLATED模式描述成等价于 Docker--network none。Railway 将ISOLATED文档化为"私有网络隔离",它仍然通过 Railway NAT 拥有出站互联网访问。因此:
- Railway Sandbox不是针对不可信代码的 deny-egress 安全边界;
- 需要 deny-by-default 保证的 worker,必须把凭据留在 host-side,并使用基础设施强制的 egress 边界。
这条澄清直接关系到 deploy-reborn-cli-docker.md 中对该 profile 的描述一致性:部署工厂启用的是 worker 的默认 Docker 网络,--network none仅作为 ad-hoc 运输的 fail-closed 构造默认存在。
五、运维检查清单(7 步)
每次沙箱生命周期操作前后,按下列清单逐项确认并留证:
- 确认项目与环境 ID 是指定的预览配对,且所选 Token 只拥有该配对所需的权限。
- 确认控制服务运行时只存在一个 Railway Token 变量,且任一 Token 都没有传给 worker 或写入磁盘。
- 部署前确认服务是单副本,且存在
/dataVolume。 - 确认服务以 Railway 预览 profile 启动,且 Volume-backed 的 Reborn home 能经受一次受控重启。
- 沙箱生命周期操作前,确认钉死版本的 CLI 的 sandbox help 与当前 Railway API 行为;把显式的项目/环境 ID 与操作证据一起记录,然后核验产生的沙箱状态。
- 受控重启后,确认该进程此前拥有的沙箱已被销毁,或会在配置的空闲超时内过期;崩溃后,确认它们在超时内过期。
- 失败时:先停止创建新沙箱,保留 Volume 与 checkpoint 证据,把控制服务缩回单副本,并在不打印 Token的前提下检查 host-side 日志。
关于当前 Railway Token 语义与沙箱发布状态,运维前应查阅 Railway CLI 官方认证文档与官方 Sandboxes 公告(本文不替代 Railway 外部文档,操作时以其为准)。
六、源码级佐证:从配置到运输的完整链路
| 关注点 | 源码位置 | 佐证内容 |
|---|---|---|
| Profile 枚举与字符串映射 | crates/app/ironclaw_config/src/profile.rs | HostedSingleTenantVolumeSandboxedRailway变体,as_str()返回hosted-single-tenant-volume-sandboxed-railway |
| 组合层绑定工厂 | crates/app/ironclaw_composition/src/sandbox.rs | build_railway_user_sandbox_binding(project_id, environment_id, cli_path, idle_timeout_minutes, worker_image)构造RailwayPreviewSandboxTransport |
| 无 Volume fail-closed | docker/reborn/entrypoint.sh | Railway 运行时下强制 home/workspace 位于挂载点内;IRONCLAW_REBORN_ALLOW_EPHEMERAL_RAILWAY=true仅豁免一次性测试 |
| CLI 版本与校验 | Dockerfile | RAILWAY_CLI_VERSION=5.30.4,按架构下载并sha256sum -c校验 |
| 容量/驱逐测试 | crates/lanes/ironclaw_sandbox/src/sandbox_process/railway/tests.rs | FakeRailwayCli与with_cli_and_capacity覆盖容量上限与重启收敛行为 |
| inner worker 语义 | crates/lanes/ironclaw_sandbox/README.md | Railway 预览 transport 每条命令启动全新 inner worker,不使用本地持久容器生命周期 |
| Seed 配置 | docker/reborn/config.hosted-single-tenant-volume.toml | Volume-backed profile 的持久化 seed 配置形态(WebUI env 变量、NearAI 默认 LLM 等) |
七、关键约束速查
- 绝不:同时设置两个 Railway Token;把 Token 放进
config.toml/源码/构建参数/日志/worker 环境;脱离Dockerfile升级 CLI;把ISOLATED当 deny-egress;多副本并发叠放同一 Volume-backed 状态。 - 务必:显式传入并记录项目/环境 ID;部署前确认单副本 +
/dataVolume;每次操作前核对钉死 CLI 的railway sandbox --help;崩溃后依赖配置的空闲超时兜底回收沙箱。 - 记住:Railway Sandbox checkpoint 只是沙箱自身文件系统快照;IronClaw 持久状态与进程 checkpoint 属于 Railway Volume,二者不可互相替代。
这份手册对应的全部实现细节都可以在 Dockerfile、docker/reborn/entrypoint.sh 以及 ironclaw_sandbox 与 ironclaw_composition 中继续深入阅读。
- 人工智能
- AI 应用
- 交互助手
- AI Agent
【免费下载链接】ironclaw
IronClaw is an Agent OS focused on privacy, security and extensibility
相关推荐
IronClaw 部署运维控制面解析:LLM 供应商管理、Operator 日志环与 OS 服务生命周期(ironclaw_operator)
IronClaw 部署运维控制面解析:LLM 供应商管理、Operator 日志环与 OS 服务生命周期(ironclaw_operator) 导读 ironc
人工智能AI 应用交互助手AI AgentIronClaw 部署运维控制平面:ironclaw_operator 的 LLM 供应商管理、日志环与服务生命周期架构解析
IronClaw 部署运维控制平面:ironclaw_operator 的 LLM 供应商管理、日志环与服务生命周期架构解析 IronClaw 的 ironcl
人工智能AI 应用交互助手AI AgentCubeSandbox S3 持久卷(S3 Volume)实战指南:跨沙箱生命周期的对象存储持久化
CubeSandbox S3 持久卷(S3 Volume)实战指南:跨沙箱生命周期的对象存储持久化 本篇技术指南围绕 CubeSandbox 的 S3 Volu
Agent 沙箱虚拟化云原生人工智能后端容器运行时
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考