2026年9月6日 星期日

OpenClaw 學習筆記 : 在樹莓派 Pi 4 安裝 OpenClaw (四)

在前一篇測試中我已完成 OpenClaw 初始化 (Onboarding), 主要是設定好語言模型 (選擇 GTP 5.6) 後用瀏覽器透過 Web UI 介面順利連線 Gateway. 但是 OpenClaw 預設只綁定 127.0.0.0 (localhost) 網址, 僅能本機瀏覽, 如果使用本機的內網 IP (192.168.xxx.xxx) 會顯示無法連線, 本篇將更改設定, 綁定 Gateway 到所有網路介面 (網址 0.0.0.0), 讓區網內其他主機也可存取 Web UI 主控台頁面.

本系列全部測試文章索引參考 :



首先用下列指令過濾出樹莓派 Pi 4 在區網的 IP :

pi@pi4b:~ $ hostname -I | awk '{print $1}'   
192.168.1.111

然後開啟 Pi 4 瀏覽器用此網址訪問 Gateway 會看到 "無法連上這個網站" :




這是因為 OpenClaw 預設只監聽本機 loopback 位址 (127.0.0.1/localhost), 沒有對外綁定到所有網路介面 (0.0.0.0), 可用下列指令確認 : 

pi@pi4b:~ $ ss -tulpn | grep 18789  
tcp   LISTEN 0      511        127.0.0.1:18789      0.0.0.0:*    users:(("MainThread",pid=829,fd=32))
tcp   LISTEN 0      511            [::1]:18789         [::]:*    users:(("MainThread",pid=829,fd=33))

輸出顯示 127.0.0.1:18789 表示 Gateway 目前只對本機開放, 外部或實體 IP 無法存取. 當服務只監聽 127.0.0.1 時, 任何透過實體 IP  (192.168.1.111) 進來的封包, Linux 核心都會直接拒絕連線.

要讓區網內其它主機可以存取 OpenClaw 的作法有兩個, 採用任何一個都可以, 但它們的層級不同, 標準作法是兩個都做, 這樣有雙重保障作用 :


1. 修改 OpenClaw 設定檔 :

修改 OpenClaw 設定檔決定了程式預設的內部行為. 

先檢視 openclaw 資料夾下的檔案列表 : 

pi@pi4b:~ $ ls -ls ~/.openclaw   
總用量 68
4 drwxr-xr-x 3 pi pi 4096  8月 25 14:58 agents
4 drwxr-xr-x 2 pi pi 4096  8月 25 14:59 audit
4 drwxr-xr-x 4 pi pi 4096  8月 27 19:24 crestodian
4 drwxr-xr-x 2 pi pi 4096  9月  5 01:45 devices
4 -rw------- 1 pi pi  143  8月 25 14:58 exec-approvals.json
4 drwx------ 2 pi pi 4096  8月 25 14:59 identity
4 drwx------ 2 pi pi 4096  8月 25 14:58 logs
4 drwxr-xr-x 3 pi pi 4096  8月 25 17:52 npm
4 -rw------- 1 pi pi 1455  8月 25 18:07 openclaw.json
4 -rw------- 1 pi pi 1079  8月 25 18:07 openclaw.json.bak
4 -rw------- 1 pi pi 1455  9月  5 01:39 openclaw.json.last-good
4 drwxr-xr-x 2 pi pi 4096  8月 27 19:24 plugin-skills
4 drwxr-xr-x 3 pi pi 4096  8月 25 15:04 skill-workshop
4 drwx------ 2 pi pi 4096  9月  5 01:39 state
4 drwx------ 2 pi pi 4096  8月 25 18:07 tui
4 drwx------ 3 pi pi 4096  8月 25 14:58 workspace
4 drwxr-xr-x 2 pi pi 4096  8月 25 14:58 workspace-attestations

OpenClaw 的設定檔為 openclaw.json, 用 nano 開啟它後, 找到 gateway 屬性底下的子屬性 bind, 將其預設值 loopback 改為 lan, 按 Ctrl + O 存檔再按 Ctrl + X 離開 nano 即可 : 




預設的 "bind": "loopback" 會將 host 限制在 127.0.0.1 (即 localhost), 改成 "bind": "lan" 就是將 host 開放為 0.0.0.0 (允許區域網路內所有 IP 存取). 


2. 修改 systemd 服務啟動參數 :

啟動服務 systemd 的命令列參數權限高於上面 OpenClaw 的設定檔 (CLI flag overrides config), 即使 OpenClaw 設定檔被重設或誤動, systemd 常駐服務依然會將 Gateway 強制綁定在區網介面上. 用 nano 編輯 systemd 服務檔 : 

pi@pi4b:~ $ nano ~/.config/systemd/user/openclaw-gateway.service  

找到 ExecStart 這一行, 在末尾加上 --bind lan :





按 Ctrl + O 存檔再按 Ctrl + X 離開 nano 後, 重載 systemd 服務設定並重啟 Gateway : 

pi@pi4b:~ $ systemctl --user daemon-reload   
pi@pi4b:~ $ systemctl --user restart openclaw-gateway.service

再次驗證監聽位址 : 

pi@pi4b:~ $ ss -tulpn | grep 18789   
tcp   LISTEN 0      511          0.0.0.0:18789      0.0.0.0:*    users:(("MainThread",pid=1683315,fd=32))

可知 Gateway 監聽位址已變更為 0.0.0.0:18789, 這時重新整理樹莓瀏覽器 (或用區網其它主機瀏覽器) 就可順利用 http://192.168.1.111:18789 存取 OpenClaw 的 Web UI 了 : 




但我在網關令牌欄位貼上 openclaw.json 設定檔中的 token 後卻無法連線 OpenClaw :





詢問 Gemini, 原來 OpenClaw 的 Gateway 本身沒有提供關閉安全上下文校驗的 CLI 旗標, 這是刻意設計的硬性安全防護, Web UI 產生裝置金鑰必須依賴瀏覽器的 Crypto Subsystem, 而非 HTTPS 或非 localhost 環境下該 API 會被瀏覽器直接鎖死. 

最快且免架設反向代理 (HTTPS 憑證) 的解決方案在瀏覽器將該 IP 列入白名單, 在 Chrome 網址列輸入並開啟下列網址 : 

chrome://flags/#unsafely-treat-insecure-origin-as-secure

找到 Insecure origins treated as secure, 勾選右邊選單為 "已啟動", 在底下欄位輸入 http://192.168.1.111:18789 後按右下角的 "重新啟動" 鈕 :





這時回 Web UI 網頁按連接鈕, 底下不再是無法連線, 而是需要配對 :




複製底下 2 中的配對指令貼到終端機執行配對 : 

pi@pi4b:~ $ openclaw devices approve 797a2bd2-d650-4fe2-993d-af6aa93229c0   
◇  

OpenClaw 2026.7.1-2 (0790d9f) — Self-hosted, self-updating, self-aware (just kidding... unless?).

◇  
◇  
Approved 3af89ec715dfe4d2fffeb70c6ae3df44d802893ecdec8fe71d573455d081a1db (797a2bd2-d650-4fe2-993d-af6aa93229c0)

看見 Approved 表示配對成功, 回到 Web UI 頁面, 再次按連接鈕就可以順利顯示 Web UI 控制台頁面了 :




沒有留言 :