openclaw本地安装
----------------------安装环境nodejs
# 在https://nodejs.cn/download/下载node js
node-v24.13.0-linux-x64.tar.xz
# 上传包到服务器的/opt目录下
cd /opt
ll -ls
# 通常将 Node.js 安装在 /usr/local 或 /opt 目录下。这里以 /usr/local 为例,解压
tar -xf node-v24.13.0-linux-x64.tar.xz -C /usr/local
# 解压后会生成 /usr/local/node-v24.13.0-linux-x64 目录。为方便管理,可重命名为 node
mv /usr/local/node-v24.13.0-linux-x64 /usr/local/node
cd /usr/local/node
# 将 Node.js 的 bin 目录添加到 PATH 中,以便在任意位置使用 node 和 npm 命令
# 为当前用户配置(修改 ~/.bashrc 或 ~/.bash_profile):
echo 'export PATH=/usr/local/node/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
# 为所有用户配置(修改 /etc/profile 或 /etc/profile.d/node.sh):
echo 'export PATH=/usr/local/node/bin:$PATH' | tee /etc/profile.d/node.sh
source /etc/profile.d/node.sh
# 验证安装
node -v
# 应输出 v24.13.0
npm -v
# 应输出对应 npm 版本号(如 11.6.2)
# 创建软链接(替代 PATH 配置),如果不希望修改 PATH,也可以将可执行文件链接到系统已存在的目录(如 /usr/local/bin)
ln -s /usr/local/node/bin/node /usr/local/bin/node
ln -s /usr/local/node/bin/npm /usr/local/bin/npm
# 卸载,如需卸载 Node.js,只需删除解压目录并移除相关的环境变量配置或软链接
# 若配置了PATH,删除对应的文件/行;若创建了软链接,一并删除
rm -rf /usr/local/node
------------------------------------------------------配置源
# 备份原有源文件
mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
# 设置源
vi /etc/yum.repos.d/centos10.repo
# 复制下面内容保存
[baseos]
name=CentOS Stream 10 BaseOS
baseurl=https://mirrors.aliyun.com/centos-stream/10-stream/BaseOS/x86_64/os/
gpgcheck=0
enabled=1
[appstream]
name=CentOS Stream 10 AppStream
baseurl=https://mirrors.aliyun.com/centos-stream/10-stream/AppStream/x86_64/os/
gpgcheck=0
enabled=1
# 清理缓存并安装 Git
dnf clean all
dnf makecache
dnf install git -y
# 验证安装
git --version
# 出现:git version 2.52.0
----------------------离线下载openclaw
# 在有网络的环境中,创建缓存目录
cd /opt
mkdir openclaw-offline
cd /opt/openclaw-offline
# 下载OpenClaw及其所有依赖(不安装)
#npm init -y
npm install openclaw@latest --save
# 此时当前目录会生成 node_modules 和 package-lock.json
tar -czf openclaw-offline.tar.gz .
# 将整个目录打包传输到Redhat服务器
tar -czf openclaw-offline.tar.gz openclaw-offline/
# 在离线服务器上解压
tar -xzf openclaw-offline.tar.gz
cd openclaw-offline
# 离线安装
#npm install --offline
npm ci --offline --no-audit --no-fund
# 初始化OpenClaw,运行初始化向导,在初始化过程中,选择"QuickStart"模式,遇到模型提供商选择时选择"Skip for now",稍后通过配置文件手动设置
npx openclaw onboard
出现下面这个地址说明成功
◇ Control UI ─────────────────────────────────────────────────────────────────────╮
│ │
│ Web UI: http://127.0.0.1:18789/ │
│ Web UI (with token): │
│ http://127.0.0.1:18789/#token=67da114fd9333f75f9b05b33f212e4f090150e6e0a90510b │
│ Gateway WS: ws://127.0.0.1:18789 │
│ Gateway: reachable │
│ Docs: https://docs.openclaw.ai/web/control-ui │
│
----------------------浏览器访问http://127.0.0.1:18789/设置,配置文件官网地址:https://docs.openclaw.ai/gateway
# 查看配置:
npx openclaw dashboard
# 查看虚拟机IP地址
ip addr show
# 本地电脑浏览器访问http://192.168.106.129:18789/
或者 在虚拟机内部用 curl http://127.0.0.1:18789 测试网关是否正常工作
# 确认网关监听地址,如果输出中显示 127.0.0.1:18789,说明网关确实只监听本地。你需要修改配置,让其监听所有网络接口。
ss -tulpn | grep 18789
# 查看配置
cd /opt/openclaw-offline
npx openclaw config get
# 修改 OpenClaw 配置文件,编辑 OpenClaw 的配置文件 ~/.openclaw/openclaw.json,找到 gateway 部分,将 bind 的值从 "loopback"(或 "127.0.0.1")改为 lan或者"0.0.0.0",或者直接设置为虚拟机的 IP 地址,如下:
#介绍:绑定模式 (gateway.bind) 绑定的地址 认证要求 主要用途与说明
# loopback (默认) 127.0.0.1 (IPv4) 或 ::1 (IPv6) Token(必需)或可设为none(不推荐) 仅本机访问。最安全、默认的模式。你的网关目前工作在此模式下 。
# lan 0.0.0.0 (所有网络接口) Token 或密码(必须开启) 局域网访问。允许同一局域网内的其他设备(如你的宿主机)通过虚拟机的IP地址直接连接。这是解决你当前问题最直接的选项 。
# tailnet Tailscale 网络的接口IP(自动检测) Token、密码 或 Tailscale 身份认证 Tailscale VPN 网络访问。通过 Tailscale 组成安全的私有网络后,可以使用此模式,享受其带来的便利和安全性 。
# custom 用户指定的具体IP(如 192.168.1.50) Token 或密码(必须开启) 绑定到特定接口。如果你的机器有多个IP,只想让网关监听在其中一个上(例如一个VPN的IP),可以使用此模式 。
vi ~/.openclaw/openclaw.json
{
"gateway": {
"bind": "loopback",
"port": 18789,
"auth": {
"mode": "token",
"token": "你的token"
}
}
}
# 重启 OpenClaw 网关
cd /opt/openclaw-offline
npx openclaw gateway restart
或者
systemctl --user restart openclaw-gateway
systemctl --user start openclaw-gateway
systemctl --user stop openclaw-gateway
systemctl --user status openclaw-gateway
journalctl --user -u openclaw-gateway --no-pager -n 50
# 验证启动状态,你应该能看到 LISTEN 的端口,且 probe 返回 ok。
systemctl --user status openclaw-gateway
ss -tlnp | grep 18789
npx openclaw gateway probe
# 检查防火墙:确保 8080 端口已开放:
firewall-cmd --list-all | grep 18789
firewall-cmd --list-all | grep 8080
firewall-cmd --list-all | grep 41641
# 确保虚拟机的防火墙(如 firewalld 或 iptables)允许外部访问 18789 端口。
firewall-cmd --add-port=18789/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=41641/tcp --permanent
firewall-cmd --reload
# 查看防火墙状态
systemctl status firewalld.service
# 开启/关闭防火墙
systemctl start firewalld.service
systemctl stop firewalld.service
# iptables,保存规则(根据你的发行版方式)
iptables -A INPUT -p tcp --dport 18789 -j ACCEPT
不安装安装Tailscale或者管理员打开Powershell ,执行:ssh -L 18888:localhost:18789 root@192.168.106.129 -N
输入密码后卡住不动,本地浏览器访问http://localhost:18888/chat?session=main也可以
----------------------安装Tailscale
# 查看最新版本号(可选)
curl -s https://pkgs.tailscale.com/stable/ | grep -o 'tailscale_[0-9.]*_amd64.tgz' | head -1
# 下载最新稳定版(以 tailscale_1.94.2_amd64.tgz 为例,实际请替换为最新版)
curl -o /opt/tailscale_1.94.2_amd64.tgz https://pkgs.tailscale.com/stable/tailscale_1.94.2_amd64.tgz
# 解压并安装二进制文件
cd /opt
tar xvf tailscale_1.94.2_amd64.tgz
cd tailscale_1.94.2_amd64
cp tailscale /usr/bin/
cp tailscaled /usr/sbin/
# 安装 systemd 服务文件
cp systemd/tailscaled.service /etc/systemd/system/
systemctl daemon-reload
# 创建配置目录
mkdir -p /var/lib/tailscale
# Tailscale 需要内核的 TUN/TAP 支持。检查 TUN 是否已加载,如果提示模块不存在,可能需要安装内核模块或升级内核。
lsmod | grep tun
# 如果没有输出,尝试加载:
modprobe tun
# ailscale 默认使用 UDP 41641 端口,上面已经加到防火墙中
# 确保状态目录和 socket 目录可写
ls -la /var/lib/tailscale /var/run/tailscale
# 如果目录不存在,手动创建:
mkdir -p /var/lib/tailscale /var/run/tailscale
# 检查系统资源限制(内存、文件描述符)是否足够
ulimit -n # 查看最大文件描述符数,建议至少 65535
# 永久提高系统限制
sudo vi /etc/security/limits.conf
# 添加如下配置,保存退出。重新登录(或重启)后生效。
* soft nofile 65535
* hard nofile 65535
# 或者:在文件tailscaled.service的 [Service] 部分添加一行添加
LimitNOFILE=65535
vi /etc/systemd/system/tailscaled.service
systemctl daemon-reload
# 创建环境文件环境文件
touch /etc/default/tailscaled
# 服务文件中指定的路径需要调整,看到类似 EnvironmentFile=-/etc/default/tailscaled 的行,可以将其注释掉。以及去除ExecStart后面的--port=${PORT} $FLAGS
cat /etc/systemd/system/tailscaled.service
vi /etc/systemd/system/tailscaled.service
systemctl daemon-reload
# 手动测试 tailscaled 的ExecStart命令,如果命令正常前台运行(不会立即退出),说明二进制文件没问题。按 Ctrl+C 停止
/usr/sbin/tailscaled --state=/var/lib/tailscale/tailscaled.state --socket=/run/tailscale/tailscaled.sock
# 启动并连接 Tailscale
systemctl enable --now tailscaled
# 查看服务状态
systemctl status tailscaled.service
# 查看最近日志
journalctl -xeu tailscaled.service --no-pager
# 验证连接到你的 Tailnet,终端会输出一个类似 https://login.tailscale.com/... 的链接。
tailscale up
# 打开连接地址,进行验证后输出为:
[root@localhost tailscale_1.94.2_amd64]# tailscale up
To authenticate, visit:
https://login.tailscale.com/a/1613228a019502
Success.
# 验证登录,应该看到当前机器处于 connected 状态,并显示分配的 Tailscale IP(例如 100.x.x.x)。
tailscale status
# 参考:100.113.87.12 localhost-0 duzhenyi@ linux -
# 验证连接,在宿主机(有网络)上打开该链接,登录你的 Tailscale 账号(可免费注册),点击 Connect 将这台服务器添加到你的网络中,会显示一个 Tailscale 分配的 IP(如 100.x.x.x)。
tailscale ip
# 参考:
# 100.113.87.12
# fd7a:115c:a1e0::2001:572a
----------------------配置 OpenClaw 使用 Tailscale,本地没成功,建议使用另外SSH隧道方式(ssh -L 18888:localhost:18789 root@192.168.106.129 -N)
# 编辑 OpenClaw 配置文件 ~/.openclaw/openclaw.json,修改 gateway.tailscale 部分:
{
"gateway": {
// ... 其他配置
"tailscale": {
"mode": "serve", // 开启 Tailscale Serve
"resetOnExit": false
}
}
}
# 重启 OpenClaw 网关
cd /opt/openclaw-offline
npx openclaw gateway restart
或者:
systemctl --user start openclaw-gateway
systemctl --user stop openclaw-gateway
systemctl --user status openclaw-gateway
journalctl --user -u openclaw-gateway --no-pager -n 50
# 运行 npx openclaw gateway status,你会看到类似这样的输出
Dashboard: https://<your-hostname>.<your-tailnet>.ts.net/
# 防火墙:Tailscale 会自动处理,无需额外开放端口
# 密钥过期:如果这是长期运行的服务器,建议禁用密钥过期以避免定期重新认证。
# 卸载:如需卸载,删除二进制文件和 systemd 服务即可。
# 你的本地电脑(Windows)也需要安装 Tailscale 客户端,并用与虚拟机相同的账号登录
# 在虚拟机和宿主机上分别运行 tailscale status,检查双方是否都在设备列表中且状态为 connected。
[root@localhost openclaw-offline]# tailscale status
100.113.87.12 localhost-0 duzhenyi@ linux -
100.127.254.48 duling duzhenyi@ windows active; direct 192.168.220.1:41641, tx 4540 rx 4980
----------------------安装Nginx
yum install -y nginx # 如果是 CentOS/RHEL
systemctl start nginx
systemctl enable nginx
# 创建反向代理配置
vi /etc/nginx/conf.d/openclaw.conf
# 粘贴以下配置
server {
listen 192.168.106.129:8080; # 监听你服务器的局域网 IP 和端口(可自定义)
server_name 192.168.106.129;
location / {
proxy_pass http://127.0.0.1:18789;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 重启Nginx
nginx -t
systemctl reload nginx
# 配置 SELinux 允许 Nginx 进行网络连接
setsebool -P httpd_can_network_connect 1
----------------------配置两个独立AI机器人(GPT和Gemini)
cd /opt/openclaw-offline
# 创建两个Agent工作区,OpenClaw支持在一个网关内运行多个完全隔离的Agent,每个Agent拥有独立的workspace、记忆和模型配置
# 使用向导创建两个agent
npx openclaw agents add gpt-analyst
npx openclaw agents add gemini-analyst
# 查看创建的agent
npx openclaw agents list
# 手动配置模型提供商和API密钥,编辑OpenClaw配置文件(~/.openclaw/openclaw.json),配置GPT和Gemini模型:
cd /root/.openclaw
{
"models": {
"providers": {
"openai": {
"apiKey": "${OPENAI_API_KEY}",
"models": [
{
"id": "gpt-4-turbo",
"name": "GPT-4 Turbo",
"reasoning": true
}
]
},
"google": {
"apiKey": "${GEMINI_API_KEY}",
"models": [
{
"id": "gemini-2.5-flash",
"name": "Gemini 2.5 Flash",
"reasoning": true
}
]
}
}
},
"agents": {
"list": [
{
"id": "gpt-analyst",
"name": "GPT股票分析师",
"workspace": "~/.openclaw/workspace-gpt",
"model": {
"primary": "openai/gpt-4-turbo"
}
},
{
"id": "gemini-analyst",
"name": "Gemini量化专家",
"workspace": "~/.openclaw/workspace-gemini",
"model": {
"primary": "google/gemini-2.5-flash"
}
}
]
}
}
# 在离线服务器上设置环境变量(或直接在配置文件中填写API密钥,注意安全):
export OPENAI_API_KEY="你的OpenAI密钥"
export GEMINI_API_KEY="你的Gemini密钥"
# 配置每个Agent的个性,为每个Agent创建独立的SOUL.md文件,定义其角色和专业领域:
/root/.openclaw/workspace-gpt-analyst/SOUL.md
/root/.openclaw/workspace-gemini-analyst/SOUL.md
# GPT股票分析师
## 身份定位
你是价值投资分析师,擅长基本面分析和行业研究,偏好长线投资。
## 专业领域
- 财务报表分析(PE/PB/ROE)
- 行业赛道研究
- 宏观经济影响
- 公司估值模型
## 对话风格
严谨、数据驱动、附带风险提示
EOF
# Gemini量化专家
## 身份定位
你是量化交易专家,擅长技术分析和数学模型,偏好短线交易。
## 专业领域
- K线形态识别
- 技术指标计算(MACD/KDJ/RSI)
- 市场情绪量化
- 策略回测
## 对话风格
简洁、数据可视化、偏好概率分析
----------------------对接Discord并绑定两个Bot
# 创建两个Discord Bot
在Discord开发者平台创建两个应用和Bot:
访问 https://discord.com/developers/applications
点击"New Application",分别创建两个应用(如"GPT-Stock-Bot"和"Gemini-Stock-Bot")
进入每个应用的"Bot"页面,点击"Add Bot"
必须开启"Message Content Intent"(重要!否则Bot收不到消息)
点击"Reset Token"获取Bot Token,立即保存
GPT:
MTQ3NzU0NTMxOTYxNTk1OTE1MQ.GAfjeQ.dD_p-V9JsRAPlT7eSRKrYCYRoBsZRh7sZ-IWo8
# 邀请Bot到Discord服务器
为每个Bot生成邀请链接:
在应用页面进入"OAuth2" → "URL Generator"
勾选Scopes:✅ bot ✅ applications.commands
勾选Bot Permissions:✅ Read Messages/View Channels ✅ Send Messages ✅ Read Message History
复制生成的URL,在浏览器中打开,选择目标服务器,授权Bot加入
# 配置OpenClaw对接两个Discord Bot,编辑OpenClaw配置文件,添加Discord渠道配置:
# 获取服务器ID:在Discord中开启"开发者模式"(设置 → 高级),右键点击服务器名称 → 复制ID:1477461402729054248
{
"channels": {
"discord": {
"accounts": {
"gpt-bot": {
"token": "你的GPT Bot Token",
"applicationId": "GPT Bot的应用ID",
"dm": {
"enabled": true,
"policy": "pairing"
},
"groupPolicy": "allowlist",
"guilds": {
"你的服务器ID": {
"requireMention": true,
"channels": {
"stock-chat": { "allow": true }
}
}
}
},
"gemini-bot": {
"token": "你的Gemini Bot Token",
"applicationId": "Gemini Bot的应用ID",
"dm": {
"enabled": true,
"policy": "pairing"
},
"groupPolicy": "allowlist",
"guilds": {
"你的服务器ID": {
"requireMention": true,
"channels": {
"stock-chat": { "allow": true }
}
}
}
}
}
}
},
"bindings": [
{
"agentId": "gpt-analyst",
"match": {
"channel": "discord",
"accountId": "gpt-bot"
}
},
{
"agentId": "gemini-analyst",
"match": {
"channel": "discord",
"accountId": "gemini-bot"
}
}
]
}
# 网络环境特殊处理(重要),在中国大陆服务器上,Discord API被屏蔽,需要特殊处理:
# Discord需要同时连接REST API(HTTPS)和WebSocket(WSS)
# 普通HTTP代理无法处理WebSocket,需要使用支持TUN模式的代理工具
# 配置代理后,需删除HTTP_PROXY/HTTPS_PROXY环境变量,避免与TUN模式冲突
# 测试连接是否成功,应返回Bot的用户信息:
curl -H "Authorization: Bot 3e38ddbd958b1b62088a9c4cef45d6795f84f307f332f2050df326f837af8963" https://discord.com/api/v10/users/@me
# 启动OpenClaw网关并观察日志:
npx openclaw gateway --verbose
# 看到 "[discord] logged in to discord as ..." 表示成功
----------------------配置股票讨论功能
# 安装股票数据相关技能,OpenClaw支持通过Skills扩展功能,在有网络环境下载股票相关技能:
# 离线环境下,需要提前下载技能包并传输到服务器
ls -la /opt/openclaw-offline/node_modules/openclaw/skills/
npx openclaw skills search "stock"
npx openclaw skills install stock-market-data
npx openclaw skills install yfinance
openclaw add openclaw/skills --skill chaogu
openclaw add openclaw/skills --skill tvscreener
openclaw add openclaw/skills --skill stock-info-explorer
# 配置技能权限
{
"skills": {
"install": {
"nodeManager": "npm"
},
"entries": {
"stock-market-data": {
"apiKey": "${STOCK_API_KEY}" // 如有需要
},
"yfinance": {
"enabled": true
}
}
}
}
----------------------创建群聊讨论场景
# 在Discord中创建一个专门的股票讨论频道(如#stock-chat),确保两个Bot都在频道中。
# 当用户发送消息并@提及特定Bot时,该Bot会响应:
# @GPT股票分析师 分析一下宁德时代的基本面
# @Gemini量化专家 宁德时代现在技术面怎么看
# 为了让两个Bot在同一个话题下讨论,可以通过Cron定时任务让它们每天固定时间自动发言
# 配置定时任务
npx openclaw cron add --name "morning-stock" --cron "30 9 * * 1-5" --agent "gpt-analyst" --message "今天大盘怎么看?" --channel discord --peer "stock-chat"
npx openclaw cron add --name "afternoon-stock" --cron "30 14 * * 1-5" --agent "gemini-analyst" --message "补充技术面观点" --channel discord --peer "stock-chat"
----------------------启动与验证,常见问题排查
# 启动OpenClaw网关服务
npx openclaw gateway
npx openclaw gateway --port 18789
npx openclaw gateway run --port 18789 --bind loopback
# 查看状态
npx openclaw status
# 在Discord中测试
# 进入股票讨论频道
# 分别@两个Bot发送股票相关问题
# 观察它们是否能独立响应并提供专业分析
问题:Bot收不到消息 可能原因:Message Content Intent未开启 解决方法:Discord开发者平台 → Bot → 开启Intent
问题:连接失败 可能原因:网络被屏蔽 解决方法:配置TUN模式代理,删除HTTP_PROXY环境变量
问题:模型调用失败 可能原因:API密钥无效或配额不足 解决方法:检查环境变量设置
问题:Agent绑错Bot 可能原因:绑定配置错误 解决方法:npx openclaw agents list --bindings检查
问题:无法分析股票 可能原因:未安装数据Skills 解决方法:安装股票相关Skills
----------安装opencode
sudo opencode
opencode serve --port 4096 --hostname 0.0.0.0

浙公网安备 33010602011771号