Cám ơn Ghost.org

Cám ơn Ghost.org
Photo by Andrew Neel / Unsplash

Tôi dùng Ghost để viết blog đã một thời gian, và đến giờ vẫn thấy đó là lựa chọn đúng đắn nhất. Sau nhiều năm thử qua đủ nền tảng từ Blogger, Medium cho tới WordPress và thậm chí cả viết bằng Markdown rồi render bằng Nextjs Blog (deploy trên Github Page) cuối cùng tôi nhận ra, thứ tôi cần thật ra rất đơn giản: một nơi để viết, để lưu lại hành trình, và để mọi thứ chạy nhanh, gọn, không rườm rà.

Ghost là một nền tảng viết blog mã nguồn mở, được xây dựng trên Node.js, hướng đến hiệu năng và sự tối giản. Nó không phức tạp như WordPress, không rườm rà như các CMS truyền thống, mà tập trung đúng vào điều cốt lõi nhất: viết và xuất bản. Tôi từng chạy blog WordPress từ năm 2018, cũng từng tự cài theme, plugin SEO, caching, backup, rồi cuối cùng phát hiện mình tốn nhiều thời gian cho việc làm đẹp blog hơn là thực sự viết bài. Wordpress mạnh, đúng, nhưng nó mang trong mình tư duy CMS đa năng: phục vụ thương mại điện tử, landing page, tin tức, thậm chí cả LMS. Trong khi tôi, chỉ cần một blog.

Tôi viết bài này một phần là chia sẻ kĩ thuật, một phần là xem như đây là lời tri ân gửi đến những nhà phát triển của Ghost đã tạo ra 1 dự án opensource tuyệt vời như này.

The Open Nation
Cũng lâu rồi tôi không viết bài trong chủ đề Góc nhìn. Lần này, tôi muốn chia sẻ vài suy nghĩ cá nhân: mã nguồn mở không chỉ là một khái niệm kỹ thuật, mà là nền tảng để một quốc gia trở nên vững mạnh về công nghệ. Chúng

Bạn có thể đọc thử quan điểm của tôi về opensource tại đây.

Tại sao tôi chọn Ghost

  1. Hiệu năng cao và gọn nhẹ
    Ghost chạy cực kỳ nhanh, kể cả khi bạn chỉ dùng SQLite làm cơ sở dữ liệu. Với Docker, việc triển khai Ghost gần như chỉ gói gọn trong vài dòng cấu hình, tài nguyên tiêu thụ rất thấp.
  2. Tập trung vào trải nghiệm viết
    Trình soạn thảo Markdown của Ghost mượt mà, rõ ràng, và cực kỳ thân thiện với người viết kỹ thuật. Mọi thứ từ định dạng, nhúng ảnh, hay tạo code block đều trực quan.
  3. Mã nguồn mở và tự chủ hoàn toàn
    Vì Ghost là opensource, bạn có thể cài đặt và tùy chỉnh theo ý muốn. Không phụ thuộc vào nền tảng trung gian, không lo mất dữ liệu. Tất cả bài viết, hình ảnh, cấu hình đều nằm trong thư mục riêng.
  4. Có sẵn module Email, Subscription, Intergation
    Nghe là thấy xịn đúng không, chỉ cần vài bước setup với MailGun là bạn có thể gửi News Letter của mình đến đọc giả hằng tuần. Thậm chí có thể thu phí đọc báo hằng tháng (Subscription) với Stripe. Không dừng lại ở đó, Ghost có rất nhiều module Intergation tự động hoá nếu bạn cần.

Cảm giác khi viết bài với Ghost

Trình soạn thảo của Ghost hỗ trợ Markdown, tức là bạn chỉ cần gõ **bold**, *italic*, hay chèn hình ảnh, đoạn code, link là mọi thứ đều trực quan. Không cần plugin để tạo code block, không cần lo lỗi format khi copy từ nơi khác.

Ghost cũng có chế độ preview song song, bên trái là Markdown, bên phải là kết quả hiển thị. Tất cả đều đơn giản, tinh gọn.

Và điều tôi thích nhất: Ghost không quá nặng về quản trị. Không có dashboard với list plugin gợi ý update mỗi sáng. Mọi thứ vận hành trơn tru, như blog của bạn là một ứng dụng web tối giản được viết chỉ dành riêng cho bạn.

Cách tôi dựng blog Ghost bằng Docker

Tôi triển khai Ghost trong Docker với file cấu hình đơn giản:

version: '3.1'

services:
  ghost:
    image: ghost:6-alpine
    restart: always
    ports:
      - 8080:2368
    environment:
      database__client: sqlite3
      database__connection__filename: /space/blog/database.db
      url: https://quocthinhvo.dev
    volumes:
      - ghost:/var/lib/ghost/content
      - /space/blog:/space/blog

volumes:
  ghost:

Dữ liệu của blog (ảnh, theme, file cấu hình, database SQLite) được lưu trong thư mục /space/blog/, giúp backup dễ dàng chỉ bằng một lệnh copy.

Quản lý và nâng cấp Ghost

Mỗi khi cần cập nhật lên bản mới, chỉ việc chỉnh lại dòng image trong docker-compose.yml, rồi chạy:

docker-compose pull ghost
docker-compose up -d

Ghost sẽ tự động migrate database sang phiên bản mới mà không cần can thiệp thủ công.

Một vài ghi chú nhỏ

  • SQLite hoạt động ổn định với blog cá nhân, nhưng nếu triển khai quy mô lớn hơn, bạn có thể chuyển sang MySQL.
  • Toàn bộ quá trình backup chỉ cần copy file database và thư mục content.