Điều kiện tiên quyết
Overleaf là một dự án mã nguồn mở điển hình theo kiến trúc microservice, với tất cả các dịch vụ đều chạy trong Docker.- Mã nguồn Community Edition chính thức có trên GitHub Overleaf Official.
- Mã nguồn của Overleaf-CEP có trên GitHub Yu-i-i/Overleaf.
- Overleaf Pro Edition có trên GitHub Ayaka-notes/overleaf-pro.
Vì các máy chủ có từ 8 lõi CPU trở lên thường khá đắt, chúng tôi đặc biệt khuyến nghị bạn sử dụng máy tính cục bộ để phát triển.
- Một máy chủ/máy tính mạnh để phát triển
- Một bản Ubuntu LTS mới và ổn định (ví dụ Ubuntu 24.04)
- Môi trường Docker và Git
Hướng dẫn cấu hình
Ở đây, chúng tôi sẽ dùng overleaf-cep làm ví dụ để minh họa cách cấu hình môi trường phát triển Overleaf.1
Tải mã nguồn
Trước hết, hãy clone kho mã:
bash
2
Đồng bộ package-lock.json
Vì Overleaf được phát triển trong một kho mã nội bộ, tệp Nếu bạn chưa cài nodejs, đừng lo, bạn có thể dùng trực tiếp
package-lock.json rất có thể bị mất đồng bộ do một số vấn đề trong quá trình phát triển. Chúng ta cần chạy lệnh sau để đồng bộ nó (nếu bạn có môi trường nodejs cục bộ).bash
docker để chạy cùng lệnh đó. Hãy chạy từ thư mục gốc của kho mã Overleaf:bash
3
Build image phát triển
Overleaf cung cấp một thư mục riêng
/develop để chứa các script phát triển. Chỉ cần build các dịch vụ:bash
Nếu Docker hết RAM khi build song song các dịch vụ, hãy tạo một tệp
.env trong thư mục này chứa COMPOSE_PARALLEL_LIMIT=1.4
Khởi động tất cả microservice
Sau đó khởi động các dịch vụ:Khi các dịch vụ đã chạy, hãy mở http://localhost/launchpad để tạo tài khoản quản trị viên đầu tiên.
bash
Bạn phải chạy
bin/up trước khi chạy lệnh bin/dev. Nếu không, bạn có thể gặp hàng loạt vấn đề về quyền truy cập.Theo mặc định, quyền quản trị không khả dụng. Bạn cần thêm dòng sau vào
develop/dev.env. Sau đó, bạn có thể truy cập bảng quản trị (Admin panel).TeX Live
Để biên dịch PDF, bạn cần build một image TeX Live để xử lý việc biên dịch bên trong Docker:.env trong thư mục này, chứa DOCKER_SOCKET_PATH=/var/run/docker.sock.raw
Ngoài ra, bạn cũng có thể sử dụng ayaka-notes/texlive-full, và có thể dùng tag base, đây là phiên bản texlive tối giản.
Phát triển
Để tránh phải chạybin/build && bin/up sau mỗi lần thay đổi mã, bạn có thể chạy Overleaf Community Edition ở chế độ phát triển, trong đó các dịch vụ sẽ tự động cập nhật khi mã thay đổi.
Để làm điều này, hãy dùng script bin/dev đi kèm:
node --watch, tự động theo dõi mã và khởi động lại các dịch vụ khi cần.
Để cải thiện hiệu năng, bạn có thể chỉ khởi động một số dịch vụ ở chế độ phát triển bằng cách truyền danh sách tên dịch vụ, phân tách bằng dấu cách, cho script bin/dev:
Khởi động dịch vụ
web ở chế độ phát triển sẽ chỉ cập nhật dịch vụ web khi mã backend thay đổi. Để tự động cập nhật cả mã frontend, hãy đảm bảo cũng khởi động dịch vụ webpack ở chế độ phát triển.Gỡ lỗi
Khi chạy ở chế độ phát triển, hầu hết các dịch vụ đều mở một cổng gỡ lỗi để bạn có thể gắn trình gỡ lỗi, chẳng hạn như inspector trong Chrome Dev Tools hoặc trình gỡ lỗi tích hợp trong IDE. Bảng sau liệt kê cổng được mở trên máy chủ host cho từng dịch vụ:
Để gắn vào một dịch vụ bằng tính năng remote debugging của Chrome, hãy truy cập chrome://inspect/ và đảm bảo đã chọn Discover network targets. Tiếp theo, nhấp Configure… và thêm mục
localhost:[service port] cho mỗi dịch vụ mà bạn muốn gắn trình gỡ lỗi.
Sau khi thêm mục, dịch vụ sẽ xuất hiện dưới dạng Remote Target để bạn có thể kiểm tra và gỡ lỗi.
Ghi log
Trong môi trường phát triển, Overleaf cung cấp scriptbin/logs, tuy nhiên bạn cần cài đặt một số phụ thuộc:

