☰
IronClaw Reborn Railway Sandbox 预览部署运维指南:单副本控制服务、Volume 持久状态与沙箱生命周期管理
2026/9/25 2:56:18 网站建设 项目流程
  • 人工智能
  • AI 应用
  • 交互助手
  • AI Agent

【免费下载链接】ironclaw

IronClaw is an Agent OS focused on privacy, security and extensibility

项目地址:https://gitcode.com/gh_mirrors/iro/ironclaw
点击查看免费下载

本篇指南围绕仓库内 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:33addd7729e99291f329ac671b02e9fe14fec8b7d9cdc11be77569739dae5c0e
  • arm64→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账户/工作区级仅当沙箱操作确实需要更广的账户/工作区权限时才使用

两条硬性规则:

  1. Railway CLI 会拒绝同时存在两个变量的进程——同一运行时环境中两者不能共存;
  2. 任一 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 步)

每次沙箱生命周期操作前后,按下列清单逐项确认并留证:

  1. 确认项目与环境 ID 是指定的预览配对,且所选 Token 只拥有该配对所需的权限。
  2. 确认控制服务运行时只存在一个 Railway Token 变量,且任一 Token 都没有传给 worker 或写入磁盘。
  3. 部署前确认服务是单副本,且存在/dataVolume。
  4. 确认服务以 Railway 预览 profile 启动,且 Volume-backed 的 Reborn home 能经受一次受控重启。
  5. 沙箱生命周期操作前,确认钉死版本的 CLI 的 sandbox help 与当前 Railway API 行为;把显式的项目/环境 ID 与操作证据一起记录,然后核验产生的沙箱状态。
  6. 受控重启后,确认该进程此前拥有的沙箱已被销毁,或会在配置的空闲超时内过期;崩溃后,确认它们在超时内过期。
  7. 失败时:先停止创建新沙箱,保留 Volume 与 checkpoint 证据,把控制服务缩回单副本,并在不打印 Token的前提下检查 host-side 日志。

关于当前 Railway Token 语义与沙箱发布状态,运维前应查阅 Railway CLI 官方认证文档与官方 Sandboxes 公告(本文不替代 Railway 外部文档,操作时以其为准)。

六、源码级佐证:从配置到运输的完整链路

关注点源码位置佐证内容
Profile 枚举与字符串映射crates/app/ironclaw_config/src/profile.rsHostedSingleTenantVolumeSandboxedRailway变体,as_str()返回hosted-single-tenant-volume-sandboxed-railway
组合层绑定工厂crates/app/ironclaw_composition/src/sandbox.rsbuild_railway_user_sandbox_binding(project_id, environment_id, cli_path, idle_timeout_minutes, worker_image)构造RailwayPreviewSandboxTransport
无 Volume fail-closeddocker/reborn/entrypoint.shRailway 运行时下强制 home/workspace 位于挂载点内;IRONCLAW_REBORN_ALLOW_EPHEMERAL_RAILWAY=true仅豁免一次性测试
CLI 版本与校验DockerfileRAILWAY_CLI_VERSION=5.30.4,按架构下载并sha256sum -c校验
容量/驱逐测试crates/lanes/ironclaw_sandbox/src/sandbox_process/railway/tests.rsFakeRailwayCli与with_cli_and_capacity覆盖容量上限与重启收敛行为
inner worker 语义crates/lanes/ironclaw_sandbox/README.mdRailway 预览 transport 每条命令启动全新 inner worker,不使用本地持久容器生命周期
Seed 配置docker/reborn/config.hosted-single-tenant-volume.tomlVolume-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

项目地址:https://gitcode.com/gh_mirrors/iro/ironclaw
点击查看免费下载

相关推荐

上一篇:终极指南:5分钟快速掌握OpenAI命令行聊天交互技巧
下一篇:TanStack Form(Solid)Devtools 接入指南:从安装配置到源码级原理

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询