Kiến trúc triển khai OpenChamber với Docker và Cloudflare Tunnel

Triển Khai OpenChamber với Docker & Cloudflare Tunnel

Bạn đã nghe nhiều về Cursor, GitHub Copilot hay các AI coding assistant dạng SaaS. Nhưng nếu mục tiêu của bạn là tự host môi trường AI coding, kiểm soát dữ liệu, dùng custom AI providers và không phụ thuộc hoàn toàn vào một vendor thì OpenChamber là một hướng đi rất đáng thử.

OpenChamber là một AI coding environment tự host, sử dụng OpenCode làm backend. Trong bài viết này, chúng ta sẽ triển khai OpenChamber bằng Docker Compose, expose ứng dụng qua Cloudflare Tunnel, cấu hình volume để dữ liệu bền vững, và chuẩn bị nền tảng cho workflow development thực tế.

Đây là phần đầu trong series OpenChamber. Phần này tập trung vào infrastructure setup: Docker, volume mapping, Cloudflare Tunnel, bảo mật truy cập và vận hành cơ bản. Sau khi hoàn tất, bạn sẽ có một nền tảng sạch để tiếp tục tích hợp GitLab, project workflow và dev servers.

Kiến trúc triển khai OpenChamber với Docker và Cloudflare Tunnel
Kiến trúc triển khai OpenChamber với Docker và Cloudflare Tunnel

OpenChamber là gì và khi nào nên dùng?

OpenChamber phù hợp với các developer hoặc team muốn chạy AI coding environment trên infrastructure của riêng mình. Thay vì gửi toàn bộ workflow qua một nền tảng hosted, bạn có thể tự quyết định nơi lưu source code, cách mount project, provider AI nào được dùng và ai được quyền truy cập.

Điểm mạnh của mô hình này không chỉ nằm ở self-hosted. Nó nằm ở khả năng thiết kế lại workflow coding theo cách gần với môi trường production hơn: project nằm trong volume rõ ràng, secrets được quản lý có chủ đích, logs có thể kiểm tra, và quyền truy cập có thể đặt sau Cloudflare.

Khi nào OpenChamber đáng để triển khai?

  • Bạn muốn một AI coding workspace chạy trên server riêng.
  • Bạn muốn tích hợp OpenCode với nhiều AI providers khác nhau.
  • Bạn cần môi trường thử nghiệm có thể truy cập từ xa qua HTTPS.
  • Bạn muốn team dùng chung một môi trường có cấu trúc thay vì mỗi người cấu hình rời rạc.
  • Bạn quan tâm đến kiểm soát dữ liệu, logs, network và secrets.

Nếu bạn thích các công cụ DevOps self-hosted, bạn cũng có thể tham khảo bài viết về Dokploy giúp DevOps dễ tiếp cận hơn. Hai hướng này có cùng triết lý: đưa những workflow phức tạp về một nền tảng tự quản lý, dễ vận hành và ít phụ thuộc vendor.

Kiến trúc triển khai OpenChamber với Docker và Cloudflare Tunnel

Kiến trúc cơ bản gồm bốn thành phần: người dùng truy cập qua browser, Cloudflare Tunnel làm lớp HTTPS public, Docker host chạy OpenChamber, và OpenCode xử lý phần AI coding backend. Cloudflare Tunnel giúp bạn không cần mở trực tiếp port ứng dụng ra internet, giảm rủi ro expose service thô.

Luồng truy cập tổng quan

  1. Người dùng truy cập subdomain, ví dụ openchamber.example.com.
  2. Cloudflare nhận request và chuyển qua tunnel.
  3. cloudflared trên server forward request đến container OpenChamber.
  4. OpenChamber giao tiếp với OpenCode, project directories và AI provider đã cấu hình.

Cách này gọn hơn nhiều so với mở port, cấu hình reverse proxy thủ công và tự xử lý TLS. Bạn vẫn cần quản lý authentication nghiêm túc, nhưng Cloudflare Tunnel cho bạn một lớp network access an toàn hơn để bắt đầu.

Yêu cầu trước khi triển khai

Trước khi bắt đầu, hãy chuẩn bị một server Linux ổn định. Ubuntu 22.04 hoặc 24.04 LTS là lựa chọn phổ biến. Server nên có Docker, Docker Compose plugin, quyền sudo, domain đã quản lý qua Cloudflare, và đủ tài nguyên cho workload coding.

Cấu hình server khuyến nghị

  • CPU: tối thiểu 2 vCPU, khuyến nghị 4 vCPU nếu nhiều project.
  • RAM: tối thiểu 4 GB, khuyến nghị 8 GB trở lên.
  • Disk: SSD 40 GB trở lên, vì source code, cache và logs có thể tăng nhanh.
  • OS: Ubuntu LTS hoặc một distro Linux server quen thuộc.
  • Network: outbound internet ổn định để Cloudflare Tunnel hoạt động.

Cài Docker và Docker Compose

Nếu Docker chưa có sẵn, bạn có thể cài theo tài liệu chính thức của Docker. Với Ubuntu, sau khi cài xong hãy kiểm tra:

docker --version
docker compose version

Nếu lệnh chạy thành công, server đã sẵn sàng để chạy stack OpenChamber. Đừng quên thêm user vận hành vào group docker nếu bạn không muốn dùng sudo cho mọi lệnh:

sudo usermod -aG docker $USER
newgrp docker
Docker Compose chạy OpenChamber, OpenCode và persistent volumes
Docker Compose chạy OpenChamber, OpenCode và persistent volumes

Chuẩn bị thư mục và Docker Compose cho OpenChamber

Một lỗi thường gặp khi triển khai các AI coding workspace là để project, config và cache nằm lẫn lộn trong container. Khi container bị recreate, dữ liệu dễ mất hoặc khó backup. Vì vậy, hãy tạo cấu trúc thư mục rõ ràng ngay từ đầu.

sudo mkdir -p /opt/openchamber/{config,projects,data,logs}
sudo chown -R $USER:$USER /opt/openchamber
cd /opt/openchamber

Tiếp theo, tạo file docker-compose.yml. Tùy image OpenChamber bạn đang dùng, tên image và biến môi trường có thể khác nhau. Mẫu dưới đây minh họa cấu trúc nên có: service chính, volume mapping, restart policy và network nội bộ.

services:
  openchamber:
    image: your-openchamber-image:latest
    container_name: openchamber
    restart: unless-stopped
    ports:
      - "127.0.0.1:3210:3210"
    environment:
      - NODE_ENV=production
      - OPENCHAMBER_HOST=0.0.0.0
      - OPENCHAMBER_PORT=3210
    volumes:
      - ./config:/app/config
      - ./projects:/workspace/projects
      - ./data:/app/data
      - ./logs:/app/logs

Điểm quan trọng là port chỉ bind vào 127.0.0.1. Điều này giúp OpenChamber không bị expose trực tiếp ra internet. Cloudflare Tunnel sẽ là đường public duy nhất đi vào service.

Khởi động stack

docker compose pull
docker compose up -d
docker compose logs -f openchamber

Nếu logs không có lỗi nghiêm trọng, kiểm tra local endpoint:

curl http://127.0.0.1:3210

Cấu hình Cloudflare Tunnel cho truy cập HTTPS

Cloudflare Tunnel cho phép tạo kết nối outbound từ server đến Cloudflare. Bạn không cần mở inbound port trên firewall, không cần public IP trực tiếp cho app, và có thể gắn thêm Cloudflare Access để kiểm soát người dùng.

Cài cloudflared

Trên Ubuntu, cài cloudflared theo hướng dẫn chính thức của Cloudflare. Sau đó đăng nhập:

cloudflared tunnel login

Tạo tunnel

cloudflared tunnel create openchamber
cloudflared tunnel route dns openchamber openchamber.example.com

Sau đó tạo file cấu hình ~/.cloudflared/config.yml:

tunnel: openchamber
credentials-file: /home/your-user/.cloudflared/openchamber.json

ingress:
  - hostname: openchamber.example.com
    service: http://127.0.0.1:3210
  - service: http_status:404

Chạy thử tunnel rồi cài thành service nếu mọi thứ ổn:

cloudflared tunnel run openchamber
sudo cloudflared service install
sudo systemctl enable --now cloudflared
Cloudflare Tunnel bảo vệ truy cập OpenChamber không cần mở port public
Cloudflare Tunnel bảo vệ truy cập OpenChamber không cần mở port public

Bảo mật truy cập OpenChamber

Cloudflare Tunnel giúp giảm rủi ro network exposure, nhưng không thay thế authentication. Một OpenChamber workspace có thể chứa source code, environment variables, prompts, logs và API keys. Vì vậy, bạn nên đặt Cloudflare Access hoặc một lớp đăng nhập riêng trước khi cho team sử dụng.

Checklist bảo mật tối thiểu

  • Không bind app vào 0.0.0.0 nếu không cần thiết; ưu tiên 127.0.0.1.
  • Bật Cloudflare Access cho subdomain OpenChamber.
  • Chỉ cho phép email hoặc identity provider tin cậy.
  • Không commit API keys vào project repository.
  • Đưa secrets vào file env riêng, không đưa vào Docker image.
  • Giới hạn quyền của user chạy container.
  • Backup thư mục config, projectsdata định kỳ.

Nếu bạn đang xây dựng quy trình AI coding nghiêm túc hơn, bài viết Superpowers: Khi AI coding vận hành theo quy trình cũng rất liên quan. OpenChamber giải quyết phần môi trường; quy trình làm việc vẫn cần tiêu chuẩn rõ ràng.

Cấu hình custom AI providers

Một lý do lớn để tự host OpenChamber là khả năng dùng nhiều AI providers. Bạn có thể dùng provider thương mại, model nội bộ, endpoint tương thích OpenAI API hoặc gateway riêng. Điều này giúp team linh hoạt hơn về chi phí, latency và policy dữ liệu.

Nguyên tắc cấu hình provider

  • Tách API keys khỏi source code.
  • Dùng biến môi trường hoặc secret manager nếu có.
  • Ghi rõ provider nào dùng cho coding, provider nào dùng cho reasoning dài.
  • Đặt rate limit hoặc quota nếu nhiều người dùng chung.
  • Kiểm tra logs để phát hiện request lỗi hoặc model không tương thích.
OPENAI_API_KEY=your-key
OPENAI_BASE_URL=https://api.openai.com/v1
DEFAULT_MODEL=gpt-4.1

Với provider tương thích OpenAI API, thường chỉ cần đổi BASE_URL, key và model name. Tuy nhiên, mỗi provider có thể khác nhau về context window, tool calling, streaming hoặc format lỗi. Hãy test kỹ trước khi đưa vào workflow team.

Cấu hình custom AI providers trong OpenChamber và OpenCode
Cấu hình custom AI providers trong OpenChamber và OpenCode

Mapping project directories đúng cách

OpenChamber hữu ích nhất khi nó có thể truy cập project thật. Thay vì clone repository bên trong container một cách tùy tiện, hãy chuẩn hóa thư mục project trên host và mount vào container. Cách này giúp backup, audit và migration dễ hơn.

/opt/openchamber/projects/
  app-one/
  app-two/
  infra-scripts/

Gợi ý phân quyền

  • Dùng deploy key hoặc token có scope hẹp.
  • Tách project production khỏi project thử nghiệm.
  • Không mount toàn bộ home directory vào container.
  • Không chạy container bằng quyền root nếu image hỗ trợ user riêng.
  • Ghi lại convention đặt tên thư mục để team dễ tìm project.

Kiểm tra sau triển khai

Sau khi OpenChamber chạy qua Cloudflare Tunnel, đừng dừng lại ở việc mở được giao diện. Hãy kiểm tra toàn bộ workflow tối thiểu: đăng nhập, tạo hoặc mở project, gọi AI provider, đọc/ghi file, xem logs và restart container.

Smoke test nên chạy

  1. Truy cập domain OpenChamber qua HTTPS.
  2. Xác thực qua Cloudflare Access hoặc lớp auth bạn chọn.
  3. Mở một project test trong thư mục mounted volume.
  4. Gửi một prompt đơn giản cho AI provider.
  5. Tạo file test, sửa file và kiểm tra thay đổi trên host.
  6. Restart container bằng docker compose restart và kiểm tra dữ liệu còn nguyên.
  7. Xem logs bằng docker compose logs --tail=100 openchamber.

Các lỗi thường gặp và cách xử lý

Domain Cloudflare trả lỗi 502 hoặc tunnel không vào được app

Nguyên nhân thường là service local không chạy, sai port trong file tunnel config, hoặc container chỉ listen trên interface khác. Kiểm tra lần lượt:

docker compose ps
curl http://127.0.0.1:3210
sudo systemctl status cloudflared
journalctl -u cloudflared -f

Container chạy nhưng mất dữ liệu sau khi recreate

Hãy kiểm tra volume mapping. Nếu config hoặc project nằm trong filesystem nội bộ container, dữ liệu sẽ mất khi container bị xóa. Luôn mount thư mục quan trọng ra host.

AI provider không phản hồi

Kiểm tra API key, base URL, model name, network outbound và format request. Một số provider tương thích OpenAI API nhưng không hỗ trợ đầy đủ tool calling hoặc streaming.

Workspace chậm khi nhiều project

Kiểm tra RAM, disk I/O, số lượng file trong project và logs. Với repository lớn, indexing hoặc thao tác đọc file có thể làm server nhỏ bị nghẽn. Nâng RAM hoặc tách project nặng sang server riêng nếu cần.

Checklist vận hành OpenChamber: logs, backups, updates và security
Checklist vận hành OpenChamber: logs, backups, updates và security

Checklist vận hành lâu dài

Một deployment tốt không chỉ chạy được hôm nay; nó phải dễ cập nhật, dễ backup và dễ khôi phục. Với OpenChamber, bạn nên có checklist vận hành định kỳ.

  • Backup: sao lưu config, projectsdata.
  • Updates: kiểm tra image mới, đọc changelog trước khi pull.
  • Logs: giới hạn kích thước logs Docker để tránh đầy disk.
  • Secrets: rotate API keys định kỳ.
  • Access: review danh sách người có quyền vào Cloudflare Access.
  • Monitoring: theo dõi CPU, RAM, disk và tunnel status.

Nếu bạn muốn so sánh với cách triển khai bản tiếng Anh, có thể xem bài liên quan: How to Deploy OpenChamber with Docker and Cloudflare Tunnel. Bản tiếng Việt này đã được mở rộng thêm theo hướng thực hành và vận hành.

Kết luận

Triển khai OpenChamber với Docker và Cloudflare Tunnel là một cách thực tế để xây dựng AI coding environment tự host. Docker giúp đóng gói service và quản lý volume rõ ràng. Cloudflare Tunnel giúp expose workspace qua HTTPS mà không cần mở port public trực tiếp. Khi kết hợp với authentication, secrets management và backup, bạn có thể tạo một nền tảng đủ an toàn để dùng cho development hằng ngày.

Bước tiếp theo nên là tích hợp GitLab hoặc GitHub, chuẩn hóa cách clone repository, quản lý branches và chạy dev servers trong môi trường OpenChamber. Khi phần infrastructure đã sạch, các workflow development phía trên sẽ dễ kiểm soát hơn rất nhiều.

Câu hỏi thường gặp

OpenChamber có thay thế Cursor hoặc GitHub Copilot không?

Không hoàn toàn. OpenChamber phù hợp khi bạn muốn tự host AI coding environment và kiểm soát infrastructure. Cursor hoặc Copilot tiện hơn cho cá nhân muốn dùng ngay, còn OpenChamber phù hợp hơn với nhu cầu tùy biến, kiểm soát dữ liệu và workflow nội bộ.

Có bắt buộc phải dùng Cloudflare Tunnel không?

Không bắt buộc, nhưng rất khuyến nghị nếu bạn muốn truy cập OpenChamber từ xa mà không mở port trực tiếp. Bạn cũng có thể dùng reverse proxy như Nginx hoặc Caddy, nhưng khi đó phải tự quản lý TLS, firewall và access control cẩn thận hơn.

Có thể dùng custom AI provider với OpenChamber không?

Có, nếu OpenChamber hoặc OpenCode của bạn hỗ trợ endpoint tương thích. Thông thường bạn sẽ cấu hình API key, base URL và model name qua environment variables hoặc file config. Nên test từng provider vì khả năng hỗ trợ streaming, tool calling và context window có thể khác nhau.

Nên lưu project ở đâu?

Nên lưu project trong thư mục mounted volume trên host, ví dụ /opt/openchamber/projects. Không nên lưu project quan trọng chỉ bên trong container vì có nguy cơ mất dữ liệu khi container bị xóa hoặc recreate.

OpenChamber có an toàn cho team sử dụng không?

Có thể an toàn nếu bạn cấu hình đúng: bind service local-only, đặt sau Cloudflare Access hoặc authentication tương đương, quản lý secrets cẩn thận, backup định kỳ và giới hạn quyền truy cập. Không nên expose trực tiếp OpenChamber ra internet mà không có lớp bảo vệ.

Lên đầu trang