Đăng ảnh của ByteByteGo được mấy hôm rồi nên nay đổi gió.
Đôi khi deploy GitLab hay Gitea lên Coolify và sử dụng bạn sẽ gặp lỗi như sau:
|
|
Có thể bạn đi search và tìm thấy solution là chỉnh git chunk buffer như này:
|
|
Tại sao git config http.postBuffer không hiệu quả?
Git http.postBuffer là gì?
- Đây là buffer size mà git sử dụng khi gửi dữ liệu qua HTTP POST
- Mặc định git gửi dữ liệu theo từng chunk nhỏ (thường 1MB)
- Tăng postBuffer có nghĩa là gửi từng chunk lớn hơn, giảm số lần request
Vì sao trong trường hợp này nó không hiệu quả?
Vấn đề không nằm ở việc git gửi dữ liệu như thế nào, mà nằm ở HTTP timeout của proxy Coolify:
- Git vẫn gửi được dữ liệu lên Traefik proxy
- Traefik proxy chờ phản hồi từ Git server (GitLab/Gitea)
- Git server cần thời gian xử lý dữ liệu (compress, index, validate…)
- Traefik timeout trước khi Git server kịp phản hồi → HTTP 504
Ngay cả khi git gửi chunk lớn hay nhỏ, thời gian xử lý ở Git server vẫn như vậy. Do đó tăng postBuffer không giải quyết được vấn đề timeout ở proxy layer.
Kiến trúc và nguyên nhân lỗi
Luồng hoạt động khi git push:
|
|
Chi tiết từng bước:
- Git client gửi dữ liệu qua HTTP POST (có thể mất vài giây với repo lớn)
- Traefik proxy nhận và forward request đến Git server
- Git server bắt đầu xử lý:
- Giải nén objects
- Kiểm tra integrity
- Cập nhật refs
- Chạy git hooks (nếu có)
- Traefik chờ phản hồi trong thời gian
readTimeout
(mặc định ~30s) - Nếu Git server xử lý lâu hơn → Traefik trả về HTTP 504
Tại sao lỗi này xảy ra với Coolify?
- Coolify sử dụng Traefik làm reverse proxy
- Traefik có
readTimeout
mặc định khá thấp - Git operations với large files/repos thường cần > 30s để xử lý
- Lỗi này không chỉ ảnh hưởng git mà còn các HTTP service khác cần xử lý lâu
Giải pháp
Vào phần Server > (server của bạn, thường là localhost) > Proxy > Configuration
. Thêm các dòng sau vào services.traefik.command
:
|
|
Giải thích:
readTimeout
: Thời gian tối đa Traefik chờ đọc phản hồi từ backend600s
(10 phút): Thời gian phù hợp cho các tác vụ git push lớn- Có thể điều chỉnh tùy theo kích thước repository và tốc độ mạng của bạn
Full config (mẫu, có thể thay đổi trong các phiên bản sau của Coolify, bạn chỉ nên tham khảo cách thêm mà thôi):
|
|
Áp dụng thay đổi
- Save: Lưu cấu hình Traefik
- Restart Proxy: Khởi động lại proxy để áp dụng timeout mới
- Kiểm tra: Đợi proxy hoạt động trở lại (thường mất 30-60 giây)
Lưu ý quan trọng
- Không nên đặt timeout quá cao: Có thể gây treo kết nối lâu khi có lỗi thực sự
- Test với repository nhỏ trước: Đảm bảo cấu hình hoạt động đúng
- Theo dõi logs: Kiểm tra logs của Coolify và Traefik để debug nếu cần
Chúc các bạn thành công và sớm push được code nhé!