Cách Triển Khai OpenChamber với Docker và Cloudflare Tunnel

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 TrustAccessTunnelsCreate 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: AccessApplicationsAdd an applicationSelf-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.*

Lên đầu trang