Frappe Press: Tự build hệ thống cloud hosting như Frappe Cloud
Press là nền tảng open-source giúp bạn tự vận hành cloud hosting cho Frappe stack - đúng thứ đang chạy Frappe Cloud thật ngoài production.
Nguyễn Nhật Long
@nguyennhatlong1303
Nếu bạn đang làm việc với Frappe/ERPNext và từng tự hỏi "Frappe Cloud họ build cái platform đó như thế nào?" - thì câu trả lời nằm ngay trên GitHub, public hoàn toàn, tên là Press.
Mình lần đầu đụng vào repo này khi đang tìm cách setup một môi trường hosting nội bộ cho team, thay vì phụ thuộc vào Frappe Cloud hay tự mày mò từ đầu. Và thú thật là mình khá bất ngờ với độ hoàn thiện của nó - đây không phải một side project hay proof-of-concept, đây là production codebase thật sự đang chạy cho hàng nghìn khách hàng của Frappe.
Press thực ra là gì?
Nói ngắn gọn: Press là một full-service cloud hosting platform được thiết kế riêng cho Frappe stack. Nó cho phép bạn tự vận hành một hệ thống tương tự Frappe Cloud - quản lý sites, servers, apps, billing, backups, marketplace - tất cả trong một.
Cái hay ở đây là Frappe không chỉ dùng Press nội bộ rồi giữ kín. Họ open-source toàn bộ dưới AGPL-3.0, nghĩa là bạn có thể tự deploy một instance Press của riêng mình, cấu hình theo ý muốn, và về cơ bản là tự build một "Frappe Cloud" phiên bản riêng.
Theo kinh nghiệm của mình, đây là loại project mà bạn hiếm khi thấy trong hệ sinh thái open-source - một công ty thực sự release cái platform đang kiếm tiền cho họ ra ngoài.
Kiến trúc bên trong
Press được build trên chính Frappe Framework - tức là nó dùng Python/Frappe backend và Vue.js cho dashboard. Codebase chia thành vài layer chính:
press/- core backend logic: site management, server provisioning, billing engine, job schedulingdashboard/- Vue 3 frontend cho người dùng cuối quản lý sitesbackbone/- infrastructure layer xử lý communication với các serversdeployment/- tooling liên quan đến việc deploy và update
Mình đặc biệt chú ý đến cách họ tổ chức job system. Thay vì dùng Celery hay một queue riêng, Press tận dụng Frappe's built-in background job system, tích hợp chặt với RQ (Redis Queue). Mỗi operation - tạo site, backup, update app, restart server - đều được wrap thành một job có thể track được, retry được, và log đầy đủ.
Cái này rất quan trọng khi bạn vận hành ở scale lớn. Mình thấy cái này hay ở chỗ: bạn không cần setup thêm infrastructure phức tạp, mọi thứ đã được tích hợp sẵn trong Frappe ecosystem.
Những feature đáng chú ý nhất
Multi-tenancy thực sự
Press giải quyết bài toán multi-tenancy khá thông minh. Mỗi site chạy độc lập với app version riêng, có thể update riêng lẻ mà không ảnh hưởng site khác. Đây là điểm đau kinh điển khi bạn host nhiều Frappe sites trên cùng một server - Press abstract hết cái complexity đó đi.
Về cơ bản, flow sẽ là:
1Bench (shared) → Sites (isolated) → Apps (per-site version control)
Mỗi bench có thể host nhiều sites, mỗi site có thể pin vào một app version cụ thể. Khi có update, bạn có thể rollout từng bước thay vì update hàng loạt.
Billing engine tích hợp
Cái mình không ngờ là billing system của Press khá sophisticated. Nó support:
- Daily và monthly subscription cycles
- Wallet credits (prepaid model)
- Tích hợp với ERPNext để tạo invoices tự động
- Flexible payment methods
Nếu bạn đang build một SaaS platform trên Frappe và cần collect tiền từ end users, đây là một reference implementation cực kỳ giá trị.
Marketplace cho Frappe Apps
Press có built-in marketplace cho phép developers publish apps, và site owners có thể install apps từ marketplace trực tiếp. Đây là feature mà nếu bạn muốn build một ecosystem xung quanh Frappe platform của mình, bạn sẽ cần đến.
Server management với SSH access
Khác với "Central" - platform cũ của Frappe mà họ đề cập trong README - Press cho phép users có SSH access vào servers của họ. Đây là điểm mà nhiều managed hosting platforms hay bỏ qua, nhưng lại cực kỳ quan trọng với developers.
Developer Experience khi làm việc với codebase
Mình đã spend khá nhiều thời gian đọc code của Press, và có vài nhận xét thực tế:
Điểm tốt:
- Code được tổ chức rõ ràng theo domain (sites, servers, billing, marketplace)
- Có
CLAUDE.mdvàAGENTS.md- tức là họ đã document codebase cho AI assistants, một dấu hiệu tốt về documentation quality - Có
guide-to-testing.mdvàguide-to-ui-testing.mdriêng biệt - Dùng
ruffcho Python linting,biomecho JS/TS - tooling hiện đại - Pre-commit hooks được setup sẵn
- Type hints với mypy
Điểm cần lưu ý:
- 655 open issues tính đến thời điểm mình viết bài này - không phải con số nhỏ
- Dependency vào Frappe Framework khá deep, nếu bạn không quen với Frappe paradigm thì learning curve sẽ dốc
- Documentation cho self-hosting vẫn còn sparse ở một số chỗ
So sánh với các alternatives
Nếu bạn chỉ cần deploy vài Frappe sites đơn giản, Coolify hay thậm chí Frappe Cloud trực tiếp sẽ nhanh hơn nhiều. Press shine khi bạn cần vận hành một platform - tức là bạn là người host sites cho người khác, không phải chỉ host cho mình.
| Tiêu chí | Press (self-hosted) | Frappe Cloud (managed) | Coolify / Caprover |
|---|---|---|---|
| Frappe-specific features | ✅ Full support | ✅ Full support | ❌ Generic only |
| Billing engine | ✅ Built-in | ✅ Managed | ❌ Không có |
| Marketplace | ✅ Built-in | ✅ Managed | ❌ Không có |
| Self-hosting effort | 🔶 Cao | ✅ Zero | ✅ Thấp |
| Cost control | ✅ Full control | 🔶 Pay per use | ✅ Full control |
| Multi-tenancy | ✅ Native | ✅ Native | 🔶 Manual setup |
| SSH access | ✅ Có | ✅ Có | ✅ Có |
| Open source | ✅ AGPL-3.0 | ❌ Proprietary | ✅ Apache/MIT |
Ai nên (và không nên) dùng Press?
Nên dùng nếu:
- Bạn là Frappe partner hoặc đang build một managed hosting service cho clients
- Công ty bạn có nhiều Frappe/ERPNext deployments cần quản lý tập trung
- Bạn muốn build một SaaS platform trên Frappe với billing và marketplace
- Bạn cần compliance hoặc data residency requirements mà Frappe Cloud không đáp ứng được
- Bạn có team infra đủ mạnh để vận hành và maintain
Không nên dùng nếu:
- Bạn chỉ cần deploy 1-2 sites cho internal use - overkill hoàn toàn
- Team bạn chưa familiar với Frappe ecosystem - learning curve sẽ rất cao
- Bạn không có bandwidth để maintain infrastructure lâu dài
- Bạn cần một generic hosting platform không tied vào Frappe stack
Một góc nhìn thực tế hơn
Anh em lưu ý một điều: Press không phải là tool bạn cài xong là chạy ngay được. Đây là một platform phức tạp, và việc self-host nó đòi hỏi bạn phải hiểu rõ cả Frappe Framework lẫn infrastructure management.
Tuy nhiên, nếu bạn đang trong hệ sinh thái Frappe và cần scale lên, đây là một trong những reference implementations tốt nhất mình từng thấy. Việc có thể đọc code của một production platform đang phục vụ hàng nghìn customers - đó là kiến thức không có giá.
Mình đặc biệt recommend anh em đọc phần billing engine và job scheduling của Press, ngay cả khi bạn không deploy nó. Cách họ design các abstractions đó rất đáng học hỏi cho bất kỳ SaaS platform nào.
Repo: github.com/frappe/press - 518 stars, đang active development với 25,000+ commits. Nếu bạn đang trong Frappe world, đây là một repo đáng để bookmark.
Nguyễn Nhật Long
@nguyennhatlong1303Nguyễn Nhật Long is a Senior Frontend Engineer and Frontend Team Leader with 7 years of experience building real-time fintech platforms. Specializing in React, Next.js, TypeScript, and React Native, shipping 10+ products across Web, Mobile, Telegram Mini-Apps, and Web3.
Thấy hay? Chia sẻ cho bạn bè!