Từ VPS Sang Cloudflare: Hành Trình Tối Ưu Hosting Cho Blog

Cách mình migrate từ VPS truyền thống sang Cloudflare Pages — nhanh hơn, rẻ hơn, và không còn phải lo server lúc 2 giờ sáng.

Khau Van Nam 6 phút đọc
Mục lục

Khi VPS Không Còn Là Lựa Chọn Hợp Lý

Mình từng chạy blog này trên một VPS.

Setup khá cơ bản:

  • Một con VPS nhỏ
  • Nginx làm reverse proxy
  • SSL từ Let’s Encrypt
  • Deploy bằng SSH + script tự viết

Chạy ổn. Không có gì sai.

Nhưng dần dần, mình nhận ra mình đang dành quá nhiều thời gian cho những thứ không liên quan đến nội dung.

Những Vấn Đề Thực Tế Với VPS

1. Bạn là sysadmin bất đắc dĩ

VPS nghĩa là bạn chịu trách nhiệm mọi thứ:

  • Update OS, patch security
  • Monitor uptime
  • Xử lý disk full, memory leak
  • Renew SSL certificate

Một blog cá nhân mà phải lo như vận hành production server.

2. Performance bị giới hạn bởi geography

VPS nằm ở một region duy nhất.

Nếu server ở Singapore, người đọc từ châu Âu sẽ chịu latency cao. Nếu server ở US, người đọc Việt Nam sẽ load chậm.

Bạn có thể thêm CDN phía trước. Nhưng đó là thêm một layer phải quản lý.

3. Chi phí không scale theo giá trị

Một con VPS nhỏ nhất cũng tốn $5–$10/tháng.

Nghe ít. Nhưng cho một static site? Đó là tiền bạn trả để chạy Nginx serve file HTML.

Không có lý do gì để trả $60–$120/năm cho việc đó.

4. Deploy pipeline tự chế

Mỗi lần publish bài mới:

npm run build
scp -r dist/* user@server:/var/www/blog/
ssh user@server "sudo systemctl reload nginx"

Nó hoạt động. Nhưng không có rollback. Không có preview. Không có CI/CD tự động.

Mỗi lần deploy là một lần cầu nguyện.

Tại Sao Chọn Cloudflare Pages?

Mình đánh giá nhiều lựa chọn: Vercel, Netlify, GitHub Pages, Cloudflare Pages.

Cloudflare Pages thắng vì:

  • Free tier cực kỳ rộng rãi — unlimited bandwidth, 500 builds/tháng
  • Edge network toàn cầu — hơn 300 PoP, nội dung được serve từ node gần người đọc nhất
  • Tích hợp sâu với Cloudflare ecosystem — DNS, WAF, Analytics, Workers
  • Deploy từ Git — push lên GitHub, Cloudflare tự build và deploy
  • Preview deployments — mỗi branch có URL riêng để review

Và quan trọng nhất: Mình không phải quản lý server nữa.

Quá Trình Migration

Bước 1: Đảm bảo site build được ở mọi nơi

Trước khi migrate, mình cần chắc chắn rằng npm run build chạy thành công bất kể môi trường.

Kiểm tra:

  • Không có hardcoded path
  • Không phụ thuộc vào biến môi trường chỉ có trên VPS
  • Tất cả asset được reference đúng

Astro build ra static HTML rất sạch, nên bước này khá nhanh.

Bước 2: Kết nối Cloudflare Pages với GitHub

Trên Cloudflare Dashboard:

  1. Tạo project mới trong Pages
  2. Kết nối repository GitHub
  3. Chọn framework preset: Astro
  4. Build command: npm run build
  5. Output directory: dist

Cloudflare tự detect Astro và cấu hình hầu hết mọi thứ.

Từ giờ, mỗi lần push code lên main, Cloudflare sẽ:

  • Pull source code
  • Chạy build
  • Deploy lên edge network toàn cầu

Toàn bộ mất khoảng 30–45 giây.

Bước 3: Chuyển DNS

Domain đã nằm trên Cloudflare DNS sẵn, nên bước này đơn giản:

  • Xoá A record trỏ về IP của VPS
  • Cloudflare Pages tự tạo CNAME record
  • SSL được cấp tự động, không cần Let’s Encrypt

Downtime: 0 giây. Vì DNS đã proxy qua Cloudflare từ trước.

Bước 4: Tắt VPS

Sau khi xác nhận mọi thứ chạy ổn trên Cloudflare Pages:

  • Backup dữ liệu VPS về local
  • Snapshot server (phòng trường hợp cần rollback)
  • Shutdown VPS
  • Sau 1 tuần không vấn đề → xoá hoàn toàn

Cảm giác tắt server giống như bỏ đi một gánh nặng.

Kết Quả Sau Migration

Performance

Trước (VPS ở Singapore):

  • TTFB từ Việt Nam: ~80ms
  • TTFB từ US: ~350ms
  • TTFB từ châu Âu: ~400ms

Sau (Cloudflare Pages):

  • TTFB từ Việt Nam: ~15ms
  • TTFB từ US: ~20ms
  • TTFB từ châu Âu: ~18ms

TTFB giảm trung bình 85–95%.

Lighthouse score: 100/100 Performance trên cả mobile và desktop.

Chi phí

Trước: ~$7/tháng cho VPS Sau: $0/tháng

Free tier của Cloudflare Pages dư sức cho một blog kỹ thuật.

Developer Experience

Trước: SSH, scp, script tự viết, không preview Sau: Git push → auto deploy → preview URL cho mỗi PR

Mỗi pull request có một URL riêng để review trước khi merge. Rollback chỉ cần revert commit.

Những Điều Mình Học Được

Static site không cần server

Nghe hiển nhiên, nhưng rất nhiều người vẫn chạy static site trên VPS.

Nếu output cuối cùng là HTML, CSS, JS — bạn không cần server. Bạn cần CDN.

Edge > Origin

Một server ở Singapore không bao giờ nhanh bằng 300 server trải khắp thế giới.

Edge computing không chỉ là trend. Nó là kiến trúc hợp lý cho content delivery.

Ít quản lý = nhiều thời gian viết

Kể từ khi chuyển sang Cloudflare Pages, mình dành 100% thời gian cho nội dung.

Không còn SSH vào server lúc 2 giờ sáng vì Nginx crash. Không còn lo SSL hết hạn. Không còn kiểm tra disk space.

Thời gian là tài nguyên quý nhất. Và hosting không nên tiêu tốn nó.

Khi Nào Bạn Nên Giữ VPS?

Cloudflare Pages không phải giải pháp cho mọi trường hợp.

Bạn vẫn cần VPS nếu:

  • Chạy backend API, database
  • Cần server-side processing phức tạp
  • Chạy cron job, background worker
  • Cần persistent storage

Nhưng nếu bạn đang chạy một static site, blog, hay documentation trên VPS — hãy xem xét lại.

Bạn có thể đang trả tiền và thời gian cho thứ không cần thiết.

Kết Luận

Chuyển từ VPS sang Cloudflare Pages là một trong những quyết định infrastructure tốt nhất mình từng làm.

Không phải vì công nghệ mới hay trend. Mà vì nó giải quyết đúng vấn đề: serve static content nhanh nhất, rẻ nhất, ít vận hành nhất.

Nếu bạn đang tự hỏi có nên chuyển không — câu trả lời gần như luôn là có.

Build site. Push code. Để Cloudflare lo phần còn lại.

Nhắn qua Telegram