WordPress là một nền tảng quản trị nội dung (CMS) phổ biến, mang đến giải pháp linh hoạt và mạnh mẽ để xây dựng blog cũng như website chuyên nghiệp. Được phát triển trên nền tảng MySQL làm cơ sở dữ liệu và PHP xử lý backend, WordPress hoạt động hiệu quả khi triển khai trên stack LEMP (Linux, Nginx, MySQL, PHP). Sau khi hoàn tất quá trình cài đặt, người dùng có thể dễ dàng quản lý, tùy chỉnh giao diện và tính năng thông qua bảng điều khiển trực quan, giúp đơn giản hóa việc vận hành mà vẫn đảm bảo tốc độ và hiệu suất tối ưu.
Bài biết này hướng bạn tập trung vào việc thiết lập một instance WordPress chạy trên LEMP stack (Linux, Nginx, MySQL và PHP) dành cho máy chủ Ubuntu 22.04.
Bạn cũng có thể dùng dịch vụ Clolud VPS có sẵn WordPress của DataOnline.
Điều kiện tiên quyết
Để hoàn thành hướng dẫn này, bạn cần có quyền truy cập vào một máy chủ Ubuntu 22.04. Để cài đặt WordPress với LEMP trên máy chủ, bạn cũng cần thực hiện các tác vụ sau trước khi bắt đầu:
- Tạo người dùng sudo trên máy chủ: Hướng dẫn này sử dụng tài khoản không phải root (non-root) có quyền sudo. Bạn có thể tạo người dùng có quyền sudo bằng cách làm theo hướng dẫn cài đặt ban đầu trên Ubuntu 22.04.
- Cài đặt LEMP stack: WordPress cần máy chủ web, cơ sở dữ liệu và PHP để hoạt động. Thiết lập LEMP (Linux, Nginx, MySQL, PHP) sẽ đáp ứng tất cả yêu cầu đó. Hãy theo hướng dẫn cài đặt và cấu hình LEMP stack.
Thay vì tự thiết lập những thành phần này, bạn có thể nhanh chóng khởi tạo một máy chủ Ubuntu 22.04 đã cài sẵn LEMP stack bằng ứng dụng cài đặt 1-click LEMP của DataOnline.
Lưu ý: Hướng dẫn này vẫn giả định bạn có người dùng sudo và đã cấu hình sẵn một server block Nginx trên máy chủ. Ngay cả khi bạn dùng máy chủ được cài đặt sẵn LEMP 1-click, bạn vẫn cần làm theo Bước 1, 2, 3 và 5 trong hướng dẫn cài đặt máy chủ Ubuntu 22.04 ban đầu. Bạn cũng cần hoàn thành Bước 4 trong hướng dẫn cài đặt LEMP Stack trên Ubuntu 22.04 để cấu hình server block Nginx và thiết lập Nginx dùng PHP Processor.
- Bảo mật trang với SSL: WordPress phục vụ nội dung động, đồng thời xử lý xác thực và phân quyền người dùng. TLS/SSL là công nghệ cho phép mã hóa lưu lượng truy cập, đảm bảo kết nối an toàn. Cách bạn thiết lập SSL phụ thuộc vào việc bạn có tên miền hay không.
- Nếu bạn có tên miền, cách dễ nhất để bảo mật trang là dùng Let’s Encrypt, cung cấp chứng chỉ miễn phí, đáng tin cậy. Làm theo hướng dẫn Let’s Encrypt cho Nginx để cài đặt.
- Nếu bạn không có tên miền và chỉ dùng cấu hình này để thử nghiệm hoặc sử dụng cá nhân, bạn có thể dùng chứng chỉ self-signed. Cách này cung cấp cơ chế mã hóa tương tự, nhưng không có xác thực tên miền. Hãy theo hướng dẫn về SSL tự ký (self-signed) cho Nginx để thiết lập.
Sau khi hoàn tất khâu chuẩn bị, hãy đăng nhập vào máy chủ với quyền sudo để tiếp tục.
Bước 1 – Tạo cơ sở dữ liệu MySQL và người dùng cho WordPress
WordPress dùng MySQL để quản lý và lưu trữ thông tin trang và người dùng. Mặc dù MySQL đã được cài đặt, chúng ta sẽ tạo một cơ sở dữ liệu (database) và người dùng (user) dành riêng cho WordPress.
Để bắt đầu, hãy đăng nhập tài khoản root (quản trị) của MySQL. Nếu MySQL được cấu hình dùng plugin auth_socket
(mặc định), bạn có thể đăng nhập tài khoản MySQL quản trị bằng sudo
:
sudo mysql
Nếu bạn đã thay đổi phương thức xác thực để dùng mật khẩu cho tài khoản root của MySQL, hãy dùng lệnh sau:
mysql -u root -p
Bạn sẽ được nhắc nhập mật khẩu đã đặt cho tài khoản root của MySQL.
Khi đã đăng nhập, hãy tạo một cơ sở dữ liệu riêng mà WordPress sẽ quản lý. Bạn có thể đặt tên tùy ý, trong hướng dẫn này chúng ta dùng wordpress
cho đơn giản. Tạo database WordPress bằng lệnh:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Lưu ý: Mọi câu lệnh MySQL phải kết thúc bằng dấu chấm phẩy (
;
). Nếu gặp lỗi, hãy kiểm tra xem có dấu chấm phẩy chưa.
Tiếp theo, hãy tạo một tài khoản người dùng MySQL riêng, dùng duy nhất cho cơ sở dữ liệu mới này. Việc tách biệt như vậy rất hữu ích về mặt quản lý và bảo mật. Ở đây, chúng ta dùng tên wordpressuser
, nhưng bạn có thể đổi nếu muốn.
Trong lệnh sau, bạn sẽ tạo tài khoản, đặt mật khẩu, và cấp quyền truy cập cho database vừa tạo. Hãy chọn mật khẩu mạnh:
CREATE USER 'wordpressuser'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost';
Bạn đã có một cơ sở dữ liệu và tài khoản người dùng, mỗi thứ dành riêng cho WordPress.
Khi hoàn tất các tác vụ với database, thoát khỏi MySQL bằng lệnh:
EXIT;
Phiên MySQL sẽ kết thúc, đưa bạn trở lại shell Linux thông thường.
Bước 2 – Cài đặt các tiện ích mở rộng PHP bổ sung
Khi thiết lập LEMP stack, ta chỉ cài một số extension tối thiểu để PHP có thể giao tiếp với MySQL. WordPress và nhiều plugin của nó yêu cầu thêm các extension PHP khác, và trong hướng dẫn này bạn sẽ cài một số extension bổ sung.
Hãy cài các extension PHP phổ biến cho WordPress:
sudo apt update
sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
Lưu ý: Mỗi plugin WordPress có thể yêu cầu extension PHP khác nhau. Bạn nên kiểm tra tài liệu của plugin để biết yêu cầu PHP. Nếu extension đó có trong kho, bạn có thể cài bằng
apt
như ví dụ trên.
Khi cài xong extension, hãy khởi động lại tiến trình PHP-FPM để PHP đang chạy có thể dùng những tính năng mới cài:
sudo systemctl restart php8.1-fpm
Giờ bạn đã có đầy đủ extension PHP cần thiết trên máy chủ.
Bước 3 – Cấu hình Nginx
Tiếp theo, chúng ta sẽ điều chỉnh một vài thiết lập trong các tệp cấu hình server block của Nginx. Theo hướng dẫn tiền đề, bạn nên có một tệp cấu hình cho website nằm trong thư mục /etc/nginx/sites-available/
, được cấu hình để phản hồi tên miền hoặc IP máy chủ, và được bảo vệ bằng chứng chỉ TLS/SSL. Trong ví dụ, chúng ta dùng /etc/nginx/sites-available/wordpress
, bạn hãy thay đường dẫn đến tệp cấu hình tương ứng nếu khác.
Ngoài ra, trong hướng dẫn này, chúng ta dùng /var/www/wordpress
làm thư mục gốc (root) cho cài đặt WordPress. Bạn hãy thay bằng thư mục web root đã thiết lập trong cấu hình của riêng bạn.
Lưu ý: Có thể bạn đang dùng cấu hình mặc định
/etc/nginx/sites-available/default
(với web root là/var/www/html
). Điều này hoàn toàn ổn nếu bạn chỉ chạy duy nhất một website trên máy chủ. Nếu không, tốt nhất bạn nên tách cấu hình cần thiết thành từng tệp riêng, mỗi tệp cho một site.
Mở tệp server block của site với quyền sudo
:
sudo nano /etc/nginx/sites-available/wordpress
Bên trong khối server
chính, chúng ta sẽ thêm một vài khối location
.
Trước hết, tạo các khối location
khớp chính xác với /favicon.ico
và /robots.txt
, vốn không cần ghi log request.
Dùng location
theo biểu thức chính quy để khớp các request đến tệp tĩnh. Ở đây, chúng ta tắt log cho các request này và đánh dấu chúng có thể cache lâu (expires max
), vì chúng thường là những tài nguyên tốn kém để phục vụ. Bạn có thể điều chỉnh danh sách phần mở rộng tệp tĩnh tùy theo nhu cầu site:
/etc/nginx/sites-available/wordpress server { . . . location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { log_not_found off; access_log off; allow all; } location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ { expires max; log_not_found off; } . . . }
Bên trong khối location /
hiện có, hãy điều chỉnh dòng try_files
. Chúng ta sẽ comment dòng mặc định (thêm dấu #
ở đầu) và thêm dòng mới. Thay vì trả về lỗi 404 như mặc định, quyền điều khiển được chuyển đến tệp index.php
kèm tham số request:
/etc/nginx/sites-available/wordpress server { . . . location / { #try_files $uri $uri/ =404; try_files $uri $uri/ /index.php$is_args$args; } . . . }
Khi xong, hãy lưu và đóng tệp.
Kiểm tra lại cấu hình Nginx để phát hiện lỗi cú pháp:
sudo nginx -t
Nếu không có lỗi, tải lại Nginx:
sudo systemctl reload nginx
Tiếp theo, chúng ta sẽ tải về và thiết lập WordPress.
Bước 4 – Tải xuống WordPress
Giờ máy chủ đã được cấu hình, ta sẽ tải và thiết lập WordPress. Vì lý do bảo mật, luôn khuyến khích tải bản WordPress mới nhất trực tiếp từ website chính thức của dự án.
Chuyển vào thư mục tạm (writable directory) rồi tải gói nén WordPress:
cd /tmp
Lệnh trên đưa bạn đến thư mục /tmp
. Sau đó, nhập lệnh để tải phiên bản WordPress mới nhất ở dạng nén:
curl -LO https://wordpress.org/latest.tar.gz
Lưu ý: Tham số
-LO
được dùng để lấy trực tiếp nguồn tệp nén.-L
đảm bảo tải thành công nếu có chuyển hướng (redirect), còn-O
sẽ ghi dữ liệu tải về thành tệp cục bộ cùng tên. Để tìm hiểu thêm về lệnh curl, hãy xem bài “Cách tải File với cURL.”
Giải nén gói để tạo cấu trúc thư mục WordPress:
tar xzvf latest.tar.gz
Chúng ta sẽ sớm di chuyển các tệp này vào thư mục gốc (document root). Nhưng trước khi làm, hãy sao chép tệp cấu hình mẫu thành tên tệp mà WordPress sẽ đọc:
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php
Bây giờ, sao chép toàn bộ nội dung thư mục vào document root. Ta dùng tham số -a
để duy trì quyền (permission), và dấu .
ở cuối đường dẫn gốc để chỉ định mọi thứ bên trong (kể cả tệp ẩn):
sudo cp -a /tmp/wordpress/. /var/www/<^>your_domain/wordpress
Sau khi các tệp đã ở đúng chỗ, bạn cần gán quyền sở hữu cho user và group www-data
. Đây là user và group mà Nginx chạy, Nginx cần quyền đọc/ghi các tệp WordPress để phục vụ website và thực hiện cập nhật tự động:
sudo chown -R www-data:www-data /var/www/your_domain/wordpress
Các tệp giờ đã nằm trong document root của máy chủ, với quyền sở hữu phù hợp, nhưng bạn vẫn cần một số cấu hình bổ sung.
Bước 5 – Thiết lập tệp cấu hình WordPress
Tiếp theo, chúng ta sẽ sửa đổi tệp cấu hình chính của WordPress.
Khi mở tệp, bạn sẽ bắt đầu bằng cách điều chỉnh một số secret keys để tăng tính bảo mật. WordPress cung cấp một trình tạo key an toàn, giúp bạn không phải tự nghĩ ra giá trị. Những key này chỉ được dùng nội bộ, nên không ảnh hưởng đến khả năng sử dụng, và bạn hoàn toàn có thể đặt giá trị phức tạp, an toàn.
Để lấy các giá trị bảo mật từ WordPress secret key generator, gõ:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
Bạn sẽ nhận được các giá trị duy nhất, trông như thế này:
Warning: Quan trọng là mỗi lần gọi API, bạn sẽ nhận được giá trị khác nhau. Không sao chép những giá trị minh họa bên dưới!
Output define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H'); define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');
Đây là những dòng cấu hình bạn có thể dán trực tiếp vào tệp cấu hình để đặt key an toàn. Hãy sao chép kết quả bạn nhận được.
Bây giờ, mở tệp cấu hình WordPress:
sudo nano /var/www/your_domain/wordpress/wp-config.php
Tìm phần chứa các giá trị giả lập (dummy) cho những thiết lập đó. Nó sẽ trông như sau:
/var/www/<^>your_domain<^>/wordpress/wp-config.php . . . define('AUTH_KEY', 'put your unique phrase here'); define('SECURE_AUTH_KEY', 'put your unique phrase here'); define('LOGGED_IN_KEY', 'put your unique phrase here'); define('NONCE_KEY', 'put your unique phrase here'); define('AUTH_SALT', 'put your unique phrase here'); define('SECURE_AUTH_SALT', 'put your unique phrase here'); define('LOGGED_IN_SALT', 'put your unique phrase here'); define('NONCE_SALT', 'put your unique phrase here'); . . .
Xóa những dòng đó và dán các giá trị bạn sao chép từ lệnh vừa rồi:
/var/www/<^>your_domain<^>/wordpress/wp-config.php . . . define('AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('SECURE_AUTH_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('LOGGED_IN_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('NONCE_KEY', 'VALUES COPIED FROM THE COMMAND LINE'); define('AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); define('SECURE_AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); define('LOGGED_IN_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); define('NONCE_SALT', 'VALUES COPIED FROM THE COMMAND LINE'); . . .
Tiếp theo, hãy sửa một số cài đặt kết nối cơ sở dữ liệu ở đầu tệp. Bạn cần điều chỉnh tên database, tên người dùng, và mật khẩu đã thiết lập trong MySQL.
Một thay đổi khác bạn nên thực hiện là đặt phương thức WordPress dùng để ghi vào hệ thống tệp (filesystem). Vì bạn đã cho phép web server quyền ghi ở nơi cần thiết, bạn có thể đặt rõ phương thức filesystem là “direct”. Nếu không, WordPress sẽ đòi thông tin FTP khi ta thực hiện một số thao tác. Thêm dòng này dưới phần cài đặt kết nối database hoặc ở bất kỳ đâu trong tệp:
/var/www/<^>your_domain<^>/wordpress/wp-config.php . . . define( 'DB_NAME', 'wordpress' ); /** MySQL database username */ define( 'DB_USER', 'wordpressuser' ); /** MySQL database password */ define( 'DB_PASSWORD', 'password' ); . . . define( 'FS_METHOD', 'direct' );
Lưu và đóng tệp khi hoàn tất.
Bước 6 – Hoàn tất cài đặt thông qua giao diện web
Bây giờ, cấu hình máy chủ đã xong, bạn có thể hoàn tất cài đặt qua giao diện web của WordPress.
Trên trình duyệt, truy cập tên miền hoặc địa chỉ IP công khai của máy chủ, kèm /wordpress
:
http://server_domain_or_IP/wordpress
Chọn ngôn ngữ bạn muốn sử dụng:
Kế tiếp, bạn sẽ đến trang thiết lập chính.
Đặt tên cho website WordPress và chọn tên người dùng (không nên đặt “admin” để tăng bảo mật). WordPress tự động sinh mật khẩu mạnh, bạn có thể lưu mật khẩu này hoặc đặt mật khẩu mạnh khác.
Nhập địa chỉ email và chọn xem bạn có muốn ngăn máy tìm kiếm (search engines) lập chỉ mục trang hay không:
Khi nhấn tiếp, bạn sẽ được chuyển đến trang yêu cầu đăng nhập:
Sau khi đăng nhập, bạn sẽ thấy trang quản trị WordPress:
Kết luận
WordPress đã được cài đặt thành công và sẵn sàng sử dụng! Để tối ưu trang web ngay từ đầu, bạn nên thực hiện một số bước quan trọng. Trước tiên, hãy cấu hình Permalinks bằng cách truy cập Settings > Permalinks để chọn định dạng đường dẫn thân thiện với SEO. Tiếp theo, bạn có thể tùy chỉnh giao diện bằng cách vào Appearance > Themes, chọn một theme phù hợp hoặc cài đặt giao diện mới theo nhu cầu. Nếu đây là lần đầu tiên bạn sử dụng WordPress, hãy dành thời gian khám phá bảng điều khiển để làm quen với các tính năng quản lý nội dung, cài đặt plugin và tối ưu hiệu suất website. Khi đã nắm vững các bước cơ bản, bạn có thể bắt đầu xây dựng một website chuyên nghiệp và hiệu quả với WordPress!