Bạn có bao giờ thầm nghĩ: “Giá mà mình có một một đội ngũ AI riêng, luôn túc trực, hiểu ý và chỉ phục vụ mỗi mình mình”?
Điều đó không còn là viễn tưởng. Với sự kết hợp giữa Google Cloud Platform (GCP) và OpenClaw, bạn có thể sở hữu ngay một “Trạm chỉ huy AI” mạnh mẽ, hoạt động bền bỉ 24/7 mà không lo ngốn chi phí phần cứng.
Không chỉ là một chatbot, đây là một hệ thống Multi-Agent thực thụ: nơi các AI chuyên biệt tự động phối hợp xử lý công việc, từ viết code, phân tích dữ liệu đến quản lý hạ tầng. Tất cả được vận hành trên cloud của Google, bảo vệ bởi lớp khiên Cloudflare Zero Trust vững chắc, đảm bảo dữ liệu và quyền truy cập chỉ thuộc về duy nhất một người: BẠN.
Bài viết này sẽ hướng dẫn bạn từ A đến Z cách xây dựng hệ thống đó. Hãy mở terminal lên, và bắt đầu hành trình tạo ra J.A.R.V.I.S của riêng mình.

Yêu cầu trước khi bắt đầu
Để thực hiện theo hướng dẫn này, bạn cần chuẩn bị:
- Một tài khoản Google Cloud đã kích hoạt thanh toán (billing).
- Một tên miền (domain) để cấu hình Cloudflare Tunnel.
- Một tài khoản Cloudflare có quyền truy cập Zero Trust.
Phần 1: Khởi tạo máy chủ ảo trên Google Cloud
1. Tạo project và bật các API cần thiết
Mở terminal hoặc Cloud Shell và chạy lần lượt các lệnh sau:
gcloud projects create <PROJECT_ID>; --name="OpenClaw Gateway"
gcloud config set project <PROJECT_ID>;
gcloud billing projects link <PROJECT_ID>; --billing-account=<BILLING_ID>;
gcloud services enable compute.googleapis.com aiplatform.googleapis.com2. Tạo máy ảo (VM instance)
Cấu hình khuyến nghị là e2-medium (2 vCPU, 4 GB RAM), ổ đĩa 30 GB SSD, chạy Debian 12:
gcloud compute instances create openclaw-gateway \
--zone=<ZONE>; \
--machine-type=e2-medium \
--boot-disk-size=30GB \
--image-family=debian-12 \
--image-project=debian-cloud \
--scopes=cloud-platformLưu ý quan trọng: Tham số --scopes=cloud-platform là bắt buộc. Nếu thiếu, OpenClaw sẽ không thể sử dụng Vertex AI và bạn sẽ gặp lỗi ACCESS_TOKEN_SCOPE_INSUFFICIENT.
3. Truy cập vào máy ảo
gcloud compute ssh openclaw-gateway --zone=<ZONE>;Phần 2: Cài đặt Docker
Sau khi SSH vào VM, tiến hành cài đặt Docker:
sudo apt-get update
sudo apt-get install -y git curl ca-certificates
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USERSau khi chạy xong, bạn cần thoát ra và đăng nhập lại để quyền nhóm Docker có hiệu lực:
exit
gcloud compute ssh openclaw-gateway --zone=<ZONE>;
docker --versionPhần 3: Triển khai OpenClaw
1. Tải mã nguồn và khởi tạo
git clone https://github.com/openclaw/openclaw.git ~/openclaw
cd ~/openclaw
mkdir -p ~/.openclaw ~/.openclaw/workspace2. Chạy script cài đặt
chmod +x docker-setup.sh
./docker-setup.sh --non-interactive3. Kiểm tra trạng thái
docker compose ps
curl -s http://localhost:18789 | head -5Nếu cả hai lệnh đều trả về kết quả bình thường, OpenClaw đã sẵn sàng hoạt động trên máy chủ nội bộ.
Phần 4: Thiết lập CLIProxyAPI (backend xử lý mô hình ngôn ngữ)
CLIProxyAPI đóng vai trò là lớp trung gian để OpenClaw gọi đến các mô hình AI (Claude, Gemini…) thông qua một proxy thống nhất:
git clone https://github.com/router-for-me/CLIProxyAPI.git ~/CLIProxyAPI
cd ~/CLIProxyAPI
mkdir -p auths logs
nano config.yaml
sudo docker compose up -dHãy cấu hình file config.yaml theo hướng dẫn của CLIProxyAPI trước khi khởi chạy.
Phần 5: Bảo mật truy cập bằng Cloudflare Tunnel
Thay vì mở port trực tiếp ra internet (tiềm ẩn rủi ro bảo mật), chúng ta sử dụng Cloudflare Tunnel để tạo một kênh truy cập an toàn.
1. Tạo tunnel trên Cloudflare Dashboard
- Đăng nhập vào Cloudflare Zero Trust.
- Vào mục Networks, chọn Tunnels, nhấn Create a tunnel.
- Đặt tên tunnel (ví dụ:
openclaw-gateway). - Sao chép Tunnel Token (chuỗi bắt đầu bằng
eyJh...).
2. Chạy Cloudflared trên máy chủ
sudo docker run -d \
--name cloudflared \
--restart unless-stopped \
--network openclaw_default \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run --token <TUNNEL_TOKEN>;Tham số --network openclaw_default cho phép container Cloudflared kết nối trực tiếp đến container OpenClaw mà không cần đi qua mạng host.
3. Cấu hình tên miền công khai (public hostname)
Trong Cloudflare Dashboard, vào phần cấu hình tunnel và thêm một public hostname:
| Trường | Giá trị |
|---|---|
| Subdomain | openclaw (hoặc tên tùy chọn) |
| Domain | Tên miền của bạn |
| Type | HTTP |
| URL | openclaw-gateway:18789 |
Nếu Cloudflared và OpenClaw chạy trên cùng một Docker network, hãy sử dụng tên container (openclaw-gateway:18789). Nếu chạy độc lập, dùng localhost:18789.
4. Cấu hình trustedProxies cho OpenClaw
Đây là bước nhiều người bỏ qua và gặp lỗi 403 Forbidden. OpenClaw cần biết rằng các request đến từ Cloudflare proxy là đáng cậy.
Chỉnh sửa file ~/.openclaw/openclaw.json:
{
"gateway": {
"mode": "local",
"trustedProxies": [
"172.18.0.1",
"172.16.0.0/12",
"10.0.0.0/8",
"192.168.0.0/16",
"127.0.0.1"
]
}
}Phần 6: Xác thực bằng Google SSO qua Cloudflare Access (tùy chọn)
Nếu bạn muốn thêm một lớp bảo mật nữa, hãy bật Cloudflare Access với xác thực qua tài khoản Google.
1. Tạo OAuth credentials trên Google Cloud Console
- Truy cập Google Cloud Console > Credentials.
- Tạo OAuth client ID loại Web application.
- Thêm Authorized redirect URI:
https://<TEAM_NAME>.cloudflareaccess.com/cdn-cgi/access/callback- Lưu lại Client ID và Client Secret.
2. Kết nối Google login vào Cloudflare
- Trong Cloudflare Zero Trust, vào Settings > Authentication.
- Thêm phương thức đăng nhập Google, nhập Client ID và Client Secret.
3. Tạo ứng dụng Access
- Vào Access > Applications > Add an application.
- Chọn Self-hosted, cấu hình tên miền trỏ đến
openclaw.<tên-miền-của-bạn>. - Tạo policy cho phép các email cụ thể truy cập.
Sau khi hoàn tất, mỗi khi truy cập giao diện web của OpenClaw, hệ thống sẽ yêu cầu đăng nhập bằng tài khoản Google đã được phê duyệt.
Phần 7: Cấu hình tổng thể cho OpenClaw
File cấu hình chính
File ~/.openclaw/openclaw.json là nơi bạn khai báo toàn bộ thông tin về model, provider, agent và kênh giao tiếp:
{
"gateway": {
"mode": "local",
"trustedProxies": ["172.18.0.1", "10.0.0.0/8", "127.0.0.1"]
},
"models": {
"providers": {
"proxypal": {
"baseUrl": "http://host.docker.internal:8317/v1",
"apiKey": "<PROXY_KEY>",
"api": "openai-completions",
"models": [
{"id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5"},
{"id": "gemini-3-pro-preview", "name": "Gemini 3 Pro"}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "proxypal/claude-sonnet-4-5",
"fallbacks": ["proxypal/gemini-3-pro-preview"]
}
}
}
}2. Biến môi trường
File ~/openclaw/.env chứa các thông tin nhạy cảm:
OPENCLAW_GATEWAY_TOKEN=<auto-generated>
GOOGLE_CLOUD_PROJECT=<PROJECT_ID>
GOOGLE_CLOUD_LOCATION=us-central1
ANTHROPIC_API_KEY=<PROXY_KEY>
ANTHROPIC_BASE_URL=http://host.docker.internal:8317/v1Cảnh báo bảo mật: Tuyệt đối không commit file .env lên bất kỳ repository công khai nào. Hãy thêm .env vào .gitignore ngay từ đầu.
Phần 8: Kích hoạt Vertex AI và các công cụ bổ sung
1. Cấp quyền IAM cho service account
PROJECT_ID=$(gcloud config get-value project)
SA=$(gcloud compute instances describe openclaw-gateway --zone=<ZONE> \
--format="get(serviceAccounts[0].email)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$SA" \
--role="roles/aiplatform.user"2. Cài đặt các gói Python cần thiết
sudo docker exec openclaw-openclaw-gateway-1 bash -c "
apt-get update && apt-get install -y python3-pip chromium
pip3 install google-cloud-aiplatform cognee playwright --break-system-packages
/home/node/.local/bin/playwright install chromium
"3. Kiểm tra
# Kiểm tra Vertex AI
sudo docker exec openclaw-openclaw-gateway-1 python3 -c "
import vertexai
vertexai.init(location='us-central1')
print('Vertex AI ready')
"
# Kiểm tra Playwright
sudo docker exec openclaw-openclaw-gateway-1 python3 -c "
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
print('Playwright ready')
browser.close()
"Phần 9: Thiết lập hệ thống đa agent với Telegram
Đây là tính năng nổi bật nhất của OpenClaw: bạn có thể vận hành nhiều agent AI độc lập, mỗi agent gắn với một bot Telegram riêng biệt.
1. Tạo bot trên Telegram
Chat với @BotFather để tạo các bot mới. Mỗi agent cần một bot riêng. Lưu lại token của từng bot.
2. Cấu hình đa agent
Cập nhật file ~/.openclaw/openclaw.json với cấu trúc sau:
{
"agents": {
"defaults": {
"model": {
"primary": "proxypal/claude-sonnet-4-5"
},
"maxConcurrent": 4
},
"list": [
{
"id": "main",
"name": "Javis",
"default": true,
"model": "proxypal/claude-opus-4-5-thinking"
},
{
"id": "lena",
"name": "Lena",
"model": "proxypal/gemini-3-pro-high"
}
]
},
"bindings": [
{"agentId": "main", "match": {"channel": "telegram", "accountId": "javis"}},
{"agentId": "lena", "match": {"channel": "telegram", "accountId": "lena"}}
],
"tools": {
"agentToAgent": {
"enabled": true,
"allow": ["main", "lena"]
}
},
"channels": {
"telegram": {
"enabled": true,
"accounts": {
"javis": {"botToken": "<JAVIS_BOT_TOKEN>"},
"lena": {"botToken": "<LENA_BOT_TOKEN>"}
},
"groupPolicy": "open",
"streamMode": "partial"
}
}
}3. Tạo thư mục riêng cho mỗi agent (tùy chọn)
for AGENT in main lena; do
sudo docker exec openclaw-openclaw-gateway-1 mkdir -p /home/node/.openclaw/agents/$AGENT
sudo docker exec openclaw-openclaw-gateway-1 mkdir -p /home/node/.openclaw/workspace-$AGENT
done4. Phê duyệt người dùng Telegram
Khi có người nhắn tin cho bot lần đầu, họ sẽ nằm trong danh sách chờ duyệt:
# Xem danh sách chờ
sudo docker compose exec openclaw-gateway openclaw pairing list telegram --pending
# Phê duyệt
sudo docker compose exec openclaw-gateway openclaw pairing approve telegram <USER_ID>5. Kiểm tra hoạt động đa agent
sudo docker logs openclaw-openclaw-gateway-1 --since 1m 2>&1 | grep -E "telegram|agent"Kết quả mong đợi sẽ hiển thị các dòng thông báo mỗi bot Telegram đã khởi động thành công.
Phần 10: Truy cập giao diện quản trị
Lấy token
cat ~/openclaw/.env | grep TOKENTruy cập giao diện web
Mở trình duyệt và truy cập https://openclaw.<tên-miền-của-bạn>/. Dán token vào phần cài đặt để xác thực, hoặc truy cập trực tiếp qua URL kèm token:
https://openclaw.<tên-miền-của-bạn>/?token=<TOKEN>Cấu trúc thư mục tham khảo
~/openclaw/
├── docker-compose.yml
├── .env
└── Dockerfile
~/.openclaw/
├── openclaw.json
├── agents/
│ ├── main/agent.yaml
│ └── lena/agent.yaml
├── devices/
│ ├── paired.json
│ └── pending.json
└── workspace/Xử lý sự cố thường gặp
| Hiện tượng | Nguyên nhân và cách khắc phục |
|---|---|
Lỗi ACCESS_TOKEN_SCOPE_INSUFFICIENT | VM thiếu scope cloud-platform. Cần tạo lại VM với tham số --scopes=cloud-platform. |
Lỗi token_mismatch | Xóa file paired.json, pending.json rồi restart container và xóa localStorage trên trình duyệt. |
Lỗi Proxy headers from untrusted | Thêm dải IP phù hợp vào mảng trustedProxies trong file cấu hình. |
Lỗi Unknown model: anthropic/... | Khi sử dụng proxy, phải dùng tiền tố proxypal/ thay vì anthropic/. |
| Bot Telegram không phản hồi | Kiểm tra docker compose ps, đảm bảo container đang chạy và cấu hình "enabled": true. |
| Lỗi 403 Forbidden từ Cloudflare | Kiểm tra lại policy trong Cloudflare Access, đảm bảo email của bạn nằm trong danh sách được phép. |
| Vòng lặp chuyển hướng (redirect loop) | Kiểm tra lại cấu hình trustedProxies. |
Khôi phục toàn bộ (nuclear reset)
Trong trường hợp cần làm lại từ đầu phần xác thực thiết bị:
sudo docker exec openclaw-openclaw-gateway-1 bash -c "
echo {} > /home/node/.openclaw/devices/paired.json
echo {} > /home/node/.openclaw/devices/pending.json
"
sudo docker compose restart openclaw-gatewayĐồng thời xóa localStorage trên trình duyệt.
Các lệnh thao tác nhanh
# Kết nối SSH
gcloud compute ssh openclaw-gateway --zone=<ZONE>
# Xem log gần nhất
sudo docker logs openclaw-openclaw-gateway-1 --since 5m
# Khởi động lại OpenClaw
cd ~/openclaw && sudo docker compose restart openclaw-gateway
# Dựng lại toàn bộ container
sudo docker compose down && sudo docker compose up -d
# Xem log Cloudflare Tunnel
sudo docker logs cloudflared --since 5mSau khi hoàn thành các bước trên, bạn đã có một hệ thống AI agent hoàn chỉnh: chạy ổn định trên hạ tầng Google Cloud, được bảo vệ bởi Cloudflare, và có thể điều khiển linh hoạt qua giao diện web lẫn Telegram. Từ đây, bạn có thể mở rộng thêm nhiều agent, tích hợp thêm các công cụ tự động hóa, hoặc xây dựng quy trình làm việc phức tạp hơn tùy theo nhu cầu.
Mình cũng có tạo script cài tự động, ae tham khảo nhé:
#!/usr/bin/env bash
# =============================================================================
# setup_openclaw_gcp.sh
# Script tự động hóa triển khai OpenClaw AI Gateway trên GCP VM
# Dựa trên hướng dẫn: https://github.com/lktiep/OpenClawGCP
#
# Cách sử dụng:
# chmod +x setup_openclaw_gcp.sh
# ./setup_openclaw_gcp.sh
#
# Lưu ý: Chạy script này SAU KHI đã SSH vào GCP VM (Debian 12).
# =============================================================================
set -euo pipefail
# --- Màu sắc cho output ---
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
NC='\033[0m' # No Color
# --- Hàm tiện ích ---
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_section() { echo -e "\n${CYAN}========== $1 ==========${NC}\n"; }
# --- Biến cấu hình (người dùng có thể thay đổi) ---
OPENCLAW_DIR="$HOME/openclaw"
OPENCLAW_CONFIG_DIR="$HOME/.openclaw"
CLIPROXY_DIR="$HOME/CLIProxyAPI"
# Tên container OpenClaw (mặc định sau khi chạy docker-setup.sh)
OPENCLAW_CONTAINER="openclaw-openclaw-gateway-1"
# =============================================================================
# PHẦN 1: Kiểm tra và cài đặt các gói hệ thống cơ bản
# =============================================================================
install_prerequisites() {
log_section "Phần 1: Cài đặt các gói cơ bản"
log_info "Cập nhật danh sách gói..."
sudo apt-get update -qq
log_info "Cài đặt git, curl, ca-certificates..."
sudo apt-get install -y -qq git curl ca-certificates > /dev/null 2>&1
log_info "Các gói cơ bản đã sẵn sàng."
}
# =============================================================================
# PHẦN 2: Kiểm tra và cài đặt Docker
# =============================================================================
install_docker() {
log_section "Phần 2: Kiểm tra Docker"
# Kiểm tra Docker đã được cài chưa
if command -v docker &> /dev/null; then
local docker_version
docker_version=$(docker --version 2>/dev/null || echo "unknown")
log_info "Docker đã được cài đặt: $docker_version"
else
log_warn "Docker chưa được cài đặt. Đang tiến hành cài đặt..."
# Cài Docker bằng script chính thức
curl -fsSL https://get.docker.com | sudo sh
log_info "Docker đã cài đặt xong."
fi
# Thêm user hiện tại vào group docker (nếu chưa có)
if ! groups "$USER" | grep -q '\bdocker\b'; then
log_info "Thêm user '$USER' vào group docker..."
sudo usermod -aG docker "$USER"
log_warn "====================================================="
log_warn "BẠN CẦN ĐĂNG XUẤT VÀ ĐĂNG NHẬP LẠI"
log_warn "để quyền Docker có hiệu lực."
log_warn ""
log_warn "Chạy lệnh sau để đăng nhập lại:"
log_warn " exit"
log_warn " gcloud compute ssh openclaw-gateway --zone=<ZONE>"
log_warn ""
log_warn "Sau đó chạy lại script này."
log_warn "====================================================="
exit 0
fi
# Kiểm tra Docker daemon có đang chạy không
if ! docker info &> /dev/null; then
log_warn "Docker daemon chưa chạy. Đang khởi động..."
sudo systemctl start docker
sudo systemctl enable docker
fi
log_info "Docker daemon đang hoạt động bình thường."
}
# =============================================================================
# PHẦN 3: Clone và triển khai OpenClaw
# =============================================================================
deploy_openclaw() {
log_section "Phần 3: Triển khai OpenClaw"
# Kiểm tra thư mục OpenClaw đã tồn tại chưa
if [ -d "$OPENCLAW_DIR" ]; then
log_warn "Thư mục $OPENCLAW_DIR đã tồn tại."
read -rp "Bạn có muốn xóa và clone lại không? (y/N): " confirm
if [[ "$confirm" =~ ^[Yy]$ ]]; then
log_info "Xóa thư mục cũ..."
rm -rf "$OPENCLAW_DIR"
else
log_info "Giữ nguyên thư mục hiện tại, bỏ qua bước clone."
fi
fi
# Clone repo nếu thư mục chưa tồn tại
if [ ! -d "$OPENCLAW_DIR" ]; then
log_info "Clone repository OpenClaw..."
git clone https://github.com/openclaw/openclaw.git "$OPENCLAW_DIR"
fi
# Tạo thư mục cấu hình
log_info "Tạo thư mục cấu hình OpenClaw..."
mkdir -p "$OPENCLAW_CONFIG_DIR"
mkdir -p "$OPENCLAW_CONFIG_DIR/workspace"
mkdir -p "$OPENCLAW_CONFIG_DIR/agents"
mkdir -p "$OPENCLAW_CONFIG_DIR/devices"
# Chạy script setup
cd "$OPENCLAW_DIR"
if [ -f "docker-setup.sh" ]; then
log_info "Chạy docker-setup.sh (chế độ non-interactive)..."
chmod +x docker-setup.sh
./docker-setup.sh --non-interactive
else
log_error "Không tìm thấy file docker-setup.sh trong $OPENCLAW_DIR"
log_info "Thử khởi chạy bằng docker compose trực tiếp..."
docker compose up -d
fi
# Đợi container khởi động
log_info "Đợi container khởi động (30 giây)..."
sleep 30
# Kiểm tra trạng thái
log_info "Kiểm tra trạng thái các container..."
docker compose ps
log_info "Kiểm tra OpenClaw gateway..."
if curl -s --max-time 10 http://localhost:18789 > /dev/null 2>&1; then
log_info "OpenClaw gateway đã hoạt động tại http://localhost:18789"
else
log_warn "Chưa nhận được phản hồi từ gateway. Có thể cần thêm thời gian khởi động."
log_warn "Kiểm tra log: docker logs $OPENCLAW_CONTAINER --since 2m"
fi
}
# =============================================================================
# PHẦN 4: Clone CLIProxyAPI (backend LLM proxy)
# =============================================================================
deploy_cliproxy() {
log_section "Phần 4: Thiết lập CLIProxyAPI (tùy chọn)"
read -rp "Bạn có muốn cài CLIProxyAPI (proxy cho các model LLM) không? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
log_info "Bỏ qua bước cài CLIProxyAPI."
return
fi
if [ -d "$CLIPROXY_DIR" ]; then
log_warn "Thư mục $CLIPROXY_DIR đã tồn tại, bỏ qua bước clone."
else
log_info "Clone repository CLIProxyAPI..."
git clone https://github.com/router-for-me/CLIProxyAPI.git "$CLIPROXY_DIR"
fi
cd "$CLIPROXY_DIR"
mkdir -p auths logs
log_warn "====================================================="
log_warn "BẠN CẦN CẤU HÌNH FILE config.yaml TRƯỚC KHI KHỞI CHẠY."
log_warn ""
log_warn " nano $CLIPROXY_DIR/config.yaml"
log_warn ""
log_warn "Sau khi cấu hình xong, chạy:"
log_warn " cd $CLIPROXY_DIR && sudo docker compose up -d"
log_warn "====================================================="
}
# =============================================================================
# PHẦN 5: Cài đặt các gói Python bổ sung vào container OpenClaw
# =============================================================================
install_python_packages() {
log_section "Phần 5: Cài đặt thư viện Python vào container"
# Kiểm tra container có đang chạy không
if ! docker ps --format '{{.Names}}' | grep -q "$OPENCLAW_CONTAINER"; then
log_error "Container '$OPENCLAW_CONTAINER' không tìm thấy hoặc chưa chạy."
log_warn "Hãy đảm bảo OpenClaw đã được triển khai thành công (Phần 3)."
log_warn "Kiểm tra bằng lệnh: docker compose ps"
return 1
fi
log_info "Cài đặt các gói hệ thống trong container (python3-pip, chromium)..."
sudo docker exec "$OPENCLAW_CONTAINER" bash -c "
apt-get update -qq && \
apt-get install -y -qq python3-pip chromium > /dev/null 2>&1
" || {
log_warn "Không thể cài gói hệ thống. Container có thể dùng image khác."
}
log_info "Cài đặt thư viện Python: google-cloud-aiplatform, cognee, playwright..."
sudo docker exec "$OPENCLAW_CONTAINER" bash -c "
pip3 install --quiet \
google-cloud-aiplatform \
cognee \
playwright \
--break-system-packages 2>/dev/null || \
pip3 install --quiet \
google-cloud-aiplatform \
cognee \
playwright
"
log_info "Cài đặt Chromium cho Playwright..."
sudo docker exec "$OPENCLAW_CONTAINER" bash -c "
playwright install chromium 2>/dev/null || \
/home/node/.local/bin/playwright install chromium 2>/dev/null || \
python3 -m playwright install chromium
" || {
log_warn "Không thể cài Playwright Chromium tự động."
log_warn "Thử chạy thủ công trong container."
}
# Kiểm tra kết quả
log_info "Kiểm tra Vertex AI SDK..."
if sudo docker exec "$OPENCLAW_CONTAINER" python3 -c "
import vertexai
vertexai.init(location='us-central1')
print('Vertex AI SDK: OK')
" 2>/dev/null; then
log_info "Vertex AI SDK hoạt động bình thường."
else
log_warn "Vertex AI SDK chưa sẵn sàng."
log_warn "Có thể do chưa cấp quyền IAM cho service account."
log_warn "Chạy lệnh sau trên máy local (không phải trong VM):"
log_warn " gcloud projects add-iam-policy-binding <PROJECT_ID> \\"
log_warn " --member='serviceAccount:<SA_EMAIL>' \\"
log_warn " --role='roles/aiplatform.user'"
fi
log_info "Kiểm tra Playwright..."
if sudo docker exec "$OPENCLAW_CONTAINER" python3 -c "
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
print('Playwright: OK')
browser.close()
" 2>/dev/null; then
log_info "Playwright hoạt động bình thường."
else
log_warn "Playwright chưa sẵn sàng. Có thể cần cài thêm dependencies."
fi
}
# =============================================================================
# PHẦN 6: Tạo file cấu hình mẫu
# =============================================================================
create_sample_config() {
log_section "Phần 6: Tạo file cấu hình mẫu"
local config_file="$OPENCLAW_CONFIG_DIR/openclaw.json"
# Không ghi đè nếu file đã tồn tại
if [ -f "$config_file" ]; then
log_warn "File $config_file đã tồn tại, không ghi đè."
log_info "Nếu muốn tạo lại, hãy xóa file cũ trước: rm $config_file"
return
fi
log_info "Tạo file cấu hình mẫu tại $config_file..."
cat > "$config_file" << 'CONFIGEOF'
{
"gateway": {
"mode": "local",
"trustedProxies": [
"172.18.0.1",
"172.16.0.0/12",
"10.0.0.0/8",
"192.168.0.0/16",
"127.0.0.1"
]
},
"models": {
"providers": {
"proxypal": {
"baseUrl": "http://host.docker.internal:8317/v1",
"apiKey": "<THAY_BANG_API_KEY_CUA_BAN>",
"api": "openai-completions",
"models": [
{"id": "claude-sonnet-4-5", "name": "Claude Sonnet 4.5"},
{"id": "gemini-3-pro-preview", "name": "Gemini 3 Pro"}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "proxypal/claude-sonnet-4-5",
"fallbacks": ["proxypal/gemini-3-pro-preview"]
},
"maxConcurrent": 4
},
"list": [
{
"id": "main",
"name": "Javis",
"default": true,
"model": "proxypal/claude-sonnet-4-5"
}
]
},
"channels": {
"telegram": {
"enabled": false,
"accounts": {
"javis": {
"botToken": "<THAY_BANG_BOT_TOKEN_TELEGRAM>"
}
},
"groupPolicy": "open",
"streamMode": "partial"
}
}
}
CONFIGEOF
log_info "File cấu hình mẫu đã được tạo."
log_warn "====================================================="
log_warn "QUAN TRONG: Bạn cần chỉnh sửa file cấu hình"
log_warn "trước khi sử dụng:"
log_warn ""
log_warn " nano $config_file"
log_warn ""
log_warn "Thay thế các giá trị:"
log_warn " - <THAY_BANG_API_KEY_CUA_BAN>"
log_warn " - <THAY_BANG_BOT_TOKEN_TELEGRAM>"
log_warn ""
log_warn "TUYET DOI KHONG chia se API Key cua ban voi bat ky ai!"
log_warn "====================================================="
}
# =============================================================================
# PHẦN 7: Hiển thị thông tin tổng kết
# =============================================================================
show_summary() {
log_section "Hoàn tất cài đặt"
echo -e "${GREEN}"
echo " ============================================="
echo " OpenClaw AI Gateway - Cài đặt hoàn tất"
echo " ============================================="
echo -e "${NC}"
echo " Thư mục OpenClaw: $OPENCLAW_DIR"
echo " Thư mục cấu hình: $OPENCLAW_CONFIG_DIR"
echo " File cấu hình chính: $OPENCLAW_CONFIG_DIR/openclaw.json"
echo ""
# Lấy token nếu có
local env_file="$OPENCLAW_DIR/.env"
if [ -f "$env_file" ]; then
local token
token=$(grep -oP 'OPENCLAW_GATEWAY_TOKEN=\K.*' "$env_file" 2>/dev/null || echo "")
if [ -n "$token" ]; then
echo -e " Gateway Token: ${YELLOW}$token${NC}"
fi
fi
echo ""
echo " Các bước tiếp theo:"
echo " -------------------------------------------"
echo " 1. Chỉnh sửa file cấu hình:"
echo " nano $OPENCLAW_CONFIG_DIR/openclaw.json"
echo ""
echo " 2. Thiết lập Cloudflare Tunnel (xem bài hướng dẫn)."
echo ""
echo " 3. Khởi động lại OpenClaw sau khi cấu hình:"
echo " cd $OPENCLAW_DIR && docker compose restart openclaw-gateway"
echo ""
echo " 4. Truy cập giao diện web:"
echo " http://localhost:18789 (nội bộ)"
echo " https://openclaw.<ten-mien-cua-ban> (qua Cloudflare)"
echo ""
echo " Các lệnh hữu ích:"
echo " -------------------------------------------"
echo " Xem log: docker logs $OPENCLAW_CONTAINER --since 5m"
echo " Khởi động lại: cd $OPENCLAW_DIR && docker compose restart"
echo " Dừng hệ thống: cd $OPENCLAW_DIR && docker compose down"
echo ""
}
# =============================================================================
# MAIN: Chạy toàn bộ quy trình
# =============================================================================
main() {
echo -e "${CYAN}"
echo " ============================================="
echo " OpenClaw GCP - Script cài đặt tự động"
echo " Phiên bản: 1.0.0"
echo " Nguồn: github.com/lktiep/OpenClawGCP"
echo " ============================================="
echo -e "${NC}"
# Kiểm tra hệ điều hành
if [ ! -f /etc/debian_version ]; then
log_warn "Script này được thiết kế cho Debian/Ubuntu."
log_warn "Hệ điều hành hiện tại có thể không tương thích."
read -rp "Bạn có muốn tiếp tục không? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
log_info "Đã hủy."
exit 0
fi
fi
# Chạy từng phần theo thứ tự
install_prerequisites # Phần 1: Gói cơ bản
install_docker # Phần 2: Docker
deploy_openclaw # Phần 3: OpenClaw
deploy_cliproxy # Phần 4: CLIProxyAPI (tùy chọn)
install_python_packages # Phần 5: Thư viện Python
create_sample_config # Phần 6: File cấu hình mẫu
show_summary # Phần 7: Tổng kết
log_info "Script hoàn tất. Chúc bạn sử dụng OpenClaw vui vẻ!"
}
# Chạy hàm main
main "$@"Nguồn tham khảo: lktiep/OpenClawGCP








