1. 目录结构设计
建议在你的服务器(或家中的 NAS/Linux)创建一个专用文件夹:
openclaw-proxy/
├── docker-compose.yml
├── frp/
│ └── frpc.toml
└── nginx/
├── conf.d/
│ └── openclaw.conf
└── html/ (用于证书校验)2. 核心配置文件:docker-compose.yml
这个文件定义了三剑客的协作关系。我们使用 nginx-proxy-manager 或者原生的 Nginx + Certbot。这里推荐原生方案,更显硬核:
services:
# 1. frp 客户端:负责内网隧道
frpc:
image:snowdreamtech/frpc:latest
container_name:frpc
restart:always
volumes:
-./frp/frpc.toml:/etc/frp/frpc.toml
network_mode:"host"# 使用 host 模式减少网络开销
# 2. Nginx:负责 HTTPS 卸载和反向代理
nginx:
image:nginx:alpine
container_name:nginx-proxy
restart:always
ports:
-"80:80"
-"443:443"
volumes:
-./nginx/conf.d:/etc/nginx/conf.d
-./nginx/certs:/etc/nginx/certs
-./nginx/www:/var/www/html
depends_on:
-frpc
# 3. Certbot:自动申请和续期 SSL 证书
certbot:
image:certbot/certbot
container_name:certbot
volumes:
-./nginx/certs:/etc/letsencrypt
-./nginx/www:/var/www/html
# 每天凌晨自动检查续期
entrypoint:"/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"3. 配置 frpc.toml (连接公网中转)
serverAddr = "你的公网服务器IP"
serverPort = 7000
auth.token = "你的硬核Token"
[[proxies]]
name = "openclaw-https"
type = "tcp"
localIP = "127.0.0.1"
localPort = 443# 映射内网 Nginx 的 443
remotePort = 443# 映射公网服务器的 4434. 关键:Nginx 配置文件 (openclaw.conf)
这里包含了两段逻辑:ACME 证书校验 和 OpenClaw 的 Websocket 优化。
server {
listen 80;
server_name claw.yourdomain.com;
# Certbot 校验路径
location /.well-known/acme-challenge/ {
root /var/www/html;
}
# 强制跳转 HTTPS
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name claw.yourdomain.com;
ssl_certificate /etc/nginx/certs/live/claw.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/certs/live/claw.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000; # 这里的 8000 是 OpenClaw UI 端口
proxy_set_header Host $host;
# --- 以下是 OpenClaw 流式传输必备配置 ---
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off; # 必须关闭,否则打字机效果会卡顿
proxy_cache off;
chunked_transfer_encoding on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
}
}5. 一键启动脚本 (deploy.sh)
为了体现“一键”,我们把证书初始化也写进去:
#!/bin/bash
# 1. 启动服务
docker-compose up -d
# 2. 首次申请证书 (替换为你自己的域名和邮箱)
docker exec certbot certbot certonly --webroot -w /var/www/html \
-d claw.yourdomain.com \
--email yourname@email.com \
--agree-tos --no-eff-email
# 3. 重载 Nginx 应用证书
docker exec nginx-proxy nginx -s reload
echo"✅ OpenClaw 远程安全访问已就绪!"
echo"🔗 访问地址: https://claw.yourdomain.com"💡 建议 Tips:
1. 关于公网 IP: 这个方案需要你有一个带公网 IP 的云服务器做 frps(服务端)。如果你只有内网环境,可以考虑 Tailscale 或 ZeroTier 方案(这又是以后的一个选题)。2. 安全性加固: 虽然有了 HTTPS,但 OpenClaw 的 UI 最好再加一层 Nginx Basic Auth。 • 执行 printf "admin:$(openssl passwd -crypt 你的密码)\n" > ./nginx/conf.d/.htpasswd。• 在 Nginx 配置中加入 auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd;。3. 带宽建议: 因为 OpenClaw 主要是文本传输,即使是 1Mbps 的云服务器也绰绰有余。
夜雨聆风