在 Hetzner 上部署 OpenClaw (Docker 生產環境指南)
你是不是也遇過這種情況:好不容易在本地跑通了一個機器人或 Gateway,但只要一關掉電腦或斷開 SSH,服務就停了。或者每次重啟 Docker 容器,之前的登入狀態和設定就全部消失,一切都要重頭來過。
如果你想要一個穩定、24/7 在線,而且每個月只要約 5 美金的生產環境,這篇指南會教你如何在 Hetzner VPS 上搞定這一切。我們會使用 Docker 來運行 OpenClaw Gateway,並確保你的資料在重啟或重新構建後依然存在。
需要準備的東西
Section titled “需要準備的東西”- 具有 root 權限的 Hetzner VPS (建議使用 Ubuntu 或 Debian)
- 從你的筆電 SSH 連線到伺服器的能力
- 熟悉基礎的 SSH 操作與複製貼上
- 大約 20 分鐘的時間
- Docker 與 Docker Compose
- Model 認證憑據
- 選配的 Provider 憑據(如 WhatsApp QR, Telegram bot token, Gmail OAuth)
1. 租用並連線到 VPS
Section titled “1. 租用並連線到 VPS”在 Hetzner 建立一個 Ubuntu 或 Debian 的 VPS。使用 root 帳號連線:
ssh root@YOUR_VPS_IP請記住這個伺服器是有狀態的,不要把它當作拋棄式基礎設施。
2. 安裝 Docker
Section titled “2. 安裝 Docker”在 VPS 上執行以下指令:
apt-get updateapt-get install -y git curl ca-certificatescurl -fsSL https://get.docker.com | sh檢查版本確保安裝成功:
docker --versiondocker compose version3. 複製 OpenClaw 儲存庫
Section titled “3. 複製 OpenClaw 儲存庫”git clone https://github.com/openclaw/openclaw.gitcd openclaw4. 建立持久化目錄
Section titled “4. 建立持久化目錄”Docker 容器本身是易失的,所有需要長期保存的狀態都必須放在宿主機上。
mkdir -p /root/.openclawmkdir -p /root/.openclaw/workspace
# 將所有權交給容器使用者 (uid 1000):chown -R 1000:1000 /root/.openclawchown -R 1000:1000 /root/.openclaw/workspace5. 設定環境變數
Section titled “5. 設定環境變數”在專案根目錄建立 .env 檔案。你可以使用 openssl rand -hex 32 來產生強密碼。
OPENCLAW_IMAGE=openclaw:latestOPENCLAW_GATEWAY_TOKEN=你的強密碼OPENCLAW_GATEWAY_BIND=lanOPENCLAW_GATEWAY_PORT=18789
OPENCLAW_CONFIG_DIR=/root/.openclawOPENCLAW_WORKSPACE_DIR=/root/.openclaw/workspace
GOG_KEYRING_PASSWORD=你的強密碼XDG_CONFIG_HOME=/home/node/.openclaw切記:不要將此檔案提交到 Git。
6. 設定 Docker Compose
Section titled “6. 設定 Docker Compose”建立或更新 docker-compose.yml:
services: openclaw-gateway: image: ${OPENCLAW_IMAGE} build: . restart: unless-stopped env_file: - .env environment: - HOME=/home/node - NODE_ENV=production - TERM=xterm-256color - OPENCLAW_GATEWAY_BIND=${OPENCLAW_GATEWAY_BIND} - OPENCLAW_GATEWAY_PORT=${OPENCLAW_GATEWAY_PORT} - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN} - GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD} - XDG_CONFIG_HOME=${XDG_CONFIG_HOME} - PATH=/home/linuxbrew/.linuxbrew/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin volumes: - ${OPENCLAW_CONFIG_DIR}:/home/node/.openclaw - ${OPENCLAW_WORKSPACE_DIR}:/home/node/.openclaw/workspace ports: # 建議:讓 Gateway 僅在 VPS 本地監聽,透過 SSH tunnel 存取 - "127.0.0.1:${OPENCLAW_GATEWAY_PORT}:18789" command: [ "node", "dist/index.js", "gateway", "--bind", "${OPENCLAW_GATEWAY_BIND}", "--port", "${OPENCLAW_GATEWAY_PORT}", ]7. 將二進位檔封裝進 Image
Section titled “7. 將二進位檔封裝進 Image”在運行中的容器內安裝二進位檔是一個陷阱,重啟後就會消失。所有 Skill 需要的外部工具(如 gog, wacli)都必須在構建 Image 時就裝好。
修改 Dockerfile 範例:
FROM node:22-bookworm
RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/*
# 安裝 Gmail CLIRUN curl -L https://github.com/steipete/gog/releases/latest/download/gog_Linux_x86_64.tar.gz \ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/gog
# 安裝 Google Places CLIRUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_Linux_x86_64.tar.gz \ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/goplaces
# 安裝 WhatsApp CLIRUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli_Linux_x86_64.tar.gz \ | tar -xz -C /usr/local/bin && chmod +x /usr/local/bin/wacli
WORKDIR /appCOPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./COPY ui/package.json ./ui/package.jsonCOPY scripts ./scripts
RUN corepack enableRUN pnpm install --frozen-lockfile
COPY . .RUN pnpm buildRUN pnpm ui:installRUN pnpm ui:build
ENV NODE_ENV=production
CMD ["node","dist/index.js"]8. 構建與啟動
Section titled “8. 構建與啟動”docker compose builddocker compose up -d openclaw-gateway確認二進位檔是否就緒:
docker compose exec openclaw-gateway which gog9. 驗證 Gateway
Section titled “9. 驗證 Gateway”檢查日誌,看到 [gateway] listening on ws://0.0.0.0:18789 表示成功。
在你的筆電上建立 SSH tunnel:
ssh -N -L 18789:127.0.0.1:18789 root@YOUR_VPS_IP現在你可以打開瀏覽器存取 http://127.0.0.1:18789/ 並貼上你的 Gateway token。
- 記憶體不足 (OOM):Hetzner 的價格會變動。如果你遇到 OOM 錯誤,請升級到較大的 VPS 規格。
- 重啟後工具消失:這通常是因為你直接在容器裡用
apt或curl安裝東西。請務必更新Dockerfile並重新執行docker compose build。 - 無法存取 Control UI:檢查你的 SSH tunnel 是否還在運行,或者確認
.env中的OPENCLAW_GATEWAY_PORT是否與你 tunnel 的連接埠一致。 - 權限錯誤:如果容器無法寫入設定,請重新檢查步驟 4 中的
chown -R 1000:1000指令。
如果你在設定過程中遇到任何問題,可以詢問我們的 AI Setup Assistant。
OpenClaw Expert
還是卡住了?
如果這篇文件沒有解決你的情境,直接問 OpenClaw Expert,拿到可執行步驟。