Hosting
รันไทม์ VM ของ Docker
ขั้นตอนรันไทม์ร่วมกันสำหรับการติดตั้ง Docker บน VM เช่น GCP, Hetzner และผู้ให้บริการ VPS ที่คล้ายกัน
ฝังไบนารีที่จำเป็นลงในอิมเมจ
การติดตั้งไบนารีภายในคอนเทนเนอร์ที่กำลังทำงานเป็นกับดัก เพราะทุกอย่างที่ติดตั้ง ขณะรันไทม์จะหายไปเมื่อรีสตาร์ต ให้ฝังไบนารีภายนอกทั้งหมดที่ Skills ต้องใช้ ลงในอิมเมจในขั้นตอนการสร้าง
ตัวอย่างด้านล่างครอบคลุมไบนารีเพียงสามรายการ โดยเรียงตามตัวอักษร:
gog(จากgogcli) สำหรับเข้าถึง Gmailgoplacesสำหรับ Google Placeswacliสำหรับ WhatsApp
รายการเหล่านี้เป็นเพียงตัวอย่าง ไม่ใช่รายการทั้งหมด ให้ติดตั้งไบนารีมากเท่าที่ Skills ของคุณต้องใช้โดยใช้รูปแบบเดียวกัน เมื่อคุณเพิ่ม Skills ที่ต้องใช้ ไบนารีใหม่ในภายหลัง:
- อัปเดต Dockerfile
- สร้างอิมเมจใหม่
- รีสตาร์ตคอนเทนเนอร์
ตัวอย่าง Dockerfile
FROM node:24-bookworm RUN apt-get update && apt-get install -y socat && rm -rf /var/lib/apt/lists/* # Example binary 1: Gmail CLI (gogcli — installs as `gog`)# Copy the current Linux asset URL from https://github.com/steipete/gogcli/releasesRUN curl -L https://github.com/steipete/gogcli/releases/latest/download/gogcli_linux_amd64.tar.gz \ | tar -xzO gog > /usr/local/bin/gog; \ chmod +x /usr/local/bin/gog # Example binary 2: Google Places CLI# Copy the current Linux asset URL from https://github.com/steipete/goplaces/releasesRUN curl -L https://github.com/steipete/goplaces/releases/latest/download/goplaces_linux_amd64.tar.gz \ | tar -xzO goplaces > /usr/local/bin/goplaces; \ chmod +x /usr/local/bin/goplaces # Example binary 3: WhatsApp CLI# Copy the current Linux asset URL from https://github.com/steipete/wacli/releasesRUN curl -L https://github.com/steipete/wacli/releases/latest/download/wacli-linux-amd64.tar.gz \ | tar -xzO wacli > /usr/local/bin/wacli; \ chmod +x /usr/local/bin/wacli # Add more binaries below using the same pattern 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"]สร้างและเริ่มทำงาน
docker compose builddocker compose up -d openclaw-gatewayหากการสร้างล้มเหลวด้วยข้อความ Killed หรือรหัสออก 137 ระหว่าง pnpm install --frozen-lockfile แสดงว่า VM มีหน่วยความจำไม่เพียงพอ ให้ใช้เครื่องระดับที่ใหญ่ขึ้นก่อนลองอีกครั้ง
ตรวจสอบไบนารี:
docker compose exec openclaw-gateway which gogdocker compose exec openclaw-gateway which goplacesdocker compose exec openclaw-gateway which wacliผลลัพธ์ที่คาดไว้:
/usr/local/bin/gog/usr/local/bin/goplaces/usr/local/bin/wacliตรวจสอบว่า Gateway ทำงานอยู่:
docker compose logs -f openclaw-gatewaycurl -fsS http://127.0.0.1:18789/healthzการที่ /healthz ตอบกลับด้วยสถานะ 200 ยืนยันว่าโพรเซส Gateway กำลังรับฟังและทำงานปกติ ส่วน HEALTHCHECK ที่มีมาในอิมเมจจะตรวจสอบปลายทางเดียวกันเป็นระยะ
สิ่งใดจัดเก็บถาวรไว้ที่ใด
OpenClaw ทำงานใน Docker แต่ Docker ไม่ใช่แหล่งข้อมูลหลัก สถานะทั้งหมดที่ต้องเก็บระยะยาวต้องคงอยู่ได้หลังการรีสตาร์ต การสร้างใหม่ และการเริ่มระบบใหม่
| องค์ประกอบ | ตำแหน่ง | กลไกการจัดเก็บถาวร | หมายเหตุ |
|---|---|---|---|
| การกำหนดค่า Gateway | /home/node/.openclaw/ |
การเมานต์โวลุ่มจากโฮสต์ | รวม openclaw.json |
| ข้อมูลประจำตัวของช่องทาง/ผู้ให้บริการ | /home/node/.openclaw/credentials/ |
การเมานต์โวลุ่มจากโฮสต์ | ข้อมูลประจำตัวของช่องทางและผู้ให้บริการ |
| โปรไฟล์การยืนยันตัวตนของโมเดล | /home/node/.openclaw/agents/ |
การเมานต์โวลุ่มจากโฮสต์ | agents/<agentId>/agent/auth-profiles.json (OAuth, คีย์ API) |
| ไฟล์คีย์ OAuth แบบเดิม | /home/node/.config/openclaw/ |
การเมานต์โวลุ่มจากโฮสต์ | รองรับความเข้ากันได้แบบอ่านอย่างเดียวสำหรับไฟล์เสริม OAuth ก่อนการย้ายข้อมูล โดย openclaw doctor --fix จะย้ายข้อมูลเหล่านี้ไปยัง auth-profiles.json |
| การกำหนดค่า Skills | /home/node/.openclaw/skills/ |
การเมานต์โวลุ่มจากโฮสต์ | สถานะระดับ Skills |
| พื้นที่ทำงานของเอเจนต์ | /home/node/.openclaw/workspace/ |
การเมานต์โวลุ่มจากโฮสต์ | โค้ดและอาร์ติแฟกต์ของเอเจนต์ |
| เซสชัน WhatsApp | /home/node/.openclaw/ |
การเมานต์โวลุ่มจากโฮสต์ | เก็บสถานะการเข้าสู่ระบบด้วย QR |
| พวงกุญแจ Gmail | /home/node/.openclaw/ |
โวลุ่มจากโฮสต์ + รหัสผ่าน | ต้องใช้ GOG_KEYRING_PASSWORD |
| แพ็กเกจ Plugin | /home/node/.openclaw/npm, /home/node/.openclaw/git |
การเมานต์โวลุ่มจากโฮสต์ | ตำแหน่งรากของแพ็กเกจ Plugin ที่ดาวน์โหลดได้ |
| ไบนารีภายนอก | /usr/local/bin/ |
อิมเมจ Docker | ต้องฝังลงในอิมเมจระหว่างการสร้าง |
| รันไทม์ Node | ระบบไฟล์ของคอนเทนเนอร์ | อิมเมจ Docker | สร้างใหม่ทุกครั้งที่สร้างอิมเมจ |
| แพ็กเกจระบบปฏิบัติการ | ระบบไฟล์ของคอนเทนเนอร์ | อิมเมจ Docker | ห้ามติดตั้งขณะรันไทม์ |
| คอนเทนเนอร์ Docker | ชั่วคราว | รีสตาร์ตได้ | ทำลายได้อย่างปลอดภัย |
การอัปเดต
เมื่อต้องการอัปเดต OpenClaw บน VM:
git pulldocker compose builddocker compose up -d