Nextcloud Server: Self-host mọi thứ thay vì phụ thuộc Google hay Dropbox
Đào sâu vào codebase Nextcloud Server trên GitHub platform self-hosted thay thế Google Drive, Calendar, Contacts với hơn 35k stars và hệ sinh thái app khổng lồ.
Nguyễn Nhật Long
@nguyennhatlong1303
Mình nhớ cái lần đầu tiên setup Nextcloud là khoảng 3 năm trước, lúc đó công ty mình cần một giải pháp lưu trữ file nội bộ mà không muốn đẩy data nhạy cảm lên Google Drive hay OneDrive. Sếp bảo "tìm cái gì self-hosted đi, open source càng tốt" và thế là mình gặp Nextcloud. Từ đó đến giờ, mình đã deploy nó cho cả team hơn 50 người, và thật sự phải nói là cái project này impressive hơn nhiều so với những gì mình kỳ vọng ban đầu.
Hôm nay mình muốn ngồi lại, mổ xẻ cái repo nextcloud/server trên GitHub một cách nghiêm túc không chỉ dừng ở mức "à nó là cái cloud storage" mà đi sâu vào codebase, kiến trúc, developer experience, và đặc biệt là ai nên dùng, ai không nên.
Nextcloud không chỉ là "Google Drive tự host"
Đây là cái hiểu lầm phổ biến nhất. Nhiều anh em nghe "Nextcloud" là nghĩ ngay đến file sync & share, kiểu như Dropbox clone. Nhưng thực tế, Nextcloud đã phát triển thành một platform hoàn chỉnh cho collaboration. Nhìn vào repo chính, bạn sẽ thấy nó bao gồm:
- File storage & sync cái core, đương nhiên rồi
- Calendar & Contacts tương thích CalDAV/CardDAV
- Mail client tích hợp thẳng vào giao diện web
- Video chat (Talk) WebRTC-based, thay thế được Zoom/Meet cho nội bộ
- Collaborative editing tích hợp Collabora Online hoặc OnlyOffice
- App ecosystem hơn 400 apps trên App Store của Nextcloud
Với hơn 35.6k stars và gần 88k commits, đây là một trong những project open source lớn nhất trong mảng self-hosted. Codebase chính viết bằng PHP (đúng rồi, PHP đừng vội judge), frontend dùng Vue.js, và testing thì có cả Cypress cho E2E.
Cấu trúc codebase nhìn vào repo thật
Mở repo ra, cái đập vào mắt đầu tiên là cấu trúc thư mục khá rõ ràng cho một project lớn như vậy:
Điều mình appreciate nhất là cách Nextcloud tách biệt apps/ ra khỏi lib/. Mỗi app trong thư mục apps/ hoạt động gần như độc lập, có controller riêng, migration riêng, template riêng. Kiến trúc này cho phép bạn enable/disable từng feature mà không ảnh hưởng đến core. Nếu bạn chỉ cần file storage, bạn disable hết Calendar, Contacts, Mail server vẫn chạy ngon.
| Thư mục | Vai trò |
|---|---|
| `apps/` | Các ứng dụng core đi kèm (files, dav, settings, user_ldap,...) |
| `lib/` | Core library, chứa logic chính của Nextcloud |
| `core/` | Frontend assets, templates, routes cho phần core |
| `config/` | Config mẫu và config system |
| `ocs/` | OCS API implementation (Open Collaboration Services) |
| `3rdparty/` | Dependencies bên thứ 3 (submodule) |
| `build/` | Build scripts, CI config |
| `tests/` | Unit tests, integration tests |
| `cypress/` | E2E tests bằng Cypress |
| `vendor-bin/` | PHP dev tools (phpunit, psalm, php-cs-fixer) |
Mình cũng thấy họ dùng Psalm cho static analysis (có tới 3 file config psalm khác nhau: psalm.xml, psalm-strict.xml, psalm-ocp.xml), PHP CS Fixer cho code style, và Vite cho frontend build. Stack khá modern cho một PHP project.
Developer Experience viết app cho Nextcloud
Đây là phần mình muốn nói kỹ, vì nếu bạn chỉ dùng Nextcloud như end user thì không cần đọc code. Nhưng nếu bạn là dev và muốn extend nó, thì DX ở đây khá quan trọng.
Nextcloud có một App API rất mature. Bạn có thể viết app riêng bằng PHP, đăng ký routes, tạo database migration, thêm settings page tất cả đều có convention rõ ràng. Cấu trúc một Nextcloud app tiêu chuẩn:
1myapp/2├── appinfo/3│ ├── info.xml # Metadata của app4│ └── routes.php # Định nghĩa routes5├── lib/6│ ├── Controller/ # Controllers7│ ├── Db/ # Database entities & mappers8│ ├── Service/ # Business logic9│ └── Migration/ # Database migrations10├── templates/ # Server-side templates11├── src/ # Vue.js frontend12└── tests/
Nếu bạn đã quen với MVC pattern thì sẽ thấy rất familiar. Mình đã viết 2 internal apps cho công ty và thời gian từ lúc đọc docs đến lúc có app chạy được chỉ khoảng 2-3 ngày. Docs của họ ở developer documentation khá đầy đủ.
Một điểm đáng chú ý là repo có file .devcontainer/ tức là support GitHub Codespaces / VS Code Dev Containers. Bạn có thể fork repo, mở Codespace, và bắt đầu contribute mà không cần setup local environment. Theo kinh nghiệm của mình, cái này tiết kiệm cực kỳ nhiều thời gian, đặc biệt khi Nextcloud cần PHP, database, và một đống dependencies.
Security cái mà self-hosted phải làm đúng
Mình thấy cái này hay ở chỗ: Nextcloud có chương trình HackerOne bug bounty chính thức. Nhìn vào file SECURITY.md trong repo, họ có quy trình responsible disclosure rõ ràng. Với một platform lưu trữ data nhạy cảm, đây là điều bắt buộc.
Một số tính năng security đáng kể:
Mình đã phải qua một đợt security audit nội bộ khi deploy Nextcloud cho team, và phải nói là checklist security của họ cover khá tốt. Tất nhiên, security còn phụ thuộc vào cách bạn config server (HTTPS, firewall, database hardening,...), nhưng ở tầng application thì Nextcloud làm tốt phần của mình.
| Tính năng | Chi tiết |
|---|---|
| Server-side encryption | Encrypt data at rest, key management linh hoạt |
| Two-factor authentication | TOTP, U2F/FIDO2, backup codes |
| Brute force protection | Rate limiting cho login attempts |
| CSP headers | Content Security Policy strict |
| File access control | Rule-based access, có thể restrict theo IP, group, file type |
| Audit logging | Log mọi action của user, hữu ích cho compliance |
Performance và scalability thực tế ra sao?
Đây là phần mình muốn thẳng thắn. Nextcloud viết bằng PHP, và dù PHP 8.x đã nhanh hơn rất nhiều so với trước, nhưng với workload nặng (nhiều user đồng thời sync file lớn), bạn sẽ cần tune khá nhiều.
Một số thứ mình đã phải config khi scale lên 50+ users:
- Redis cho file locking và session bắt buộc, không có Redis thì performance tệ lắm
- APCu cho local cache
- MySQL/MariaDB thay vì SQLite (SQLite chỉ dùng cho testing thôi, đừng dùng production)
- PHP-FPM tuning tăng
pm.max_children, adjustmemory_limit - Cron job thật thay vì AJAX cron cái này quan trọng, nhiều người bỏ qua
Với setup đúng, Nextcloud chạy ổn cho team vài chục đến vài trăm người. Nhưng nếu bạn cần serve hàng nghìn users, bạn sẽ phải nghĩ đến cluster setup với load balancer, shared storage (NFS hoặc S3-compatible), và database replication. Nextcloud support tất cả những thứ này, nhưng complexity tăng đáng kể.
Một điểm trừ mình gặp: upgrade giữa các major version đôi khi khá đau đầu. Mình đã gặp case upgrade từ NC 25 lên 26 bị stuck ở migration step, phải vào chạy occ command manually. Cái file occ trong repo root chính là CLI tool của Nextcloud rất powerful nhưng bạn sẽ phải làm quen với nó.
So sánh với các giải pháp khác
Anh em hay hỏi "sao không dùng X thay Nextcloud?", nên mình tổng hợp luôn:
Seafile thắng về performance sync file thuần túy (vì viết bằng C/Python, protocol riêng), nhưng Nextcloud thắng áp đảo về ecosystem và tính năng collaboration. Nếu bạn chỉ cần sync file nhanh, Seafile có thể là lựa chọn tốt hơn. Nhưng nếu bạn muốn thay thế cả Google Workspace, Nextcloud là lựa chọn duy nhất thực sự viable.
| Tiêu chí | Nextcloud | ownCloud | Seafile | Google Workspace |
|---|---|---|---|---|
| License | AGPL-3.0 | Dual (Community/Enterprise) | Dual (Community/Pro) | Proprietary |
| Ngôn ngữ | PHP + Vue.js | PHP | Python + C | N/A |
| File sync | ✅ | ✅ | ✅ (nhanh hơn) | ✅ |
| Calendar/Contacts | ✅ Built-in | Plugin | ❌ | ✅ |
| Video chat | ✅ (Talk) | ❌ | ❌ | ✅ (Meet) |
| App ecosystem | 400+ apps | Ít hơn | Rất ít | Marketplace |
| Self-hosted | ✅ | ✅ | ✅ | ❌ |
| Mobile apps | ✅ (F-Droid + stores) | ✅ | ✅ | ✅ |
| Ease of setup | Trung bình | Trung bình | Dễ hơn | Không cần setup |
| Performance (file sync) | Tốt | Tốt | Rất tốt | Rất tốt |
Ai nên dùng, ai nên skip?
Nên dùng Nextcloud nếu:
- Bạn hoặc công ty bạn có yêu cầu về data sovereignty data phải nằm trên server của mình
- Bạn cần một platform all-in-one thay thế Google Workspace/Microsoft 365
- Team bạn có ít nhất một người biết quản trị Linux server
- Bạn cần compliance (GDPR, HIPAA,...) và cần control hoàn toàn data
Nên skip nếu:
- Team nhỏ, không có ai rành sysadmin, và budget không phải vấn đề cứ dùng Google Workspace cho khỏe
- Bạn chỉ cần sync file đơn thuần và cần performance tối đa xem Seafile hoặc Syncthing
- Bạn không muốn maintain server Nextcloud cần update thường xuyên vì security patches
Anh em lưu ý: nếu không muốn tự host nhưng vẫn muốn dùng Nextcloud, có nhiều provider cho đăng ký hosted Nextcloud (kiểu như managed hosting). Danh sách provider có trên website chính của họ.
Contribute vào project
Với gần 2.6k issues đang mở và 891 pull requests, Nextcloud là một project rất active và cũng rất welcome contribution. Repo có file CONTRIBUTING.md rõ ràng, có cả thư mục contribute/ riêng. Họ dùng GitHub Actions cho CI (check thư mục .github/), và test suite khá comprehensive.
Nếu bạn muốn contribute, mình khuyên bắt đầu từ những issue tagged good first issue. Codebase PHP tuy lớn nhưng well-organized, và Vue.js frontend cũng dùng component structure chuẩn. Một điểm mình thích là họ có file openapi.json ở root tức là API được document theo OpenAPI spec, rất tiện cho việc hiểu API mà không cần đọc code.
Theo kinh nghiệm của mình sau 3 năm dùng và 2 lần contribute fix nhỏ: community Nextcloud rất supportive, review PR khá nhanh (thường 1-2 tuần), và maintainers respond constructive. Đây là một project mà nếu bạn muốn có open source contribution trên profile GitHub, rất đáng để tham gia.
Cuối cùng, cái mình thấy giá trị nhất ở Nextcloud không phải là bất kỳ feature đơn lẻ nào mà là việc nó cho bạn quyền kiểm soát hoàn toàn data của mình mà vẫn có trải nghiệm user gần bằng các dịch vụ cloud thương mại. Trong thời đại mà data privacy ngày càng quan trọng, có một giải pháp open source mature như thế này là điều đáng trân trọng.
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è!