Skip to main content
Có một chút khác biệt giữa môi trường phát triển và môi trường production nếu bạn muốn thiết lập biên dịch trong sandbox cho môi trường dev. Có 3 điều bạn cần lưu ý:
  • Vấn đề quyền truy cập tệp
  • Chia sẻ volume giữa history-v1 và filestore
  • Vấn đề thư mục con

Bật Sandbox Compiles

Ở đây, chúng ta chỉ cần bật Sandbox Compiles giống như cách làm trong Overleaf CE. Tuy nhiên, cần lưu ý đến người dùng. Ở đây chúng ta đặt nó thành root. Trong môi trường production, chúng tôi dùng www-data làm người dùng chung giữa container Overleaf và container biên dịch TeX. Tuy nhiên, trong môi trường dev, node là người dùng mặc định trong container và không có người dùng www-data nào để liên kết. Vì vậy, chúng ta chỉ dùng root như một giải pháp tạm thời.
Vui lòng không dùng image do bạn tự build, bạn có thể gặp phải hàng loạt lỗi.

Sửa quyền truy cập tệp

LaTeX chạy trong các container anh em với tư cách người dùng được chỉ định trong biến môi trường TEXLIVE_IMAGE_USER. Trong ví dụ trên, biến này được đặt thành root, có uid 0. Điều này gây ra vấn đề với các quyền ở trên, vì người dùng root không có quyền ghi vào các thư mục con của compiles. Một cách khắc phục nhanh là trao quyền sở hữu nhóm root cùng quyền đọc ghi cho compiles, với setgid được đặt để các thư mục con mới cũng kế thừa quyền sở hữu này:
bash
Để xem tài liệu chi tiết, bạn có thể tham khảo services/clsi/README.md.

Chia sẻ volume giữa history-v1 và filestore

Theo mặc định, filestore đóng vai trò cầu nối giữa s3 và các dịch vụ khác trong Overleaf. Tuy nhiên, trong Overleaf CE hoặc Server Pro, tất cả các tệp đều được lưu cục bộ theo mặc định. Vì vậy, Overleaf đã đưa ra một phương pháp khá “mẹo”.
server-ce/config/settings.js
Đồng thời, data/history cũng được dịch vụ history sử dụng. Bằng cách này, chúng có thể chia sẻ cùng dữ liệu giữa các microservice khác nhau. Bạn cần thêm volume history-v1-buckets này vào dịch vụ filestore trong develop. Nếu không, clsi sẽ không thể lấy các tệp blob từ dịch vụ filestore.
develop/docker-compose.yml
Bạn cũng cần thêm tên BUCKET vào cấu hình dev.env:
develop/dev.env

Sử dụng thư mục con

Filestore mặc định dùng useSubdirectories là true, tuy nhiên trong môi trường phát triển, history v1 sẽ làm phẳng toàn bộ dữ liệu. Điều này gây ra một số xung đột. Để khắc phục, bạn cần thêm nội dung sau:
develop/dev.env
Trong history v1, ban đầu tất cả các tệp project_blobs được lưu như sau:
Bạn cần đặt useSubdirectories thành true để chuyển sang chế độ thư mục con. Khi đó, ký tự _ ban đầu trong blob sẽ được thay thế bằng /.
Lần sửa đổi cuối 5 tháng 10, 2026