Ghost: hay ho, giao diện bắt mắt, điện nước cơ bản, liệu đã đủ chinh phục các anh em Blogger chưa?

Microvn21 tháng 3 • 16 min read • 

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 =)))

Vậy, Headless CMS là gì ?

Headless CMS là như thế này à 😆

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:

Nguồn: Internet
  1. Một cơ sở dữ liệu để có thể lưu trữ các thông tin.
  2. Một giao diện cho người quản lý nội dung.
  3. Một quy trình tích hợp việc đọc/ghi của hệ thống
  4. Một giao diện hoàn chỉnh cho End-User

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:

Nguồn: Internet

Để 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.

Vậy thì, WordPress mà bỏ mục số (4) thì có là Headless CMS ?

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 ...

Thế có cần phải sử dụng Headless CMS cho sản phẩm của mình không?

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:

  1. Xây dựng mặt tiền (Front-End) bằng các ngôn ngữ mà bạn đã thành thạo hoặc các trang SPA như ReactJs, VueJs,  Angular hoặc các trang được tạo bằng trình tạo Markdown như JekyII, MiddleMan, Hexo...
  2. Xuất bản nội dung trên các ứng dụng di động.
  3. Xuất bản nội dung trên các sàn thương mai điện tử.
Một số Headless CMS phổ biến, tham khảo tại đây

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.

Headless CMS: GHOST 🪄

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’NolanHannah 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:

  1. Bạn không phải là một "Cốt đơ" thì hãy dùng Ghost (Pro). Thật vậy, mặc dù nói là dễ nhưng cái đó là sự dễ dùng của giao diện, dễ dàng với các Developer, còn việc thiết lập vẫn cần bạn phải có một lượng kiến thức tối thiểu để cài đặt cũng như vận hành nó. Điều này dường như là trở ngại quá lớn cho các Writer 😩.
  2. Nỗi lo đi kèm với rủi ro muôn phần. Cho tới thời điểm hiện tại, Ghost vẫn phải cập nhật bằng tay và câu chuyện Migration sẽ làm cho những Blogger lâu năm sẽ phải đắn đo rất nhiều vì không dễ dàng chuyển đổi từ Ghost sang WordPress ở thời điểm hiện tại.
  3. Vừa đòi hỏi kỹ thuật cao, lại đòi hỏi chi phí cũng không kém so với đối thủ. Mặc dù, Wordpress chỉ yêu cầu 4$ không bao gồm gói giảm giá nhưng để bắt đầu thì Ghost cần tới 9$. Mình không nói về giá Plugins, Themes nhé. Cái này ở VN ai cũng biết thế nào rồi =))))
  4. Con đường bắt đầu quá gian nan, trở ngại lớn cho các "Cốt đơ" nghèo như mình là Shared hosting không thể tận dụng. Mình có nhiều Shared Hosting nhưng rất tiếc là không thể tận dụng được nó. Trong khi đó, nếu muốn 1 cái gì của riêng mình, mang sự cá nhân hóa thì hầu hết các Blogger sẽ dễ dàng mua được Shared Hosting mà không cần mất thời gian quá nhiều cho việc setup máy chủ 🥲.
  5. Muốn đi nhanh thì đi một mình, đi xa thì phải đi cùng nhau. Thực tế mang tiếng là Open-Source, ấy thế mà cộng động của Ghost lại quá nghèo nàn so với các nền tảng khác 😣. Bởi vì tập trung cho việc phát triển trải nghiệm viết bài, Ghost không mang cho mình việc kế thừa và mở rộng dựa vào các Plugin, Theme giống như anh cả. Điều đó, ảnh hưởng trực tiếp tới các Writer và khiến cho các lập trình viên gần như tù mù về con đường mở rộng cho sản phẩm của mình. Bản thân cá nhân mình cũng mất khoảng 1 ngày để tìm hiểu lại toàn bộ các luồng và cách thức re-build lại toàn bộ dự án (sau này xin vào làm rì mốt cho Ghost đó, hê hê 😎).

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:

  1. Editor đủ dùng, mạnh mẽ cho Blogger đủ sức sáng tạo. 3 đời nhà tôi làm làm lập trình viên, tôi là đời thứ nhất thì đánh giá một cách khách quan rằng. Editor Koenig đã đem lại sự hài lòng nhất định cho cá nhân mình với các chức năng tương đối hoàn chỉnh, sẵn sàng để bạn có thể viết Blog một cách xuyên suốt mà không gặp lỗi nào cả.
  2. Nhanh chóng, tiện nghi, ổn định là giá trị cốt lõi mà Ghost đem lại. Bài viết này tới thời điểm hiện tại khoảng hơn 3000 từ mà trong suốt quá trình viết bài cũng như sử dụng không cảm thấy khó khăn hay lỗi nào cả, mặc dù phiên bản của mình là bản Beta dành cho các Developer. Chắc chắn, phải kể đến chức năng Auto-Save xịn, mịn luôn 😆 dẹp tan lo lắng mất bài.
  3. Một điểm cộng lớn dành cho giao diện đạt điểm gần như tuyệt đối theo đánh giá từ Google PageSpeed Insights. Mặc dù mình không dùng và phải bỏ ra khoảng 2 giờ để optimize lại mà mới chỉ đạt 8x cho mobile, và 9x cho bản web. Chưa kể, trên Store Ghost Themes cũng bán khá nhiều theme trả phí cũng không phải dạng vừa đâu.
  4. Thiết lập gọn nhẹ, cài đặt bài viết, cấu hình toàn trang đáng phải nhắc tới. Trong phần này, điểm chú ý mà mình muốn nói tới là SEO chưa bao giờ làm các Blogger thất vọng. Đáng kể tới là khả năng custom SEO và tích hợp sẵn AMP cực chuyên nghiệp luôn, bạn sẽ cảm thấy dường như nó đã tiết kiệm phần lớn thời gian dành cho công việc này.
Các chức năng trong Editor của Ghost. Không đao to búa lớn, nhưng mạnh mẽ không kém các đàn anh.

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:

  1. https://ghost.org/vs/memberful/
  2. https://ghost.org/vs/medium/
  3. https://ghost.org/vs/wordpress/
  4. https://ghost.org/vs/substack/

Còn cài đặt thì sao, sửa chữa thế nào, API có hoạt động không?

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.

SQLite – Wikipedia tiếng Việt

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.

How to install Ghost, the official guide
Everything you need to know about working with the Ghost professional publishing platform.

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 =)).

Dưới đây là một vài bức ảnh lúc mình cài đặt.

Migrate DB này
Giao diện khi truy cập lần đầu vào quản trị
Nhập thông tin liên quan tới blog này
Giao diện ban đầu sáng, mà mình là fan của DarkMode
Quản lý bài viết này
Quản lý thông tin bài viết này
Thích Integration có luôn. Nhưng mà hơi yếu =)) 

Công tư phân minh, ái tình dứt khoát !!!

Đ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/