2 điểm bởi GN⁺ 2026-01-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2026-01-06
Ý 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

    • Với kiểu người như tôi, blog self-hosted lại là vấn đề
      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
    • Tôi cũng thích sự tự do và ổn định của một trình tạo trang tĩnh phục vụ một mục đích duy nhấ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
    • Tôi cũng đồng cảm. Tôi từng port site của mình taoofmac.com sang Hy rồi sau đó viết lại bằng Python
      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
    • Tôi cũng đã làm việc tương tự, nhưng triển khai trình tạo site bằng Go
      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 ChromaBlackfriday
      Tôi đã thử Hugo nhưng thấy quá phức tạp nên tự làm luôn
    • Tôi tò mò không biết với blog tĩnh thì xử lý bình luận như thế nào
  • 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

    • Tôi nhận ra rằng có những phần mềm thực ra không cần phải cập nhật
      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ì
    • Chỉ cần chỉ định rõ phiên bản trong cấu hình CI là được
      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
    • Tôi giải quyết bằng Docker image tùy chỉnh
      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 đề
    • Khi dùng binary dựng sẵn, chỉ cần đặt nó vào ${project}/bin/, thêm vào .gitignore, rồi ghi checksum vào file SHA256SUMS là được
      Cách này giống như một phiên bản đơn giản của Git LFS
    • Tôi cũng từng gặp vấn đề tương tự với Jekyll
      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

    • Tôi tò mò vì sao lại chuyển từ Jekyll sang Hugo. Tôi vẫn khá hài lòng với Jekyll
  • 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

    • Nhưng nếu khách truy cập hay bot tăng lên thì server có thể quá tải
      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
    • Tôi cũng đang tự vận hành công cụ phân tích self-hosted và hệ thống bình luận
      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
    • Trình tạo trang tĩnh thực ra lại là hướng giảm phụ thuộc
    • Tôi render trang tĩnh bằng SSG, còn phần bình luận thì xử lý bằng server Common Lisp + Hunchentoot
    • Tôi cũng đã chuyển site sang SSG và hoàn toàn không hối hận. Càng đơn giản càng tốt
  • 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

    • Quả thật Hugo đã đại tu toàn bộ hệ thống template ở v0.146
      Đ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

    • Tôi dùng Pelican và khá hài lòng
      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
    • Tôi cũng đã dùng Pelican nhiều năm nay
      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
    • Tôi đang dùng Pelican kèm theo vài plugin tự viết
      Mỗi tháng vẫn có commit nên dự án vẫn còn sống
    • Nếu bạn biết Python thì Pelican là lựa chọn tự nhiên nhất
  • 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 cũng chuyển từ Jekyll sang Zola và hoàn toàn không hối hận
      Tôi dùng GitHub Actions để tự động hóa build và deploy
    • Nếu yêu cầu không nhiều thì tổ hợp Zola + gist vừa đơn giản vừa phù hợp
  • 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

    • Đúng vậy. Cuối cùng theme vẫn khác nhau ở từng site
      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

    • Tôi cũng đã chuyển từ Hugo sang SSG Python tự viết
      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

    • Eleventy cũng hỗ trợ các ngôn ngữ template cổ điển như Mustache
      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
    • Chúng tôi đã chuyển site marketing của startup từ NextJS sang Astro và rất hài lòng
      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