· multica / self-hosting / ai-agents
Hướng dẫn tự host Multica: Thiết lập cho nhóm AI agent
Tự host Multica v0.3.1 với ba Docker container và một lệnh make. Hướng dẫn khởi chạy nhanh, cứng hóa production và phân tích chi phí cho nhóm AI agent.
Bởi Ethan
1.845 từ · 10 phút đọc
Multica Cloud không có bảng giá công khai — bạn được dùng thử miễn phí, sau đó phải thương lượng. Nếu bạn đang vận hành AI agent workflow ở bất kỳ quy mô nào, đó là vị thế bạn không muốn ở. Multica v0.3.1 có phiên bản tự host: ba Docker container, một lệnh make selfhost, và toàn bộ stack chạy trên máy chủ Hetzner €4.49/tháng. Hướng dẫn này giúp bạn hoàn thành trong dưới 30 phút.
Dành cho ai
Các nhóm kỹ thuật đang vận hành AI agent workflow tự động — agent review code, agent viết tài liệu, bot phân loại issue — và muốn chi phí hạ tầng có thể dự đoán được. Nếu bạn đang thử nghiệm Multica cho dự án cá nhân, hãy bắt đầu bằng bản dùng thử miễn phí. Quay lại đây khi hóa đơn bắt đầu có ý nghĩa.
Kiến trúc tự host Multica
Multica tự host gồm ba container:
┌─────────────────────────────────────┐
│ Your server │
│ │
│ ┌──────────────┐ ┌─────────────┐ │
│ │ multica-web │ │ backend │ │
│ │ Next.js 16 │ │ Go :8080 │ │
│ │ :3000 │ └──────┬──────┘ │
│ └──────┬───────┘ │ │
│ └────────┐ │ │
│ ▼ ▼ │
│ ┌──────────────────┐ │
│ │ PostgreSQL 17 │ │
│ │ + pgvector │ │
│ │ :5432 │ │
│ └──────────────────┘ │
└─────────────────────────────────────┘
▲
Caddy (production)
or direct (development)
Backend là một Go binary duy nhất xử lý REST API, kết nối WebSocket cho giao tiếp agent theo thời gian thực, và chạy database migration khi khởi động. Frontend là Next.js 16 — chỉ giao tiếp với backend. PostgreSQL 17 bổ sung pgvector cho embedding store của agent. Bạn cần PostgreSQL 17 để dùng extension pgvector (Multica README).
Yêu cầu
- Docker Compose (Multica README — prerequisites)
- Tối thiểu 2 vCPU / 4 GB RAM (Hetzner CX23 đáp ứng đủ)
- Cổng 8080 chưa bị chiếm trên host — xung đột phổ biến nhất là local dev server
- Một AI coding CLI trên PATH:
claude,gemini,aider, hoặc tương tự. Multica điều phối agent; nó không quản lý AI API key. Chưa biết chọn CLI nào? Xem so sánh các AI coding CLI RESEND_API_KEYcho xác thực qua email — bỏ qua khi phát triển, bắt buộc trên production
1. Khởi chạy nhanh với Docker Compose
Clone repo và chạy make target:
git clone https://github.com/multica-ai/multica.git
cd multica
make selfhost
make selfhost làm bốn việc: tạo ngẫu nhiên JWT_SECRET, pull image mới nhất từ GHCR cho multica-backend và multica-web (packages), ghi .env với các giá trị mặc định hợp lý, rồi chạy docker compose up -d. Để ghim một phiên bản cụ thể, đặt MULTICA_IMAGE_TAG=v0.3.1 trước khi chạy. Migration chạy lần đầu khi backend khởi động — đợi 10–15 giây trước khi API phản hồi. (Multica README — quick-start)
Kiểm tra stack đã lên chưa:
curl http://localhost:8080/health
Hoặc kiểm tra trạng thái container trực tiếp:
docker compose ps
(API health endpoint — Multica README)
Mở http://localhost:3000 trên trình duyệt. Bạn sẽ thấy màn hình đăng nhập Multica.
Lỗi thường gặp — cổng 8080 đã bị chiếm:
PORT=9080 make selfhost
Hoặc sửa docker-compose.yml và đổi port binding phía host trước khi chạy make selfhost. Frontend và backend giao tiếp với nhau qua internal Docker network — chỉ có port phía host thay đổi.
2. Kết nối CLI và khởi chạy daemon
Cài CLI:
brew install multica-ai/tap/multica
Trỏ vào instance local:
multica setup self-host
# Nhập backend URL (http://localhost:8080) và frontend URL (http://localhost:3000)
# Ghi config vào ~/.multica/config.json
(CLI setup reference — Multica README)
Đăng nhập và khởi chạy daemon:
multica login
multica daemon start
multica daemon status
(Daemon commands — Multica README)
Daemon poll các issue được giao và chuyển cho AI CLI trên PATH. Nó tự phát hiện workspace từ config — không cần cấu hình thêm cho từng workspace.
Lỗi thường gặp — daemon chạy nhưng agent không nhận task:
Daemon gọi AI CLI của bạn như một subprocess. Nếu claude --version thất bại khi daemon chạy, task sẽ xếp hàng mà không có thông báo. PATH hoạt động trong terminal của bạn có thể khác với PATH daemon thấy khi chạy như system service. Cách khắc phục:
which claude
# sao chép đường dẫn đầy đủ, ví dụ /usr/local/bin/claude
Sau đó đặt biến môi trường MULTICA_CLAUDE_PATH bằng đường dẫn đầy đủ đó và khởi động lại daemon. Với các CLI khác, biến môi trường theo cùng pattern: MULTICA_CODEX_PATH và MULTICA_COPILOT_PATH.
3. Giao task đầu tiên cho agent
Tạo workspace và project qua web UI tại http://localhost:3000, rồi giao issue từ CLI:
multica issue create \
--title "Write tests for the auth module" \
--assignee-id <agent-uuid> \
--project <project-id>
Daemon nhận task trong vòng 10 giây, khởi chạy AI CLI trong thư mục project, và đăng comment kết quả khi hoàn thành. Kết nối WebSocket stream tiến trình của agent theo thời gian thực trên UI.
4. Cứng hóa cho production
Quick-start phù hợp để phát triển local. Để chạy Multica cho cả nhóm, bạn cần thêm ba thứ: một Postgres instance bên ngoài, HTTPS qua Caddy, và xác thực email.
Postgres bên ngoài
Container Postgres đi kèm chỉ để tiện lợi. Trong production, trỏ Multica vào một PG 17 instance bên ngoài đã cài pgvector:
# .env — tham khảo env var: https://github.com/multica-ai/multica#environment-variables
DATABASE_URL=postgres://user:pass@your-pg-host:5432/multica?sslmode=require
Kích hoạt pgvector trên instance bên ngoài trước khi khởi động lần đầu:
CREATE EXTENSION IF NOT EXISTS vector;
Xóa service db khỏi docker-compose.yml khi dùng database bên ngoài — backend kết nối qua DATABASE_URL bất kể có container local hay không.
Backup: Chạy pg_dump database multica theo lịch cron. Không có job backup tích hợp trong v0.3.1. Một lệnh pg_dump | gzip > multica-$(date +%F).sql.gz hàng ngày lên S3-compatible store là đủ cho các sự cố phổ biến.
HTTPS qua Caddy
Auth cookie không hoạt động đúng trên bare IP trong hầu hết các trình duyệt. Bạn cần domain với TLS. Caddy xử lý cả hai tự động. Cấu hình quan trọng là flush_interval -1 trên mọi reverse proxy block chạm vào API hoặc WebSocket path — nếu thiếu, Caddy sẽ buffer WebSocket frame và log của agent sẽ bị đứng trên UI:
# Caddyfile
multica.yourdomain.com {
handle /api/* {
reverse_proxy localhost:8080 {
flush_interval -1
}
}
handle /ws/* {
reverse_proxy localhost:8080 {
flush_interval -1
}
}
handle {
reverse_proxy localhost:3000
}
}
Cũng đặt MULTICA_APP_URL trong .env thành https://multica.yourdomain.com để backend tạo đúng URL cho magic link.
Xác thực email (Resend)
Multica dùng xác thực qua magic link email. Trong production:
# .env — tham khảo env var: https://github.com/multica-ai/multica#environment-variables
RESEND_API_KEY=re_...
RESEND_FROM_EMAIL=[email protected]
Nếu không có RESEND_API_KEY, đăng ký hoàn tất nhưng email xác nhận sẽ không đến. Khi phát triển, kiểm tra log container backend — magic link được in ra stdout khi Resend chưa được cấu hình:
docker logs multica-backend-1 | grep magic
So sánh chi phí
Hạ tầng tự host so với Multica Cloud:
| Nhà cung cấp | Cấu hình | Hàng tháng | PoP Mỹ | PoP SEA / Việt Nam |
|---|---|---|---|---|
| Hetzner CX23 | 2 vCPU / 4 GB RAM | €4.49 (tính đến 2026-05-17) | Ashburn, VA | Singapore |
| Hetzner CX33 | 4 vCPU / 8 GB RAM | €8.29 (tính đến 2026-05-17) | Ashburn, VA | Singapore |
| DigitalOcean Basic | 2 vCPU / 4 GB RAM | $24 (tính đến 2026-05-17) | NYC / SF / Chicago | Singapore (SGP1) |
| Railway | 2 vCPU / 4 GB RAM | ~$10–15 | US-West / US-East | Singapore (asia-southeast1-eqsg3a) |
| Render | Standard | ~$14–21 | Oregon / Ohio / Virginia | Singapore |
| Multica Cloud | — | Chưa công bố | — | — |
Multica Cloud không công khai giá. Bạn được dùng thử miễn phí; sau đó là một cuộc thương lượng. Tương đương gần nhất có thể so sánh là n8n: các gói SaaS tương đương chạy €20–667/tháng (n8n.io/pricing, tính đến 2026-05-17: Starter €20/tháng, Pro €50/tháng, Business €667/tháng); tự host chỉ tốn $3–15/tháng. Multica mới hơn và có thể được định giá cạnh tranh hơn, nhưng hiện tại không có con số nào để so sánh.
Dành cho nhóm ở châu Âu và toàn cầu: Hetzner CX23 tại Falkenstein hoặc Helsinki là lựa chọn có chi phí thấp nhất. Dành cho nhóm ở Đông Nam Á: Hetzner, DigitalOcean, Render, và Railway đều có data center tại Singapore. Hetzner Singapore ở mức €4.49–€8.29/tháng là con đường rẻ nhất để triển khai với độ trễ thấp tại Đông Nam Á.
Để xem tổng chi phí đầy đủ gồm API, công giám sát và lãng phí do retry, xem Chi phí thực khi vận hành nhóm AI agent năm 2026.
Xử lý sự cố
| Triệu chứng | Nguyên nhân | Cách khắc phục |
|---|---|---|
address already in use :8080 khi khởi động | Một process khác đang chiếm cổng 8080 | PORT=9080 make selfhost, hoặc tìm và dừng process xung đột |
| Đăng nhập thành công nhưng auth cookie không được đặt | Đang chạy trên bare IP | Thêm domain, cấu hình Caddy, đặt MULTICA_APP_URL trong .env thành domain đầy đủ |
| Log agent tải được một lần rồi đứng trên UI | Caddy thiếu flush_interval -1 | Thêm flush_interval -1 vào tất cả reverse_proxy block cho /api/* và /ws/* |
| Đăng ký hoàn tất nhưng magic link email không đến | RESEND_API_KEY chưa được đặt | Đặt RESEND_API_KEY trong .env và khởi động lại container; khi phát triển, grep log backend để lấy link |
| Daemon khởi động nhưng agent không nhận task được giao | AI CLI không có trên PATH cho daemon process | Đặt MULTICA_CLAUDE_PATH (hoặc MULTICA_CODEX_PATH / MULTICA_COPILOT_PATH) thành đường dẫn tuyệt đối, khởi động lại daemon |
Kết luận
Tự host Multica v0.3.1 mất dưới 30 phút: git clone, make selfhost, một Caddyfile với flush_interval -1 trên WebSocket path, và hạ tầng agent của bạn chạy với chi phí cố định hàng tháng. Khi Multica Cloud công bố giá, hãy so sánh lại — với nhóm trên hai người đang chạy workload thực, bài toán thường nghiêng về phía tự host.
Hetzner có chi phí thấp nhất, đặc biệt tại Singapore cho các nhóm ở Đông Nam Á. DigitalOcean đắt hơn nhưng có tài liệu tốt hơn và hỗ trợ quen thuộc hơn. Cả hai đều có thể bắt đầu ngay hôm nay.
Tham khảo
- Multica GitHub repository — README, quick-start, và tham khảo environment variable
- Multica GHCR packages
- DigitalOcean Droplet Pricing (tính đến 2026-05-17)
- DigitalOcean Regional Availability
- Hetzner Cloud Pricing (tính đến 2026-05-17)
- Hetzner Data Centers
- Railway Regions
- Render Regions
- n8n Pricing (tính đến 2026-05-17)