尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

OpenClaw部署全攻略:解锁HTTPS安全访问,TaoToken统一Key接入实战

OpenClaw部署全攻略:解锁HTTPS安全访问,TaoToken统一Key接入实战 1. 为什么 OpenClaw 一上公网就“断连”先搞懂安全上下文OpenClaw 是一个可本地部署的开源 AI 助手网关能对接多种大模型、挂载工具链、跑 Agent 任务适合想在自己服务器上掌控数据与调用链路的开发者。它自带 Web 控制台默认监听 18789 端口。很多人第一次把它跑在云服务器上浏览器打开http://公网IP:18789界面能加载但登录后立刻弹出一行红字disconnected (1008): control ui requires HTTPS or localhost (secure context)这不是 OpenClaw 的 bug而是浏览器的硬性规则。OpenClaw 的控制台用 Web Crypto API 做设备身份校验而 Web Crypto 只在**安全上下文Secure Context**里可用。安全上下文只有两种来源一是localhost/127.0.0.1二是 HTTPS。你用公网 IP 走 HTTP浏览器直接判定“不安全”加密接口全部拒绝WebSocket 握手也就跟着断了。所以“部署 OpenClaw”这件事真正卡人的不是装不装得上而是怎么让公网访问落在 HTTPS 上。这篇就按 Docker Nginx 反代的路线把证书挂载、反代配置、TaoToken 统一 Key 接入一次讲透最后给你能直接复制的 curl 验证动作。先说清楚本文适合谁已经在服务器上跑起 OpenClaw 容器、手里有域名、想用一把统一 Key 调多家模型的人。如果你还没装 Docker先补docker compose version能正常输出再往下看。TaoToken 在这里的角色是“统一模型入口”。OpenClaw 支持自定义 OpenAI 兼容的 Base URL你把 TaoToken 的 API 地址填进去就能用同一个 Key 调用不同厂商的模型不用在 OpenClaw 里维护一堆厂商 Key。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 根地址是 https://taotoken.net/api 。下面按“先跑通 HTTPS再接通模型”的顺序来每一步都给可复制的片段。2. Docker Compose 起 OpenClaw端口、卷与网关 Token 怎么设先把容器跑起来并且只绑定回环地址让 Nginx 来做对外入口。这样 18789 不直接暴露公网安全面小很多。新建目录并写docker-compose.ymlservices: openclaw: image: ghcr.io/1186258278/openclaw-zh:latest container_name: openclaw restart: unless-stopped ports: - 127.0.0.1:18789:18789 volumes: - ./data:/root/.openclaw - ./certs:/certs:ro environment: - TZAsia/Shanghai - OPENCLAW_GATEWAY_TOKEN换成你自己的长随机串几个关键点逐个说。ports写成127.0.0.1:18789:18789意思是宿主机只监听本地回环。外网访问 18789 会直接被拒所有流量必须经过 Nginx。这是生产部署的基本姿势别图省事写成18789:18789。./data:/root/.openclaw把配置目录挂出来后面改openclaw.json不用进容器。./certs:/certs:ro是给内置 TLS 方案预留的证书目录走 Nginx 反代时其实用不到但留着不碍事只读挂载更安全。OPENCLAW_GATEWAY_TOKEN是网关访问令牌登录控制台要输。别用your-secure-token这种示例值用openssl rand -hex 32生成一串。启动docker compose up -d docker compose logs -f openclaw日志里看到网关监听 18789、没有报错就说明容器起来了。此时在服务器本机执行curl -s -o /dev/null -w %{http_code}\n http://127.0.0.1:18789返回 200 或 302 都算正常。如果返回 000说明容器没起或端口没通先docker compose ps看状态。接下来配置 OpenClaw 信任反向代理。编辑./data/openclaw.json至少要有这些字段{ gateway: { bind: loopback, port: 18789, trustedProxies: [127.0.0.1, ::1], auth: { mode: token, token: 换成你自己的长随机串 }, controlUi: { allowedOrigins: [https://你的域名] } } }trustedProxies必须包含127.0.0.1否则 Nginx 转发过来的请求会被判定为“来自不可信地址”报Proxy headers detected from untrusted address。allowedOrigins填你的 HTTPS 域名解决跨域。改完重启docker compose restart openclaw到这里容器侧就绪。下一步是 Nginx 和证书。3. Nginx 反代 证书挂载可复制的 server 配置片段先装 Nginx 和 Certbot。Ubuntu / Debiansudo apt update sudo apt install -y nginx certbot python3-certbot-nginx sudo systemctl enable nginx sudo systemctl start nginx写配置文件/etc/nginx/sites-available/openclaw。注意 WebSocket 升级头是重中之重OpenClaw 控制台靠长连接实时刷新缺了 Upgrade 头就会反复断连。map $http_upgrade $connection_upgrade { default upgrade; close; } server { listen 80; server_name 你的域名; return 301 https://$server_name$request_uri; } server { listen 443 ssl; http2 on; server_name 你的域名; ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security max-age63072000; includeSubDomains always; add_header X-Content-Type-Options nosniff; location / { proxy_pass http://127.0.0.1:18789; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_read_timeout 86400s; proxy_send_timeout 86400s; proxy_connect_timeout 75s; proxy_buffering off; } }proxy_buffering off对实时交互很关键开着缓冲会让流式输出一顿一顿。proxy_read_timeout 86400s是给长任务留足时间Agent 跑几分钟很正常。启用站点并测试sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginxnginx -t必须返回syntax is ok和test is successful有报错先修再 reload。申请证书sudo certbot --nginx -d 你的域名Certbot 会自动把证书路径写进配置并设置续期定时器。验证续期sudo certbot renew --dry-run看到Congratulations, all simulated renewals succeeded就放心了。证书 90 天有效自动续期别关。如果你用 Docker 跑 Nginx证书挂载要写进 composenginx: image: nginx:stable ports: - 80:80 - 443:443 volumes: - ./nginx/openclaw.conf:/etc/nginx/conf.d/openclaw.conf:ro - /etc/letsencrypt:/etc/letsencrypt:ro depends_on: - openclaw注意容器里的 Nginx 访问宿主机上的 OpenClawproxy_pass不能写127.0.0.1要写宿主机在 Docker 网络里的地址或者把 OpenClaw 和 Nginx 放进同一个 compose 网络用服务名http://openclaw:18789。这是很多人踩的坑配置照抄结果 502。4. 接入 TaoToken 统一 KeyBase URL、Key 与 Model ID 三件套HTTPS 通了之后控制台能登录了但模型还没接。OpenClaw 支持 OpenAI 兼容协议TaoToken 正好提供这个入口所以配置很直接。在 OpenClaw 控制台里找到模型 / Provider 设置或者直接改openclaw.json的模型段。核心就三样Base URL、API Key、Model ID。{ models: { providers: { taotoken: { type: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: 你的TaoToken Key, models: [ { id: claude-sonnet-4-5, name: Claude Sonnet }, { id: gpt-4o-mini, name: GPT-4o mini } ] } } } }Base URL 写https://taotoken.net/api不要多加/v1之类的后缀OpenClaw 会按 OpenAI 兼容规范自己拼路径。Key 在控制台的 API Keys 页面生成入口是 https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。Model ID 要填 TaoToken 支持的模型标识填错会报model not found。改完重启容器docker compose restart openclaw如果你用的是 Claude Code 这类需要单独配置的客户端TaoToken 也提供对应的接入文档路径在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 里面有 Base URL、Key、Model ID 的完整填法。长期跑编码任务或 Agent 的可以看 Coding Plan 页面 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 按用量选更划算。配置完先别急着在界面里点用 curl 直接打 TaoToken 的接口确认 Key 本身有效curl -s https://taotoken.net/api/chat/completions \ -H Authorization: Bearer 你的TaoToken Key \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: ping}] }返回里带choices数组和内容说明 Key 和模型都通。如果返回 401是 Key 问题返回model not found是 Model ID 写错。这一步单独验证能把“网络问题”和“配置问题”分开排障快很多。5. 验证 HTTPS 与 Key 生效curl 检查动作与常见报错对照部署完别只看浏览器用 curl 做几组检查结果可复现。第一组验证 HTTPS 和证书链curl -sS -o /dev/null -w http_code%{http_code} ssl_verify%{ssl_verify_result}\n \ https://你的域名http_code200或302、ssl_verify0表示证书有效、链路正常。ssl_verify非 0 说明证书链有问题多半是 fullchain 没配对。第二组验证 HTTP 跳转 HTTPScurl -sS -o /dev/null -w %{http_code} - %{redirect_url}\n http://你的域名应返回301 - https://你的域名/。第三组验证 WebSocket 升级头是否透传curl -sS -i -N \ -H Connection: Upgrade \ -H Upgrade: websocket \ -H Sec-WebSocket-Version: 13 \ -H Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ \ https://你的域名/ | head -n 20看到101 Switching Protocols就说明反代的 Upgrade 头生效了。如果返回 400 或直接断开回去检查 Nginx 里的map和两个proxy_set_header。下面把常见报错和对应原因列成表方便对照。报错信息触发位置原因处理disconnected (1008): control ui requires HTTPS or localhost浏览器控制台用 HTTP 访问公网 IP配好 HTTPS 或改用 localhost401 UnauthorizedTaoToken 接口Key 错误或未带 Authorization检查 Key 与请求头local proxy failedOpenClaw 网关反代地址或网络不通确认proxy_pass指向可达地址reading choices模型调用返回体不是预期结构核对 Base URL 与 Model IDProxy headers detected from untrusted addressOpenClaw 日志未配trustedProxies加入127.0.0.1、::1OAuth相关报错客户端登录认证模式不匹配确认auth.mode与客户端一致502 Bad GatewayNginx后端容器不可达检查容器网络与服务名local proxy failed和reading choices这两个最容易混。前者是 OpenClaw 到模型入口的网络层失败后者是请求发出去了但响应结构不对。用第 4 节的 curl 单独打 TaoToken能快速定位是哪一层。还有一个隐蔽问题改了openclaw.json但没重启容器配置不生效。养成docker compose restart openclaw的习惯改完就看日志确认加载成功。6. 把安全链路固定下来续期、备份与统一入口跑通之后把几件事固定成习惯省得后面返工。证书续期交给 Certbot 的 timer但建议每月手动跑一次sudo certbot renew --dry-run确认没坏。Nginx 配置改动后永远先nginx -t再 reload别直接 restart。./data目录定期备份里面是 OpenClaw 的配置和会话数据。备份前先docker compose stop openclaw避免写一半拷走。模型入口统一到 TaoToken 之后换模型只改 Model ID不用动 Key 和 Base URL。需要看模型列表或临时对话验证走模型对话入口 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 要管理 Key 走 API Keys 页面接入细节查文档。这样一套 HTTPS 统一 Key 的链路换服务器、换域名都能照着复现。最后留一个实操建议把第 5 节那三条 curl 写成一个check.sh每次改完配置跑一遍比在浏览器里反复刷新快得多也更容易看出是哪一层出的问题。
返回列表