Chuyển giao blog cá nhân từ Ubuntu 16.04 sang FreeBSD sau 10 năm vận hành

Phần cứng21 tháng 5, 2026·9 phút đọc

Bài viết chia sẻ hành trình nâng cấp máy chủ blog cá nhân từ phiên bản Ubuntu 16.04 đã hết hạn hỗ trợ sang hệ điều hành FreeBSD trên nền tảng VPS Hetzner, mang lại hiệu suất vượt trội và chi phí thấp hơn nhờ sử dụng Jails và Caddy.

Chuyển giao blog cá nhân từ Ubuntu 16.04 sang FreeBSD sau 10 năm vận hành

Chuyển giao blog cá nhân từ Ubuntu 16.04 sang FreeBSD sau 10 năm vận hành

Blog cá nhân của tôi đã chạy trên một VPS tại Digital Ocean hơn mười năm qua. Đó là một máy chủ đặt tại New York, vận hành phiên bản Ubuntu 16.04 LTS. Một phiên bản LTS đã ngừng được hỗ trợ từ ít nhất 5 năm trước. Đã đến lúc phải thay đổi.

Sau khi cân nhắc kỹ lưỡng, tôi quyết định chuyển sang một máy ảo (VM) của Hetzner với cấu hình tốt hơn hẳn máy chủ Ubuntu cũ, giá thành rẻ hơn một nửa và vị trí máy chủ nằm ngay tại quốc gia tôi đang sinh sống. Không chỉ dừng lại ở đó, tôi còn chấp nhận thử thách chuyển đổi toàn bộ stack công nghệ sang FreeBSD. Đây là một câu chuyện dài, nhưng hãy kiên nhẫn để khám phá cách tôi sử dụng FreeBSD Jails với Bastille và những bài kiểm tra hiệu suất thú vị.

Máy chủ dữ liệuMáy chủ dữ liệu

Động lực chuyển đổi

Nếu bạn hiểu cách hoạt động của các bản phát hành Ubuntu (tôi thì không rành lắm), một khi phiên bản đó hết hỗ trợ, kho gói apt cũng sẽ "chết" theo, nghĩa là bạn không thể nhận được bất kỳ bản cập nhật nào nữa. Việc vận hành một hệ thống quá cũ kỹ mang lại nhiều rủi ro, trong đó rõ ràng nhất là vấn đề bảo mật. Có rất nhiều bot tự động đang quét mạng để tìm các nút có lỗ hổng nhằm cài mã độc lên đó.

May mắn là (tôi nghĩ), chưa có gì xấu xảy ra. Dù thực ra cũng chẳng có gì quan trọng để đánh cắp cả. Tuy nhiên, tôi vẫn nhớ về một blog WordPress khác của mình từng chạy trên VPS cũ, bỗng nhiên xuất hiện hàng loạt liên kết đáng ngờ đến các trang cờ bạc và sòng bài rải rác trong bài viết.

Tôi đã từng sử dụng VPS của Hetzner làm máy phát triển từ xa (remote dev machine) và kết nối qua SSH từ bất cứ đâu. Nó là một VPS đáng tin cậy với mức giá rất tốt. Vì vậy, tôi quyết định bắt đầu bằng việc so sánh thông số kỹ thuật.

So sánh phần cứng: Digital Ocean vs Hetzner

Dưới đây là cấu hình của droplet cũ đang chạy blog và các trang web khác của tôi:

  • Máy chủ cũ Digital Ocean: 2GB RAM, 1 vCPU, 50GB dung lượng ổ cứng, 2TB băng thông hàng tháng, chạy Ubuntu 16.04 x64 tại New York. Giá: 13 USD/tháng.

Hetzner là một công ty công nghệ lớn của châu Âu với các trung tâm dữ liệu khổng lồ tại Đức, nơi tôi đang sống. Máy chủ rẻ nhất của Hetzner chỉ có giá 3,56 Euro nhưng đã tốt hơn máy chủ cũ của tôi rất nhiều:

  • Máy chủ Hetzner cơ bản: Gấp đôi RAM và CPU, dung lượng lưu trữ hơi thấp hơn một chút nhưng băng thông gấp 10 lần.

Tuy nhiên, tôi quyết định chọn một cấu hình "xịn" hơn một chút với giá dưới 6 Euro/tháng:

  • Máy chủ Hetzner nâng cấp: 4 vCPU, 8GB RAM, 160GB NVMe SSD, 20TB băng thông.

Có thể nó hơi quá mức cần thiết cho các trang web của tôi, nhưng tại sao không nhỉ?

Cấu hình hệ thốngCấu hình hệ thống

Tại sao lại là FreeBSD?

Thú thật, một trong những động lực chính là tôi muốn thử nghiệm cái gì đó mới mẻ. Tôi đã đọc và xem rất nhiều nội dung về các hệ điều hành BSD, và có một chút kinh nghiệm ngắn ngủi với FreeBSD trước đây, nên tôi nghĩ đây là cơ hội tốt để đưa nó vào thử nghiệm thực tế. FreeBSD thường được ca ngợi về sự ổn định nhờ thiết kế tích hợp, tính bảo mật và Jails.

Khi đọc về Jails, tôi biết ngay mình muốn làm gì. Jails là một hình thức ảo hóa/container hóa đã là một phần của FreeBSD hơn 25 năm, từ trước cả khi Docker ra đời. Nó hoạt động giống như một container Docker: sandbox một "hệ thống con" bên trong để bạn có thể chạy các ứng dụng không có quyền truy cập vào hệ thống chủ. Sự khác biệt chính là Docker và các giải pháp container khác phù hợp hơn để "đóng gói chương trình" (ephemeral và immutable), trong khi Jails thực sự là các hệ thống con, gần như các mini-VM, nhưng chia sẻ cùng một nhân (kernel).

Ngoài ra, hệ thống tệp của nó, ZFS, thực sự rất tốt và hữu ích cho máy chủ. Nếu bạn đến từ thế giới Linux, có lẽ bạn đã nghe nói về Btrfs. ZFS có những điểm tương đồng như tính toàn vẹn dữ liệu và snapshot, nhưng ZFS trưởng thành hơn Btrfs rất nhiều. Nếu tôi chụp snapshot thường xuyên cho hệ thống, tôi không cần phụ thuộc vào tính năng snapshot hay sao lưu của nhà cung cấp VPS (mà phải trả thêm phí).

Ý tưởng của tôi là có một Jail riêng cho từng trang web với các công cụ cần thiết để xây dựng (như Hugo cho blog) và một phiên bản nginx để phục vụ nội dung. Và một Jail dành cho máy chủ web chính kết nối tất cả chúng với thế giới bên ngoài qua reverse proxy. Cách này, nếu một Jail bị tấn công, tôi chỉ cần xóa nó và tạo cái mới.

Thiết lập trên Hetzner

Hetzner cung cấp một số hình ảnh khi tạo VM, nhưng lựa chọn khá hạn chế và không có BSD sẵn. Tuy nhiên, họ cung cấp hình ảnh ISO. Tôi chọn FreeBSD 14.3, cài đặt theo hướng dẫn từ kênh YouTube chính thức của FreeBSD và rất nhanh hệ thống đã sẵn sàng.

Quản lý Jails với Bastille

Tôi sử dụng Bastille, một hệ thống giúp quản lý Jails dễ dàng hơn. Việc tạo Jails thủ công khá phức tạp với nhiều bước khác nhau, nhưng Bastille đơn giản hóa mọi thứ chỉ với một dòng lệnh như bastille create hay bastille console.

Kiến trúc Stack

Toàn bộ ý tưởng là có một Jail chạy Caddy để phục vụ tất cả các trang web, xử lý tên miền và chứng chỉ SSL. Sau đó, mỗi trang web sẽ có Jail riêng với các công cụ cần thiết. Jail máy chủ sẽ reverse proxy toàn bộ lưu lượng truy cập đến các Jail tương ứng.

Để thiết lập, tôi cấu hình một bộ điều hợp mạng ảo bastille0 và sử dụng PF (Packet Filter) - tường lửa của FreeBSD - để định tuyến lưu lượng. Cấu hình PF cho phép Jail truy cập internet và chuyển tiếp lưu lượng HTTP/HTTPS (cổng 80, 443) đến IP nội bộ của Jail Caddy (10.0.0.5).

Tạo Jail đầu tiên: Caddy Server

Máy chủ cũ của tôi chạy nginx. Tuy nhiên, nginx có một điểm phiền toái là việc gia hạn chứng chỉ SSL với certbot. Caddy giải quyết vấn đề này một cách tự động.

Tôi tạo một Jail tên là caddy với IP 10.0.0.5, cài đặt Caddy và kích hoạt nó. Để dễ quản lý, tôi mount thư mục cấu hình từ hệ thống chủ vào Jail ở chế độ chỉ đọc (read-only).

Triển khai trang web đầu tiên và Blog

Trang web đầu tiên tôi chuyển là es.cro.to - một trang đơn giản. Tôi tạo một Jail riêng cho nó, sử dụng template nginx của Bastille. Quy trình triển khai của tôi khá đơn giản: lưu mã nguồn trên hệ thống chủ, mount vào Jail, và sử dụng một script deploy.sh để sao chép nội dung vào thư mục nginx của Jail.

Tiếp theo, tôi chuyển blog này (sử dụng Hugo). Tương tự, tôi tạo một Jail blog, cài đặt Hugo và cấu hình reverse proxy trên Caddy để trỏ đến IP của Jail blog.

Benchmarking: So sánh hiệu suất

Trước khi cập nhật DNS, tôi muốn kiểm tra xem máy chủ mới có chịu tải được không. Tôi sử dụng các công cụ như wrkhey để kiểm tra tải.

Kết quả ban đầu từ một VPS khác trong cùng trung tâm dữ liệu Hetzner cho thấy sự chênh lệch khổng lồ:

  • Máy chủ cũ (Ubuntu): ~833 yêu cầu/giây.
  • Máy chủ mới (FreeBSD): ~12.260 yêu cầu/giây.

Tuy nhiên, đây là bài kiểm tra trong cùng mạng nội bộ. Để có kết quả khách quan hơn, tôi thuê các VPS của Vultr tại London, São Paulo, Silicon Valley và Tokyo để chạy bài kiểm tra từ nhiều địa điểm trên thế giới.

Kết quả benchmarkKết quả benchmark

Tôi đã gặp một vấn đề nhỏ khi máy chủ FreeBSD mới không xử lý được 10.000 kết nối đồng thời do cấu hình mặc định của kern.ipc.somaxconn. Sau khi tăng thông số này lên 16384, máy chủ hoạt động trơn tru.

Kết quả từ Vultr thật ấn tượng:

  • Máy chủ cũ (Ubuntu) chỉ hoàn thành khoảng 7% tổng số yêu cầu trong bài kiểm tra nặng.
  • Máy chủ mới (FreeBSD) hoàn thành 94% yêu cầu.
  • Về số yêu cầu mỗi giây (Requests/sec), máy chủ mới tốt hơn từ 3 đến 11 lần tùy theo địa điểm.
  • Độ trễ (Latency) của máy chủ mới cũng ổn định và thấp hơn đáng kể, đặc biệt là ở mức p90 (90% người dùng trải nghiệm độ trễ thấp hơn mức đó).

Kết luận

Tôi không nghĩ sự khác biệt này hoàn toàn do stack tôi chọn (FreeBSD vs Linux), mà một phần lớn do cấu hình sai trên hệ thống Ubuntu cũ và việc máy chủ Hetzner mới có 4 nhân CPU so với 1 nhân của DigitalOcean. Tuy nhiên, việc chuyển đổi sang FreeBSD là một trải nghiệm học tập tuyệt vời.

Một số bài học rút ra:

  • Máy chủ Ubuntu cũ thực sự rất "trâu bò", đã chạy tốt trong 10 năm, 4 năm cuối không cần khởi động lại.
  • Cấu hình FreeBSD dễ dàng hơn tôi tưởng. Tôi thích việc tập trung cấu hình hệ thống ở một nơi và tài liệu trực tuyến của nó rất tốt.
  • Việc tự cấu hình máy chủ để host blog đòi hỏi nhiều kiến thức về mạng hơn tôi nghĩ.

Cuối cùng, sau nhiều giờ thử nghiệm, sửa chữa và xây dựng, tôi rất hài lòng với kết quả. Blog hiện đang chạy chính thức trên máy chủ FreeBSD mới này. Có thể lần sau tôi sẽ thử OpenBSD hoặc NetBSD, nhưng hiện tại, tôi đang rất tận hưởng FreeBSD.

Hệ điều hành FreeBSDHệ điều hành FreeBSD

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗