方式二:手动操作(一步步来)

如果你想手动操作,也很简单:

第 1 步:本地 Mac 交叉编译

1
2
3
4
cd /Users/zes/work/aid/assistant/openclaw_assistant/server

# 编译 Linux 版本的二进制文件
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o bin/openclaw_assistant_linux main.go

逐个参数解释

参数 含义
CGO_ENABLED=0 禁用 CGO(C 语言绑定),确保编译出纯静态二进制文件,不依赖任何 .so
GOOS=linux 目标操作系统是 Linux(你的 Mac 是 darwin
GOARCH=amd64 目标 CPU 架构是 64 位 x86
-o bin/openclaw_assistant_linux 输出到 bin/ 目录,文件名带 _linux 后缀便于区分

第 2 步:上传到服务器

1
2
3
4
5
6
7
8
9
10
# 在服务器上创建目录
ssh ubuntu@你的服务器IP "mkdir -p ~/openclaw_assistant/conf ~/openclaw_assistant/log"

# 上传二进制文件
scp bin/openclaw_assistant_linux ubuntu@你的服务器IP:~/openclaw_assistant/openclaw_assistant

# 上传配置文件
scp conf/application.yml ubuntu@你的服务器IP:~/openclaw_assistant/conf/
scp conf/route.yml ubuntu@你的服务器IP:~/openclaw_assistant/conf/
scp .env ubuntu@你的服务器IP:~/openclaw_assistant/

第 3 步:在服务器上运行

1
2
3
4
5
6
7
8
9
10
11
12
# SSH 登录服务器
ssh ubuntu@你的服务器IP

# 进入项目目录
cd ~/openclaw_assistant

# 给二进制文件添加执行权限
chmod +x openclaw_assistant

# 设置环境变量并运行
export PROFILE=local
./openclaw_assistant

⚠️ 重要:部署前修改配置

在上传之前,你需要修改 application.yml 中的两个关键配置:

1
2
3
4
5
6
7
8
9
# 1. OpenClaw Docker 地址 — 改为 TKE 集群中 Docker 容器的内网地址
openclaw:
server_host: 10.x.x.x # Docker 容器的内网 IP
webhook_port: 8765
webhook_url: http://10.x.x.x:8765/metis/events # Docker 的真实地址
health_url: http://10.x.x.x:8765/health

# 2. callbackUrl — 在发送消息时,需要告诉 Docker 回调到你服务器的内网 IP
# 这个一般在代码中设置,确保 callbackUrl 指向你的 Ubuntu 服务器内网 IP:8086

由于你的 Ubuntu 服务器和 TKE 在同一 VPC,它们之间可以通过内网 IP 互相访问,Docker 的回调就能成功到达你的服务了。


整体流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
graph LR
subgraph 本地 Mac
A[Go 源代码] -->|CGO_ENABLED=0<br/>GOOS=linux<br/>GOARCH=amd64| B[Linux 二进制文件<br/>~15MB]
end

B -->|scp 上传| C

subgraph 同一 VPC
subgraph Ubuntu 服务器
C[openclaw_assistant<br/>+ conf/]
C -->|./openclaw_assistant| D[运行中 :8086]
end

subgraph TKE 集群
E[OpenClaw Docker :8765]
end

D -->|发送消息<br/>内网 HTTP| E
E -->|回调通知<br/>内网 HTTP| D
end

style A fill:#e3f2fd
style B fill:#fff3e0
style D fill:#c8e6c9
style E fill:#c8e6c9

这样就解决了回调问题:两台机器在同一 VPC,内网互通,Docker 可以直接通过内网 IP 回调到你的 Go 服务。