Sau một thời gian sử dụng Discourse để xây dựng Sorae.vn, mình càng thích nền tảng này hơn.
Nhưng càng làm lâu, mình càng nhận ra một điều:
Không có mã nguồn nào hoàn hảo.
Discourse có rất nhiều điểm hiện đại, nhưng đổi lại cũng có những vấn đề mà người mới cần biết trước khi quyết định sử dụng.
Bài viết này không nhằm chê Discourse.
Mình chỉ muốn chia sẻ những hạn chế và khó khăn mà chính mình đã gặp trong quá trình xây dựng và hoàn thiện Sorae.vn.
1. Discourse không phải lựa chọn dễ dàng cho người hoàn toàn không có kiến thức kỹ thuật
Đây có lẽ là nhược điểm đầu tiên mình nhận ra.
Cài Discourse không đơn giản giống như tải một bộ mã nguồn PHP về, upload lên hosting rồi chạy trình cài đặt trên trình duyệt.
Với cách self-host chính thức, người quản trị phải làm việc với:
- VPS
- Linux/Ubuntu
- SSH
- Docker
- Domain/DNS
- SSL
- Database
- Backup
- Update
- Plugin
- Theme
Discourse có tài liệu self-hosting chính thức, nhưng việc cài được và việc vận hành ổn định lâu dài là hai chuyện khác nhau. Chính cộng đồng Discourse cũng lưu ý self-hosting đòi hỏi người quản trị phải tự xử lý các vấn đề vận hành hệ thống.
Với Sorae, mình đã gặp những vấn đề như:
SSL lỗi.
Website trả về 502 Bad Gateway.
Email không hoạt động như mong muốn.
Có lúc phải kiểm tra từng cấu hình trên VPS để tìm nguyên nhân.
Vì vậy nếu một người hoàn toàn không biết Linux, mình sẽ không khuyên bắt đầu ngay bằng self-hosting Discourse.
2. Discourse cần một VPS tương đối nghiêm túc
Đây là điểm mình thấy khác biệt khá rõ so với những forum mã nguồn truyền thống mà mình từng sử dụng.
Discourse sử dụng một stack khá hiện đại và không phải kiểu phần mềm diễn đàn “nhẹ nhàng” theo nghĩa truyền thống.
Khi cộng đồng còn nhỏ, một VPS nhỏ vẫn có thể chạy được.
Nhưng khi:
- thành viên tăng;
- Topic tăng;
- lượt truy cập tăng;
- hình ảnh tăng;
- các tác vụ nền tăng;
thì nhu cầu tài nguyên cũng tăng theo.
Vì vậy, khi lựa chọn Discourse, mình không chỉ tính:
“Mua VPS bao nhiêu tiền?”
mà còn phải nghĩ đến:
“Nếu Sorae phát triển lên 10 lần thì VPS hiện tại có chịu được không?”
Đây là một vấn đề cần tính từ sớm. VIệc sử dụng VPS gói 6$ tháng tại Vultr như mình chia sẻ chỉ là khởi đầu, và hoàn toàn có thể dễ dàng nâng cấp gói cao hơn với cấu hình mạnh hơn.
3. Lưu trữ hình ảnh và video trở thành một bài toán riêng
Đây chính là lý do mình phải tìm hiểu Cloudflare R2 cho Sorae.
Nếu diễn đàn có nhiều thành viên, hình ảnh upload sẽ tăng rất nhanh.
Đặc biệt nếu cộng đồng câu cá như Sorae phát triển, thành viên có thể liên tục đăng:
- ảnh cá;
- ảnh hồ câu;
- ảnh mồi;
- ảnh cần câu;
- video;
- ảnh chuyến đi câu.
Nếu tất cả đều lưu trực tiếp trên VPS thì dung lượng ổ cứng sẽ ngày càng tăng.
Vì vậy mình phải tách:
Discourse → VPS
và:
Uploads → Cloudflare R2
Nhưng khi đó lại xuất hiện thêm một loạt vấn đề:
- tạo bucket;
- API Key;
- S3 Endpoint;
- Custom Domain;
files.sorae.vn;- CORS;
- CDN;
- backup;
- quyền truy cập.
Discourse hỗ trợ S3-compatible object storage, nhưng khi sử dụng storage bên ngoài thì việc backup/restore cũng cần được hiểu rõ; chẳng hạn uploads lưu trên S3/R2 có cách xử lý khác với uploads nằm trực tiếp trên server.
Tức là giải quyết được vấn đề dung lượng lại tạo thêm một lớp quản trị.
4. Backup phức tạp hơn khi hệ thống bắt đầu được tách thành nhiều thành phần
Lúc đầu mình nghĩ:
“Backup Discourse là xong.”
Nhưng khi hệ thống bắt đầu có:
VPS
│
├── Discourse
├── Database
│
└── Cloudflare R2
└── Uploads
thì phải nghĩ kỹ hơn.
Nếu database được backup nhưng bucket chứa hình ảnh gặp vấn đề thì sao?
Nếu VPS mất nhưng backup cũng nằm trên VPS thì sao?
Đây là lý do tài liệu Discourse khuyến nghị self-hosted site nên có off-site backup, bởi backup nằm cùng máy chủ không bảo vệ được trong trường hợp máy chủ bị mất hoàn toàn.
Sau khi làm Sorae mình mới thấy:
Backup không đơn giản là tạo một file backup. Quan trọng là phải biết mình có thể khôi phục được toàn bộ hệ thống hay không.
5. Plugin rất mạnh nhưng cũng là một con dao hai lưỡi
Đây là một điểm mình khá quan tâm.
Discourse có hệ thống plugin rất mạnh, cho phép mở rộng chức năng.
Nhưng càng cài nhiều plugin thì hệ thống càng có nhiều thành phần phụ thuộc.
Một plugin có thể:
- không còn được cập nhật;
- không tương thích với phiên bản Discourse mới;
- gây lỗi;
- thay đổi giao diện;
- ảnh hưởng đến quá trình update.
Discourse hiện cũng lưu ý rằng nhiều plugin chính thức phổ biến đã được đưa trực tiếp vào Discourse core từ giữa năm 2025, nghĩa là không phải tính năng nào trước đây cần plugin riêng nữa.
Vì vậy kinh nghiệm của mình là:
Không nên thấy plugin hay là cài ngay.
Trước khi cài, mình thường tự hỏi:
“Sorae có thực sự cần chức năng này không?”
Nếu không cần thì thôi.
6. Update Discourse cần cẩn thận
Đây là một điểm người mới có thể đánh giá thấp.
Discourse là một nền tảng được phát triển liên tục.
Điều đó rất tốt.
Nhưng nó cũng có nghĩa là người self-host phải quan tâm đến việc cập nhật.
Đặc biệt nếu website đã có:
- Theme tùy chỉnh;
- Theme Component;
- Plugin;
- cấu hình đặc biệt;
thì trước khi update mình sẽ muốn:
Backup → kiểm tra → update → kiểm tra lại.
Không nên có suy nghĩ:
“Có phiên bản mới thì cứ bấm Update.”
Càng tùy biến nhiều, việc cập nhật càng cần cẩn thận.
7. Tùy biến Discourse sâu không đơn giản
Nếu chỉ thay:
- Logo;
- màu sắc;
- favicon;
- một số thiết lập;
thì khá dễ.
Nhưng khi muốn thay đổi sâu giao diện hoặc hành vi của Discourse, mọi chuyện bắt đầu phức tạp hơn.
Lúc đó có thể phải tìm hiểu:
- Theme;
- Theme Component;
- CSS;
- JavaScript;
- cấu trúc giao diện;
- plugin;
- cách Discourse xử lý frontend.
Đây là một điểm khác với việc chỉnh sửa một website WordPress thông thường.
Mình đã từng chỉnh khá nhiều thứ cho Sorae và càng làm càng nhận ra:
Discourse rất linh hoạt, nhưng sự linh hoạt đó đi kèm với yêu cầu hiểu hệ thống.
8. Muốn làm một tính năng riêng đôi khi phải “đi sâu” vào Discourse
Đây là một trong những điểm mình từng trải nghiệm.
Có những lúc mình nghĩ:
“Giá mà Discourse có thêm chức năng này.”
Nhưng nếu chức năng đó không có sẵn thì sẽ phải cân nhắc:
Theme Component?
hay
Plugin?
hay
API?
hay
Tự phát triển thêm?
Khi đã đi đến mức plugin hoặc tích hợp sâu, đây không còn là việc cấu hình vài nút trong Admin nữa.
Đối với người không phải developer chuyên về Discourse, đây có thể là một rào cản khá lớn.
9. Discourse có tư duy khác forum truyền thống
Đây vừa là ưu điểm nhưng cũng có thể là nhược điểm tùy người dùng.
Nếu bạn từng quen:
- vBulletin;
- XenForo;
- phpBB;
thì khi chuyển sang Discourse, bạn sẽ nhận ra cách tổ chức giao diện và thảo luận khá khác.
Discourse tập trung mạnh vào:
Topic → Reply → Discussion
thay vì cảm giác forum truyền thống:
Forum → Subforum → Thread
Ban đầu có thể hơi khó quen.
Mình từng sử dụng các hệ thống forum truyền thống nên khi làm Sorae mình cũng phải làm quen lại với cách Discourse tổ chức cộng đồng.
10. Không phải mọi loại website đều phù hợp với Discourse
Đây là điều mình nghĩ người mới cần hiểu rõ nhất.
Discourse rất phù hợp để xây dựng cộng đồng.
Nhưng nếu bạn chỉ cần:
- website giới thiệu doanh nghiệp;
- landing page;
- blog cá nhân;
- website bán hàng;
- trang giới thiệu sản phẩm;
thì Discourse có thể không phải lựa chọn hợp lý.
Sorae cần:
thành viên + Topic + Reply + thảo luận + hồ sơ + thông báo + cộng đồng
nên Discourse rất phù hợp.
Nhưng nếu mình làm một website giới thiệu công ty đơn thuần, mình có thể sẽ chọn một nền tảng khác.
11. Email là một phần rất quan trọng nhưng dễ gây đau đầu
Một diễn đàn cần email cho:
- đăng ký;
- xác nhận tài khoản;
- quên mật khẩu;
- thông báo;
- theo dõi Topic;
- thông báo hệ thống.
Nhưng để email hoạt động ổn định, người quản trị phải quan tâm đến:
SMTP + SPF + DKIM + DMARC + reputation.
Một website chạy bình thường nhưng email vào spam thì trải nghiệm người dùng vẫn rất tệ.
Đây là một trong những phần mình phải dành thời gian xử lý khi hoàn thiện Sorae.
12. Sự phụ thuộc vào hệ sinh thái Discourse cũng là điều cần cân nhắc
Một khi đã xây cộng đồng lớn bằng Discourse, việc thay đổi nền tảng về sau không phải chuyện đơn giản.
Bạn sẽ có:
- hàng nghìn Topic;
- hàng triệu bài viết;
- thành viên;
- hình ảnh;
- lịch sử thảo luận;
- URL;
- dữ liệu SEO.
Càng lớn thì chi phí chuyển đổi nền tảng càng cao.
Đây không phải nhược điểm riêng của Discourse — gần như nền tảng cộng đồng nào cũng vậy — nhưng nó là điều mình nghĩ người bắt đầu nên suy nghĩ từ đầu.
13. Tự host nghĩa là mình tự chịu trách nhiệm
Đây có lẽ là điểm quan trọng nhất.
Khi Sorae chạy trên VPS của mình, mình có quyền kiểm soát rất lớn.
Nhưng đổi lại:
Server lỗi → mình xử lý.
SSL lỗi → mình xử lý.
Email lỗi → mình xử lý.
Backup lỗi → mình xử lý.
Update lỗi → mình xử lý.
VPS đầy disk → mình xử lý.
Đó là cái giá của việc tự chủ.
Với người thích tìm hiểu công nghệ như mình, đây lại là phần khá thú vị.
Nhưng với một người chỉ muốn:
“Tôi muốn có một forum và không muốn quản trị server.”
thì self-hosting có thể không phải lựa chọn phù hợp.
14. Vậy tại sao mình vẫn chọn Discourse cho Sorae?
Sau khi kể ra từng ấy nhược điểm, có thể bạn sẽ hỏi:
“Vậy tại sao mình vẫn dùng Discourse?”
Câu trả lời của mình khá đơn giản:
Vì những ưu điểm của nó vẫn phù hợp với thứ mình muốn xây dựng hơn những hạn chế mà mình gặp phải.
Mình muốn Sorae là:
- một cộng đồng;
- một nơi hỏi đáp;
- một kho kinh nghiệm;
- một hệ thống Topic có thể tồn tại lâu dài;
- một website có khả năng phát triển SEO;
- một nền tảng có trải nghiệm mobile tốt;
- một hệ thống mình có thể tự kiểm soát.
Và Discourse đáp ứng được những điều đó.
Điều mình rút ra sau khi làm Sorae
Nếu quay lại thời điểm bắt đầu Sorae, mình vẫn sẽ chọn Discourse.
Nhưng mình sẽ chuẩn bị kỹ hơn cho những phần sau:
1. VPS
Chọn cấu hình có khả năng nâng cấp.
2. Backup
Thiết lập ngay từ đầu.
3. Storage
Tính trước phương án lưu uploads ngoài VPS.
4. Email
Cấu hình SMTP và DNS ngay từ đầu.
5. Plugin
Hạn chế cài những thứ không thực sự cần.
6. Update
Luôn backup trước khi cập nhật.
7. SEO
Thiết kế cấu trúc nội dung ngay từ đầu.
Kết luận
Sau quá trình xây dựng Sorae.vn, mình có một cách nhìn khá khác về Discourse.
Discourse không phải một mã nguồn “cài xong là chạy và quên nó đi”.
Nó là một nền tảng cộng đồng hiện đại, nhưng để vận hành tốt thì người quản trị phải thực sự hiểu hệ thống mình đang chạy.
Đổi lại, mình có một nền tảng rất mạnh để xây dựng cộng đồng.
Với mình, những khó khăn như:
VPS, SSL, email, backup, R2, plugin, update…
không khiến mình bỏ Discourse.
Ngược lại, chính những lần phải tự tìm hiểu và xử lý chúng giúp mình hiểu Discourse sâu hơn và hiểu Sorae.vn rõ hơn.
Vì vậy nếu phải tóm tắt nhược điểm của Discourse bằng một câu, mình sẽ viết:
“Discourse không quá khó để bắt đầu, nhưng để làm chủ và vận hành lâu dài thì bạn cần thực sự đầu tư thời gian.”
Và đó cũng chính là điều mình đang làm với Sorae.vn.
Mình không phải chuyên gia Discourse. Mình chỉ đang tự tay xây dựng một cộng đồng bằng nó, gặp vấn đề nào thì tìm hiểu vấn đề đó, giải quyết được gì thì ghi lại để chia sẻ lại trong “
Chuyện làm Sorae
”.

