OpenClaw VPS 部署教程:安全安装、微信/飞书/QQ 接入与备份

· 更新于 · 发布:iVPSer · Linux教程建站

OpenClaw 是自托管个人 AI 助手。Gateway 保存配置、会话、凭据和工作区,也能调用主机工具。部署到 VPS 可以常驻运行,但不会自动带来多租户隔离或无限资源。

本文面向一个可信操作者管理的 Linux VPS。一个信任边界只运行一个 OpenClaw Gateway;互不信任的用户应使用独立 Gateway,并优先拆分到不同系统用户或主机。

先判断这种部署是否适合你

使用目标建议
自己通过手机调用个人助手可在专用 VPS 上部署
同一团队共享业务 Agent仅限成员属于同一信任边界,并限制工具权限
为互不信任的客户提供服务不共享 Gateway;按租户隔离系统用户、凭据和运行环境
主要操作本机文件或桌面应用本地运行或配对受控节点通常更直接
在 VPS 上运行本地大模型先核对实际 CPU、内存、磁盘和 GPU,不根据本文猜测

OpenClaw 的主会话默认可以调用主机工具。聊天入口不是普通客服表单;能向工具型 Agent 发消息的人,可能间接影响文件、网络与命令执行。

变更前准备服务器和回滚路径

先完成 Linux VPS 初始安全配置,至少确认以下条件:

如果服务器上已经有 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 -gPATH,不要盲目把陌生目录加入启动脚本。

完成引导并验证 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

再做四类真实测试:

  1. 已批准私聊账号可以收到一条最小回复;
  2. 未批准账号不能触发模型或工具;
  3. 未加入 allowlist 的群不能触发 Agent;
  4. 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

参考资料