❤️ AZDIGI chính thức cập nhật hệ thống blog mới hoàn chỉnh. Tuy nhiên có thể một số bài viết bị sai lệch hình ảnh, hãy ấn nút Báo cáo bài viết ở cuối bài để AZDIGI cập nhật trong thời gian nhanh nhất. Chân thành cám ơn.
Chạy OpenClaw trên VPS thì được 24/7, nhưng thiếu GUI, thiếu trình duyệt (headed browser), thiếu phần cứng local. Chạy trên Mac thì có đủ hết, nhưng máy tắt là mất kết nối. Cách giải quyết thế nào? Chạy cả hai, mỗi bên làm đúng việc của nó.
Mô hình hybrid của OpenClaw cho phép bạn đặt Gateway trên VPS (nhận messages, chạy AI, quản lý sessions) và kết nối một Node trên Mac local (chạy browser, điều khiển smart home, truy cập camera). Hai bên giao tiếp qua Tailscale, mã hóa WireGuard, không cần mở port.
Bài này hướng dẫn chi tiết từng bước để thiết lập mô hình hybrid đó. Tất cả lệnh đều đã test trên Ubuntu 22.04 (VPS) và macOS 14+ (Mac). Nếu bạn cần biết thêm ưu và nhược điểm trên từng mô hình chạy OpenClaw, có thể đọc qua bài so sánh các cách chạy OpenClaw trước. Nếu bạn là người mới bắt đầu với OpenClaw thì hãy xem qua Hướng dẫn OpenClaw từ A đến Z.
Kiến trúc Gateway vs Node
OpenClaw chia thành hai thành phần chính: Gateway và Node. Hiểu rõ vai trò của từng bên giúp bạn biết cái gì chạy ở đâu.
Gateway là “bộ não” của hệ thống. Nó nhận messages từ tất cả các channels (Telegram, Discord, WhatsApp, Slack…), gọi LLM để xử lý, quản lý sessions, chạy cron jobs, và quyết định task nào gửi đi đâu. Gateway chạy như một process duy nhất, mở WebSocket trên port 18789 (mặc định). Tất cả clients và nodes đều kết nối về đây.
Node là “tay chân” thực thi. Node kết nối vào Gateway qua WebSocket với role: node, khai báo những khả năng mà nó có (browser, camera, screen recording, system.run…). Khi Gateway cần chạy một task trên phần cứng local, nó gửi lệnh đến Node qua WebSocket, Node thực thi rồi trả kết quả.
Ở đây có một khái niệm quan trọng: exec host. Mỗi khi agent cần chạy một lệnh shell, nó chọn chạy ở đâu:
host=gateway: chạy trên VPS. Phù hợp cho curl, git, quản lý server, gọi API.host=node: chạy trên Mac local. Phù hợp cho Playwright headed browser, AppleScript, điều khiển Sonos, chụp ảnh từ camera.

Cái hay ở đây là Gateway không cần biết Node đang ở đâu (cùng mạng, khác mạng, qua VPN). Chỉ cần Node kết nối được WebSocket là xong. Tailscale giúp việc này trở nên đơn giản nhưng an toàn hơn khi chỉ cho phép các máy trong cùng mạng tailnet kết nối với nhau.
Yêu cầu trước khi bắt đầu
Trước khi bắt tay vào cài đặt, chuẩn bị sẵn những thứ sau:
Phía VPS:
- Ubuntu 22.04+ (hoặc Debian 11+), tối thiểu 2 vCPU, 2GB RAM
- Node.js 22+ (khuyến nghị Node 24)
- SSH access với quyền root hoặc sudo
- Tailscale đã cài
Phía Mac (hoặc máy tính mà bạn có nhưng hướng dẫn có thể sẽ khác):
- macOS 14+ (Sonoma trở lên)
- OpenClaw đã cài sẵn
- Tailscale đã cài
Chung:
- Tài khoản Tailscale (free tier đủ dùng, hỗ trợ tới 100 devices)
- API key cho LLM provider (Anthropic, OpenAI, hoặc tương tự)
💡 Nếu bạn chưa có VPS, có thể tham khảo hướng dẫn thuê VPS để chọn gói phù hợp. VPS tại Việt Nam sẽ có latency thấp hơn khi kết nối trong nước, kể cả khi kết nối qua Tailscale.
Cần xem: Tailscale là gì và hướng dẫn chi tiết
Bước 1: Cài OpenClaw Gateway trên VPS
SSH vào VPS rồi chạy các lệnh sau.
Cài OpenClaw trên VPS
curl -fsSL https://openclaw.ai/install.sh | bash
Wizard sẽ hỏi bạn vài thứ: chọn Local cho gateway mode, nhập API key cho LLM provider, và chọn Yes để cài daemon (systemd service tự khởi động khi reboot).
Cấu hình Gateway
Sau khi onboarding xong, mở file config để chỉnh thêm:
nano ~/.openclaw/openclaw.json
Config tối thiểu cho mô hình hybrid:
{
"gateway": {
"mode": "local",
"bind": "loopback",
"port": 18789,
"auth": {
"mode": "token",
"token": "THAY_BANG_TOKEN_CUA_BAN"
},
"tailscale": {
"mode": "serve"
}
},
"agents": {
"defaults": {
"workspace": "~/.openclaw/workspace",
"model": {
"primary": "anthropic/claude-sonnet-4-5"
}
}
},
"channels": {
"telegram": {
"enabled": true,
"botToken": "TOKEN_BOT_TELEGRAM",
"dmPolicy": "pairing"
}
}
}
Mấy chỗ cần chú ý:
gateway.bind: "loopback": Gateway chỉ lắng nghe trên 127.0.0.1. An toàn, không expose ra internet.gateway.auth.token: Tạo token mạnh bằngopenssl rand -base64 32. Tất cả clients và nodes đều cần token này để kết nối.gateway.tailscale.mode: "serve": OpenClaw tự cấu hình Tailscale Serve, cung cấp HTTPS endpoint trên tailnet mà không cần mở port.
Tạo token và khởi động
# Khởi động gateway
openclaw gateway restart
# Kiểm tra trạng thái
openclaw gateway status
openclaw status
Nếu thấy Runtime: running và RPC probe: ok là Gateway đã chạy.
Bước 2: Setup Tailscale kết nối
Tailscale tạo một mạng riêng (tailnet) giữa các máy của bạn, mã hóa bằng WireGuard. Cài trên cả VPS và Mac để chúng “nhìn thấy” nhau mà không cần mở port hay config firewall.
Trên VPS
# Cài Tailscale
curl -fsSL https://tailscale.com/install.sh | sh
# Đăng nhập (mở link trên browser để xác thực)
tailscale up
# Kiểm tra IP Tailscale
tailscale ip -4
Trên Mac
Tải Tailscale từ Mac App Store hoặc tailscale.com/download, đăng nhập cùng tài khoản với VPS.
Kiểm tra kết nối
# Trên VPS hoặc Mac, kiểm tra cả 2 machines đã online
tailscale status
# Test ping (thay IP bằng Tailscale IP của VPS)
ping 100.x.x.x
Nếu bạn dùng gateway.tailscale.mode: "serve" ở bước trước, kiểm tra Tailscale Serve đã chạy:
# Trên VPS
tailscale serve status
# Output ví dụ: https://my-vps.tailnet-abc.ts.net
URL này chính là endpoint để Node kết nối. Ghi lại nó.
Bước 3: Kết nối Mac Node vào VPS Gateway
Trên Mac, bạn chạy một “node host” (headless, không cần GUI). Node host kết nối vào Gateway qua WebSocket và khai báo capabilities.
Cách 1: Kết nối qua Tailscale Serve (khuyến nghị)
Nếu VPS dùng Tailscale Serve (HTTPS), Node kết nối trực tiếp qua MagicDNS:
# Set token (cùng token đã config trên VPS)
export OPENCLAW_GATEWAY_TOKEN="token-cua-ban"
# Chạy node host foreground (test trước)
openclaw node run \
--host my-vps.tailnet-abc.ts.net \
--port 443 \
--tls \
--display-name "Mac-Studio"
Cách 2: Kết nối qua SSH tunnel
Nếu không dùng Tailscale Serve, bạn có thể tạo SSH tunnel rồi kết nối qua localhost:
# Terminal 1: Tạo tunnel
ssh -N -L 18790:127.0.0.1:18789 user@vps-ip
# Terminal 2: Chạy node host qua tunnel
export OPENCLAW_GATEWAY_TOKEN="token-cua-ban"
openclaw node run --host 127.0.0.1 --port 18790 --display-name "Mac-Studio"
Cài node host như service (chạy nền)
Sau khi test thành công, cài thành service để tự động chạy:
# Cài service (launchd trên macOS)
openclaw node install \
--host my-vps.tailnet-abc.ts.net \
--port 443 \
--tls \
--display-name "Mac-Studio"
# Kiểm tra
openclaw node status
Approve pairing trên VPS
Lần đầu Node kết nối, Gateway sẽ tạo một pairing request. Bạn cần approve trên VPS:
# Xem pending requests
openclaw devices list
# Approve (lấy requestId từ list)
openclaw devices approve --latest
# Kiểm tra node đã connected
openclaw nodes status --connected
Nếu Node hiển thị trạng thái “connected” với tên bạn đặt (ví dụ “Mac-Studio”), mọi thứ đã ổn.
⚠️ Nếu node cứ báo disconnected (1008): pairing required, kiểm tra lại token có khớp giữa VPS và Mac không. Một lỗi phổ biến là token bị thêm dấu nháy thừa khi set trong environment variable.
Bước 4: Cấu hình task routing
Sau khi Gateway và Node đã kết nối, bạn cần nói cho agent biết khi nào chạy lệnh ở đâu.
Cách hoạt động
Mặc định, exec chạy trong sandbox (Docker container). Để dùng gateway hoặc node, bạn cần cấu hình rõ ràng:
# Set default exec host là node (Mac)
openclaw config set tools.exec.host node
# Hoặc set cụ thể node nào
openclaw config set tools.exec.node "Mac-Studio"
# Set security mode
openclaw config set tools.exec.security allowlist
Hoặc set trong chat session bằng slash command:
/exec host=node security=allowlist node=Mac-Studio

Exec approvals
Khi dùng security=allowlist, Node sẽ chỉ cho phép chạy những lệnh đã được approve. Lần đầu chạy lệnh mới, Node sẽ hỏi bạn approve (nếu ask=on-miss, là default). Sau khi chọn “Always Allow”, lệnh đó được thêm vào allowlist tại ~/.openclaw/exec-approvals.json trên Mac.
Bạn cũng có thể thêm allowlist từ Gateway:
# Thêm lệnh vào allowlist cho node
openclaw approvals allowlist add --node Mac-Studio "/opt/homebrew/bin/rg"
openclaw approvals allowlist add --node Mac-Studio "/usr/bin/sw_vers"
Bước 5: Test hybrid workflow
Gửi vài messages qua Telegram (hoặc channel bạn đã config) để kiểm tra từng scenario.
Test 1: Task chạy trên VPS
Gửi tin nhắn: “Kiểm tra uptime của server”
Agent sẽ dùng exec host=gateway để chạy uptime trên VPS và trả kết quả. Mac không cần bật.
Test 2: Task chạy trên Mac
Gửi: “Chụp screenshot trang https://azdigi.com”
Agent gửi task đến Node Mac, Node dùng Playwright để chụp screenshot rồi trả ảnh về Gateway, Gateway gửi ảnh lên Telegram cho bạn.
Test 3: Cron job 24/7
Tạo một cron job kiểm tra health:
/cron add --every 6h --name "health-check" --message "Kiểm tra server status, báo cáo ngắn gọn"
Cron chạy trên Gateway, 24/7, bất kể Mac có bật hay không. Kết quả gửi về channel cuối cùng bạn tương tác.
Test 4: Smart home
Nếu Mac có cài skill Sonos hoặc HomeKit, gửi: “Phát nhạc jazz trên loa phòng khách”
Gateway nhận message, agent quyết định cần chạy trên node, gửi lệnh đến Mac, Mac điều khiển Sonos. Mọi thứ diễn ra trong vài giây.
Tips và troubleshooting
Node offline thì sao?
Khi Mac tắt hoặc mất kết nối, Gateway vẫn chạy bình thường với những task không cần node. Nếu agent cần chạy host=node mà node offline, task sẽ fail với thông báo rõ ràng. Agent có thể tự fallback sang host=gateway nếu task đó chạy được trên VPS.
Tailscale bị ngắt
Tailscale có auto-reconnect. Nếu mạng bị ngắt tạm thời, kết nối sẽ tự phục hồi khi mạng trở lại. Node host (headless service) cũng có retry logic, tự kết nối lại Gateway khi available.
Đồng bộ workspace
Gateway và Node có workspace riêng. Nếu bạn cần chia sẻ files giữa hai bên, dùng git (push/pull) hoặc rsync qua Tailscale. Không nên đặt workspace trên iCloud hay cloud-synced folder, vì có thể gây file-lock conflict.
Bảo mật
Mô hình này khá an toàn theo mặc định:
- Gateway bind loopback, không expose ra internet
- Tailscale mã hóa end-to-end bằng WireGuard
- Node cần pairing approval mới kết nối được
- Exec approvals kiểm soát từng lệnh chạy trên node
Để tăng cường thêm, đọc hướng dẫn bảo mật OpenClaw chi tiết.
Câu hỏi thường gặp
Mac tắt thì mất hết à?
Không. Gateway trên VPS vẫn chạy 24/7: nhận messages, trả lời, chạy cron jobs. Chỉ những task cần phần cứng Mac (browser, camera, smart home) mới không chạy được khi Mac offline. Bật Mac lại, node tự kết nối lại Gateway.
Kết nối nhiều Node cùng lúc được không?
Được. Bạn có thể chạy node host trên nhiều máy (Mac, Linux, thậm chí Raspberry Pi). Mỗi node khai báo capabilities riêng. Dùng tools.exec.node hoặc /exec node=ten-node để chỉ định chạy trên node nào.
Tailscale có cần trả phí không?
Free tier của Tailscale hỗ trợ tới 100 devices, đủ dùng cho setup này. Tailscale Serve (expose HTTPS trên tailnet) cũng miễn phí. Chỉ cần tài khoản Tailscale, không cần credit card.
Chạy Gateway trong Docker được không?
Được. OpenClaw có Docker image chính thức. Nhưng cần lưu ý: bind mode mặc định là loopback (127.0.0.1 trong container). Với Docker bridge networking, bạn cần set bind: "lan" hoặc dùng --network host. Chi tiết xem bài so sánh các cách chạy OpenClaw.
Dùng SSH tunnel thay Tailscale được không?
Hoàn toàn được. SSH tunnel là phương án fallback nếu bạn không muốn cài Tailscale. Tuy nhiên, Tailscale Serve cho trải nghiệm tốt hơn: auto-reconnect, HTTPS tự động, không cần giữ terminal SSH mở.
Tổng kết
Mô hình hybrid (Gateway trên VPS + Node trên Mac) kết hợp được ưu điểm của cả hai: VPS luôn online 24/7 để nhận messages và chạy AI, Mac cung cấp browser, camera, smart home khi cần. Tailscale làm cầu nối mã hóa giữa hai bên, không cần mở port hay config phức tạp.
Setup ban đầu tốn khoảng 30 phút. Sau đó, hệ thống tự chạy. Mac tắt thì Gateway vẫn hoạt động. Nếu chưa có VPS, xem bài cài OpenClaw lên VPS trước. Mac bật lại, Node tự reconnect. Bạn có thể thêm nhiều Node (Linux server, Raspberry Pi, Mac khác) tùy nhu cầu. Kết hợp với setup cho team để nhiều người cùng dùng.
Nếu bạn đang chạy OpenClaw trên 1 máy duy nhất và gặp hạn chế, thử mô hình hybrid này. Nó linh hoạt hơn nhiều.
Có thể bạn cần xem thêm
- So sánh cách chạy OpenClaw: VPS, Mac Mini, Windows, Linux, Docker, Raspberry Pi
- Cài OpenClaw lên VPS Việt Nam để chạy 24/7
- OpenClaw cho team: Chia sẻ trợ lý AI cho nhiều người dùng
- Quản lý nhiều VPS bằng OpenClaw - CMDB cá nhân cho SysAdmin
- Hướng dẫn OpenClaw chi tiết nhất từ A tới Z
- Bảo mật OpenClaw: hướng dẫn cấu hình an toàn theo từng bước
Về tác giả
Trần Thắng
Chuyên gia tại AZDIGI với nhiều năm kinh nghiệm trong lĩnh vực web hosting và quản trị hệ thống.