Lại là mình đây 😂, để quay trở lại phần 2 của tuyển tập "Tôi đã tạo ra Blog của mình như thế nào ? " này có vẻ khó khăn hơn nhiều so với dự kiến của mình. Một phần là mình đã bận rộn hơn với những lịch học mới, một phần mình cũng đắn đo xem nên viết gì cho mọi người đọc nữa. Hơn nữa, các mối quan hệ xã hội trong quá trình hoàn thiện bản thân của mình có đa dạng các nghành nghề, bài viết này hơi nặng nề về mặt kỹ thuật, vì vậy nếu có ai mà vô tình đọc được mà không nuốt nổi được xin phép bỏ qua =)).
Trong lúc pha Cafe buổi sáng, mình đã cố gắng nghĩ một chủ đề thú vị một chút cho tuần này và một trong những điều khó khăn nhất khi mình bắt đầu không phải là nội dung như thế nào, ảnh ọt ra sao mà đối với một người thuần kỹ thuật như mình phải lựa chọn giữa các nền tảng (Platform) CMS làm sao để đáp ứng đủ các mong muốn mà mình đã hoạch định ngay từ đầu mới thật sự là một thử thách lớn.
Khi hoạch định về các dự án trong tương lai, mình đã luôn cố gắng tận dụng lại các nguồn lực một cách cao nhất song song đó là kết hợp với việc học những kiến thức mới vào trong quy trình phát triển của bản thân. Vì thế, nếu để lựa chọn VÙNG AN TOÀN cho cả dự án này, có lẽ 99.999% mọi người sẽ đề nghị mình dùng WordPress 🤣, nhưng mình đã thực sự bước ra khỏi nó và chọn một điều gì đó thú vị hơn. Cuối cùng, mình chọn Ghost, một Headless CMS được giới thiệu bởi 2 người anh từng làm ở Vccorp mà mình tín nhiệm trong nghành (Anw, Vccorp còn nhiều nhân tài lắm, không phải chỉ 2 anh trên đâu, trong quá trình viết blog sẽ dần dần xin đưa các anh vào để có dịp khoe với thiện hạ, ahihi =)))
Yah, về mặt nghĩa đen có vẻ đúng là như bức ảnh trên. Thông thường, một CMS (Content Management System) cơ bản là sẽ giúp bạn quản lý và chăm sóc mọi khía cạnh liên quan đến nội dung, như là: tạo, chỉnh sửa, xóa, khôi phục bài viết và các vấn đề liên quan khác có thể kể đến như: quản lý người dùng, quản lý chuyên mục, quản lý Tag, quản lý giao diện, vân vân và vân vân... Vậy thì Headless CMS khác ở chỗ nào?
Headless CMS thực chất là một CMS đầy đủ nhưng không có giao diện hiển thị nội dung cho End-User (End-User là những người đọc bài viết) còn Editor (người nhập liệu/nhập nội dung) vẫn có giao diện đầy đủ chức năng như bình thường như các hệ thống CMS cơ bản.
Dưới đây là mô tả việc vận hành của một CMS thông thường với nguyên lý Monolithic, nó giống với WordPress và bao gồm các chức năng cơ bản như sau:
Vậy làm thế nào để biến mô hình trên thành một Headless CMS chính hiệu, bạn có thể tham khảo hình dưới dây:
Để chuyển đổi thành một Headless CMS, bạn chỉ cần xóa phần (4) theo danh sách ở trên hay nói cách khác là trang web cuối cùng sẽ bị lược bỏ, những gì còn lại duy nhất chỉ là một giao diện cho người quản lý nội dung, một vài API thiết yếu cho các nhu cầu khai thác thông tin mà bạn mong muốn.
Chắc chắn là có, WordPress quá là hoàn hảo các các giải pháp về quản lý nội dung hơn nữa lại có một số lượng khổng lồ các Plug-In giúp bạn dễ dàng mở rộng sản phẩm của mình tùy ý. Vì vậy, bạn chỉ cần cài thêm một Plug-In quản lý API và ẩn phần hiển thị cho người dùng cuối thì WordPress cũng là một Headless CMS mà thôi.
Khi mà trở thành một Headless có nghĩa là bạn sẽ không có bất kỳ khuôn khổ nào cho đầu ra, bạn có thể sử dụng dữ liệu của mình với nhiều mục đích khác nhau, ví dụ như bạn có thể tạo một website mới, đưa thông tin cho các ứng dụng điện thoại (Mobile App), v.v ...
Câu trả lời là không, đây là do mình thích và mình có định hướng nhiều hơn cho phần nội dung này nên mình mới chọn, mình sẽ đưa ra một so sánh giữa 2 loại CMS ở bảng dưới đây:
CMS Traditional | Headless CMS | |
---|---|---|
Nền tảng riêng biệt | - | ✔︎ |
Open-Source nhiều | - | ✔︎ |
Hỗ trợ đã nền tảng | - | ✔︎ |
Developers First | - | ✔︎ |
Bảo trì/Bảo mật | ✔︎ | ✔︎ |
Đa Ngôn Ngữ | ✔︎ | ✔︎ |
Code Simplicity | - | ✔︎ |
Một số trường hợp có thể sử dụng:
Dĩ nhiên, một phần quan trọng mà mình muốn truyền tải tới các bạn. Việc bạn lựa chọn Headless có nhiều ưu điểm thì song song đó là những khuyết điểm mà bạn phải cân nhắc khi triển khai. Một khi bạn đã mở rộng khả năng khai thai dữ liệu hãy luôn phải đặt việc bảo mật là một việc cực kỳ quan trọng. Các Plugin-In API cho WordPress có thể hoạt động tốt nhưng mà đôi khi nó mở quá nhiều sẽ khiến cho người dùng xấu, tin tặc sẽ sẵn sàng khai thác và tấn công hệ thống của bạn bất cứ lúc nào. Chưa kể, các giao diện được các nền tảng phát triển và tối ưu đã đạt tương đối các tiêu chuẩn về SEO, UI/UX nên khi lược bỏ nó, bạn sẽ cần một nguồn lực đáng kể để cải thiện nó trong tương lai nếu bạn có ý định xuất bản nội dung.
Quay trở lại với platform blog ngon lành, xịn xò mang tên Ghost.
Giới thiệu về kiến trúc xương sống của blog của mình.
Ghost is an open source, professional publishing platform built on a modern Node.js technology stack — designed for teams who need power, flexibility and performance.
Ghost được tạo ra bởi John O’Nolan và Hannah Wolfe vào năm 2013, với mục tiêu trở thành một nền tảng xuất bản mới, hiện đại, nhanh chóng cho các nhà xuất bản chuyên nghiệp trên khắp thế giới.
Mình đã chọn nó vì nó phù hợp với các tiêu chí: ngôn ngữ Nodejs, Open-Source, nhanh, Editor ngon và mình có khả năng mở rộng nó (mình đã nghiên cứu >= 80% nền tảng này và có thể mở rộng bất kỳ điều gì từ nó).
Ghost (Pro) là gì ?
Là một dịch vụ lưu trữ riêng của The Ghost Foundation, nó chạy trên DigitalOcean, Linode và có giá khởi điểm là 9$ đi kèm với chiết khấu 20% cho học sinh, sinh viên, tổ chức phi lợi nhuận khác.
Bạn có thể tham khảo tại đây.
Điều khác biệt với thế giới và sự lựa chọn của mình
Dưới đây là so sánh mà trang tài liệu của Ghost đã chia sẻ, mình sẽ không nói lại nữa mà chỉ so sánh với WordPress mà thôi.
Ghost (That's us!) | Open platforms (eg. WordPress) | Closed platforms (eg. Medium) | |
---|---|---|---|
🏎 Exceptionally fast | ✅ | ❌ | ✅ |
🔒 Reliably secure | ✅ | ❌ | ✅ |
🎨 Great design | ✅ | ❌ | ✅ |
👩🏼🚀 Modern technology | ✅ | ❌ | ✅ |
♻️ Open Source | ✅ | ✅ | ❌ |
🏰 Own your brand+data | ✅ | ✅ | ❌ |
🌍 Use a custom domain | ✅ | ✅ | ❌ |
🖼 Control your site design | ✅ | ✅ | ❌ |
🌱 Censorship-free | ✅ | ✅ | ❌ |
⭐️ Built-in SEO control | ✅ | ❌ | ❌ |
🚀 Native REST API | ✅ | ❌ | ❌ |
🛠 Comprehensive SDK | ✅ | ❌ | ❌ |
🛒 Built-in membership & subscription commerce features | ✅ | ❌ | ❌ |
🤝 Works with any front-end or static site framework | ✅ | ❌ | ❌ |
❤️ Non-profit organisation with a sustainable business model | ✅ | ❌ | ❌ |
Dĩ nhiên, phía trên chỉ là so sánh dựa trên những điểm mạnh yếu mà chính Ghost đưa ra, mình sẽ tổng hợp lại dưới góc nhìn của một lập trình viên và một người sử dụng được một thời gian dài.
Với danh sách chức năng xịn thế kia, sẽ có câu hỏi đặt ra cho nhiều anh em thắc mắc rằng, tại sao Developer cũng như Writer chưa thực sự dùng nhiều so với WordPress?
In sâu trong tâm trí người Việt Nam chúng ta với gần 20 năm vẫn là WordPress, sau đó là sự lụi tàn của các đế chế khác bao gồm các nền tảng diễn dàn phải kể đến như VBB, PHPBB, Joomla, Drupal... =)) vì thế để bước chân vào thị trường này là một thách thức rất lớn với Ghost.
Đi kèm với sự thách thức từ thị trường và thói quen người dùng, phải kể đến những điểm yếu sau:
Lời nói chẳng mất tiền mua, lợi lời mà nói cho vừa lòng "Phao đơ" (Founder).
Điểm chưa hài lòng so với WordPress mình đã kể ra, nhưng mà điểm mạnh cũng cần phải được nhắc tới:
Còn rất nhiều các so sánh với các nền tàng blog khác, bạn có thể tham khảo ở bên dưới đây:
Nhờ vào sử dụng Sequelize Ghost trang bị cho mình một nền tàng đa dạng về cơ sở dữ liệu. Ở phiên bản phát triển (development), nó sử dụng SQLite làm cơ sở dữ liệu chính. Đối với phiên bản sản xuất (product) bạn có thể sử dụng MySQL làm cơ sở dữ liệu chính cho blog của mình.
Bạn có thể tìm hiểu về hướng dẫn cài đặt ở đây, tuy nhiên trong khuôn khổ của bài viết này, mình sẽ không mô tả chi tiết về từng cách một được.
Bởi vì đi kèm với Docker và hôm tìm hiểu về Ghost chưa có V4 bản chính thức từ trang chủ nên mình đã chọn cách là triển khai bằng cách download từ release của dự án trên GitHub tại đây.
Vì Ghost là Open-Source nên đã có bài hướng dẫn cho các bạn tự vọc vạch tại đây. Trong này có cả hướng dẫn làm sao để bạn từ setup lại toàn bộ dự án từ đầu cho tới khi bạn ngập mặt trong hành 😂.
Các tài liệu liên quan tới API cũng rất rõ ràng tại đây. Mặc dù hơi ít chức năng nhưng mình nghĩ là đủ dùng với mình. Có 2 Key bạn cần ghi nhớ, Content API Key là cái mà bạn có thể Publish được, nó là chìa khóa để lấy khai thác dữ liệu. Còn Admin API Key bạn nhớ giấu kỹ đi =)).
Điểm Mạnh | Điểm Yếu |
---|---|
Nhanh chóng, mạnh mẽ, đơn giản | Đòi hỏi có hiểu biết về kỹ thuật |
Dễ dàng cho Developer | Bất lợi cho Writer, người không am hiểu kỹ thuật |
Dễ dàng thao tác trong quá trình sử dụng | Không có tính mở rộng, khó khăn cho việc custom |
Linh động với thiết lập, SEO, AMP | Chỉ hỗ trợ Blog, không hỗ trợ các nền tàng khác như TMDT |
Plugin có nhưng chưa đủ mạnh, hấp dẫn | Cộng động yếu, không có những đóng góp đáng kể |
Editor, giao diện là một điểm cộng lớn | Không có Full-text search, Comment, Dashboard, Category |
Có sẵn hệ thống membership & subscription (V4.0) | Không chạy Shared Hosting, Cập nhật thủ công, Migration bất lợi |
Dễ dàng mở rộng sang các nền tàng khác với API | Theme đa số mất phí và khá là mắc. Mất thời gian tự sửa CSS theo ý muốn |
Trên đây là những chia sẻ về xương sống trong blog của mình, dĩ nhiên là còn các công nghệ khác trong Stack mình không tiện chia sẻ ở đây, nhưng chắc chắc là sẽ dành một bài khác để nói về nó.
Cảm ơn các bạn đã đọc bài của mình, nếu ghé ngang qua hãy ủng hộ mình bằng cách chia sẻ tới cộng động nhé 😍
Ref: https://ghost.org/