- JeffGeerling.com, được vận hành trên nền Drupal từ năm 2009, đã chuyển sang trình tạo trang tĩnh Hugo (SSG) để tăng hiệu quả cho blog cá nhân
- Nhiều lần nâng cấp và gánh nặng bảo trì kéo dài từ Drupal 6 đến 10 là động lực chính cho việc chuyển đổi
- Hugo hỗ trợ soạn thảo dựa trên Markdown, giúp đơn giản hóa quy trình đăng bài vốn phức tạp trước đây và cho phép xử lý việc xuất bản, triển khai chỉ bằng một dòng lệnh
- Trong quá trình di chuyển, có thể phát sinh một số vấn đề như lỗi liên kết hình ảnh, mất URL; các tính năng bình luận và tìm kiếm sẽ được khôi phục ở giai đoạn sau
- Đây là một ví dụ cho thấy việc chuyển sang site tĩnh mang lại workflow gọn nhẹ và hiệu quả bảo trì cho lập trình viên cá nhân
Bối cảnh chuyển từ Drupal sang Hugo
- Trang web bắt đầu với Drupal 6 từ năm 2009 và đã được nâng cấp dần qua các phiên bản 7, 8, 9, 10
- CMS này cũng đã được tác giả sử dụng trong công việc chuyên môn hơn 10 năm và áp dụng cho cả blog cá nhân
- Sau quy trình nâng cấp phức tạp từ Drupal 7 lên 8, cảm giác mệt mỏi khi phải duy trì một Digital Experience Platform (DXP) cấp doanh nghiệp cho blog cá nhân ngày càng lớn
- Blog được dùng như không gian bổ trợ cho các dự án cá nhân và nội dung YouTube, nên tác giả quyết định chuyển đổi để tập trung vào viết bài thay vì bảo trì CMS
Lý do chọn Hugo
- Trước đây tác giả đã có kinh nghiệm chuyển một số website sở thích sang static hosting, trong đó có những site được chuyển sang Jekyll hoặc Hugo
- Jekyll phù hợp cho GitHub Pages, nhưng với một người không chuyên Ruby, tác giả thích cấu hình đơn giản và tốc độ nhanh của Hugo hơn
- Hugo hỗ trợ Markdown mặc định, nên tích hợp tự nhiên với cách viết hiện tại
Quá trình di chuyển và các vấn đề
- Công việc di chuyển đang được theo dõi trong GitHub issue #158
- Do có hơn 3.500 bài viết cùng dữ liệu tích lũy suốt 20 năm, vẫn có khả năng xảy ra một số vấn đề như hỏng hình ảnh, lỗi liên kết, thiếu redirect
- Tác giả đang cố gắng hết mức để giữ nguyên cấu trúc URL cũ hoặc bổ sung redirect khi cần
Cải thiện workflow dựa trên Markdown
- Từ năm 2020, mọi bài viết đều được soạn bằng Markdown
- Trước đây, tác giả viết bằng Markdown trong Sublime Text, sau đó chuyển sang HTML và tải thủ công lên Drupal
- Trên Drupal, việc đăng bài đòi hỏi quy trình nhiều bước
- Dán nội dung, tải lên và chèn từng hình ảnh riêng lẻ, chỉnh ngày đăng, xóa cache, v.v.
- Quy trình còn bao gồm cả quản lý cache Cloudflare để ứng phó với DDoS, khiến mọi thứ trở nên phức tạp
- Với Hugo, sau khi viết file Markdown chỉ cần chạy lệnh
hugo && git commit && git push là có thể đăng ngay lập tức
- Gánh nặng quản trị máy chủ với Composer, Drush, PHP, MariaDB, Nginx... đã biến mất, giúp nâng cao hiệu quả bảo trì
Kế hoạch tiếp theo (TODOs)
- Tính năng bình luận sẽ được khôi phục ở giai đoạn 2 bằng một hệ thống bình luận tĩnh tự host
- Tính năng tìm kiếm trên site trước đây dùng Apache Solr, nhưng hiện đang tạm dừng
- Cách triển khai tìm kiếm trong Hugo đang được xem xét tại issue #168
- Ở giai đoạn đầu của quá trình di chuyển, phần bình luận đã bị vô hiệu hóa và việc chuyển đổi dữ liệu cũ dự kiến sẽ mất thời gian
Ý nghĩa của việc chuyển đổi
- Đây là bước rời khỏi cấu trúc tạo và quản lý nội dung phức tạp của Drupal để chuyển sang mô hình vận hành site tĩnh đơn giản và hiệu quả hơn
- Là một ví dụ thực tế cho thấy lập trình viên cá nhân có thể giảm gánh nặng bảo trì và tập trung hơn vào sáng tạo nội dung
- Việc chuyển sang Hugo được đánh giá là hướng đi giúp tăng tính bền vững trong vận hành blog cá nhân
1 bình luận
Ý kiến Hacker News
Vài năm trước, tôi đã chuyển website cá nhân của mình sang một trình tạo trang tĩnh dựa trên Common Lisp do chính tôi viết
Lúc đầu nó chỉ khoảng 850 dòng, giờ đã tăng lên khoảng 1500 dòng, và gần như mọi thứ đều được render tĩnh, từ bài blog, sổ lưu bút, trang bình luận đến RSS feed theo tag
Tôi tự tay viết toàn bộ code, HTML và CSS nên có thể giữ toàn quyền kiểm soát về mặt thẩm mỹ, đồng thời thêm tính năng mới cũng rất nhanh
Ví dụ, để thêm một trang “backlink” chỉ cần khoảng 40 dòng code CL và 15 phút
Giờ nó rất ổn định nên hầu như không phải đụng vào nữa, tôi chỉ cần tập trung viết bài
Tôi dành hết thời gian để vọc engine của blog rồi cuối cùng lại không viết gì cả
Vì thế tôi cố ý quay lại dùng một giải pháp hosting ít quyền kiểm soát hơn. Giờ tôi chỉ tập trung vào việc viết
Trước đây tôi từng duy trì một dự án công khai tên là Tclssg, nhờ phản hồi của người dùng mà đã tài liệu hóa và thêm khá nhiều tính năng
Nhưng vì là dự án công khai nên khó thay đổi cấu trúc theo ý mình
Giờ tôi dùng một trình tạo dành riêng cho site của mình gồm Python (900 dòng) + Pandoc Lua (700 dòng)
Lịch sử thay đổi về mặt kỹ thuật được tôi ghi lại trên website của mình
Giờ tôi đang làm lại bằng TypeScript/Bun, nhưng vẫn còn những yếu tố kiểu LISP
Tôi đang tìm một phương ngữ LISP/Scheme nhẹ, có sẵn SQLite và HTML parsing, đồng thời có thể biên dịch native
Thông tin liên quan được tổng hợp ở đây
Sau nhiều năm, toàn bộ site vẫn có thể build trong chưa tới 1 giây
Tôi cũng tự thêm RSS feed và syntax highlighting, dùng Chroma và Blackfriday
Tôi đã thử Hugo nhưng thấy quá phức tạp nên tự làm luôn
Trước đây tôi chuyển từ svbtle sang Hugo, nhưng thành thật mà nói là tôi đang hối hận
Tôi đã fork theme, nhưng Hugo hay bị hỏng nên tốn quá nhiều thời gian bảo trì
Giờ site thậm chí còn không build được nữa
Nếu phải đưa ra lời khuyên, tôi nghĩ nên lưu cả phiên bản binary dùng để build site trong source control
Trình tạo trang tĩnh gần như không có vấn đề bảo mật, nên nếu không thiếu tính năng nào thì cứ dùng nguyên phiên bản cũ cũng được
Miễn là hệ điều hành hay CPU không thay đổi quá lớn thì sẽ không có vấn đề gì
Tôi cũng đã cố định phiên bản bằng cách tham khảo cấu hình này
Khi cần tìm ra phiên bản đang hoạt động, dùng tìm kiếm nhị phân là hiệu quả nhất
Dùng cùng một phiên bản Hugo ở cả local lẫn CI thì sẽ không phát sinh vấn đề
${project}/bin/, thêm vào.gitignore, rồi ghi checksum vào fileSHA256SUMSlà đượcCách này giống như một phiên bản đơn giản của Git LFS
Mỗi lần chuyển sang máy mới là lại sợ phải khớp đúng phiên bản, cuối cùng tôi đang port sang PHP nhưng vẫn chưa xong
Nếu bạn là người viết bài bằng Markdown thì chuyển sang Hugo là một lựa chọn hợp lý
Tôi cũng đã chuyển hơn 500 bài viết từ Jekyll sang Hugo, và phần khó nhất là cú pháp template
Nhưng nhìn chung thì vẫn đáng giá
Tôi đã ghi lại quá trình chuyển đổi và script tự động chuyển đổi trong bài blog này
SSG phù hợp với website tĩnh, nhưng nếu cần tương tác thì vẫn phải có server
Đằng nào cũng phải chạy server thì render Markdown động còn đơn giản hơn
Cuối cùng thì SSG chỉ làm tăng thêm dependency và những thứ có thể bị hỏng
Tôi nghĩ sau này Jeff sẽ hối hận khi muốn thêm các tính năng như bình luận
Cá nhân tôi thấy một server đơn giản dựa trên SSR là giải pháp thực tế hơn
Trang tĩnh không có rủi ro đó, và phần lớn traffic chỉ là đọc
Có vẻ Jeff cũng đang định tự triển khai tính năng bình luận trong issue
So với thời còn dùng Drupal thì lượng code nhỏ và đơn giản hơn rất nhiều
Tôi tò mò về quá trình ra quyết định khi chọn SSG
Có nhiều công cụ lớn như Hugo, Eleventy, Jekyll, và Hugo đặc biệt hay có breaking change
Với một dự án lâu năm, tôi nghĩ giờ đáng ra phải đảm bảo được tính ổn định
Điều đó khiến blog của tôi bị lỗi build, và tài liệu vẫn chưa được cập nhật hoàn toàn
Bản thân thay đổi thì không sao, vấn đề là tài liệu không theo kịp
Tôi tò mò không biết giờ Pelican thế nào. Trong hệ Python thì có vẻ Hugo và Pelican là hai lựa chọn lớn
Tích hợp ActivityPub thậm chí còn có vẻ hấp dẫn hơn RSS
Trước đây tôi dùng Nikola nhưng nó có quá nhiều dependency và gặp vấn đề sai lệch incremental build
Tôi thích việc Pelican vẫn giữ được sự đơn giản
Cảm giác như tài liệu mới hoàn thành được khoảng 90%, nên còn thiếu ở các chi tiết nhỏ, nhưng nếu chỉ dùng tính năng cơ bản thì nó rất tốt
Mỗi tháng vẫn có commit nên dự án vẫn còn sống
Hiện tôi đang chuyển từ Hugo sang Zola
Cấu hình và template của Zola cho cảm giác trực quan hơn nhiều
Tôi dùng GitHub Actions để tự động hóa build và deploy
Tôi đã dùng Hugo được 3 năm
Điều tôi học được là hãy fork theme và tự quản lý
Nên tránh submodule, và cập nhật thì cứ chậm rãi thôi
Tính năng bình luận vẫn có vẻ khá rắc rối
Tôi cũng từng định chuyển theme Drupal của mình sang nhưng rồi bỏ cuộc
Tôi nghĩ tốt hơn là đưa trực tiếp vào rồi chỉ override những phần cần thiết thay vì dùng submodule
Năm ngoái tôi bắt đầu blog bằng Hugo, nhưng trong 18 bài thì 3/4 khiến tôi khổ sở vì lỗi build
Nó quá thiếu ổn định nên thật sự đáng thất vọng
Thay vì cố làm quen với cách Hugo vận hành, tôi thấy tự triển khai nhanh bằng ngôn ngữ mình đã biết thoải mái hơn nhiều
Trước đây tôi từng tự viết một SSG đơn giản, gần đây muốn tìm thứ bài bản hơn nên thử 11ty
Nhưng Liquid template quá bất tiện
Tôi muốn dùng template dựa trên JSX, nhưng 11ty khiến việc đó trở nên khó khăn
NextJS SSG thì nhiều tính năng nhưng quá phức tạp, cảm giác hơi quá mức cần thiết
Tôi cũng đang cân nhắc xây một SSG tùy chỉnh trên framework như Tempest
Tôi cũng đã chuyển một site dựa trên Punch sang Eleventy, và nếu tốc độ build ổn thì tôi thấy nó tốt hơn Hugo
Giờ tôi đã làm lại bằng Astro
Nó ưu tiên static nhưng vẫn có thể dùng logic backend khi cần
NextJS quá phức tạp so với một website đơn giản