Chạy WordPress trên VPS cho bạn toàn quyền cấu hình: chọn phiên bản PHP, chỉnh giới hạn upload, cài thêm bộ nhớ đệm, đặt nhiều website trên cùng một máy. Bài này hướng dẫn cài WordPress lên VPS Ubuntu theo cách thủ công với bộ LEMP (Linux, Nginx, MariaDB, PHP). Làm một lần, bạn sẽ hiểu website của mình đang chạy thế nào và dễ tự sửa khi có sự cố.
Tóm tắt các bước:
- Cài Nginx, MariaDB và PHP-FPM cùng các extension WordPress cần.
- Tạo database và user riêng cho WordPress.
- Tải WordPress, chép vào thư mục web, phân quyền.
- Tạo cấu hình Nginx cho tên miền.
- Chạy trình cài đặt WordPress trên trình duyệt.
- Bật HTTPS bằng Let's Encrypt.
Chuẩn bị: VPS chạy Ubuntu 22.04 trở lên, đã đăng nhập được bằng SSH (xem kết nối VPS Linux qua SSH), và một tên miền đã trỏ về IP VPS (xem trỏ tên miền về VPS và cài SSL). Bài dùng tên miền mẫu example.com. Các lệnh viết cho tài khoản root; nếu bạn dùng user thường có quyền sudo, thêm sudo vào trước mỗi lệnh.
Nếu ngại gõ lệnh, bạn có thể dùng control panel có giao diện web như aaPanel để cài WordPress bằng vài cú click. Cách thủ công trong bài này nhẹ hơn, không tốn tài nguyên cho panel, và giúp bạn hiểu rõ từng thành phần.
Bước 1: Cài Nginx, MariaDB và PHP
Cập nhật danh sách gói rồi cài đủ bộ trong một lệnh:
apt update
apt install -y nginx mariadb-server php-fpm php-mysql \
php-curl php-gd php-mbstring php-xml php-zip php-intl
Các gói php-* phía sau là extension WordPress và các plugin phổ biến cần: kết nối database, xử lý ảnh, chuỗi Unicode, XML, nén file. Cài xong, kiểm tra phiên bản PHP:
php -v

Nên chạy thêm lệnh bảo mật cơ bản cho MariaDB (xoá user ẩn danh, database test):
mysql_secure_installation
Với các câu hỏi, nếu không chắc bạn cứ chọn mặc định. Câu "Switch to unix_socket authentication" có thể trả lời n vì Ubuntu đã dùng sẵn cơ chế này cho root.
Bước 2: Tạo database cho WordPress
Mở trình quản lý MariaDB:
mariadb
Chạy lần lượt các câu lệnh SQL sau. Thay MatKhauManh bằng mật khẩu thật của bạn và ghi lại, lát nữa sẽ cần:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'MatKhauManh';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Dùng user riêng thay vì root giúp hạn chế thiệt hại: nếu website bị lộ thông tin kết nối, kẻ xấu cũng chỉ chạm được vào đúng database đó.
Bước 3: Tải WordPress và phân quyền
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
mkdir -p /var/www/example.com
cp -a wordpress/. /var/www/example.com/
chown -R www-data:www-data /var/www/example.com
Lệnh chown giao quyền thư mục cho user www-data, là user mà Nginx và PHP-FPM chạy dưới tên đó. Thiếu bước này, WordPress sẽ không tự tạo được file cấu hình, không cài được plugin hay tải ảnh lên.

wp-admin, wp-content, wp-includes...Bước 4: Cấu hình Nginx cho WordPress
Tạo file cấu hình cho tên miền:
nano /etc/nginx/sites-available/example.com
Dán nội dung sau. Đổi example.com thành tên miền của bạn, và đổi php8.1 thành phiên bản PHP đã thấy ở Bước 1 (ví dụ php8.3 trên Ubuntu 24.04):
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}

server_name và đường dẫn socket PHP-FPM. Lưu bằng Ctrl+O, Enter, thoát bằng Ctrl+X.Dòng try_files ... /index.php?$args giúp đường dẫn đẹp (permalink) của WordPress hoạt động. client_max_body_size 64M cho phép tải lên file tới 64 MB.
Bật cấu hình, gỡ trang mặc định và tải lại Nginx:
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
rm /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
nginx -t phải báo syntax is ok và test is successful thì mới reload. Nếu báo lỗi, đọc kỹ số dòng được chỉ ra và sửa lại file.
Bước 5: Chạy trình cài đặt WordPress
Mở trình duyệt, vào http://example.com. Chọn ngôn ngữ (có Tiếng Việt), bấm Let's go!, rồi điền thông tin database đã tạo ở Bước 2:
- Database Name:
wordpress - Username:
wpuser - Password: mật khẩu bạn đặt
- Database Host: giữ
localhost - Table Prefix: giữ
wp_hoặc đổi thành tiền tố khác nếu muốn

Bấm Submit → Run the installation. Trang tiếp theo yêu cầu thông tin website:

Bấm Install WordPress, đăng nhập tại http://example.com/wp-admin là xong phần cài đặt.
Bước 6: Bật HTTPS cho WordPress
Website không có HTTPS sẽ bị trình duyệt gắn nhãn "Không bảo mật". Cài chứng chỉ miễn phí bằng Certbot:
apt install -y certbot python3-certbot-nginx
certbot --nginx -d example.com -d www.example.com
Chi tiết từng câu hỏi và cách kiểm tra tự gia hạn có trong bài cài SSL Let's Encrypt. Sau khi có HTTPS, vào Settings → General trong WordPress, đổi hai ô WordPress Address và Site Address sang https://.
Lỗi thường gặp
"Error establishing a database connection"
Sai tên database, user hoặc mật khẩu. Thử đăng nhập bằng chính thông tin đó: mariadb -u wpuser -p wordpress. Nếu vào được thì sửa lại trong file /var/www/example.com/wp-config.php. Nếu không, kiểm tra MariaDB có chạy không: systemctl status mariadb.
Trình duyệt tải về file .php thay vì hiển thị trang
Nginx chưa chuyển file PHP cho PHP-FPM. Xem lại khối location ~ \.php$ và tên socket. Kiểm tra socket thật bằng ls /run/php/.
502 Bad Gateway
PHP-FPM không chạy hoặc sai tên socket. Chạy systemctl status php8.1-fpm (đổi số phiên bản cho đúng) và xem log /var/log/nginx/error.log.
Cài plugin bị hỏi thông tin FTP
WordPress không ghi được vào thư mục. Chạy lại lệnh phân quyền: chown -R www-data:www-data /var/www/example.com.
Không tải được ảnh lớn ("exceeds the maximum upload size")
Tăng upload_max_filesize và post_max_size trong /etc/php/8.1/fpm/php.ini (đổi số phiên bản), rồi systemctl restart php8.1-fpm. Giá trị này không được vượt client_max_body_size của Nginx.
Câu hỏi thường gặp
VPS cấu hình bao nhiêu thì chạy được WordPress?
Một website WordPress nhỏ chạy ổn với 1 vCPU và 1–2 GB RAM. Website nhiều lượt truy cập, dùng WooCommerce hoặc nhiều plugin nặng nên có từ 2 vCPU và 4 GB RAM. Xem thêm bài RAM VPS bao nhiêu là đủ và bao nhiêu vCPU là đủ.
Một VPS chạy được bao nhiêu website WordPress?
Không có giới hạn cứng. Mỗi website cần một database, một thư mục và một file cấu hình Nginx riêng, lặp lại các bước trên. Số lượng thực tế phụ thuộc lượt truy cập và RAM của VPS.
Có cần tự sao lưu website không?
TDCLOUD sao lưu VPS hằng ngày cho toàn bộ gói, nhưng bạn vẫn nên tự giữ bản sao của database và thư mục wp-content ở nơi khác. Cách làm có trong bài sao lưu dữ liệu và quy tắc 3-2-1.
Nên dùng VPS Linux hay Windows cho WordPress?
Linux. WordPress, PHP, Nginx và MariaDB được phát triển và tối ưu chủ yếu cho Linux, và hệ điều hành cũng tốn ít RAM hơn. Xem so sánh trong bài nên chọn VPS Linux hay Windows.
Nếu gặp lỗi ngoài danh sách trên, hãy gửi cho đội kỹ thuật TDCLOUD nội dung lỗi và 20 dòng cuối của /var/log/nginx/error.log để được hỗ trợ. Chưa có VPS chạy website, bạn có thể tham khảo VPS giá rẻ cho website nhỏ hoặc VPS tiêu chuẩn cho website có lượt truy cập lớn hơn.