Core platform · controlplane · 07/7/2026

cp-workspace — Vòng đời & provision workspace CORE

Provisioner cấp tài nguyên thật cho mỗi workspace: CREATE DATABASE riêng → migrate schema nền → cấp owner role → spawn PM2 instance (dải cổng BE 41000–41999 / FE 42000–42999) + routing Caddy on-demand HTTPS.

Đánh giá: ✅ Vững cho 1 host · ⚠ scale-out & backup · Chi tiết khuyến nghị ở mục 3 — tham chiếu hệ thống phổ biến.
1

Thành phần chính

Thành phầnVai trò
Workspace · WorkspaceMembership · WorkspaceCreationRequestDanh mục workspace + thành viên + luồng xin tạo
provisioner.jsDB riêng · migrate one-shot qua RT CLI (env override DB_NAME) · owner role + bump epoch · spawn PM2
clean-workspace.js · ws-env.jsXóa an toàn (từ chối DB dùng chung, idempotent) · xem env instance
caddyApi · workspaceGateServiceRouting FE theo domain (WS_CADDY_ROUTING=1) · gate trạng thái workspace
2

Hiện trạng (đọc từ code)

  • Kiến trúc Level 2 (DB-per-workspace) đúng với yêu cầu cô lập dữ liệu pháp lý của trường lái
  • Provision không cần instance RT đang chạy (CLI one-shot) — thiết kế sạch
  • Script dọn workspace an toàn, idempotent
  • ⚠ Gắn chặt 1 host: path cứng WS_RUNTIME_ROOT, PM2 local, dải cổng thủ công
  • ⚠ Chưa thấy cơ chế backup/restore per-workspace DB — dữ liệu hồ sơ là căn cứ pháp lý
3

Khuyến nghị — tham chiếu hệ phổ biến

Tham chiếuKhuyến nghị
PostgreSQL vận hành chuẩnƯu tiên cao: pg_dump định kỳ từng DB workspace + kiểm tra restore — bắt buộc trước khi Vĩnh An go-live (dữ liệu thanh tra được)
Kubernetes operator patternKhi >5–10 workspace: tách provisioner thành reconcile-loop (desired state trong CP, actuator tách riêng) — chưa cần ngay, nhưng đừng thêm logic mới phụ thuộc path local
Odoo.sh / ShopifyThêm trạng thái vòng đời workspace rõ ràng (provisioning → active → suspended → archived) gắn với billing/subscription
4

Liên kết trong core

  • cp-identity — sinh AuthClient/JWT secret per-ws
  • rt-host — instance được spawn
  • cp-store — entitlement quyết định module được cài
Phân quyền

Ma trận tác nhân × năng lực

Core không phải module nghiệp vụ — thay ma trận vai trò bằng tác nhân × năng lực, kèm cơ chế/quyền gate từng năng lực. R đọc · W thực hiện · A duyệt.

Năng lựcCơ chế / quyền gateSUPEROWNER/QTHTDEVSVCUSER
Yêu cầu tạo workspaceWorkspaceCreationRequestAW (request)
Provision / destroyscript + quyền admin CPW
Xem trạng thái provisioningmembershipRR
Backup / restore per-WS (P3 — đích)system.admin.backup.*WR (restore theo duyệt)
ws:env / scripts vận hànhshell trên hostW

SUPER = super admin CP · OWNER/QTHT = chủ workspace / quản trị WS · DEV = developer/publisher · SVC = service-to-service (runtime/hook) · USER = người dùng cuối. Mục ghi (đích) = theo khuyến nghị P1–P5, chưa có ở hiện trạng.