8 8
9> [!NOTE]9> [!NOTE]
10>10>
11> 自托管环境在 Team 和 Enterprise 计划上处于公开测试阶段;[可用性和限制](/docs/zh-CN/self-hosted-environments#availability-and-limitations)涵盖了启用路径。本页面让您的第一个会话运行;有关它们是什么,请参阅[自托管环境](/docs/zh-CN/self-hosted-environments),有关强化和部队配方,请参阅[部署到生产环境](/docs/zh-CN/self-hosted-environments-deploy.md)。11> 自托管环境在 Team 和 Enterprise 计划上处于公开测试阶段;[可用性和限制](https://code.claude.com/docs/zh-CN/self-hosted-environments#availability-and-limitations)涵盖了启用路径。本页面让您的第一个会话运行;有关它们是什么,请参阅[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments),有关强化和部队配方,请参阅[部署到生产环境](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md)。
12 12
13[自托管环境](/docs/zh-CN/self-hosted-environments)在您的组织运营的基础设施上运行 Claude Code [云会话](/docs/zh-CN/claude-code-on-the-web.md),由您部署的运行器进程执行。本快速入门建立您的第一个环境,这是最小的可行配置:一个主机上的一个运行器,运行一个测试会话。有两个步骤:[创建环境、启动运行器并将会话路由到该环境](#set-up-an-environment-and-runner),然后[从您的终端向该会话发送后续消息](#send-a-follow-up-message-to-a-running-session)。您将在两个界面之间切换:claude.ai 用于创建环境、检查其状态和路由会话,以及主机上的终端用于运行器执行的所有操作。13[自托管环境](https://code.claude.com/docs/zh-CN/self-hosted-environments)在您的组织运营的基础设施上运行 Claude Code [云会话](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md),由您部署的运行器进程执行。本快速入门建立您的第一个环境,这是最小的可行配置:一个主机上的一个运行器,运行一个测试会话。有两个步骤:[创建环境、启动运行器并将会话路由到该环境](#set-up-an-environment-and-runner),然后[从您的终端向该会话发送后续消息](#send-a-follow-up-message-to-a-running-session)。您将在两个界面之间切换:claude.ai 用于创建环境、检查其状态和路由会话,以及主机上的终端用于运行器执行的所有操作。
14 14
15完成后,您将在[**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上拥有一个环境、一个轮询工作的运行器,以及在您的主机上运行的会话。在连接真实存储库或内部系统之前,请完成[部署到生产环境](/docs/zh-CN/self-hosted-environments-deploy.md),其中涵盖了安全态势、出口控制、git 凭证和编排。15完成后,您将在[**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上拥有一个环境、一个轮询工作的运行器,以及在您的主机上运行的会话。在连接真实存储库或内部系统之前,请完成[部署到生产环境](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md),其中涵盖了安全态势、出口控制、git 凭证和编排。
16 16
17## 前置条件17## 前置条件
18 18
20 20
21claude.ai 端需要:21claude.ai 端需要:
22 22
23* **Allow self-hosted environments** 由[所有者](/docs/zh-CN/cloud-environments.md#organization-shared-environments)在[**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上启用;在启用之前,**New** 按钮不会出现。如果您不拥有该角色,拥有该角色的人可以创建环境并将其密钥交给您;本页面上的运行器和终端步骤不需要 claude.ai 角色,当步骤在管理 UI 中检查状态时,运行器自己的日志行会给您相同的信号。23* **Allow self-hosted environments** 由[所有者](https://code.claude.com/docs/zh-CN/cloud-environments.md#organization-shared-environments)在[**Cloud environments** 管理页面](https://claude.ai/admin-settings/cloud-environments)上启用;在启用之前,**New** 按钮不会出现。如果您不拥有该角色,拥有该角色的人可以创建环境并将其密钥交给您;本页面上的运行器和终端步骤不需要 claude.ai 角色,当步骤在管理 UI 中检查状态时,运行器自己的日志行会给您相同的信号。
24* 由所有者启用的 [GitHub 连接器](https://claude.ai/admin-settings/connectors),以及每位开发人员自己的 [GitHub 连接](/docs/zh-CN/web-quickstart.md#connect-github),以便他们在启动会话时可以选择 github.com 仓库。24* 由所有者启用的 [GitHub 连接器](https://claude.ai/admin-settings/connectors),以及每位开发人员自己的 [GitHub 连接](https://code.claude.com/docs/zh-CN/web-quickstart.md#connect-github),以便他们在启动会话时可以选择 github.com 仓库。
25 25
26### 主机和网络26### 主机和网络
27 27
28运行器主机需要:28运行器主机需要:
29 29
30* 一个 Linux 或 macOS 主机或容器,具有到 `api.anthropic.com` 的出站 HTTPS、到 `claude.ai` 和下面安装步骤重定向到的下载主机的出站 HTTPS,以及到您的 git 主机的出站 HTTPS 用于克隆;[网络要求表](/docs/zh-CN/self-hosted-environments-deploy.md#network-requirements)有完整列表。Windows 不支持作为运行器主机;改为在 Linux 容器中运行运行器。开发人员工作站不受影响,因为会话从浏览器中的 claude.ai 启动。30* 一个 Linux 或 macOS 主机或容器,具有到 `api.anthropic.com` 的出站 HTTPS、到 `claude.ai` 和下面安装步骤重定向到的下载主机的出站 HTTPS,以及到您的 git 主机的出站 HTTPS 用于克隆;[网络要求表](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#network-requirements)有完整列表。Windows 不支持作为运行器主机;改为在 Linux 容器中运行运行器。开发人员工作站不受影响,因为会话从浏览器中的 claude.ai 启动。
31* 一个用于测试会话的仓库:可以是公共仓库,也可以是此主机已能通过其 HTTPS URL 克隆且无需提供凭据的仓库。仅有 SSH 密钥是不够的,因为运行器克隆的是仓库的 `https://` URL。要改为通过 SSH 克隆,请参阅[为私有网络重写 git URL](/docs/zh-CN/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)。31* 一个用于测试会话的仓库:可以是公共仓库,也可以是此主机已能通过其 HTTPS URL 克隆且无需提供凭据的仓库。仅有 SSH 密钥是不够的,因为运行器克隆的是仓库的 `https://` URL。要改为通过 SSH 克隆,请参阅[为私有网络重写 git URL](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)。
32* 与实时同步的时钟,例如使用 NTP。当时钟偏离超过五分钟时,身份验证失败;请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy.md#troubleshooting)。32* 与实时同步的时钟,例如使用 NTP。当时钟偏离超过五分钟时,身份验证失败;请参阅[故障排除](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#troubleshooting)。
33 33
34### 运行器主机上的软件34### 运行器主机上的软件
35 35
36在启动之前在主机上安装:36在启动之前在主机上安装:
37 37
38* **Claude Code v2.1.224 或更高版本**,使用任何[标准安装方法](/docs/zh-CN/setup.md)。运行器是标准 `claude` 二进制文件的一部分,较早的版本不识别 `self-hosted-runner` 子命令。要固定您的主机集群运行的确切版本,请参阅[安装特定版本](/docs/zh-CN/setup.md#install-a-specific-version)。对于容器镜像,请参阅[部署到生产环境](/docs/zh-CN/self-hosted-environments-deploy.md#build-the-runner-image)中的 Dockerfile。38* **Claude Code v2.1.224 或更高版本**,使用任何[标准安装方法](https://code.claude.com/docs/zh-CN/setup.md)。运行器是标准 `claude` 二进制文件的一部分,较早的版本不识别 `self-hosted-runner` 子命令。要固定您的主机集群运行的确切版本,请参阅[安装特定版本](https://code.claude.com/docs/zh-CN/setup.md#install-a-specific-version)。对于容器镜像,请参阅[部署到生产环境](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#build-the-runner-image)中的 Dockerfile。
39* **Git 2.24 或更高版本**。部署页面上的某些 git 选项需要更高版本;[配置 git](/docs/zh-CN/self-hosted-environments-deploy.md#configure-git)说明了每个下限。39* **Git 2.24 或更高版本**。部署页面上的某些 git 选项需要更高版本;[配置 git](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#configure-git)说明了每个下限。
40 40
41确认主机已准备好:41确认主机已准备好:
42 42
44claude self-hosted-runner --help44claude self-hosted-runner --help
45```45```
46 46
47准备好的主机打印运行器的使用文本,列出诸如 `--environment-secret-file` 之类的标志。在 2.1.224 之前的版本上,该命令改为打印常规 `claude --help` 输出。如果您看到该输出,请[更新 Claude Code](/docs/zh-CN/setup.md#update-claude-code)。如果您从容器镜像运行 `claude`,请使用 2.1.224 或更高版本[重新构建镜像](/docs/zh-CN/self-hosted-environments-deploy.md#build-the-runner-image)。47准备好的主机打印运行器的使用文本,列出诸如 `--environment-secret-file` 之类的标志。在 2.1.224 之前的版本上,该命令改为打印常规 `claude --help` 输出。如果您看到该输出,请[更新 Claude Code](https://code.claude.com/docs/zh-CN/setup.md#update-claude-code)。如果您从容器镜像运行 `claude`,请使用 2.1.224 或更高版本[重新构建镜像](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#build-the-runner-image)。
48 48
49## 设置环境和运行器49## 设置环境和运行器
50 50
71 71
72**1. 创建环境**72**1. 创建环境**
73 73
74转到管理设置中的[**Cloud environments** 页面](https://claude.ai/admin-settings/cloud-environments)。在 **Self-hosted environments** 下,选择 **New**,命名环境,然后选择 **Create**。在向导的第二步,选择 **Copy environment key** 以复制环境密钥,管理 UI 将其标记为环境密钥。claude.ai 仅显示一次密钥,您之后无法检索它;它在创建后 365 天过期。环境的 `ccpool_...` ID 在其详细信息对话框中保持可见;您需要它用于[令牌验证](/docs/zh-CN/self-hosted-environments-identity.md)中的 `aud` 检查,以及用于从 CI [分派测试会话](/docs/zh-CN/self-hosted-environments-testing.md#run-the-test-loop)。74转到管理设置中的[**Cloud environments** 页面](https://claude.ai/admin-settings/cloud-environments)。在 **Self-hosted environments** 下,选择 **New**,命名环境,然后选择 **Create**。在向导的第二步,选择 **Copy environment key** 以复制环境密钥,管理 UI 将其标记为环境密钥。claude.ai 仅显示一次密钥,您之后无法检索它;它在创建后 365 天过期。环境的 `ccpool_...` ID 在其详细信息对话框中保持可见;您需要它用于[令牌验证](https://code.claude.com/docs/zh-CN/self-hosted-environments-identity.md)中的 `aud` 检查,以及用于从 CI [分派测试会话](https://code.claude.com/docs/zh-CN/self-hosted-environments-testing.md#run-the-test-loop)。
75 75
76如果您丢失了密钥或需要轮换它,请从环境的 **Configuration** 选项卡创建新密钥,将新密钥推出到您的运行器,然后撤销旧密钥。持有已撤销密钥的运行器在其下一次经过身份验证的轮询时失败并退出,记录 `poll auth failed`,您的编排器使用新密钥重新启动它们。76如果您丢失了密钥或需要轮换它,请从环境的 **Configuration** 选项卡创建新密钥,将新密钥推出到您的运行器,然后撤销旧密钥。持有已撤销密钥的运行器在其下一次经过身份验证的轮询时失败并退出,记录 `poll auth failed`,您的编排器使用新密钥重新启动它们。
77 77
95>95>
96> 请使用专供运行器使用的目录,而不是您的主目录或存放您自己克隆的目录。运行器会将它在 `<writable-dir>/<repo-owner>/<repo>` 处找到的任何内容视为它自己的克隆,并可能重置它以及覆盖或删除其中的文件。96> 请使用专供运行器使用的目录,而不是您的主目录或存放您自己克隆的目录。运行器会将它在 `<writable-dir>/<repo-owner>/<repo>` 处找到的任何内容视为它自己的克隆,并可能重置它以及覆盖或删除其中的文件。
97 97
98如果运行器无法创建或写入基目录,它会在启动时退出并显示指明该目录的错误,而不是进行注册。请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy.md#troubleshooting)。98如果运行器无法创建或写入基目录,它会在启动时退出并显示指明该目录的错误,而不是进行注册。请参阅[故障排除](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#troubleshooting)。
99 99
100然后使用 `--environment-secret-file` 和 `--base-dir` 启动运行器:100然后使用 `--environment-secret-file` 和 `--base-dir` 启动运行器:
101 101
117 117
118如果会话没有开始工作,请对照您看到的情况:118如果会话没有开始工作,请对照您看到的情况:
119 119
120* **会话保持排队状态**:请参阅[故障排除](/docs/zh-CN/self-hosted-environments-deploy.md#troubleshooting)。120* **会话保持排队状态**:请参阅[故障排除](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#troubleshooting)。
121* **会话因 git 错误而无法启动**:如果错误包含 git 的 `could not read Username for`,后跟您的 git 主机的 URL,则说明运行器没有该主机的 HTTPS 凭据。121* **会话因 git 错误而无法启动**:如果错误包含 git 的 `could not read Username for`,后跟您的 git 主机的 URL,则说明运行器没有该主机的 HTTPS 凭据。
122 * **提供 HTTPS 凭据**:请参阅[配置 git](/docs/zh-CN/self-hosted-environments-deploy.md#configure-git)122 * **提供 HTTPS 凭据**:请参阅[配置 git](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#configure-git)
123 * **改为通过 SSH 克隆**:如果运行器主机已有 SSH 密钥,请参阅[为私有网络重写 git URL](/docs/zh-CN/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)123 * **改为通过 SSH 克隆**:如果运行器主机已有 SSH 密钥,请参阅[为私有网络重写 git URL](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#rewrite-git-urls-for-private-networks)
124 124
125### 如果运行器退出125### 如果运行器退出
126 126
127如果运行器在本快速入门期间退出,请再次启动它。运行器可能会自行退出:127如果运行器在本快速入门期间退出,请再次启动它。运行器可能会自行退出:
128 128
129* **没有仍在运行的内容**:日志显示 `[runner:exit] account workload drained — exiting`。运行器在不再运行任何会话时会[按设计退出](/docs/zh-CN/self-hosted-environments#runner-lifecycle),例如:129* **没有仍在运行的内容**:日志显示 `[runner:exit] account workload drained — exiting`。运行器在不再运行任何会话时会[按设计退出](https://code.claude.com/docs/zh-CN/self-hosted-environments#runner-lifecycle),例如:
130 * **您归档或删除了会话**:再次启动运行器130 * **您归档或删除了会话**:再次启动运行器
131 * **会话启动失败**:[修复原因](#session-doesnt-start),然后再次启动运行器131 * **会话启动失败**:[修复原因](#session-doesnt-start),然后再次启动运行器
132* **失去联系**:日志显示一行包含 `runner record gone server-side` 或 `poll auth failed` 的 `[runner:fatal]`。如果运行器与 Anthropic 失去联系一段时间(例如因为主机休眠),它可能会在下次连接到 Anthropic 时退出。132* **失去联系**:日志显示一行包含 `runner record gone server-side` 或 `poll auth failed` 的 `[runner:fatal]`。如果运行器与 Anthropic 失去联系一段时间(例如因为主机休眠),它可能会在下次连接到 Anthropic 时退出。
133 133
134一个轮次结束并不会结束您的测试会话。第一轮之后,会话仍处于连接状态,运行器也仍在运行,因此您可以[向会话发送后续消息](#send-a-follow-up-message-to-a-running-session),而无需先重新启动运行器。134一个轮次结束并不会结束您的测试会话。第一轮之后,会话仍处于连接状态,运行器也仍在运行,因此您可以[向会话发送后续消息](#send-a-follow-up-message-to-a-running-session),而无需先重新启动运行器。
135 135
136对于生产,在编排器下部署运行器,该编排器在退出时重新启动它,并在运行器启动后立即继续退出时等待更长的时间再重新启动。请参阅[部署到生产环境](/docs/zh-CN/self-hosted-environments-deploy.md)和[当运行器退出时](/docs/zh-CN/self-hosted-environments-deploy.md#when-the-runner-exits)。136对于生产,在编排器下部署运行器,该编排器在退出时重新启动它,并在运行器启动后立即继续退出时等待更长的时间再重新启动。请参阅[部署到生产环境](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md)和[当运行器退出时](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md#when-the-runner-exits)。
137 137
138## 向运行中的会话发送后续消息138## 向运行中的会话发送后续消息
139 139
143claude -p "your message" --cloud <session-id>143claude -p "your message" --cloud <session-id>
144```144```
145 145
146对于 `<session-id>`,传递裸 `session_...` 或 `cse_...` ID 或会话的 claude.ai/code URL。成功发送打印 `Sent to cloud session.` 以及会话 ID 和查看链接。接受的 ID 形式、JSON 输出以及帐户和策略要求在[从 CLI 发送后续消息](/docs/zh-CN/claude-code-on-the-web.md#send-follow-ups-from-the-cli)上,因为该命令对 Anthropic 托管的会话的工作方式相同。146对于 `<session-id>`,传递裸 `session_...` 或 `cse_...` ID 或会话的 claude.ai/code URL。成功发送打印 `Sent to cloud session.` 以及会话 ID 和查看链接。接受的 ID 形式、JSON 输出以及帐户和策略要求在[从 CLI 发送后续消息](https://code.claude.com/docs/zh-CN/claude-code-on-the-web.md#send-follow-ups-from-the-cli)上,因为该命令对 Anthropic 托管的会话的工作方式相同。
147 147
148## 接下来的步骤148## 接下来的步骤
149 149
150* [部署到生产环境](/docs/zh-CN/self-hosted-environments-deploy.md):强化部署、控制出口、配置 git 凭证,并在 Kubernetes 或 Compose 下运行部队150* [部署到生产环境](https://code.claude.com/docs/zh-CN/self-hosted-environments-deploy.md):强化部署、控制出口、配置 git 凭证,并在 Kubernetes 或 Compose 下运行部队
151* [自定义会话](/docs/zh-CN/self-hosted-environments-configuration.md):包装脚本、生命周期钩子、按需运行器、MCP 服务器和权限151* [自定义会话](https://code.claude.com/docs/zh-CN/self-hosted-environments-configuration.md):包装脚本、生命周期钩子、按需运行器、MCP 服务器和权限
152* [端到端测试](/docs/zh-CN/self-hosted-environments-testing.md):一个 CI 烟雾测试,分派会话并读取 Claude 的回复152* [端到端测试](https://code.claude.com/docs/zh-CN/self-hosted-environments-testing.md):一个 CI 烟雾测试,分派会话并读取 Claude 的回复