Bạn đã nghe về các AI coding assistant như Cursor và GitHub Copilot, nhưng nếu bạn muốn kiểm soát hoàn toàn infrastructure, sử dụng custom AI models, và không bị phụ thuộc vào vendor thì sao? Đó chính là lúc OpenChamber phát huy tác dụng.
OpenChamber là một AI coding environment tự host, quản lý OpenCode làm backend. Trong bài viết này, bạn sẽ học cách triển khai OpenChamber bằng Docker Compose, expose nó qua Cloudflare Tunnel, và cấu hình custom AI providers.
Đây là Part 1 của series gồm 2 phần về infrastructure setup. Part 2 sẽ cover GitLab integration và development workflows.
Bạn sẽ học được:
– Kiến trúc OpenChamber và OpenCode
– Docker volume mapping
– Cloudflare Tunnel cho remote access bảo mật
– Tích hợp custom AI provider
– Các pitfalls quan trọng
Yêu cầu: Linux server có Docker và Docker Compose, domain name với Cloudflare DNS, hiểu biết cơ bản về Docker, tài khoản Cloudflare có quyền truy cập Tunnel.
Thời gian: 30-45 phút
Hiểu Về Kiến Trúc
OpenChamber là frontend UI và runtime environment chạy như web server trong Docker container.
OpenCode là AI coding backend. OpenChamber spawn và quản lý OpenCode như child process để xử lý AI model interactions, phân tích code, và generation tasks.
Insight quan trọng: OpenCode được quản lý hoàn toàn thông qua container environment của OpenChamber, không phải standalone installation.
Process flow:
Browser → Cloudflare Tunnel → OpenChamber (port 3000) → OpenCode (port 42069)
Tất cả cấu hình đều thông qua Docker volumes và environment variables.
Cấu Trúc Thư Mục
Tạo installation root tại /opt/openchamber:
sudo mkdir -p /opt/openchamber/{data/{openchamber,opencode/{config,share,state},ssh},workspaces}
Cấu trúc:
/opt/openchamber/
├── docker-compose.yml
├── data/
│ ├── openchamber/ # OpenChamber settings
│ ├── opencode/
│ │ ├── config/ # OpenCode configuration
│ │ ├── share/ # Data, auth, logs
│ │ └── state/ # Runtime state
│ └── ssh/ # SSH keys
└── workspaces/ # Projects
Docker Volume Mapping
Đây là nơi hầu hết các vấn đề setup xảy ra. Volume configuration:
volumes:
- ./data/openchamber:/home/openchamber/.config/openchamber
- ./data/opencode/share:/home/openchamber/.local/share/opencode
- ./data/opencode/state:/home/openchamber/.local/state/opencode
- ./data/opencode/config:/home/openchamber/.config/opencode
- ./data/ssh:/home/openchamber/.ssh
- ./workspaces:/home/openchamber/workspaces
Quy tắc quan trọng: Luôn sử dụng container paths trong config files, không bao giờ dùng host paths.
Sai: /opt/openchamber/workspaces/myproject
Đúng: /home/openchamber/workspaces/myproject
Tại sao? OpenChamber và OpenCode chạy bên trong container và không thể thấy /opt/openchamber.
Cấu Hình Docker Compose
Tạo /opt/openchamber/docker-compose.yml:
version: '3.8'
services:
openchamber:
image: openchamber/openchamber:latest
container_name: openchamber
restart: unless-stopped
environment:
OPENCHAMBER_HOST: 0.0.0.0
OPENCHAMBER_TUNNEL_PROVIDER: cloudflare
OPENCHAMBER_TUNNEL_MODE: managed-remote
OPENCHAMBER_TUNNEL_HOSTNAME: opencode.yourdomain.com
OPENCHAMBER_TUNNEL_TOKEN: your-cloudflare-tunnel-token
OPENCHAMBER_TUNNEL_SERVICE: http://openchamber:3000
CUSTOM_GATEWAY_API_KEY: your-api-key-here
volumes:
- ./data/openchamber:/home/openchamber/.config/openchamber
- ./data/opencode/share:/home/openchamber/.local/share/opencode
- ./data/opencode/state:/home/openchamber/.local/state/opencode
- ./data/opencode/config:/home/openchamber/.config/opencode
- ./data/ssh:/home/openchamber/.ssh
- ./workspaces:/home/openchamber/workspaces
ports:
- "127.0.0.1:3030:3000"
Environment variables quan trọng:
– OPENCHAMBER_HOST: 0.0.0.0 — Bind tất cả interfaces
– OPENCHAMBER_TUNNEL_MODE: managed-remote — Để OpenChamber quản lý tunnel
– OPENCHAMBER_TUNNEL_TOKEN — Token từ Cloudflare dashboard
Thiết Lập Cloudflare Tunnel
Cloudflare Tunnel cung cấp secure access mà không cần expose ports ra internet.
Tạo Tunnel
Trong Cloudflare dashboard: Zero Trust → Access → Tunnels → Create a tunnel → Chọn Cloudflared → Đặt tên → Copy tunnel token.
Thêm token vào docker-compose.yml và cấu hình DNS:
Type: CNAME
Name: opencode
Target: .cfargotunnel.com
Proxy: Enabled
Khởi Động
cd /opt/openchamber
docker compose up -d
docker logs openchamber --tail=50
Tìm dòng: Tunnel active (cloudflare): https://opencode.yourdomain.com
Cloudflare Access Authentication
Cloudflare Access bổ sung authentication layer để bảo vệ OpenChamber instance.
Trong Cloudflare Zero Trust: Access → Applications → Add an application → Self-hosted
Cấu hình:
– Application name: OpenChamber
– Session duration: 24 hours
– Application domain: opencode.yourdomain.com
– Policy: Allow → Include emails → Thêm email của bạn
Khi OPENCHAMBER_TUNNEL_MODE: managed-remote được dùng, internal tunnel authentication tự động align với Cloudflare Access.
Cấu Hình OpenCode
OpenCode được cấu hình qua file JSONC tại:
Host: /opt/openchamber/data/opencode/config/opencode.jsonc
Container: /home/openchamber/.config/opencode/opencode.jsonc
Tạo file:
sudo nano /opt/openchamber/data/opencode/config/opencode.jsonc
Cấu hình cơ bản:
{
"$schema": "https://opencode.ai/config.json",
"model": "anthropic/claude-sonnet-3.5"
}
Tích Hợp Custom AI Provider
OpenCode hỗ trợ OpenAI-compatible APIs, cho phép sử dụng custom model routers, self-hosted models, hoặc alternative providers.
Ví Dụ: Custom-Gateway
Bước 1: Thêm API key vào docker-compose.yml:
environment:
CUSTOM_GATEWAY_API_KEY:
Bước 2: Cấu hình trong opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"custom-gateway": {
"npm": "@ai-sdk/openai-compatible",
"name": "Custom-Gateway",
"options": {
"baseURL": "https://gateway.yourdomain.com/v1",
"apiKey": "{env:CUSTOM_GATEWAY_API_KEY}"
},
"models": {
"kr/claude-sonnet-4.5": {
"name": "Claude Sonnet 4.5 via Custom-Gateway"
},
"cx/gpt-5.5": {
"name": "GPT 5.5 via Custom-Gateway"
}
}
}
},
"model": "custom-gateway/kr/claude-sonnet-4.5"
}
Các điểm quan trọng:
– npm: "@ai-sdk/openai-compatible" — OpenAI-compatible adapter
– apiKey: "{env:CUSTOM_GATEWAY_API_KEY}" — Reference environment variable
– model — Default model (format: provider/model-id)
Bước 3: Restart và verify:
docker compose restart openchamber
docker exec openchamber /home/openchamber/.npm-global/bin/opencode providers list
Verification Commands
Container status:
docker ps --format 'table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Ports}}'
Test tunnel:
curl -I https://opencode.yourdomain.com
Expected: HTTP/2 302 redirect đến Cloudflare Access login.
Các Pitfalls Thường Gặp
1. Sai Config Location
Vấn đề: Edit config trên host user account khác, changes không apply.
Giải pháp: Luôn edit /opt/openchamber/data/opencode/config/opencode.jsonc.
2. Dùng Host Paths
Vấn đề: Paths như /opt/openchamber/workspaces/myproject không hoạt động.
Giải pháp: Dùng container paths: /home/openchamber/workspaces/myproject.
3. Tunnel Không Active
Vấn đề: Tunnel không start.
Giải pháp: Verify token, kiểm tra CNAME record, đảm bảo proxy enabled, restart container.
4. Double Authentication
Vấn đề: Sau Cloudflare Access login, OpenChamber yêu cầu login lại.
Giải pháp: Sử dụng OPENCHAMBER_TUNNEL_MODE: managed-remote.
5. API Key Không Hoạt Động
Vấn đề: Custom provider trả về 401.
Giải pháp: Verify env var trong docker-compose.yml, dùng syntax {env:VAR_NAME}, restart container, test với docker exec openchamber env | grep CUSTOM_GATEWAY.
Tiếp Theo
Bạn đã có OpenChamber instance với Docker containerization, Cloudflare Tunnel access, authentication, và custom AI provider integration.
Trong Part 2: GitLab integration, cloning projects, Git branch management, development servers trong containers, và port exposure strategies.
Tài Liệu:
– [OpenChamber Documentation](https://openchamber.ai/docs)
– [OpenCode GitHub](https://github.com/opencode/opencode)
– [Cloudflare Tunnel Guide](https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/)
*Bạn đã setup OpenChamber thành công chưa? Chia sẻ trải nghiệm của bạn trong comments.*


