Tools: OpenClaw:安裝教學,在 macOS 用虛擬機 (Ubuntu) 安全部署龍蝦 AI

Tools: OpenClaw:安裝教學,在 macOS 用虛擬機 (Ubuntu) 安全部署龍蝦 AI

Source: Dev.to

OpenClaw:安裝教學,在 macOS 用虛擬機 (Ubuntu) 安全部署龍蝦 AI ## 本篇要解決的問題 ## 安裝 Node.js ## 取得 Telegram Bot Token ## 安裝 OpenClaw:正常版 ## 安裝 OpenClaw:遇到神奇錯誤版 ## 第一步:前置準備(安裝前先做) ## 第二步:正常安裝 OpenClaw ## 第三步:手動建立 Gateway Service ## 第四步:確認正常運作 ## 重新安裝 gateway ## 常用管理指令 ## 後續想要修改設定 自從 OpenClaw 橫空出世後,三不五時就會看到相關的文章和影音介紹,看起來是個跨時代的產物。不過伴隨而來的,也有不少資安方面的疑慮。 相信很多人都想試試龍蝦的威力,但說實話,安裝起來沒那麼簡單。 本篇主要筆記怎麼安裝 OpenClaw。為了安全考量,選擇先在本機架設虛擬機,再於虛擬機上安裝 OpenClaw。這樣萬一出事了,大不了直接把虛擬機砍掉就好。 下載並安裝 VirtualBuddy:https://github.com/insidegui/VirtualBuddy/releases。 安裝完 VirtualBuddy 後,打開來,選擇 Linux > 左下角的 Custom Link。 或者手動下載 iso:https://cdimage.ubuntu.com/releases/24.04.4/release/ 點擊「64-bit ARM (ARMv8/AArch64) server install image」。 在 VirtualBuddy 的介面,選擇 Linux > 左下角的 Custom File,選擇剛剛下載的檔案。 安裝時,遇到「Install OpenSSH server」,記得這選項要打勾。 安裝完並重開機後,建議後續改用 Mac 的終端機 ssh 的方式來操作。 本篇透過 npm 來安裝 OpenClaw,因此需要先安裝 Node.js。 安裝 Node.js(npm 會一併安裝) 龍蝦可以在多個平台使用,在看了幾個官方的 Releases,會發現每次更版都有針對 Telegram 的部分,看起來對 Telegram 的支援度較高,因此本篇使用 Telegram。 註冊了 Telegram 會員後,登入,我們要先建立一個機器人用的帳號。 Telegram 上要新增一個機器人很容易,一樣跟機器人對話就可以建立。 點擊這個網址加入 BotFather 為好友:https://telegram.me/BotFather。 接著對話框中傳送這個給 BotFather: 再按照 BotFather 需要我們回應的訊息,一步步回應後,就可以得到 Telegram Bot 的 Token,如下圖: 這個 Token 要存下來,之後安裝龍蝦時,就可以在安裝過程中直接輸入。 以下是平常有扶老婆婆過馬路,有積功德,可以一路順順走下去的 Happy Path 版本。 安裝完後,接著輸入以下指令,開始進行設定: 根據網路上看到的災情 + August 本人的 Google Antigravity 被封殺過的人體實驗證明 + 各家 API 的花費如果要到 Pro 等級的很燒 $$ 經驗…… 那個,對,August 曾經選擇 Gemini Pro 3 的 API,安裝個 gog 跟一些 skills 就燒掉了 3 美金,所以除非口袋很深,不然不建議用 API 的方式。 如果是選 OpenAI Codex,選了以後,就會看到一個網址,貼到瀏覽器上後,執行登入,接著會看到「無法連上這個網站」的畫面,莫驚慌莫害怕,我們只要把登入結果的 URL 回貼到終端機上就可以了。 如果是選 GitHub Copilot,選了以後,會看到一個網址,用 GitHub 帳號授權登入後,填寫介面提供的代碼,就完成了。 其他使用模型的方式 August 沒試過,大家可以抱著探索自己口袋深度的心態勇敢按下去。 選擇 Telegram (Bot API),再選 Enter Telegram bot token。 然後把我們在前一段從 Telegram 上取得的 Token 貼上去,就可以了。 接著會問要不要安裝 skill,在這邊可裝可不裝,看個人需求,這個階段跳過也無所謂,後續再跟 Agent 說要裝 XX skill 就行。 下一步會看到問要不要再輸入「GOOGLE_PLACES_API_KEY」、「GEMINI_API_KEY」、「OPENAI_API_KEY」、「ELEVENLABS_API_KEY」,可以都選「No」,因為凡是 Key、Token……都是要發動魔法小卡的。 「NOTION_API_KEY」,如果想讓 Agent 控制 Notion,可以填,在 Notion 的 integrations 頁面上可以取得 Key。 這一步一開始沒看懂,問了 Gemini 後才懂意思,如下: 勾不勾選就看個人需求,後續也都可以再更改。 最後,就安裝成功了,之後只要在 Telegram 建的機器人上隨便傳一句訊息,就會收到要配對的指令: 把最後一行的指令在終端機上執行,會看到收到以下的回傳訊息: 代表配對完成,可以在 Telegram Bot 上使用 OpenClaw 了。 過年前 August 安裝龍蝦,都是上一段的正常版本。 但遇到 Google Antigravity 用到被停權,前幾天帳號終於解封後,再安裝時就出現了錯誤。 如果進行到最後一步,看到以下錯誤,就代表恭喜你,要走這段的版本: 解決方式如下,就照著一步步輸入指令就可以,以下都是來自於 Claude 提供的解方。 遇到 systemctl 相關錯誤直接忽略,繼續完成設定。 is-enabled 應顯示 enabled。 openclaw status 裡 gateway 應顯示 reachable。 按照上面的步驟執行後,OpenClaw 就安裝成功了。 比方在安裝時,選了使用 GitHub Copilot,之後如果想換用 Openai Codex,或是一些設定值想要修改,要怎麼做呢? Templates let you quickly answer FAQs or store snippets for re-use. Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse CODE_BLOCK: https://cdimage.ubuntu.com/releases/24.04.4/release/ubuntu-24.04.4-live-server-arm64.iso Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: https://cdimage.ubuntu.com/releases/24.04.4/release/ubuntu-24.04.4-live-server-arm64.iso CODE_BLOCK: https://cdimage.ubuntu.com/releases/24.04.4/release/ubuntu-24.04.4-live-server-arm64.iso COMMAND_BLOCK: ssh [你的帳號]@192.168.64.13 範例: ssh [email protected] Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: ssh [你的帳號]@192.168.64.13 範例: ssh [email protected] COMMAND_BLOCK: ssh [你的帳號]@192.168.64.13 範例: ssh [email protected] COMMAND_BLOCK: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash COMMAND_BLOCK: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash COMMAND_BLOCK: source ~/.bashrc # 如果是用 Zsh source ~/.zshrc Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: source ~/.bashrc # 如果是用 Zsh source ~/.zshrc COMMAND_BLOCK: source ~/.bashrc # 如果是用 Zsh source ~/.zshrc CODE_BLOCK: nvm install --lts Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: nvm install --lts CODE_BLOCK: nvm install --lts CODE_BLOCK: /newbot Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: npm i -g openclaw Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: npm i -g openclaw COMMAND_BLOCK: npm i -g openclaw CODE_BLOCK: openclaw onboard Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: openclaw onboard CODE_BLOCK: openclaw onboard CODE_BLOCK: Approved telegram sender xxxxxxxxxx. Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: Approved telegram sender xxxxxxxxxx. CODE_BLOCK: Approved telegram sender xxxxxxxxxx. CODE_BLOCK: Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service CODE_BLOCK: Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service COMMAND_BLOCK: sudo loginctl enable-linger $USER echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc echo 'export DBUS_SESSION_BUS_ADDRESS=unix:path=${XDG_RUNTIME_DIR}/bus' >> ~/.bashrc source ~/.bashrc Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: sudo loginctl enable-linger $USER echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc echo 'export DBUS_SESSION_BUS_ADDRESS=unix:path=${XDG_RUNTIME_DIR}/bus' >> ~/.bashrc source ~/.bashrc COMMAND_BLOCK: sudo loginctl enable-linger $USER echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc echo 'export DBUS_SESSION_BUS_ADDRESS=unix:path=${XDG_RUNTIME_DIR}/bus' >> ~/.bashrc source ~/.bashrc CODE_BLOCK: openclaw onboard Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: openclaw onboard CODE_BLOCK: openclaw onboard COMMAND_BLOCK: mkdir -p ~/.config/systemd/user cat > ~/.config/systemd/user/openclaw-gateway.service << EOF [Unit] Description=OpenClaw Gateway After=network.target [Service] Type=simple Environment="PATH=$(dirname $(which openclaw)):/usr/local/bin:/usr/bin:/bin" ExecStart=$(which openclaw) gateway run Restart=on-failure RestartSec=5 [Install] WantedBy=default.target EOF systemctl --user daemon-reload systemctl --user enable openclaw-gateway systemctl --user start openclaw-gateway Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: mkdir -p ~/.config/systemd/user cat > ~/.config/systemd/user/openclaw-gateway.service << EOF [Unit] Description=OpenClaw Gateway After=network.target [Service] Type=simple Environment="PATH=$(dirname $(which openclaw)):/usr/local/bin:/usr/bin:/bin" ExecStart=$(which openclaw) gateway run Restart=on-failure RestartSec=5 [Install] WantedBy=default.target EOF systemctl --user daemon-reload systemctl --user enable openclaw-gateway systemctl --user start openclaw-gateway COMMAND_BLOCK: mkdir -p ~/.config/systemd/user cat > ~/.config/systemd/user/openclaw-gateway.service << EOF [Unit] Description=OpenClaw Gateway After=network.target [Service] Type=simple Environment="PATH=$(dirname $(which openclaw)):/usr/local/bin:/usr/bin:/bin" ExecStart=$(which openclaw) gateway run Restart=on-failure RestartSec=5 [Install] WantedBy=default.target EOF systemctl --user daemon-reload systemctl --user enable openclaw-gateway systemctl --user start openclaw-gateway CODE_BLOCK: systemctl --user status openclaw-gateway systemctl --user is-enabled openclaw-gateway openclaw status Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: systemctl --user status openclaw-gateway systemctl --user is-enabled openclaw-gateway openclaw status CODE_BLOCK: systemctl --user status openclaw-gateway systemctl --user is-enabled openclaw-gateway openclaw status CODE_BLOCK: openclaw gateway install --force Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: openclaw gateway install --force CODE_BLOCK: openclaw gateway install --force CODE_BLOCK: openclaw gateway restart Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: openclaw gateway restart CODE_BLOCK: openclaw gateway restart COMMAND_BLOCK: systemctl --user stop openclaw-gateway # 停止 systemctl --user restart openclaw-gateway # 重啟 journalctl --user -u openclaw-gateway -f # 即時 log Enter fullscreen mode Exit fullscreen mode COMMAND_BLOCK: systemctl --user stop openclaw-gateway # 停止 systemctl --user restart openclaw-gateway # 重啟 journalctl --user -u openclaw-gateway -f # 即時 log COMMAND_BLOCK: systemctl --user stop openclaw-gateway # 停止 systemctl --user restart openclaw-gateway # 重啟 journalctl --user -u openclaw-gateway -f # 即時 log CODE_BLOCK: openclaw config Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: openclaw config CODE_BLOCK: openclaw config CODE_BLOCK: openclaw gateway restart Enter fullscreen mode Exit fullscreen mode CODE_BLOCK: openclaw gateway restart CODE_BLOCK: openclaw gateway restart - 本篇安裝 OpenClaw 時,官方的版本是 2026.3.2。官方更新速度很快,也許會遇到不同的安裝設定,如果遇到有疑問或不知道是什麼的狀況,建議詢問 AI。 - 本篇是使用 macOS,虛擬機是使用 Ubuntu-24.04.4。 - Virtual CPUs:3 或 4 - Display Width / Height:都拉到最小值 - ChatGPT 是 Plus 以上方案的,就選 OpenAI 的 OpenAI Codex (ChatGPT OAuth)。 - 如果有訂閱 GitHub Copilot,就選 Copilot 的 GitHub Copilot (GitHub device login)。 - boot-md:當系統(Gateway)啟動時,會自動讀取並執行工作區中的 BOOT.md 檔案。這適合用來初始化環境變數或設定當次啟動的特殊邏輯。 - bootstrap-extra-files:允許系統在啟動時載入額外的設定檔案(如 USER.md 或 SOUL.md)。這對於維持 AI 對你(使用者)的身份認知非常重要。 - command-logger:(推薦勾選)將你下達的所有指令記錄到審計日誌(Audit log)中。重視 ISO 27001 與安全稽核的作業習慣。 - session-memory:(核心功能)當執行 /new 或 /reset 指令開新對話時,會自動將之前的上下文(Context)存入記憶。這能確保 AI 即使重啟對話,也能維持開發進度的連續性。