OpenClaw VPS 部署教程:安全安装、微信/飞书/QQ 接入与备份
OpenClaw 是自托管个人 AI 助手。Gateway 保存配置、会话、凭据和工作区,也能调用主机工具。部署到 VPS 可以常驻运行,但不会自动带来多租户隔离或无限资源。
本文面向一个可信操作者管理的 Linux VPS。一个信任边界只运行一个 OpenClaw Gateway;互不信任的用户应使用独立 Gateway,并优先拆分到不同系统用户或主机。
先判断这种部署是否适合你
| 使用目标 | 建议 |
|---|---|
| 自己通过手机调用个人助手 | 可在专用 VPS 上部署 |
| 同一团队共享业务 Agent | 仅限成员属于同一信任边界,并限制工具权限 |
| 为互不信任的客户提供服务 | 不共享 Gateway;按租户隔离系统用户、凭据和运行环境 |
| 主要操作本机文件或桌面应用 | 本地运行或配对受控节点通常更直接 |
| 在 VPS 上运行本地大模型 | 先核对实际 CPU、内存、磁盘和 GPU,不根据本文猜测 |
OpenClaw 的主会话默认可以调用主机工具。聊天入口不是普通客服表单;能向工具型 Agent 发消息的人,可能间接影响文件、网络与命令执行。
变更前准备服务器和回滚路径
先完成 Linux VPS 初始安全配置,至少确认以下条件:
- 有一个可登录的普通系统用户,不长期用 root 运行 Gateway;
- SSH 密钥已经从第二个终端验证,Lish 或供应商控制台仍可恢复;
- 主机防火墙只保留已经核对的实际 SSH 端口;
- 系统时间、DNS、磁盘空间和软件包来源正常;
- API Key、聊天平台密钥和备份不会提交到公开仓库。
如果服务器上已经有 OpenClaw,先记录当前版本、服务和安全检查结果:
openclaw --version
openclaw gateway status --deep --json
openclaw security audit --json
为已有实例创建验证备份
全新安装且没有 OpenClaw 状态时可跳过本节。已有实例必须在安装器、onboard、插件或配置变更之前,以当前服务用户创建官方全量归档:
mkdir -p ~/Backups/openclaw
openclaw backup create --output ~/Backups/openclaw --verify
备份可能包含模型认证、聊天平台凭据、会话和工作区。确认命令成功、归档存在,再加密并安全复制到 VPS 之外;只有本机一份归档不构成主机故障后的恢复能力。
为全新安装建立专用用户
本文用 openclaw 作为专用用户。全新安装时可由管理员创建并进入该用户会话:
sudo adduser openclaw
sudo -iu openclaw
给这个用户授予的 sudo、Docker、主机目录和私钥权限,都会扩大 Agent 的影响范围。先从最小权限开始,不要为了省步骤把它加入所有管理组。已有实例不要在没有迁移和回滚计划时擅自更换服务用户。
下载并检查官方安装脚本
OpenClaw 的运行时要求会随版本变化。官方安装器会在缺少 Node 时配置受支持版本;手动管理 Node 的用户应以当前安装文档为准,不复用旧教程中的版本号。
安装器是会变化的远程代码。下面先下载到临时文件、记录摘要并人工查看,再执行;它不会把网络响应直接管道给 shell:
OPENCLAW_INSTALLER=$(mktemp)
trap 'rm -f "$OPENCLAW_INSTALLER"' EXIT
curl --proto '=https' --tlsv1.2 --fail --show-error --location \
https://openclaw.ai/install.sh \
--output "$OPENCLAW_INSTALLER"
sha256sum "$OPENCLAW_INSTALLER"
less "$OPENCLAW_INSTALLER"
bash "$OPENCLAW_INSTALLER" --no-onboard
rm -f "$OPENCLAW_INSTALLER"
trap - EXIT
确认域名、脚本内容和执行用户符合预期后才运行 bash。本地 SHA-256 只是本次安装记录;官方未提供对应已签名摘要时,不能把自算摘要当成上游真实性证明。
安装后重新登录专用用户会话,再检查 CLI 与实际 Node:
node --version
openclaw --version
openclaw doctor
若命令不存在,先按官方 Node 排障文档检查 npm prefix -g 与 PATH,不要盲目把陌生目录加入启动脚本。
完成引导并验证 Gateway
使用官方引导配置模型、工作区和托管服务:
openclaw onboard --install-daemon
模型 API Key 只写入 OpenClaw 支持的凭据位置或受限环境文件。不要把真实 Key 放进命令示例、聊天消息、shell 历史或公开截图。
完成后检查版本、健康状态和服务归属:
openclaw --version
openclaw gateway status --deep --json
openclaw doctor --lint --json
Linux 的标准引导会安装 systemd 用户服务。只有状态明确指向当前专用用户和预期安装路径,才继续配置开机后常驻。
若需要用户退出 SSH 后仍运行,可由管理员启用 linger:
sudo loginctl enable-linger openclaw
随后退出并重新登录,再验证服务没有依赖原 SSH 会话:
systemctl --user status openclaw-gateway.service
openclaw gateway status --deep --json
保持控制台仅本机可达
安全基线是让 Gateway 绑定 loopback,并通过 SSH 隧道或受控 Tailnet 访问。不要把控制台端口直接加入公网防火墙规则,也不要把 0.0.0.0 当成远程访问捷径。
在 VPS 上检查监听地址:
openclaw config get gateway.bind
ss -lnt '( sport = :18789 )'
预期是本机回环地址。若输出为公网或局域网监听,先停止对外访问并按官方 Gateway exposure runbook 核对认证、来源与回滚步骤。
在自己的电脑上使用已经验证过的登录账号和实际 SSH 端口建立隧道。该账号不必是运行 Gateway 的 openclaw 服务用户:
read -r -p '已验证 SSH 用户: ' VPS_SSH_USER
read -r -p '服务器 IP 或主机名: ' VPS_HOST
read -r -p '实际 SSH 端口: ' VPS_SSH_PORT
test -n "$VPS_SSH_USER" && test -n "$VPS_HOST" || exit 1
case "$VPS_SSH_PORT" in ''|*[!0-9]*) exit 1 ;; esac
ssh -N -p "$VPS_SSH_PORT" \
-L 18789:127.0.0.1:18789 \
"${VPS_SSH_USER}@${VPS_HOST}"
然后只在本机浏览器访问:
http://127.0.0.1:18789/
即使配置了 token 或 password,也不应把 Control UI 直接暴露到公共互联网。多人或远程团队场景优先使用独立 Gateway、SSH 隧道或 Tailscale,并保持清晰的操作者边界。
先建立消息入口的安全基线
每次调整网络、频道或插件后运行:
openclaw security audit
openclaw security audit --deep
优先检查 DM、群聊、Gateway 绑定、认证、工具权限、沙箱、文件权限与插件 allowlist。不要机械运行 --fix;先阅读每项 finding,确认修复不会切断仍需保留的管理路径。
默认使用 pairing 或 allowlist。open 会允许更广泛的发送者触发 Agent,只适用于你明确接受该权限范围的入口。
OpenClaw 插件是在 Gateway 进程内运行的可信代码。安装插件等于允许其读取相应配置、文件和环境;只用可信来源,核对包名与版本,并优先安装明确版本。
接入微信:外部腾讯插件
微信通过腾讯微信团队维护的外部包 @tencent-weixin/openclaw-weixin 接入。它支持私聊和媒体;微信群聊不声明支持,不能把私聊测试结果扩展成群聊承诺。
先查询当前版本和下载地址:
WEIXIN_PACKAGE='@tencent-weixin/openclaw-weixin'
WEIXIN_VERSION=$(npm view "$WEIXIN_PACKAGE" version) || exit 1
npm view "${WEIXIN_PACKAGE}@${WEIXIN_VERSION}" dist.tarball
printf '准备安装 %s@%s\n' "$WEIXIN_PACKAGE" "$WEIXIN_VERSION"
核对官方微信渠道文档、包来源和当前 OpenClaw 兼容范围后,再安装刚才确认的明确版本:
test -n "${WEIXIN_PACKAGE:-}" && test -n "${WEIXIN_VERSION:-}" || {
echo '请先在同一 shell 核对微信插件版本' >&2
exit 1
}
openclaw plugins install "${WEIXIN_PACKAGE}@${WEIXIN_VERSION}"
openclaw config set plugins.entries.openclaw-weixin.enabled true
openclaw gateway restart
二维码登录必须在运行 Gateway 的同一台服务器上发起:
openclaw channels login --channel openclaw-weixin
扫码后,从未批准的微信账号发送一条测试消息。它应进入 pairing,而不是直接调用工具:
openclaw pairing list openclaw-weixin
read -r -p 'Pairing code: ' WEIXIN_PAIRING_CODE
test -n "$WEIXIN_PAIRING_CODE" || exit 1
openclaw pairing approve openclaw-weixin "$WEIXIN_PAIRING_CODE"
多个微信账号应隔离私聊会话:
openclaw config set session.dmScope per-account-channel-peer
openclaw gateway restart
接入飞书:优先使用 WebSocket 向导
飞书官方插件支持机器人私聊和群聊。默认 WebSocket 长连接不需要公网回调地址,因此普通 VPS 部署不应为飞书额外开放 Webhook 端口。
运行当前设置向导:
openclaw channels login --channel feishu
向导会在缺少时安装官方 @openclaw/feishu 插件,并让你选择飞书或 Lark、扫码或手动凭据、DM 与群聊策略。完成后重启:
openclaw gateway restart
两条凭据路径的 DM 结果不同:扫码设置会把 dmPolicy 设为 allowlist 并只允许扫码账号;手动设置的默认值才是 pairing。群聊默认使用 allowlist,并要求 @ 提及。
若使用手动设置,从自己的测试账号发消息取得配对码后再批准;扫码设置不应等待 pairing:
openclaw pairing list feishu
read -r -p 'Pairing code: ' FEISHU_PAIRING_CODE
test -n "$FEISHU_PAIRING_CODE" || exit 1
openclaw pairing approve feishu "$FEISHU_PAIRING_CODE"
不要把 App Secret 写进文章、工单或群聊。若使用手动配置,应在飞书开放平台限制应用权限,并在泄露后立即轮换。
接入 QQ:使用当前腾讯连接插件
QQ Bot 当前包名是 @tencent-connect/openclaw-qqbot。不要复用旧教程中的其他包名,应以当前官方渠道文档为准。
先核对明确版本:
QQBOT_PACKAGE='@tencent-connect/openclaw-qqbot'
QQBOT_VERSION=$(npm view "$QQBOT_PACKAGE" version) || exit 1
npm view "${QQBOT_PACKAGE}@${QQBOT_VERSION}" dist.tarball
printf '准备安装 %s@%s\n' "$QQBOT_PACKAGE" "$QQBOT_VERSION"
确认包来源后安装:
test -n "${QQBOT_PACKAGE:-}" && test -n "${QQBOT_VERSION:-}" || {
echo '请先在同一 shell 核对 QQ 插件版本' >&2
exit 1
}
openclaw plugins install "${QQBOT_PACKAGE}@${QQBOT_VERSION}"
openclaw channels add
交互式向导可以使用二维码绑定,避免把 AppSecret 放入 shell 历史。若必须手动配置,优先使用受限环境变量或 clientSecretFile,不要在命令行参数中直接粘贴长期密钥。
QQ 插件在没有具体 allowlist 时,私聊和群聊可能默认 open。向导结束后不要直接开放 Agent;先禁用两个入口,再重启频道用于识别身份:
openclaw config set channels.qqbot.dmPolicy disabled
openclaw config set channels.qqbot.groupPolicy disabled
openclaw gateway restart
在私聊发送 /bot-me,取得自己的成员 OpenID;将 Bot 加入目标群并从已核对的事件记录取得群 OpenID。groupAllowFrom 填成员 OpenID,目标群则写入 groups.<GROUP_OPENID>:
read -r -p '允许的 QQ 成员 OpenID: ' QQ_ALLOWED_MEMBER
read -r -p '目标 QQ 群 OpenID: ' QQ_ALLOWED_GROUP
test -n "$QQ_ALLOWED_MEMBER" && test -n "$QQ_ALLOWED_GROUP" || exit 1
case "$QQ_ALLOWED_GROUP" in *[!A-Za-z0-9_-]*) exit 1 ;; esac
QQ_ALLOWED_MEMBERS_JSON=$(node -e \
'process.stdout.write(JSON.stringify([process.argv[1]]))' \
"$QQ_ALLOWED_MEMBER") || exit 1
openclaw config set channels.qqbot.dmPolicy allowlist
openclaw config set channels.qqbot.allowFrom \
"$QQ_ALLOWED_MEMBERS_JSON" --strict-json
openclaw config set channels.qqbot.groupPolicy allowlist
openclaw config set channels.qqbot.groupAllowFrom \
"$QQ_ALLOWED_MEMBERS_JSON" --strict-json
openclaw config set "channels.qqbot.groups.${QQ_ALLOWED_GROUP}" \
'{"requireMention":true,"commandLevel":"safety"}' --strict-json
openclaw gateway restart
随后从允许的私聊和指定群分别验证,并确认其他成员、其他群不能触发 Agent。指定群保留 @ 触发,敏感命令仍回到私聊执行。
做行为级验收
先检查服务、插件、频道和安全报告:
openclaw gateway status --deep --json
openclaw plugins list --json
openclaw channels status --probe
openclaw security audit --deep
再做四类真实测试:
- 已批准私聊账号可以收到一条最小回复;
- 未批准账号不能触发模型或工具;
- 未加入 allowlist 的群不能触发 Agent;
- SSH 隧道关闭后,公网不能直接访问 Control UI。
最后查看本次测试时间附近的日志。日志里不应出现循环重启、认证失败洪泛、插件版本不兼容或意外公网监听。
openclaw logs --follow
不要在公开工单中粘贴完整日志;先删除 token、AppSecret、用户标识、消息正文和文件路径。
重新备份后再升级
若安装或频道配置后产生了新状态,升级前重新执行前面的 openclaw backup create --output ~/Backups/openclaw --verify,并把新归档复制到 VPS 之外。不要把变更前的旧归档当作本次升级恢复点。
记录当前版本和状态,再预览升级:
openclaw --version
openclaw gateway status --deep --json
openclaw update --dry-run
预览符合预期后执行官方 updater:
openclaw update
升级后重复版本、Gateway、插件、频道和安全检查,并发送真实消息。不要只凭 updater 退出码判断业务已经恢复。
若新版不兼容,先保存当前状态并查询已发布版本。输入已经验证过的明确版本,先预览,再执行代码回退:
npm view openclaw versions --json
read -r -p '已知可用版本: ' KNOWN_GOOD_VERSION
test -n "$KNOWN_GOOD_VERSION" || exit 1
openclaw update --tag "$KNOWN_GOOD_VERSION" --dry-run
openclaw update --tag "$KNOWN_GOOD_VERSION"
只有旧代码不能读取新状态时才考虑状态恢复。官方恢复器只写入新的 staging 目录,不会原地覆盖在线状态:
read -r -p '验证归档路径: ' BACKUP_ARCHIVE
test -f "$BACKUP_ARCHIVE" || exit 1
RESTORE_STAGE=$(mktemp -d "$HOME/openclaw-restore.XXXXXX") || exit 1
openclaw backup restore "$BACKUP_ARCHIVE" --target "$RESTORE_STAGE"
这一步会重新验证归档,只生成 staging,不会修改在线状态。检查其中的 manifest.json,停止 Gateway 并另存当前状态后,再按官方灾难恢复流程离线激活;不要把归档直接覆盖到正在运行的 ~/.openclaw。
常见故障定位
SSH 退出后 Gateway 停止
确认服务确实属于 openclaw 用户,并检查 linger:
loginctl show-user openclaw -p Linger
systemctl --user status openclaw-gateway.service
不要同时混用 root 服务、用户服务和手工后台进程,否则日志、端口和实际运行版本容易错位。
安装插件后 Gateway 循环重启
先从 Lish 或现有 SSH 会话禁用刚安装的插件,恢复 Gateway,再核对插件包名、明确版本和 OpenClaw 兼容范围。不要在循环重启状态下连续强制覆盖安装。
频道显示已连接但不回复
依次检查频道探测、pairing、DM policy、群 allowlist、提及要求和模型调用。未批准发送者被拒绝是预期安全行为,不应通过改成 open 来掩盖配置问题。
控制台无法访问
先在 VPS 本机检查 Gateway 和 loopback 监听,再检查 SSH 隧道。不要为排障临时开放公网端口;这会改变问题和安全边界。
iVPSer 服务边界
iVPSer 可提供 VPS 开通、基础资源和控制台入口。OpenClaw 安装、模型账户、第三方插件、聊天平台审核、密钥保护、内容合规、备份恢复和 Agent 执行结果由使用者负责。
实例规格、库存和价格以实时控制台为准。先根据实际频道数量、工具、浏览器任务、日志和监控选择配置,再用真实负载决定是否调整。
👉 立即购买 VPS