Quy trình 6 bước chuyển website WordPress về CloudFly (Hosting & VPS) mượt mà, Zero Downtime
Quy trình 6 bước chuyển website WordPress về CloudFly (Cloud Hosting & VPS) không gián đoạn: hạ DNS TTL, test ngầm bằng hosts file và săn mã giảm tới 70%.
Hướng dẫn cài đặt PHP 8.3 (PHP-FPM) và MariaDB 10.11 trên Ubuntu 24.04 cho WordPress: kiểm tra service, Unix socket, extension và phân biệt PHP CLI.
Gõ php -v thấy chạy ngon lành không có nghĩa là website hết lỗi 502; với NGINX, thứ quyết định sự sống còn của WordPress là dịch vụ PHP-FPM, file Unix socket và kết nối nội bộ tới MariaDB.
Phạm vi thực hành: Hệ điều hành Ubuntu 24.04 LTS trên VPS độc lập; tên miền lab sử dụng là
lab-cf02.localhost.vn. Bạn chỉ nên thực hiện thay đổi trên các tài sản thuộc quyền quản lý của mình. Phần số liệu thực nghiệm trong bài bao gồm trạng thái PHP và MariaDB sau khi cài đặt ngày 30/09/2026, bài đối chiếu thực tế giữa PHP CLI với PHP-FPM trên trang clone nội bộ lúc 04:28 ngày 01/10 và ảnh chụp màn hình console lúc 08:58 cùng ngày (chỉ đọc trạng thái dịch vụ, không cài đặt đè hay khởi động lại hệ thống).
Nếu ví NGINX như anh lễ tân nhanh nhẹn đứng ở sảnh khách sạn chuyên đón khách và phát tờ rơi tĩnh (HTML, CSS, ảnh), thì bản thân anh lễ tân này hoàn toàn không biết nấu ăn — tức không tự thực thi được mã nguồn động của WordPress. Để biến một máy chủ tĩnh thành một hệ thống LEMP hoàn chỉnh, bạn cần cài đặt PHP và MariaDB trên Ubuntu: trong đó PHP-FPM đóng vai trò bếp trưởng đứng sau hậu trường chế biến các file .php, còn MariaDB là kho lương thực lưu trữ toàn bộ bài viết, tài khoản người dùng và cấu hình hệ thống. Bài viết này sẽ hướng dẫn bạn lắp ghép hai mảnh ghép quan trọng đó và kiểm tra từng khớp nối trước khi đổ mã nguồn WordPress vào.
Xuyên suốt chuỗi bài thực hành này, chúng ta sử dụng hệ điều hành Ubuntu 24.04 LTS (Noble Numbat) đi kèm cặp bài trùng có sẵn trong kho gói mặc định của Ubuntu: PHP 8.3 và MariaDB 10.11 LTS. Các con số bản vá nhỏ phía sau (như 8.3.6 hay 10.11.14) có thể tăng lên theo lịch cập nhật bảo mật định kỳ của Ubuntu. Bí quyết của người làm hệ thống chuyên nghiệp là luôn kiểm tra phiên bản thực tế trên máy và đối chiếu với bảng yêu cầu kỹ thuật của WordPress cùng các plugin dự định dùng, chứ không bao giờ ép hạ cấp gói chỉ để con số hiện trên màn hình giống hệt một bức ảnh chụp cũ trên mạng.
Trên chiếc VPS thử nghiệm đã có sẵn tài khoản sudo và dịch vụ NGINX đang chạy, bạn hãy mở đầu bằng việc xác nhận phiên bản hệ điều hành cùng nguồn cung cấp gói phần mềm (repository):
cat /etc/os-release
apt-cache policy php8.3-fpm mariadb-server
Lệnh apt-cache policy giúp bạn nhìn rõ gói php8.3-fpm và mariadb-server sẽ được tải về từ kho chính thức của Ubuntu hay từ một kho PPA bên thứ ba nào khác. Nếu bạn đang thực hành trên một máy chủ mới tinh chưa có dữ liệu thì mọi chuyện rất nhẹ nhàng; còn nếu thao tác trên một VPS đã có sẵn cơ sở dữ liệu đang chạy, hãy dừng lại sao lưu toàn bộ dữ liệu (backup) trước khi gõ bất kỳ lệnh cài đặt nào.

Sơ đồ sự phối hợp nhịp nhàng giữa ba trụ cột của WordPress trên nền tảng LEMP (NGINX — PHP-FPM — MariaDB) thông qua các kết nối Unix socket nội bộ.
sudo apt update &&
sudo apt install php8.3-fpm php8.3-cli php8.3-mysql \
php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml \
php8.3-zip php8.3-intl mariadb-server
Một sai lầm rất hài hước của anh em mới chuyển từ Apache sang NGINX là cứ quen tay gõ sudo apt install php! Khi bạn chỉ gõ php khơi khơi như vậy, hệ thống quản lý gói thường sẽ lôi cả ông kễnh apache2 và mô-đun libapache2-mod-php về cài đè lên máy, gây tranh chấp cổng 80 với NGINX ngay lập tức. Với NGINX, bạn bắt buộc phải chỉ định rõ gói php8.3-fpm (FastCGI Process Manager). Trong danh sách cài đặt ở trên, gói php8.3-mysql cung cấp trình điều khiển mysqli và pdo_mysql để PHP nói chuyện được với MariaDB; còn dàn hảo hán curl, gd, mbstring, xml, zip, intl là những thư viện cốt lõi giúp WordPress cắt ảnh thumbnail, xử lý tiếng Việt có dấu, giải nén plugin và gọi API ra bên ngoài.
Sau này nếu bạn cài thêm các plugin chuyên biệt (như WooCommerce hay plugin xử lý ảnh nâng cao yêu cầu imagick, soap, bcmath), bạn chỉ cần đọc tài liệu của plugin đó rồi cài bổ sung đúng gói php8.3-ten-extension tương ứng là xong.
sudo systemctl enable --now php8.3-fpm mariadb &&
systemctl is-active php8.3-fpm mariadb
php -v
php -m
mariadb --version
sudo php-fpm8.3 -t
Hãy nhìn kỹ kết quả của lệnh systemctl is-active: cả hai dòng trả về đều phải hiện chữ active rõ ràng. Đừng bao giờ mắc vào cái bẫy tâm lý: thấy gõ php -v hiện ra phiên bản PHP 8.3 đẹp đẽ rồi yên tâm rằng PHP trên web đã chạy! Lệnh php -v và php -m thực chất chỉ đang hỏi chương trình PHP CLI (Command Line Interface) dành cho cửa sổ dòng lệnh. Trên một máy chủ từng cài nhiều phiên bản PHP (ví dụ vừa có 8.1, 8.2 vừa có 8.3), chuyện PHP CLI báo bản 8.3 nhưng dịch vụ php8.3-fpm đang nằm đắp chiếu (hoặc NGINX đang trỏ nhầm vào socket của bản 8.1) xảy ra như cơm bữa!
Tương tự, lệnh mariadb --version ngoài dòng lệnh chỉ mới cho biết phiên bản của phần mềm công cụ kết nối (client). Để xác nhận chính xác động cơ MariaDB Server đang thực sự sống khỏe và chạy phiên bản bao nhiêu, bạn hãy gõ một câu truy vấn SQL trực tiếp nhưng hoàn toàn không đụng chạm đến dữ liệu người dùng:
sudo mariadb -e 'SELECT VERSION();'
Nếu câu lệnh trên in ra bảng chứa số phiên bản kiểu 10.11.14-MariaDB... ngay lập tức, nghĩa là dịch vụ cơ sở dữ liệu đã khởi chạy thành công. Còn nếu chẳng may một trong hai dịch vụ báo failed hoặc inactive, đừng vội vàng gỡ ra cài lại trong vô vọng; hãy dùng lệnh sudo journalctl -u php8.3-fpm -u mariadb -n 80 --no-pager để đọc nhật ký hệ thống xem nó đang kêu cứu vì thiếu dung lượng ổ cứng, hết RAM hay lỗi cú pháp cấu hình.
ls -l /run/php/
sudo grep -nE '^(user|group|listen|listen.owner|listen.group)' \
/etc/php/8.3/fpm/pool.d/www.conf
Trên Ubuntu 24.04 với cấu hình mặc định, tiến trình php8.3-fpm sẽ tạo ra một điểm giao tiếp nội bộ gọi là Unix Domain Socket tại đường dẫn /run/php/php8.3-fpm.sock, được quản lý bởi pool mặc định (www.conf) dưới danh nghĩa tài khoản và nhóm www-data. Nhiệm vụ của bạn là phải tận mắt nhìn thấy file .sock này xuất hiện trong kết quả lệnh ls -l /run/php/ và có chữ cái s đứng đầu chuỗi phân quyền (ví dụ: srw-rw----).
Tại sao phải soi kỹ chữ s và quyền www-data đến vậy? Bởi vì 90% các vụ lỗi 502 Bad Gateway kinh hoàng trên NGINX đều xuất phát từ chỗ này: hoặc là dịch vụ php8.3-fpm bị tắt nên file socket biến mất, hoặc trong cấu hình NGINX bạn copy trên mạng lại viết fastcgi_pass unix:/run/php/php8.1-fpm.sock; (lệch phiên bản!), hoặc bạn đổi user chạy pool FPM sang tên khác khiến các worker của NGINX (vốn chạy dưới quyền www-data) bị từ chối quyền ghi vào socket. Lưu ý: nếu không thấy file .sock, tuyệt đối đừng bao giờ dùng lệnh touch để tự tạo một file văn bản rỗng cùng tên nhé — file rỗng không phải là đường ống socket do tiến trình FPM tạo ra đâu!
Vào lúc 08:58:42–43 ngày 01/10/2026 (giờ Việt Nam), màn hình console CloudFly của máy chủ localhost-tutorial-lab-02 ghi nhận rõ ràng cả hai dịch vụ php8.3-fpm và mariadb đều đang ở trạng thái active, phiên bản PHP CLI là 8.3.6. File socket /run/php/php8.3-fpm.sock thuộc quyền sở hữu của www-data:www-data với chuỗi phân quyền chuẩn srw-rw----, và lệnh kiểm tra cấu hình php-fpm8.3 -t báo test is successful:
Ảnh chụp console thực tế ngày 01/10/2026 lúc 08:58:42–43 (UTC+7); vùng hiển thị kết quả được giữ nguyên vẹn từng pixel và chỉ gắn thêm dải logo ở chân ảnh. Bấm vào ảnh để xem kích thước lớn.
Trong phần kết quả của lệnh mariadb -e status ở nửa dưới bức ảnh, bạn có thể đọc thấy dòng Server version: 10.11.14-MariaDB-0ubuntu0.24.04.1 Ubuntu 24.04 và phương thức kết nối quản trị đang đi qua Unix socket /run/mysqld/mysqld.sock. Một chi tiết nhỏ dễ gây hiểu lầm cho người mới: dòng chữ SSL: Not in use bên trong bảng trạng thái MariaDB chỉ đơn thuần báo rằng kết nối nội bộ qua Unix socket giữa dòng lệnh quản trị và database trên cùng một máy không dùng lớp bọc SSL — nó hoàn toàn không liên quan gì đến việc trang web bên ngoài của bạn có chứng chỉ HTTPS hay không!

Sơ đồ phân biệt đúng công cụ để kiểm tra phiên bản của từng thành phần (PHP CLI, PHP-FPM cho Web và MariaDB Server) do đội ngũ localhost.vn biên soạn.
sudo ss -ltnp '( sport = :3306 )'
sudo mariadb -e "SHOW VARIABLES LIKE 'bind_address';"
Khi chạy hai lệnh kiểm tra trên, kết quả đẹp nhất mà một kỹ sư bảo mật mong đợi là thấy cổng 3306 chỉ lắng nghe tại địa chỉ nội bộ 127.0.0.1:3306 và biến cấu hình bind_address mang giá trị 127.0.0.1. Khi cả NGINX, PHP-FPM và MariaDB cùng chung sống dưới một mái nhà VPS, mọi truy vấn lấy bài viết hay lưu bình luận của WordPress đều diễn ra hoàn toàn bên trong máy chủ. Bạn tuyệt đối không cần (và không bao giờ nên) mở cổng 3306 trên tường lửa UFW hay Cloud Firewall ra ngoài Internet công cộng, trừ phi bạn muốn mời các bot dò mật khẩu tự động khắp thế giới ghé thăm cơ sở dữ liệu của mình mỗi giây.
Về cơ chế đăng nhập quản trị tối cao (root) của MariaDB trên Ubuntu 24.04 hiện đại: mặc định hệ thống sử dụng plugin xác thực unix_socket. Nghĩa là chỉ cần bạn đang đăng nhập tài khoản Linux có quyền sudo và gõ sudo mariadb, hệ điều hành sẽ tự động đối chiếu danh tính hệ thống để cho bạn vào thẳng quyền root@localhost của database mà không cần lưu mật khẩu văn bản thuần ở đâu cả. Đây là cơ chế cực kỳ an toàn và văn minh — bạn đừng nghe theo các bài hướng dẫn cũ kỹ cách đây chục năm mà đi phá bỏ xác thực unix_socket của tài khoản root nhé! Để phục vụ cho WordPress, sang Bài 38 chúng ta sẽ tạo một tài khoản database riêng biệt, chỉ có quyền trên đúng bảng dữ liệu của website đó mà thôi.
Ở thời điểm hiện tại của lộ trình, mục tiêu của bạn là xác nhận chắc chắn 4 yếu tố: dịch vụ php8.3-fpm và mariadb đang chạy active, thư viện mysqli đã được nạp, MariaDB trả về đúng phiên bản Server và file socket /run/php/php8.3-fpm.sock đã sẵn sàng. Sang Bài 38 chúng ta mới tạo database/user riêng, và Bài 37/39 sẽ ghép nối chúng vào cấu hình NGINX thực tế của WordPress.
Một lời dặn dò cực kỳ nghiêm túc: rất nhiều người có thói quen tạo một file phpinfo.php (chứa hàm <?php phpinfo(); ?>) vứt ngay trong thư mục gốc của website công khai để xem cấu hình rồi… quên luôn không xóa! Trang phpinfo() phơi bày toàn bộ đường dẫn hệ thống, biến môi trường, các module và thông tin nhạy cảm của máy chủ cho bất kỳ ai quét trúng. Vì vậy, trong đợt thực nghiệm dưới đây, chúng tôi chỉ dùng một đoạn mã PHP tối giản trả về đúng định dạng JSON trên một cổng nội bộ 127.0.0.1:8081 rồi lập tức xóa bỏ file ngay sau khi đọc kết quả.
Về mặt kỹ thuật, hằng số PHP_SAPI hoặc hàm php_sapi_name() sẽ cho biết môi trường giao tiếp hiện tại của PHP là dòng lệnh (cli) hay là tiến trình phục vụ web (fpm-fcgi). Kết hợp cùng hàm extension_loaded() trả về giá trị đúng/sai (true/false), bạn có thể kiểm chứng 100% rằng chính tiến trình PHP-FPM đứng sau NGINX đã nạp đủ các thư viện cần thiết cho WordPress chứ không chỉ riêng PHP CLI.
| Triệu chứng gặp phải | Hạng mục cần kiểm tra trước tiên | Hành động sai lầm cần tránh |
|---|---|---|
Gõ php -v chạy tốt nhưng mở web báo lỗi 502 Bad Gateway |
Trạng thái service php8.3-fpm, đường dẫn file .sock và quyền www-data |
Xóa đi cài lại mã nguồn WordPress |
WordPress báo lỗi thiếu thư viện mysqli |
Kiểm tra gói php8.3-mysql đã cài cho đúng phiên bản FPM đang chạy chưa |
Mở toang cổng 3306 ra ngoài Internet |
Dịch vụ MariaDB không thể khởi động (failed) |
Đọc log bằng journalctl -u mariadb, kiểm tra dung lượng đĩa cứng df -h |
Xóa bừa thư mục dữ liệu /var/lib/mysql |
| Website nhận sai phiên bản PHP so với lệnh trên Terminal | Soi dòng fastcgi_pass trong Server Block NGINX đang trỏ vào socket nào |
Chỉ chạy update-alternatives đổi mỗi PHP CLI |
Khi chỉnh sửa bất kỳ thông số nào trong file cấu hình php.ini hoặc file pool www.conf của PHP-FPM, bạn hãy luôn tạo bản sao lưu trước, sau đó chạy lệnh kiểm tra cú pháp sudo php-fpm8.3 -t đạt chuẩn rồi mới chạy sudo systemctl reload php8.3-fpm. Đối với MariaDB, hãy đặc biệt cẩn trọng: việc gỡ bỏ gói phần mềm không tự động khôi phục cấu hình cũ, và tuyệt đối không bao giờ xóa thư mục /var/lib/mysql trên máy chủ đang chứa dữ liệu thật!

Sơ đồ tóm tắt 4 quy tắc xử lý sự cố PHP-FPM và MariaDB an toàn do đội ngũ localhost.vn biên soạn.
Hỏi: Có phải cứ cài phiên bản PHP mới nhất vừa ra mắt hôm qua là website chạy nhanh nhất không?
Đáp: Nhanh thì có thể nhanh hơn một chút, nhưng coi chừng… trắng trang! Nhiều theme và plugin WordPress viết từ lâu chưa kịp cập nhật để tương thích với các phiên bản PHP quá mới (vốn hay loại bỏ các hàm cũ deprecated). Lựa chọn khôn ngoan nhất là dùng bản PHP mặc định đi kèm bản Ubuntu LTS hiện tại (như PHP 8.3 trên Ubuntu 24.04) — vừa được Ubuntu hỗ trợ bảo mật dài hạn, vừa có độ tương thích cực kỳ ổn định với hệ sinh thái WordPress.
Hỏi: Tôi có bắt buộc phải cài thêm công cụ quản lý giao diện web phpMyAdmin không?
Đáp: Hoàn toàn không bắt buộc, và thực tế các kỹ sư bảo mật còn khuyên bạn hạn chế cài phpMyAdmin trên máy chủ sản phẩm thật! Việc mở thêm một giao diện đăng nhập database trên web chẳng khác nào treo thêm một tấm biển mời gọi tin tặc vào dò mật khẩu. Chỉ cần vài câu lệnh SQL ngắn gọn qua cửa sổ SSH là bạn đã tạo xong database cho WordPress trong vòng 30 giây mà chẳng tốn thêm chút RAM hay rủi ro bảo mật nào.
Hỏi: Khi nào thì tôi biết mình đã hoàn thành trọn vẹn bước này?
Đáp: Khi bạn đã tận mắt xác nhận cả php8.3-fpm lẫn mariadb đều báo active, file socket /run/php/php8.3-fpm.sock hiện diện đầy đủ, cổng 3306 khóa chặt ở 127.0.0.1 và danh sách thư viện mở rộng đã có mặt đủ 8 cái tên thiết yếu.
Đợt kiểm tra thực tế vào lúc 22:48 (UTC+7) ngày 30/09/2026 trên máy chủ Ubuntu 24.04 LTS (LAB-CF-02) đã ghi nhận toàn bộ thông số vận hành chuẩn xác như sau:
| Hạng mục kiểm tra | Kết quả ghi nhận thực tế trên LAB-CF-02 |
|---|---|
| Phiên bản PHP CLI và gói PHP-FPM | PHP 8.3.6; gói php8.3-fpm phiên bản 8.3.6-0ubuntu0.24.04.11 từ kho chính thức của Ubuntu |
| Trạng thái dịch vụ và cú pháp FPM | Dịch vụ php8.3-fpm ở trạng thái active; lệnh php-fpm8.3 -t báo kiểm tra cú pháp thành công |
| Đường dẫn và phân quyền Socket/Pool FPM | File /run/php/php8.3-fpm.sock tồn tại; cả user, group của pool lẫn chủ sở hữu socket đều là www-data |
| Danh sách Extension trên môi trường CLI | Xác nhận có đủ mysqli, pdo_mysql, curl, gd, mbstring, intl, xml và zip qua lệnh php -m |
| Phiên bản và trạng thái MariaDB Server | Truy vấn SELECT VERSION() trả về 10.11.14-MariaDB-0ubuntu0.24.04.1; dịch vụ ở trạng thái active |
| Phạm vi lắng nghe mạng của MariaDB | Thông số bind_address = 127.0.0.1; cổng lắng nghe thực tế khóa chặt tại 127.0.0.1:3306 |
Để không chỉ dừng lại ở kết quả php -m ngoài dòng lệnh CLI, chúng tôi đã thực hiện thêm một bài đo đối chứng trực tiếp qua tiến trình PHP-FPM đứng sau NGINX ở mục ngay dưới đây.
Vào lúc 04:28:11 (giờ Việt Nam) ngày 01/10/2026, trên máy chủ LAB-CF-02, chúng tôi đã cho thực thi cùng một kịch bản kiểm tra PHP tối giản theo hai con đường: một đường chạy trực tiếp bằng lệnh php dưới tài khoản tutorial (môi trường CLI), và một đường gọi qua HTTP vào Virtual Host nội bộ restore-cf02.test lắng nghe tại địa chỉ loopback 127.0.0.1:8081 (môi trường NGINX + PHP-FPM):
| Thông số đối chiếu | Kết quả chạy qua PHP CLI | Kết quả chạy qua NGINX + PHP-FPM |
|---|---|---|
Phiên bản PHP (PHP_VERSION) |
8.3.6 |
8.3.6 |
Giao diện thực thi (PHP_SAPI) |
cli |
fpm-fcgi |
| Trạng thái phản hồi | Thực thi thành công, xuất chuỗi JSON chuẩn | Mã HTTP 200 OK, trả về chuỗi JSON chuẩn |
Nhóm thư viện mysqli, pdo_mysql, curl, gd |
Cả 4 thư viện đều trả về true |
Cả 4 thư viện đều trả về true |
Nhóm thư viện mbstring, intl, xml, zip |
Cả 4 thư viện đều trả về true |
Cả 4 thư viện đều trả về true |
File kiểm tra tạm thời này được thiết kế cực kỳ an toàn: chỉ in ra đúng số phiên bản, tên giao diện SAPI và 8 giá trị boolean từ hàm extension_loaded(), hoàn toàn không gọi hàm phpinfo() và không để lộ bất kỳ biến môi trường hay thông tin nhạy cảm nào. Ngay sau khi ghi nhận xong kết quả, file kiểm tra đã được xóa bỏ hoàn toàn (truy vấn lại đường dẫn đó lập tức trả về mã 404), và mã băm SHA-256 của các file cấu hình hệ thống giữ nguyên 100%.
Các tài liệu kỹ thuật chính thống được đối chiếu phục vụ bài viết vào ngày 01/10/2026 bao gồm: PHP Manual: php_sapi_name, PHP Manual: extension_loaded và WordPress.org: Server Requirements. Bên cạnh đó, tài liệu Ubuntu Server Docs: How to install PHP và MariaDB Documentation: CREATE USER được tham chiếu theo mốc ngày 30/09/2026.
Sau khi đã nắm chắc phiên bản và danh sách thư viện mở rộng trên cả CLI lẫn PHP-FPM, bạn đã sẵn sàng tiến tới các bài tiếp theo: Cài đặt WordPress trên VPS đến màn hình đăng nhập và Tạo cơ sở dữ liệu cùng tài khoản riêng cho WordPress. Bạn cũng có thể xem lại bài liền trước: Domain chưa trỏ đúng: Quy trình kiểm tra từ Registrar tới Web Server, hoặc tra cứu toàn bộ chuỗi bài tại lộ trình cài đặt WordPress trên VPS từ A đến Z.