WordPress là một CMS (hệ thống quản lý nội dung) phổ biến nhất trên internet hiện nay, nó dễ dàng cấu hình, tùy chỉnh, được hỗ trợ từ cộng đồng sử dụng WordPress một cách mạnh mẽ. Hỗ trợ bạn nhanh chóng xây dựng một blog, một trang web, hoặc một trang thương mại điện tử. Chúng ta có nhiều cách để cài nó trên VPS, sau bài viết cài đặt LEMP trên Ubuntu, MZE sẽ hướng dẫn bạn làm cách nào để cài WordPress với LEMP trên Ubuntu

Trong hướng dẫn này, MZE sẽ tập trung vào cài WordPress với LEMP Stack (Linux, Nginx, MySQL và PHP) trên Ubuntu 19.10 Server.

A. Yêu cầu cài đặt WordPress với Lemp trên Ubuntu

  • Đã có sẵn tài khoản với đặc quyền Sudo hoặc tài khoản root
  • Đã cài LEMP trên Ubuntu ( NGINX, MySQL, PHP 7.2 hoặc mới hơn )
  • Đã cài đặt Ubuntu 18.04/19.10/20.04 server
  • Domain đã được trỏ về IP của server (tùy chọn)

B. Cài Đặt LEMP Stack trên Ubuntu

Nếu chưa cài đặt LEMP trên Ubuntu, hãy xem thêm Cách Cài LEMP Stack (NGINX, MySQL, MariaDB, PHP) Trên Ubuntu 19.10, hoặc bạn có thể thực hiện theo trình tự như bên dưới theo các bước 1-4, trong bài viết này MZE sẽ không đi sâu vào vấn đề khi cài đặt các thành phần của LEMP stack.

1.Update server

sudo apt update

2. Cài Nginx web server

a. Cài đặt Nginx web server

sudo apt install nginx -y

Sau khi cài đặt hoàn tất, hãy khởi động Nginx và cho phép nó tự khởi động sau khi reboot hệ thống, với các câu lệnh bên dưới

sudo systemctl start nginx
sudo systemctl enable nginx

Kiểm tra lại web server có hoạt động không bằng câu lệnh

sudo systemctl status nginx
[email protected]:~# systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2020-05-24 09:24:03 UTC; 4min 39s ago
Docs: man:nginx(8)
Main PID: 2843 (nginx)
Tasks: 2 (limit: 2345)
Memory: 5.5M
CGroup: /system.slice/nginx.service
├─2843 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
└─2844 nginx: worker process

Hoặc kiểm tra lại Nginx đang hoạt động hay không bằng cách mở cửa sổ trình duyệt Web của bạn như ( Chrome, Firefox,…), nhập vào địa chỉ http://Server_IP_Adress/ hoặc http://Your_Domain/

Trong đó:

  • Server_IP_Adress : địa chỉ IP của server
  • Your_Domain : tên miền của bạn (đã được trỏ về IP của server)

b. Cấu hình tường lửa UFW tăng bảo mật

  • Cho phép kết nối SSH
ufw allow ssh
  • Bật UFW
ufw enable
ufw allow 'Nginx Full'
  • Kiểm tra trạng thái UFW
sudo ufw status

3. Cài MySQL

Để cài đặt MySQL chúng ta sẽ gõ dòng lệnh sau

sudo apt install mysql-server

Kiểm tra trạng thái MySQL server

sudo systemctl status mysql

Xem thêm Hướng dẫn cài đặt và cấu hình MySQL 8.x trên Ubuntu 18.04

Sau khi cài đặt hoàn tất, bạn có thể kiểm tra phiên bản của máy chủ cơ sở dữ liệu MySQL đã cài đặt

sudo mysql -V

Ngoài ra, bạn có thể chạy tập lệnh sau khi cài đặt mysql_secure_installation để tăng cường bảo mật cho máy chủ cơ sở dữ liệu. MZE khuyến nghị bạn nên sử dụng các tùy chọn bên dưới khi thiết lập, để xem thêm chi tiết về cấu hình bảo mật MySQL

Set root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Lưu ý: Tại thời điểm viết bài này, thư viện MySQL PHP mysqlnd không còn được hỗ trợ cacheing_sha2_authentication, phương thức xác thực mặc định cho MySQL 8 là auth_socket. Vì vậy, khi tạo người dùng cơ sở dữ liệu cho các ứng dụng PHP trên MySQL 8, chúng ta sẽ cần phải chuyển đổi phương thức xác thực  auth_socket thành mysql_native_password

Ví dụ: Chuyển đổi phương thức xác thực tài khoản root sang mysql_native_password bằng cách sử dụng dòng lệnh

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Hoặc tạo người dùng mới với phương thức xác thực mysql_native_password

mysql> CREATE USER 'new_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

4. Cài đặt và cấu hình PHP

WordPress được xây dựng trên PHP, do đó chúng ta cần phải cài đặt PHP cũng như một số phần mở rộng của PHP được yêu cầu bởi WordPress nó có thể hoạt động một cách ổn định, để cài đặt PHP và một số mở rộng của PHP sử dụng câu lệnh

sudo apt install php-mysql php-fpm php-common php-mbstring php-gd php-intl php-xml php-json php-opcache php-cli php-curl

Hoặc sử dụng dòng lệnh sau, thêm hoặc bớt các gói mở rộng cho PHP cho câu lệnh bên dưới

sudo apt install php-{mysql,fpm,bcmath,bz2,intl,gd,mbstring,curl,mysql,zip,fpm,cli,xml,json} -y

Xem thêm Cách cài PHP 7.x trên Ubuntu 18.04

Cấu hình bảo mật, không cho phép thực thi các file *.php không tồn tại trên máy chủ bằng cách tìm và thay đổi giá trị cgi.fix_pathinfo , sử dụng nano mở và chỉnh sửa file php.ini với thư mục đường dẫn là nano /etc/php/7.3/fpm/php.ini, thay đổi giá trị như bên dưới (bỏ dấu “;” hủy uncomment)

cgi.fix_pathinfo=0

Sau khi thay đổi giá trị cgi.fix_pathinfo=0 lưu và thoát tập tin, khởi động lại PHP-FPM service với câu lệnh

systemctl restart php7.3-fpm.service

Tới đây là chúng ta đã hoàn tất các bước cài đặt LEMP trên Ubuntu, để tiếp tục cài WordPress với LEMP trên Ubuntu, hãy theo dõi các bước cài đặt bên dưới

C. Các bước cài WordPress Với LEMP Trên Ubuntu

1. Tạo database và cấp quyền

Truy cập MySQL theo các trường hợp bên dưới

  • Nếu MySQL được cấu hình để sử dụng plugin xác thực auth_socket (mặc định), bạn có thể đăng nhập vào tài khoản quản trị MySQL bằng sudovới câu lệnh bên dưới
sudo mysql
  • Nếu bạn đã thay đổi phương thức xác thực để sử dụng mật khẩu cho tài khoản root trong MySQL (xem lại phần cài đặt LEMP trên Ubuntu bước 3) , hãy sử dụng câu lệnh bên dưới, sau đó hãy nhập password mà bạn đã thiết lập
mysql -u root -p

Tạo một cơ sở dữ liệu với tên là database_name

mysql> CREATE DATABASE database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

 Tạo một người dùng MySQL và cấp quyền cho người dùng database_user bằng lệnh bên dưới

  • MySQL 8 trở về trước dùng câu lệnh
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost' IDENTIFIED BY 'my_password';
  • MySQL 8 trở về sau dùng câu lệnh, trong bài viết này sử dụng MySQL version 8.0.20
mysql> CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'my_password';
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';

Chú ý: Để thực tạo người dùng MySQL với phương thức xác thực là mysql_native_password chúng ta có thể sử dụng câu lệnh bên dưới (mặc định khi tạo người dùng trong MySQL 8 sẽ dùng cơ chế xác thực mật khẩu là với caching_sha2_password)

mysql> CREATE USER 'database_user'@'%' IDENTIFIED WITH mysql_native_password BY 'my_password';

Cách tạo tài khoản root trên MySQL (tùy chọn)

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

Reload đặc quyền user trong MySQL

mysql> FLUSH PRIVILEGES;

Show toàn bộ user trong MySQL

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

Kiểm tra quyền user

mysql> SHOW GRANTS FOR [user_name]@[host]

Ví dụ:

mysql> SHOW GRANTS FOR 'database_user'@'localhost';

Trong đó:

  • User_name : tên của người dùng trong MySQL muốn hiển thị thông tin trong câu lệnh
  • host : được bao gồm %, 127.0.0.1localhost.

Host đại diện cho cổng kết nối tới cơ sở dữ liệu của dịch vụ

Ví dụ:

    • 127.0.0.1 kết nối thông qua socket 127.0.0.1:3306 ;
    • localhost thông qua socket pipe;
    • % có thể kết nối từ bất cứ IP local hay IP public hoặc socket

Sau khi thực hiện xong các bước tạo database, user trong MySQL, để thoát MySQL Shell thực hiện câu lệnh

mysql> exit

2. Tải mã nguồn WordPress và cài đặt WordPress trên server

Tạo thư mục để tải mã nguồn WordPress

sudo mkdir -p /home/mzengineer.com/public_html

Tạo thêm thư mục lưu trữ file Backup và file logs (tùy chọn)

sudo mkdir -p /home/mzengineer.com/{logs,backup}

Tải WordPress về server trong thư mục /tmp

cd /tmp

Tải WordPress

wget https://wordpress.org/latest.tar.gz

hoặc

curl -LO https://wordpress.org/latest.tar.gz

Giải nén file nén mã nguồn vừa tải về qua câu lệnh trong thư mục /tmp

tar xf latest.tar.gz

Bây giờ hãy tạo tệp cấu hình cho WordPress bằng lệnh bên dưới (tùy chọn)

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

Sau đó move tất cả các tệp vào thư mục mzengineer.com/public_html bằng lệnh bên dưới

sudo mv /tmp/wordpress /home/mzengineer.com/public_html

hoặc sử dụng câu lệnh copy

sudo cp -a /tmp/wordpress/. /home/mzengineer.com/public_html

Trong đó:

  • -a : duy trì các quyền, thuộc tính gốc khi copy
  • Dấu “.” : copy tất cả trong thư mục gốc, bao gồm cả tập tin ẩn

Để Nginx hoạt động ổn định, chúng ta sẽ thay đổi quyền sở hữu của thư mục public_html bằng cách sử dụng lệnh dưới đây

sudo chown -R www-data:www-data /home/mzengineer.com/public_html

3. Cấu hình Nginx với bộ xử lý PHP

a. Tạo server block trên Nginx

  • Cấu hình server block trên Nginx (tùy chọn)

Khi bạn chỉ cần cấu hình cho 1 website thì hãy dùng tùy chọn này

Chúng ta sẽ tạo một file cấu hình server Nginx trong thư mục /etc/nginx/conf.d/. Tên tệp phải kết thúc bằng .conf.

sudo nano /etc/nginx/conf.d/mzengineer.com.conf

Copy và dán đoạn code bên dưới vào file mzengineer.com.conf

server {
listen 80;

root /home/mzengineer.com/public_html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;
server_name mzengineer.com www.mzengineer.com;

# access_log off;
access_log /home/mzengineer.com/logs/access.log;
# error_log off;
error_log /home/mzengineer.com/logs/error.log;

## Your only path reference.
root /home/mzengineer.com/public_html;

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location / {
# This is cool because no php is touched for static content.
# include the "?$args" part so non-default permalinks doesn't break when using query string
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
#The following parameter can be also included in fastcgi_params file
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}

location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
}

Lưu và thoát file, Nhấn Ctrl+O để ghi, Enter lưu file, sau cùng Ctrl+X để thoát, xem thêm hướng dẫn cách cài và sử dụng nano editor trong Linux

Kiểm tra file cấu hình Nginx

sudo nginx -t

Output: xuất hiện successfull thì đã thành công, trường hợp gặp lỗi hãy sửa lỗi theo chỉ thị gỡ lỗi

[email protected]:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Reload lại Nginx bằng lệnh

sudo systemctl reload nginx
  • Cấu hình server block (virtual host) trên Nginx (tùy chọn)

Bạn có thể sử dụng file cấu hình mặc định Nginx /etc/nginx/sites-available/default với đường dẫn thư mục root là /var/www/html khi bạn chỉ có mỗi trang web này cần lưu trữ trên server, đối với trường hợp bạn cần lưu trữ nhiều hơn 1 trang web, hãy tạo thêm các cấu hình Nginx khác cho nó

Tạo khối ảo Nginx cho tên miền mzengineer.com

sudo nano /etc/nginx/sites-available/mzengineer.com.conf

Copy và dán đoạn code bên dưới vào file cấu hình virtual block

server {
listen 80;
listen [::]:80;
root /home/mzengineer.com/public_html;
index index.php index.html index.htm;
server_name mzengineer.com www.mzengineer.com;

client_max_body_size 100M;
autoindex off;
location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Lưu và thoát file,

Nhớ: Hãy thay đổi mzengineer.com và đường dẫn lưu trữ source code /home/mzengineer.com/public_html cho phù hợp với bạn

Bật khối ảo Nginx mzengineer.com

ln -s /etc/nginx/sites-available/mzengineer.com.conf /etc/nginx/sites-enabled/

Kiểm tra file cấu hình Nginx

sudo nginx -t

Không xuất hiện lỗi hãy restart hoặc reload lại Nginx

sudo systemctl reload nginx
  • Hủy liên kết cấu

    hình Nginx mặc định

Để tránh các xung đột cấu hình hãy hủy liên kết cấu hình mặc định Nginx bằng câu lệnh bên dưới

sudo unlink /etc/nginx/sites-enabled/default

b. Cấu hình PHP với WordPress

Mở file cấu hình PHP /etc/php/7.3/fpm

sudo nano /etc/php/7.3/fpm/php.ini

Tìm và thay đổi các giá trị trong file cấu hình php.ini như bên dưới, đây là các cài đặt cấu hình tốt cho hầu hết các trang web sử dụng WordPress

file_uploads = On
allow_url_fopen = On
short_open_tag = On
memory_limit = 256M
cgi.fix_pathinfo = 0
upload_max_filesize = 100M
max_execution_time = 360

Lưu và thoát file,

Khởi động lại dịch vụ php-fpm

sudo service php7.3-fpm restart

4. Thiết lập file cấu hình WordPress

Tiếp theo, chúng ta sẽ cần thay đổi một số cấu hình chính trong WordPress bằng file wp-config.php

a. WordPress Security Keys là một tập hợp các biến ngẫu nhiên nhằm cải thiện mã hóa các thông tin lưu trữ trong cookie của người dùng, để tạo khóa chúng ta sẽ sử dụng câu lệnh bên dưới

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Output: Khóa này chỉ được tạo ra ngẫu nhiên một lần khi sử dụng lệnh trên, nên bạn đừng sao chép các khóa bên dưới

sudo curl -s https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', 'JdFn|C-5(RgdHao ?IQ]gjCQO!VDTnikCkthZ~S,cv>K}z58+e0>4(!X`M$H|.-~');
define('SECURE_AUTH_KEY', '*d~:X0knD1n?%[email protected]+v>w=|A]-Zpb//hq%[email protected]{[email protected]|fAvu?!DX) hT0');
define('LOGGED_IN_KEY', 't55lj5lyp0[7`c!V1aQ<tK.,:[email protected][email protected]*o-K3.V*q2nf[N5P/I-Y?si;z>U');
define('NONCE_KEY', '`>T>)k+4?-wY+L<t,3]wLV(Lw5Qp_XSz 5Z[w~-3i>!u+y d7Xm]AxG)<&&pIkaK');
define('AUTH_SALT', ')Pzkr$nlS-;}:M(V9K}Zby|v;E4J~*8!lqY7+!3kiO%Df,^CJ0L^#mx6b:_dfEi.');
define('SECURE_AUTH_SALT', 'CMVW6D0cFCUB#AGMhGS&P+*wqXJQ74a&~kr-DK-TzIff;[email protected]:ym$k 7a`');
define('LOGGED_IN_SALT', '[email protected]/l$^i{zb0oXE|z0N-P7KeGjeJUN#tE?qjm+N+#UA/][%u/[email protected]`rv{(T!');
define('NONCE_SALT', '@Ona|/KM&r154-qQ.XhR]<hmVND>r<wb3dE$*/&npz|e5agWo7UUlLe!#Dp#S}zi');

Đây là những dòng cấu hình mà chúng ta có thể dán trực tiếp vào tệp cấu hình wp-config.php của bạn để đặt các khóa bảo mật. Sao chép các khóa sau khi sử dụng lệnh

sudo nano /home/mzengineer.com/public_html/wp-config.php

Tìm phần có chứa các giá trị giả để thay đổi nó. Đoạn mã sẽ giống như bên dưới, hãy copy và paste để replace nó, và nhớ là đừng copy các value ở bài viết này nhé

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' );

b. Thiết lập cài đặt kết nối cơ sở dữ liệu ở trong file wp-config.php. Bạn cần điều chỉnh tên cơ sở dữ liệu, người dùng cơ sở dữ liệu và mật khẩu được liên kết mà chúng tôi đã cấu hình trong MySQL

Cấu hình WordPress không nhắc thông tin đăng nhập FTP khi thực hiện upload bằng cách thêm vào cấu hình wp-config.php dòng define('FS_METHOD', 'direct');

.......................................

define('FS_METHOD', 'direct');

define('DB_NAME', 'database_name');

/** MySQL database username */
define('DB_USER', 'database_user');

/** MySQL database password */
define('DB_PASSWORD', 'my_password');

.......................................

5. Cài đặt WordPress bằng trình duyệt Web

Sau khi đã cấu hình toàn bộ theo các hướng dẫn từ bước 1-4, bước cuối cùng là chúng ta sẽ cài đặt WordPress bằng trình duyệt web, để cài đặt hãy gõ vào trình duyệt web https://mzengineer.com hoặc http://IP_Server hãy thay đổi bằng tên miền và địa chỉ IP Public server của bạn

Sau khi truy cập trình domain bằng trình duyệt web, sẽ xuất hiện màn hình lựa chọn ngôn ngữ cài đặt WordPress, hãy chọn ngôn ngữ mà bạn muốn cài đặt, nhấn continue để tiếp tục

Cài đặt WordPress với LEMP Trên Ubuntu-Dùng Trình Duyệt Web
Cài đặt WordPress với LEMP Trên Ubuntu-Dùng Trình Duyệt Web

Sau khi nhấn tiếp tục, sẽ xuất hiện màn hình chào mừng đến với WordPress, hãy nhập các thông tin như hình, sau đó nhấn cài đặt WordPress (install WordPress).

man hinh chao mung cai dat wordpress
Màn hình chào mừng cài đặt WordPress

Kết thúc quá trình cài đặt, sẽ xuất hiện màn hình thông báo cài đặt thành công, hãy sử dụng Usernamepassword khi cài đặt để đăng nhập

man hinh thong bao cai dat wordpress thanh cong
Màn hình thông báo cài đặt WordPress thành công

Lời kết

Qua bài viết này, bạn đã có thể cài đặt được WordPress với LEMP trên Ubuntu, bây giờ hãy tự mình khám phá thế giới WordPress và xây dựng blog hoặc website cho riêng bạn

Nếu bài viết có ích hãy LikeShare, và đừng quên đánh giá bài viết bên dưới nhé.

Nguồn MzEngineer.com

LEAVE A REPLY

Please enter your comment!
Please enter your name here