Việc chuyển sang tự quản trị VPS Ubuntu với LEMP (Nginx, MariaDB, PHP) chính là bước ngoặt giúp website WordPress của bạn tải dưới 1 giây. Không cần Control Panel nặng nề, hệ thống sẽ chạy mượt mà và bảo mật tối đa khi tự tối ưu bằng tay.
Tóm tắt nhanh
Bộ khung thông số kỹ thuật chuẩn nhất cho LEMP stack cài đặt WordPress trong năm 2026:
- Hệ điều hành: Ubuntu 22.04 trở lên.
- Web Server: Nginx (bản Stable mới nhất).
- Database: MariaDB Server (bảo mật hơn MySQL truyền thống).
- PHP Engine: PHP 8.3-FPM hoặc 8.4-FPM (kèm module tối ưu cache).
- Bảo mật bắt buộc: SSL Let’s Encrypt (HTTPS) và phân quyền chặt chẽ cho user
www-data.
1. Chuẩn bị VPS Ubuntu và các cấu hình ban đầu
Cài WordPress bằng LEMP yêu cầu VPS chạy Ubuntu LTS, có quyền root (hoặc sudo) và một tên miền đã trỏ bản ghi A về IP VPS.
Thao tác:
- SSH vào VPS qua Terminal/MobaXterm/PuTTY.
- Cập nhật toàn bộ package hệ thống để tránh xung đột thư viện:
sudo apt update && sudo apt upgrade -y
- Cài đặt công cụ bổ trợ:
sudo apt install curl wget nano unzip -y
2. Cài đặt và tối ưu Web Server Nginx
Nginx là web server hoạt động theo cơ chế hướng sự kiện (event-driven). Khi kết hợp với WordPress, nó xử lý đồng thời hàng nghìn kết nối mà tiêu thụ RAM/CPU cực thấp so với Apache.
Thao tác:
- Cài đặt Nginx:
sudo apt install nginx -y
- Cấu hình Firewall (UFW) cho phép HTTP và HTTPS:
sudo ufw allow 'Nginx Full'
Xem thêm Hướng dẫn Thiết Lập Tường Lửa Cho VPS, nếu VPS của bạn chưa thiết lập tường lửa UFW trước đó.
- Kiểm tra trạng thái Nginx:
sudo systemctl status nginx
Mẹo: Mở trình duyệt, truy cập địa chỉ IP VPS. Nếu thấy trang chào mừng “Welcome to nginx!” là thành công.
3. Cài đặt MariaDB và tạo Database cho WordPress
MariaDB là nhánh mã nguồn mở từ MySQL, cho tốc độ truy vấn nhanh và bảo mật nghiêm ngặt hơn. Đây là lựa chọn tối ưu nhất cho WordPress trên VPS Linux.
Thao tác:
- Cài đặt MariaDB:
sudo apt install mariadb-server mariadb-client -y
- Chạy script bảo mật (Đặt mật khẩu root, xóa user ẩn danh, tắt remote login root):
sudo mysql_secure_installation
- Đăng nhập MariaDB và tạo database cho WordPress:
sudo mysql -u root -p
Chạy tuần tự các lệnh SQL (Nhớ thay mật khẩu thật phức tạp vào mat_khau_bao_mat):
CREATE DATABASE wordpress_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'mat_khau_bao_mat';
GRANT ALL ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
4. Cấu hình PHP 8.3-FPM để biên dịch mã nguồn
PHP-FPM (FastCGI Process Manager) được thiết kế riêng cho web server tải cao. Nó tách biệt xử lý script PHP khỏi file tĩnh, giúp web không bị quá tải khi truy cập đột biến.
Thao tác:
- Thêm PPA và cài đặt PHP 8.3 cùng các extension bắt buộc:
Chạy lần lượt các lệnh sau:
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-intl php8.3-mbstring php8.3-soap php8.3-xml php8.3-xmlrpc php8.3-zip -y
- Tinh chỉnh file
php.iniđể tránh lỗi cạn kiệt tài nguyên hoặc không upload được file lớn. Mở file/etc/php/8.3/fpm/php.inivà sửa các dòng sau:
Lệnh mở file: sudo nano /etc/php/8.3/fpm/php.ini
Sửa các dòng sau:
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 300
Bạn có thể dùng phím tắt Ctrl + W để tìm kiếm. Sau khi chỉnh sửa xong, sử dụng phím tắt Ctrl + O để lưu file > Enter để xác nhận > Ctrl + X để thoát.
- Khởi động lại PHP-FPM:
sudo systemctl restart php8.3-fpm
5. Tải và thiết lập mã nguồn WordPress chuẩn bảo mật
Mã nguồn WordPress bắt buộc phải tải từ trang chủ để tránh mã độc. Quyền sở hữu thư mục phải giao cho user www-data để cập nhật tự động hoạt động mượt mà mà không lộ quyền root.
Thao tác:
- Di chuyển đến thư mục web, tải và giải nén WordPress:
Chạy lần lượt các lệnh sau:
cd /var/www/
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xvzf latest.tar.gz
rm latest.tar.gz
- Tạo file cấu hình từ file mẫu:
cd /var/www/wordpress
sudo cp wp-config-sample.php wp-config.php
- Chỉnh sửa
wp-config.php, điền thông tin database đã tạo ở Bước 3, đồng thời truy cập API của WordPress để lấy mã Salt thay thế vào phần tương ứng. - Phân quyền bảo mật tối đa:
sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress/ -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress/ -type f -exec chmod 644 {} \;
6. Tạo Server Block Nginx để nhận diện tên miền
Server Block định tuyến lưu lượng truy cập. Khi có yêu cầu gửi tới tên miền, Nginx sẽ đọc file này để biết cần lấy mã nguồn WordPress từ thư mục nào để hiển thị.
Thao tác:
- Tạo file cấu hình mới:
sudo nano /etc/nginx/sites-available/yourdomain.com
- Dán mẫu cấu hình chuẩn sau (thay
yourdomain.combằng tên miền của bạn):
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/wordpress;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
# Chặn truy cập file nhạy cảm
location ~ /\.(htaccess|htpasswd) { deny all; }
location ~ /xmlrpc.php { deny all; }
}
- Kích hoạt cấu hình và kiểm tra:
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
7. Cài đặt chứng chỉ SSL Let’s Encrypt miễn phí
SSL mã hóa dữ liệu truyền tải giữa trình duyệt và VPS, tránh cảnh báo nguy hiểm và tối ưu thứ hạng SEO. Đây là tiêu chuẩn bắt buộc cho mọi website hiện đại.
Thao tác:
- Cài đặt Certbot và plugin Nginx:
sudo apt install certbot python3-certbot-nginx -y
- Cấp phát và tự động cấu hình SSL:
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- Thiết lập tự động gia hạn (SSL chỉ có hiệu lực 90 ngày):
sudo crontab -e
Thêm dòng: 0 3 * * * certbot renew --quiet
Hỏi đáp nhanh về lỗi thường gặp (FAQ)
Tại sao website WordPress gặp lỗi “Error Establishing a Database Connection”?
Lỗi này do WordPress không kết nối được tới MariaDB. Hãy kiểm tra lại tên Database, User, Mật khẩu và Hostname (localhost) trong file wp-config.php. Đồng thời đảm bảo dịch vụ MariaDB đang chạy: sudo systemctl status mariadb.
Tại sao WordPress yêu cầu tài khoản FTP khi cài Plugin/Theme?
Lỗi này do Nginx không có quyền ghi vào thư mục WordPress. Chạy lệnh sau để phân quyền lại: sudo chown -R www-data:www-data /var/www/wordpress.
Làm thế nào để tăng dung lượng upload file cho WordPress trên LEMP?
Bạn cần sửa ở 2 nơi:
- Tăng
upload_max_filesizevàpost_max_sizetrong filephp.inicủa PHP-FPM, rồi khởi động lại PHP. - Thêm dòng
client_max_body_size 64M;vào blockhttphoặcservercủa cấu hình Nginx, rồi reload lại Nginx.
Checklist rà soát an toàn hệ thống trước khi chạy chính thức
Trước khi đưa website lên môi trường production, hãy đảm bảo bạn đã hoàn thành các mục sau:
- Đã tắt quyền đăng nhập trực tiếp bằng tài khoản
rootqua SSH? - Đã bật tường lửa UFW và chỉ mở các cổng cần thiết (22, 80, 443)?
- Mật khẩu database và tài khoản Admin WordPress đã đủ phức tạp (trên 12 ký tự gồm chữ, số, ký tự đặc biệt)?
- Đã thiết lập cơ chế sao lưu (backup) cơ sở dữ liệu và mã nguồn định kỳ cho VPS?
