openclaw/docs/zh-CN/platforms/hetzner.md

338 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
read_when:
- 你希望 OpenClaw 在云端 VPS而非笔记本电脑上全天候运行
- 你需要在自己的 VPS 上部署一个生产级、始终在线的 Gateway网关
- 你希望完全掌控持久化、二进制文件和重启行为
- 你正在 Hetzner 或类似提供商上通过 Docker 运行 OpenClaw
summary: 在廉价的 Hetzner VPS 上通过 Docker 全天候运行 OpenClaw Gateway网关支持持久化状态和内置二进制文件
title: Hetzner
x-i18n:
generated_at: "2026-02-01T21:32:45Z"
model: claude-opus-4-5
provider: pi
source_hash: 84d9f24f1a803aa15faa52a05f25fe557ec3e2c2f48a00c701d49764bd3bc21a
source_path: platforms/hetzner.md
workflow: 15
---
# 在 Hetzner 上部署 OpenClawDocker 生产环境 VPS 指南)
## 目标
使用 Docker 在 Hetzner VPS 上运行持久化的 OpenClaw Gateway网关支持持久化状态、内置二进制文件和安全的重启行为。
如果你想要"每月约 $5 实现 OpenClaw 全天候运行",这是最简单可靠的方案。
Hetzner 定价会变动;选择最小的 Debian/Ubuntu VPS如果遇到内存不足OOM再扩容。
## 我们要做什么(简单说明)?
- 租一台小型 Linux 服务器Hetzner VPS
- 安装 Docker隔离的应用运行时
- 在 Docker 中启动 OpenClaw Gateway网关
-`~/.openclaw` + `~/.openclaw/workspace` 持久化到宿主机(重启/重建后数据不丢失)
- 通过 SSH 隧道从笔记本电脑访问控制界面
Gateway网关可通过以下方式访问
- 从笔记本电脑进行 SSH 端口转发
- 如果你自行管理防火墙和令牌,也可以直接暴露端口
本指南假设 Hetzner 上使用 Ubuntu 或 Debian。
如果你使用其他 Linux VPS请对应调整软件包。
通用 Docker 流程请参阅 [Docker](/install/docker)。
---
## 快速路径(有经验的运维人员)
1. 创建 Hetzner VPS
2. 安装 Docker
3. 克隆 OpenClaw 仓库
4. 创建持久化宿主机目录
5. 配置 `.env``docker-compose.yml`
6. 将所需二进制文件内置到镜像中
7. `docker compose up -d`
8. 验证持久化和 Gateway网关访问
---
## 准备工作
- 拥有 root 权限的 Hetzner VPS
- 从笔记本电脑可通过 SSH 访问
- 基本熟悉 SSH + 复制/粘贴操作
- 约 20 分钟时间
- Docker 和 Docker Compose
- 模型认证凭据
- 可选的提供商凭据
- WhatsApp 二维码
- Telegram 机器人令牌
- Gmail OAuth
---
## 1) 创建 VPS
在 Hetzner 创建一台 Ubuntu 或 Debian VPS。
以 root 身份连接:
```bash
ssh root@YOUR_VPS_IP
```
本指南假设 VPS 是有状态的。
不要将其视为一次性基础设施。
---
## 2) 安装 Docker在 VPS 上)
```bash
apt-get update
apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sh
```
验证:
```bash
docker --version
docker compose version
```
---
## 3) 克隆 OpenClaw 仓库
```bash
git clone https://github.com/openclaw/openclaw.git
cd openclaw
```
本指南假设你将构建自定义镜像以确保二进制文件的持久化。
---
## 4) 创建持久化宿主机目录
Docker 容器是临时性的。
所有长期状态必须存放在宿主机上。
```bash
mkdir -p /root/.openclaw
mkdir -p /root/.openclaw/workspace
# 将所有权设置为容器用户uid 1000
chown -R 1000:1000 /root/.openclaw
chown -R 1000:1000 /root/.openclaw/workspace
```
---
## 5) 配置环境变量
在仓库根目录创建 `.env` 文件。
```bash
OPENCLAW_IMAGE=openclaw:latest
OPENCLAW_GATEWAY_TOKEN=change-me-now
OPENCLAW_GATEWAY_BIND=lan
OPENCLAW_GATEWAY_PORT=18789
OPENCLAW_CONFIG_DIR=/root/.openclaw
OPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
GOG_KEYRING_PASSWORD=change-me-now
XDG_CONFIG_HOME=/home/node/.openclaw
```
生成强密钥:
```bash
openssl rand -hex 32
```
**请勿将此文件提交到版本控制。**
---
## 6) Docker Compose 配置
创建或更新 `docker-compose.yml`
```yaml
services:
openclaw-gateway:
image: ${OPENCLAW_IMAGE}
build: .
restart: unless-stopped
env_file:
- .env
environment:
- HOME=/home/node
- NODE_ENV=production
- TERM=xterm-256color
- OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND}
- OPENCLAW_GATEWAY_PORT=${OPENCLAW_GATEWAY_PORT}
- OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN}
- GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD}
- XDG_CONFIG_HOME=${XDG_CONFIG_HOME}
- PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
volumes:
- ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw
- ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace
ports:
# 推荐:在 VPS 上仅绑定 local loopback通过 SSH 隧道访问。
# 如需公开暴露,移除 `127.0.0.1:` 前缀并相应配置防火墙。
- "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789"
# 可选:仅在你需要将 iOS/Android 节点连接到此 VPS 且需要 Canvas 主机时使用。
# 如果公开暴露此端口,请阅读 /gateway/security 并相应配置防火墙。
# - "18793:18793"
command:
[
"node",
"dist/index.js",
"gateway",
"--bind",
"${OPENCLAW_GATEWAY_BIND}",
"--port",
"${OPENCLAW_GATEWAY_PORT}",
]
```
---
## 7) 将所需二进制文件内置到镜像中(关键步骤)
在运行中的容器内安装二进制文件是一个陷阱。
任何在运行时安装的内容都会在重启后丢失。
Skills 所需的所有外部二进制文件必须在镜像构建时安装。
以下示例仅展示三个常见的二进制文件:
- `gog` 用于 Gmail 访问
- `goplaces` 用于 Google Places
- `wacli` 用于 WhatsApp
这些只是示例,并非完整列表。
你可以使用相同的模式安装任意数量的二进制文件。
如果你后续添加了依赖额外二进制文件的新 Skills你必须
1. 更新 Dockerfile
2. 重新构建镜像
3. 重启容器
**示例 Dockerfile**
```dockerfile
FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# 示例二进制文件 1Gmail CLI
RUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
# 示例二进制文件 2Google Places CLI
RUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
# 示例二进制文件 3WhatsApp CLI
RUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \
| tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
# 在下方使用相同模式添加更多二进制文件
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./
COPY ui/package.json ./ui/package.json
COPY scripts ./scripts
RUN corepack enable
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
RUN pnpm ui:install
RUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]
```
---
## 8) 构建并启动
```bash
docker compose build
docker compose up -d openclaw-gateway
```
验证二进制文件:
```bash
docker compose exec openclaw-gateway which gog
docker compose exec openclaw-gateway which goplaces
docker compose exec openclaw-gateway which wacli
```
预期输出:
```
/usr/local/bin/gog
/usr/local/bin/goplaces
/usr/local/bin/wacli
```
---
## 9) 验证 Gateway网关
```bash
docker compose logs -f openclaw-gateway
```
成功标志:
```
[gateway] listening on ws://0.0.0.0:18789
```
从笔记本电脑执行:
```bash
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP
```
打开:
`http://127.0.0.1:18789/`
粘贴你的 Gateway网关令牌。
---
## 持久化位置说明(数据源)
OpenClaw 在 Docker 中运行,但 Docker 不是数据源。
所有长期状态必须能在重启、重建和重启后保留。
| 组件 | 位置 | 持久化机制 | 备注 |
| --------------- | --------------------------------- | --------------- | --------------------------- |
| Gateway网关配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | 包含 `openclaw.json`、令牌 |
| 模型认证配置 | `/home/node/.openclaw/` | 宿主机卷挂载 | OAuth 令牌、API 密钥 |
| Skills配置 | `/home/node/.openclaw/skills/` | 宿主机卷挂载 | Skills 级别状态 |
| 智能体工作区 | `/home/node/.openclaw/workspace/` | 宿主机卷挂载 | 代码和智能体产物 |
| WhatsApp 会话 | `/home/node/.openclaw/` | 宿主机卷挂载 | 保留二维码登录状态 |
| Gmail 密钥环 | `/home/node/.openclaw/` | 宿主机卷 + 密码 | 需要 `GOG_KEYRING_PASSWORD` |
| 外部二进制文件 | `/usr/local/bin/` | Docker 镜像 | 必须在构建时内置 |
| Node 运行时 | 容器文件系统 | Docker 镜像 | 每次构建镜像时重建 |
| 操作系统软件包 | 容器文件系统 | Docker 镜像 | 不要在运行时安装 |
| Docker 容器 | 临时性 | 可重启 | 可安全销毁 |