- Self-host Claude Code trên VPS Ubuntu 2GB đã đủ chạy 24/7. VPS 4GB ngon hơn khi Claude xử lý repo lớn.
- Workflow "đóng laptop, sáng có code" gói gọn trong 3 thứ: tmux, file CLAUDE.md viết task rõ ràng, webhook Telegram báo xong.
- Region VN hop SSH nhanh hơn (ping 5-15ms), region US ping API Anthropic thấp hơn (50-80ms vs 200ms+). Nếu chạy headless tự động, ưu tiên US.
- Tổng chi phí khởi điểm dưới 200k đồng/tháng, không tính API token Anthropic.
Nếu bạn đang vibe code với Claude Code, Codex CLI, Gemini CLI hay Antigravity và cảm thấy laptop ngốn pin chỉ để giữ một session terminal chạy, bài này dành cho bạn. Self-host Claude Code trên một VPS giá rẻ giải quyết đúng nhược điểm đó: agent chạy trên server, bạn cắm laptop hay không cũng được, sáng dậy mở SSH lên xem Claude đã commit gì.
Bài viết này hướng dẫn đầy đủ setup theo cách thực dụng nhất, từ chọn cấu hình VPS, cài Claude Code, dựng workflow headless với tmux, kết nối Application Password vào WordPress, đến mẹo viết file CLAUDE.md sao cho agent không lạc đề khi bạn ngủ. Tất cả code và lệnh đều test trên Ubuntu 24.04 LTS với Node.js 22, áp dụng tương tự cho AlmaLinux 9.
Vibe coder và headless Claude Code: vì sao thay đổi cách làm việc
"Vibe coder" là cách gọi vui các dev hiện đại không gõ từng dòng code mà điều phối nhiều AI assistant cùng lúc. Buổi sáng mở Claude Code refactor module auth, buổi chiều bật Codex CLI làm test, tối dùng Gemini CLI review. Workflow này tiết kiệm cực kỳ nhiều thời gian, nhưng có một nút thắt: tất cả đều chạy local trên máy bạn. Đóng máy là dừng.
Claude Code phiên bản mới hỗ trợ chế độ headless qua cờ --headless hoặc đơn giản là chạy trong một tmux session. Khi đặt nó trên VPS, bạn nhận lại 3 thứ:
- Tính liên tục: task dài 30 phút đến vài giờ không bị gián đoạn vì laptop sleep, mất wifi, hay phải đi cafe.
- Tách bạch môi trường: Claude làm trên branch dev của VPS, không động vào máy local. An toàn khi nó tự cài thư viện, tự tạo file.
- Cộng tác từ mọi thiết bị: SSH từ điện thoại qua Termux cũng xem được Claude đang viết gì. Đi du lịch vẫn ship được feature.
Cộng đồng vibe coder ở Việt Nam tăng nhanh từ giữa 2025 khi giá API Claude và Gemini ổn định hơn. Khá nhiều người chuyển từ subscription ChatGPT Plus sang trả tiền API trực tiếp + dùng Claude Code, tổng chi rẻ hơn mà output mạnh hơn nhiều.
Cấu hình VPS tối thiểu để chạy Claude Code 24/7
Claude Code không nặng CPU. Phần ngốn tài nguyên nhất là khi nó spawn subagent chạy build/test (npm run build, pytest, cargo build). Dưới đây là 3 mức cấu hình phổ biến và use case phù hợp:
| Cấu hình | RAM | CPU | SSD | Phù hợp |
|---|---|---|---|---|
| Starter | 2 GB | 1 vCPU | 20 GB | Side project nhỏ, 1-2 repo Next.js/Python, không build native |
| Workhorse | 4 GB | 2 vCPU | 50 GB | Monorepo có Docker, build TypeScript lớn, chạy 2 agent song song |
| Power user | 8 GB | 4 vCPU | 80 GB | Rust/Go/C++ build nặng, Postgres + Redis cùng VPS, Playwright scrape |
Một con số tham khảo cụ thể: Claude Code idle (không làm task) ngốn khoảng 80-120 MB RAM, một session tmux + npm dev server kéo tổng lên 600-800 MB. Khi Claude build Next.js lớn, peak có thể chạm 1.5 GB. Trên VPS 2 GB không có swap, build hay bị OOM kill. Bật swap 2 GB là fix nhanh nhưng ổ cứng phải SSD CEPH hay NVMe để không kéo tốc độ.
Về network, băng thông không phải vấn đề lớn (Claude API gửi text), nhưng độ trễ tới api.anthropic.com ảnh hưởng UX. Tốc độ phản hồi từ VPS US thường 50-80ms, VPS VN qua đường quốc tế dao động 180-280ms tuỳ ISP. Khác biệt rõ rệt khi Claude stream output.
Cài Claude Code trên Ubuntu 24.04 trong 8 lệnh
Cài đặt thực tế chỉ cần Node.js 20+ và npm. Quy trình dưới giả định bạn đã có VPS trống Ubuntu 24.04, đăng nhập SSH bằng key (đừng dùng password).
# 1. Update + cài curl, git, build-essential
sudo apt update && sudo apt -y upgrade
sudo apt -y install curl git build-essential tmux htop
# 2. Cài Node.js 22 LTS qua NodeSource
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt -y install nodejs
# 3. Verify
node -v # phải ra v22.x
npm -v # phải ra 10.x+
# 4. Cài Claude Code CLI
npm install -g @anthropic-ai/claude-code
# 5. Đăng nhập (mở browser local copy URL qua paste)
claude login
# 6. Test
cd ~ && mkdir test-project && cd test-project
git init && echo "# Test" > README.md
claude
Nếu bạn dùng AlmaLinux 9, thay bước 1-2 bằng sudo dnf install -y curl git tmux htop nodejs:22 (cần module nodejs:22 từ EPEL). Phần còn lại giống hệt.
Một điểm hay gặp: claude login trên VPS không bật được browser nên nó in URL ra terminal, bạn copy URL đó về browser local mở. Sau khi đăng nhập trên web Anthropic, copy mã token paste ngược lại vào terminal trên VPS. Lưu lại trong ~/.config/claude/, lần sau không cần login.
tmux + Claude Code: workflow "đóng laptop, sáng có code"
tmux là terminal multiplexer cho phép tạo session persistent. SSH ra, session vẫn chạy. SSH vào lại, session còn nguyên. Đây là tool cốt lõi để chạy headless Claude.
# Tạo session mới tên claude-build
tmux new -s claude-build
# Trong session, vào project và chạy Claude
cd ~/projects/my-app
claude
# Giao task cho Claude rồi detach
# Bấm: Ctrl+b sau đó bấm d
# Bây giờ bạn có thể đóng SSH, đóng laptop, đi ngủ.
# Sáng dậy SSH vào lại, reattach session:
tmux attach -t claude-build
Vài lệnh tmux dùng hàng ngày:
tmux ls: liệt kê session đang chạy.tmux kill-session -t claude-build: xoá session.Ctrl+b ": split horizontal, có panel để theo dõi log riêng.Ctrl+b %: split vertical.Ctrl+b [: vào scrollback mode để cuộn lại lịch sử output (thoát bằngq).
Khi chạy task dài cho Claude (refactor 30 file, viết test cho cả module), tip nhỏ: bật một panel song song chạy htop để biết VPS có sắp hết RAM hay không. Nếu thấy load tăng cao kéo dài, prompt Claude dừng và chạy lại với chiến lược nhỏ hơn.
Application Password + MCP Adapter: kết nối Claude vào WordPress, Postgres
Self-host Claude Code mạnh thực sự khi cho nó truy cập trực tiếp vào hệ thống. Có 2 con đường phổ biến cho dev WordPress và dev backend:
1. WordPress qua MCP Adapter v0.5
Plugin chính thức của WordPress (WP 7.0+ tích hợp sẵn Abilities API). Cài plugin mcp-adapter, tạo Application Password trong wp-admin -> Users -> Edit -> Application Passwords. Cài endpoint vào Claude:
# Trong dự án Claude Code chạy trên VPS, tạo thư mục cấu hình:
mkdir -p .claude
# Tạo file .claude/mcp.json với nội dung dưới đây:
{
"mcpServers": {
"wordpress": {
"type": "http",
"url": "https://your-site.com/wp-json/mcp/v1/sse",
"headers": {
"Authorization": "Basic BASE64(user:app-password)"
}
}
}
}
Sau đó claude trong project sẽ tự động kết nối, bạn có thể prompt "tạo bài blog mới với tiêu đề X, nội dung Y" và Claude gọi REST API WordPress trực tiếp.
2. Postgres qua MCP server postgres
npm install -g @modelcontextprotocol/server-postgres
# Trong .claude/mcp.json thêm:
{
"mcpServers": {
"postgres": {
"command": "mcp-server-postgres",
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
}
}
}
}
Claude giờ truy vấn được bảng trực tiếp, debug query chậm, đề xuất index. Đặc biệt hữu ích khi prompt "phân tích slow query log tuần qua, đề xuất 3 index tối ưu nhất".
Lưu ý bảo mật: Application Password và DATABASE_URL đừng commit lên Git. Lưu ngoài project trong ~/.config/claude/mcp.json hoặc dùng biến môi trường. Một sơ suất là cả repo public và GitHub bot quét được trong 30 giây.
CLAUDE.md: viết task list đúng cách để Claude không lạc đề khi bạn ngủ
File CLAUDE.md ở root project là bộ não dài hạn. Claude đọc nó mỗi session để hiểu cấu trúc, convention, task hiện tại. Khi chạy headless qua đêm, file này quyết định chất lượng output.
Template tối giản hiệu quả:
# CLAUDE.md
## Project
Next.js 15 app, App Router, Tailwind, Drizzle ORM, Postgres.
## Convention
- Always use TypeScript strict
- Component file kebab-case
- API route in app/api, server action ưu tiên hơn
- No comment trừ khi WHY non-obvious
## Tools
- pnpm dev (port 3000)
- pnpm test (vitest)
- pnpm db:push (drizzle)
## Current task
Refactor auth flow:
1. Migrate from NextAuth v4 to v5
2. Add Google + Github provider
3. Session lưu Postgres không cookie
4. Viết test e2e cho login flow
## Constraints
- Đừng đụng folder app/admin/* (mình đang sửa)
- Chạy `pnpm test` sau mỗi file thay đổi
- Commit nhỏ lẻ, một commit một concern
3 nguyên tắc viết task để Claude làm đúng khi headless:
- Rõ ràng acceptance criteria. "Migrate xong khi
pnpm testpass + login Google trả về session". Không phải "làm cho nó hoạt động". - Liệt kê constraint trước, không sau. Claude đọc tuần tự, constraint trên đầu thì follow trong toàn task.
- Tách subtask nhỏ. Một task lớn dễ lạc, 4-5 subtask vừa đủ thì Claude tick từng cái.
Telegram alert khi Claude xong task
Để không phải SSH liên tục check, set webhook Telegram báo khi Claude kết thúc. Tạo bot qua @BotFather, lấy token và chat_id, lưu vào VPS:
# ~/.local/bin/notify
#!/bin/bash
TOKEN="your-bot-token"
CHAT_ID="your-chat-id"
MSG="${1:-Claude xong task}"
curl -s "https://api.telegram.org/bot${TOKEN}/sendMessage"
-d "chat_id=${CHAT_ID}"
-d "text=${MSG}"
-d "parse_mode=Markdown" > /dev/null
chmod +x ~/.local/bin/notify
Thêm vào CLAUDE.md dòng cuối: Khi xong task chính, chạy `notify "Build feature X xong, branch ABC sẵn sàng review"`. Sáng dậy là điện thoại đã có notification, biết Claude đã làm gì.
VPS Việt Nam hay US: chọn region nào cho Claude Code?
Quyết định tuỳ workflow chính:
| Tiêu chí | VPS Việt Nam | VPS US |
|---|---|---|
| Ping SSH từ VN | 5-15 ms | 180-220 ms |
| Ping tới api.anthropic.com | 200-280 ms | 50-80 ms |
| Tốc độ tải npm/pip | 30-50 MB/s | 10-25 MB/s |
| Phù hợp khi | Bạn ngồi SSH chỉnh code thường xuyên | Headless chạy auto qua đêm |
| Giá tham khảo | 200-600k VND/tháng (2-4 GB RAM) | 5-15 USD/tháng (cùng cấu hình) |
Trải nghiệm thực tế: dùng cả 2. Một VPS VN làm "máy ngồi" để code tay khi cần phản hồi nhanh. Một VPS US làm "máy nhân viên" cho Claude chạy headless task dài. Tổng chi vẫn dưới 500k/tháng cho cấu hình vừa đủ.
5 lỗi thường gặp khi self-host Claude và cách fix
- OOM kill khi build: Thêm swap 2 GB.
sudo fallocate -l 2G /swapfile && sudo mkswap /swapfile && sudo swapon /swapfile. Thêm vào /etc/fstab cho persistent. - SSH bị disconnect lúc Claude đang chạy: Lý do hay nhất là server-side timeout. Thêm vào
~/.ssh/configtrên máy local:ServerAliveInterval 60vàServerAliveCountMax 30. - Claude API timeout: Thường do network từ VN. Nếu VPS đặt ở VN, dùng IPv6 hoặc qua proxy SOCKS5 ra US để tăng độ ổn định.
- tmux session mất sau khi VPS reboot: tmux không persist qua reboot. Dùng systemd service start tmux session khi boot, hoặc đơn giản: SSH vào và
tmux new -s claude-buildmỗi sáng. - Disk đầy vì node_modules: Một project Next.js trung bình ngốn 500-800 MB. Khi có 5-10 project, disk 20 GB nhanh hết. Định kỳ chạy
find ~/projects -name node_modules -type d -prune -exec du -sh {} + | sort -hđể xoá project cũ.
FAQ
Self-host Claude Code có khác gì với chạy local trên máy?
Không có khác biệt về tính năng. Khác biệt nằm ở: tính liên tục (VPS chạy 24/7), tách bạch môi trường (không động vào máy local), và truy cập từ nhiều thiết bị qua SSH.
Cấu hình VPS rẻ nhất chạy được Claude Code là gì?
VPS 2 GB RAM, 1 vCPU, 20 GB SSD đủ chạy cho dự án nhỏ. Quan trọng là bật swap 2 GB và ổ cứng phải SSD nhanh (CEPH, NVMe). Giá thị trường VN dao động 150-250k/tháng.
Có cần GPU không?
Không. Claude Code gọi API Anthropic xử lý ở data center của họ. VPS bạn chỉ cần CPU. GPU chỉ cần khi muốn chạy thêm Ollama hay Qwen local.
Headless Claude có an toàn không khi để chạy qua đêm?
An toàn ở mức Claude vẫn dừng và hỏi khi gặp lệnh nguy hiểm (xoá file production, push force). Tuy nhiên nên: chạy trên branch dev, không cho quyền sudo NOPASSWD, snapshot VPS hàng ngày để rollback được nếu Claude làm hỏng.
So với Cursor hay Windsurf, Claude Code headless có lợi gì?
Cursor và Windsurf là GUI IDE, cần máy desktop chạy nền và không hỗ trợ headless tốt. Claude Code CLI nhẹ, chạy được trên VPS nhỏ, scriptable qua bash, tích hợp tốt với MCP server. Tổ hợp khác bản chất.
Token API tiêu thụ bao nhiêu một tháng?
Phụ thuộc heavily vào volume code. Dev solo sử dụng đều mỗi ngày, thường dao động 20-60 USD/tháng cho Claude Sonnet. Nếu chạy headless 24/7 với task dài, có thể lên 100-200 USD. Giảm bằng cách cache prompt, dùng model Haiku cho task nhỏ.
Bắt đầu self-host Claude Code chỉ từ 199k/tháng
Cloud VPS TND có sẵn AlmaLinux 9, Ubuntu 22/24, Debian 12/13 image cloud-init. SSD CEPH, snapshot 1-click, backup hàng ngày, network 200Mbps trong nước. Cài Claude Code trong 5 phút và bắt đầu vibe code.
Xem 8 cấu hình Cloud VPS →


