Cộng tác (tự host)
Máy chủ cộng tác đi kèm mã nguồn (thư mục studio/server). Đó là một chương trình Node 18+ nhỏ, một phụ thuộc là ws. Nhiều người cùng sửa một project và project được lưu trên máy chủ.
cd studio/server
npm ci
SG_TOKEN=mot-chuoi-bi-mat PORT=8787 DATA_DIR=./data node collab-server.cjs
Trong app: File ▸ Cộng tác / Đám mây…, nhập tên phòng, tên hiển thị và token. Bản desktop chỉ kết nối tới máy chủ đặt trong Cài đặt ▸ Cộng tác ▸ Máy chủ mặc định (mặc định ws://localhost:8787; dùng wss://tên-miền khi triển khai thật). Đổi địa chỉ đó cần khởi động lại app. Đây là một lớp bảo mật: trang bị chèn mã cũng không gửi dữ liệu tới nơi khác được.
Phòng có chủ và mã mời
- Bấm Tạo phòng bảo vệ (cần token máy chủ): bạn là chủ phòng. App lưu sẵn token phòng của bạn.
- Chủ phòng tạo mã mời với vai trò Biên tập hoặc Chỉ xem, thời hạn (1 giờ đến 7 ngày) và số lượt dùng. Người được mời chỉ cần dán mã mời vào ô Mã mời, không cần token máy chủ.
- Chủ phòng đổi vai trò, mời người ra (token của họ mất hiệu lực ngay) hoặc xoay khóa phòng để thu hồi mọi token và mã mời.
- Máy chủ cưỡng chế quyền: thay đổi từ người chỉ xem bị từ chối, kể cả khi app bị sửa.
Cách hoạt động
- Mỗi phòng là một project. Phòng chưa có dữ liệu nhận project đang mở của người nối đầu tiên; người vào sau nhận phòng như đang có.
- Hợp nhất theo từng tham số: hai người sửa hai tham số khác nhau của cùng một node thì cả hai đều giữ. Cùng sửa một tham số thì thay đổi sau thắng, và mọi máy về cùng một trạng thái.
- Có danh sách người online và khung màu quanh node người khác đang chọn.
- Mất kết nối vẫn sửa tiếp; khi nối lại, phần chưa gửi được gửi lên.
Biến môi trường chính
| Biến | Ý nghĩa |
|---|---|
PORT | Cổng lắng nghe, mặc định 8787 |
DATA_DIR | Thư mục lưu phòng, thành viên, mã mời và asset, mặc định ./data |
SG_TOKEN | Khóa máy chủ: cần để tạo phòng. Người được mời không cần |
SG_SECRET | Bí mật ký token phòng và mã mời (từ 32 ký tự). Không đặt thì máy chủ tự sinh và lưu trong DATA_DIR |
SG_REQUIRE_ACL | 1: mọi phòng phải có chủ |
ORIGINS | Origin được phép kết nối, cách nhau bằng dấu phẩy (app desktop: app://studio) |
SG_LICENSE_PUBKEY | Khóa công khai để kiểm vé license (chỉ cần khi bán license) |
Triển khai bằng Docker, Fly.io hoặc Render: xem studio/server/DEPLOY.md trong mã nguồn.
Đọc trước khi mở ra Internet
- Luôn đặt
SG_TOKEN,SG_REQUIRE_ACL=1và chạy sau HTTPS/wss://. Không có TLS thì token đi dưới dạng văn bản thường. - Máy chủ có giới hạn số kết nối, tốc độ và dung lượng phòng, và khóa tạm địa chỉ IP sau nhiều lần xác thực sai.
- Dữ liệu lưu dạng JSON trên đĩa của máy chủ, chưa mã hóa khi lưu.