Trang chủ / Website / WordPress / Cách Cài Đặt WordPress với LEMP trên Ubuntu

Cách Cài Đặt WordPress với LEMP trên Ubuntu

WordPress là một trong những hệ thống quản lý nội dung (CMS) phổ biến nhất trên internet hiện tại. Nó cho phép người dùng thiết lập các trang web linh hoạt bằng cách sử dụng hệ thống quản trị cơ sở dữ liệu MySQL và ngôn ngữ lập trình PHP.

Trong hướng dẫn này, bạn sẽ tập trung vào việc thiết lập một phiên bản WordPress trên ngăn xếp LEMP (Linux, Nginx, MySQL và PHP) cho máy chủ Ubuntu 18.04.

Lưu ý

Nếu bạn là người mới bắt đầu và không có kiến thức về kỹ thuật, bạn nên cài đặt website WordPress trên cPanel của các dịch vụ shared hosting.

1. Thiết lập máy chủ

Thiết lập máy chủ là bước đầu tiên của quá trình cài đặt, bạn sẽ thực hiện việc này trong giao diện website của Vultr.

Khuyến nghị

Vultr là nhà cung cấp dịch vụ máy chủ ảo (virtual private server — VPS) mà tôi đang sử dụng. Được thành lập vào năm 2014, họ nổi tiếng với dịch vụ VPS giá cả phù hợp và hiệu năng mạnh mẽ.

Trước tiên, bạn nhấp chuột vào “Products”:

Chọn máy chủ

Một trang mới hiện ra cho phép bạn triển khai phiên bản mới (Deploy New Instance):

Deploy New Instance
  • Chọn máy chủ (Choose Server): Như đã nêu trên, tôi khuyến khích bạn chọn loại máy chủ High Frequency.
Choose Server
  • Vị trí máy chủ (Server Location): Mặc dù bạn có thể chọn một trong các vị trí máy chủ tại châu Á nhưng tôi khuyến nghị chọn máy chủ tại Singapore để tốc độ truyền tải dữ liệu về Việt Nam tốt nhất.
Server Location
  • Loại máy chủ (Server Type): CentOS và Ubuntu là những lựa chọn phổ biến. Tôi khuyến nghị chọn máy chủ Ubuntu bởi nó được hỗ trợ bởi một cộng đồng lớn hơn nhiều (điều đó có nghĩa là: nếu bạn cần trợ giúp về điều gì đó, có rất nhiều hướng dẫn và tài nguyên có sẵn).

Tôi thường chọn Ubuntu 18.04 x64 (tức phiên bản Ubuntu được ra mắt năm 2018), đây không phải phiên bản mới nhất nhưng cũng không phải phiên bản cũ nhất, đơn giản là sở thích vì tôi cho rằng nó mang tính ổn định hơn.

Server Type
  • Kích thước máy chủ (Server Size): Với người mới bắt đầu, bạn có thể chọn gói thấp nhất với thông số kỹ thuật là bộ nhớ ổ cứng 32 GB, 1 CPU, 1 GB RAM, 1 TB băng thông và có giá $6/tháng.

Khi trang web của bạn lớn hơn và nhu cầu tăng lên, bạn có thể dễ dàng nâng cấp kích thước máy chủ của mình.

Server Size
  • Tính năng bổ sung (Additional Features): Tôi khuyến nghị bạn chọn “Enable Auto Backups” để sao lưu dữ liệu và khắc phục trong trường hợp website của bạn xảy ra sự cố.

Phí sao lưu dữ liệu sẽ tăng dần tùy theo kích thước máy chủ của bạn, thấp nhất là $1,2/tháng cho gói kích thước máy chủ $6/tháng.

Enable Auto Backups

Bạn có thể bỏ qua các tùy chọn Startup ScriptSSH Keys.

  • Tên và nhãn máy chủ (Server Hostname & Label): Bạn có thể điền bất cứ điều gì giúp bạn dễ quản lý.

Khi bạn điền tên máy chủ thì nhãn máy chủ sẽ tự động điền giống vậy (bạn có thể sửa lại nhãn máy chủ). Tôi thường điền tên dự án, viết liền, không dấu; ví dụ: marcomtoday.

Sau đó, bạn nhấp vào nút “Deploy Now”.

Deploy Now

Lúc này, màn hình sẽ hiện ra phiên bản máy chủ mà bạn vừa thiết lập:

Máy chủ đã thiết lập

Bây giờ, bạn sẽ cần thực hiện các thao tác bên ngoài website của Vultr để tiếp tục quá trình cài đặt.

Lưu ý

Để có thể sử dụng VPS, bạn cần cài đặt hai phần mềm:

  • Bitvise SSH Client: Phần mềm này cho phép bạn kiểm soát dữ liệu trên VPS, bao gồm quản lý các tệp và thực hiện lệnh.
  • Notepad++: Phần mềm này cho phép bạn chỉnh sửa code.

Ngoài Notepad++, bạn cũng có thể tham khảo Sublime Text. Tuy nhiên, nếu bạn là người mới, tôi khuyến nghị cài Notepad++ vì nó dễ sử dụng hơn.

2. Cài đặt LEMP trên Ubuntu

Ngăn xếp LEMP là một nhóm phần mềm có thể được sử dụng để phục vụ các trang web động và ứng dụng web, bao gồm:

  • Hệ điều hành Linux
  • Máy chủ web Nginx
  • Cơ sở dữ liệu MySQL
  • Ngôn ngữ lập trình PHP

Nếu bạn từng nghe đâu đó về thuật ngữ LAMP thì khác biệt ở đây là chữ A (viết tắt của Apache, cũng là tên một loại máy chủ web).

Bạn hoàn toàn có thể cài đặt ngăn xếp LAMP thay vì LEMP.

Tuy nhiên, cá nhân tôi thích sử dụng máy chủ web Nginx vì nó được viết riêng để giải quyết các hạn chế về hiệu suất của máy chủ web Apache.

Bắt đầu nào!

Bước 1: Mở phần mềm Bitvise SSH Client trên máy tính của bạn

Bitvise SSH Client

Bước 2: Đăng nhập vào máy chủ của bạn

Trước tiên, bạn cần lấy thông tin “IP Address” và “Password” trong tài khoản Vultr.

Nhấp vào phiên bản máy chủ bạn vừa thiết lập:

Máy chủ Vultr

Màn hình sẽ chuyển qua một giao diện mới:

Thông tin máy chủ

Sau đó, bạn sao chép thông tin “IP Address” và dán vào ô “Host” của phần mềm Bitvise SSH Client vừa mở.

Trong ô “Port” bạn điền số 22, các phần khác để mặc định.

Tiếp theo, bạn nhấp vào nút “Login”.

Đăng nhập máy chủ với Bitvise SSH Client

Một cửa sổ bật lên hiện ra, bạn điền thông tin “Password” ở trên vào ô “Password” rồi nhấp vào nút “OK”.

Đăng nhập máy chủ với Bitvise SSH Client

Lúc này, màn hình hiện ra hai giao diện:

Giao diện thứ nhất là cửa sổ SFTP, bạn sẽ sử dụng nó để quản lý các tệp trên máy chủ và trang web của mình.

Bitvise SFTP

Local files (1) là các tệp trên máy tính của bạn. Bạn có thể di chuột để kéo những tệp bên này sang bên phần Remote file (2), là các tệp trên máy chủ và trang web của bạn.

Ngược lại, bạn cũng có thể di chuột để kéo các tệp trên máy chủ và trang web của bạn sang bên phần Local files.

Giao diện thứ hai là terminal console, bạn sẽ sử dụng nó để thực hiện các lệnh code cài đặt cho máy chủ của mình.

Bitvise xterm

Trong quá trình thao tác cài đặt, bạn có thể mở lại 2 giao diện này bất cứ lúc nào bằng cách nhấp chuột trái vào:

Bật lại SFTP window và terminal console

(1) Terminal console

(2) Cửa sổ SFTP

Bước 3: Cài đặt máy chủ web Nginx

Tất cả phần mềm được sử dụng trong quy trình này sẽ đến từ kho lưu trữ gói mặc định của Ubuntu.

Điều này có nghĩa là bạn có thể sử dụng APT để hoàn thành các cài đặt cần thiết.

Đầu tiên, bạn gõ câu lệnh sau vào terminal console:

MẸO

Bạn có thể copy đoạn code bên dưới rồi nhấp chuột phải vào terminal console, nó sẽ tự dán đoạn code của bạn vào.

sudo apt update

Màn hình hiển thị:

root@marcomtoday:~# sudo apt update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:2 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:3 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:4 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [1,428 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1,763 kB]
Get:7 http://security.ubuntu.com/ubuntu bionic-security/main i386 Packages [861 kB]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/main Translation-en [281 kB]
Get:9 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [173 kB]
Get:10 http://security.ubuntu.com/ubuntu bionic-security/restricted Translation-en [22.8 kB]
Get:11 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,091 kB]
Get:12 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [244 kB]
Get:13 http://archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [1,163 kB]
Get:14 http://archive.ubuntu.com/ubuntu bionic-updates/main Translation-en [373 kB]
Get:15 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [196 kB]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/restricted Translation-en [26.4 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1,694 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1,548 kB]
Get:19 http://archive.ubuntu.com/ubuntu bionic-updates/universe Translation-en [356 kB]
Fetched 11.5 MB in 3s (3,318 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
21 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@marcomtoday:~#

Gõ tiếp câu lệnh:

sudo apt install nginx

Màn hình hiển thị:

root@marcomtoday:~# sudo apt install nginx
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8
  libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
  libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx-common nginx-core
Suggested packages:
  libgd-tools fcgiwrap nginx-doc ssl-cert
The following NEW packages will be installed:
  fontconfig-config fonts-dejavu-core libfontconfig1 libgd3 libjbig0 libjpeg-turbo8 libjpeg8
  libnginx-mod-http-geoip libnginx-mod-http-image-filter libnginx-mod-http-xslt-filter
  libnginx-mod-mail libnginx-mod-stream libtiff5 libwebp6 libxpm4 nginx nginx-common nginx-core
0 upgraded, 18 newly installed, 0 to remove and 21 not upgraded.
Need to get 2,462 kB of archives.
After this operation, 8,210 kB of additional disk space will be used.
Do you want to continue? [Y/n]

Bạn gõ chữ “Y” và nhấn phím Enter. Máy chủ sẽ thực hiện cài đặt Nginx.

Màn hình hiển thị:

Do you want to continue? [Y/n] Y
Unpacking libnginx-mod-stream (1.14.0-0ubuntu1.7) ...
Selecting previously unselected package nginx-core.
Preparing to unpack .../16-nginx-core_1.14.0-0ubuntu1.7_amd64.deb ...
Unpacking nginx-core (1.14.0-0ubuntu1.7) ...
Selecting previously unselected package nginx.
Preparing to unpack .../17-nginx_1.14.0-0ubuntu1.7_all.deb ...
Unpacking nginx (1.14.0-0ubuntu1.7) ...
Setting up libjbig0:amd64 (2.1-3.1build1) ...
Setting up fonts-dejavu-core (2.37-1) ...
Setting up nginx-common (1.14.0-0ubuntu1.7) ...
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /lib/systemd/system/nginx.service.
Setting up libjpeg-turbo8:amd64 (1.5.2-0ubuntu5.18.04.4) ...
Setting up libnginx-mod-mail (1.14.0-0ubuntu1.7) ...
Setting up libxpm4:amd64 (1:3.5.12-1) ...
Setting up libnginx-mod-http-xslt-filter (1.14.0-0ubuntu1.7) ...
Setting up libnginx-mod-http-geoip (1.14.0-0ubuntu1.7) ...
Setting up libwebp6:amd64 (0.6.1-2) ...
Setting up libjpeg8:amd64 (8c-2ubuntu8) ...
Setting up fontconfig-config (2.12.6-0ubuntu2) ...
Setting up libnginx-mod-stream (1.14.0-0ubuntu1.7) ...
Setting up libtiff5:amd64 (4.0.9-5ubuntu0.3) ...
Setting up libfontconfig1:amd64 (2.12.6-0ubuntu2) ...
Setting up libgd3:amd64 (2.2.5-4ubuntu0.4) ...
Setting up libnginx-mod-http-image-filter (1.14.0-0ubuntu1.7) ...
Setting up nginx-core (1.14.0-0ubuntu1.7) ...
Setting up nginx (1.14.0-0ubuntu1.7) ...
Processing triggers for systemd (237-3ubuntu10.43) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ufw (0.36-0ubuntu0.18.04.1) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for libc-bin (2.27-3ubuntu1.3) ...
root@marcomtoday:~#

Vì bạn chưa cấu hình SSL cho máy chủ của mình, bạn sẽ chỉ cần cho phép lưu lượng truy cập chạy trên cổng 80. Nếu bạn cấu hình SSL, bạn cần cho phép lưu lượng truy cập chạy trên cổng 443.

Kích hoạt tính năng này bằng cách nhập:

sudo ufw allow 'Nginx HTTP'

Màn hình hiển thị:

root@marcomtoday:~# sudo ufw allow 'Nginx HTTP'
Rules updated
Rules updated (v6)
root@marcomtoday:~#

Bây giờ, bạn có thể kiểm tra xem máy chủ có đang hoạt động hay không bằng cách truy cập vào tên miền hoặc địa chỉ IP công khai của máy chủ trong trình duyệt web của bạn.

Trong trường hợp này, IP của tôi là 149.28.148.229 (chính là IP Address mà bạn sử dụng để đăng nhập Bitvise SSH Client). Và kết quả là:

Cài đặt máy chủ web Nginx

Điều đó cho thấy, bạn đã cài đặt máy chủ web Nginx thành công.

MẸO

Nếu những dòng code dài trên terminal console khiến bạn bị bối rối, bạn có thể gõ lệnh clear + nhấn phím Enter để xóa hết chúng.

Bước 4: Cài đặt MySQL để quản lý dữ liệu trang web

Bây giờ bạn đã có một máy chủ web, bạn cần cài đặt MySQL (một hệ quản trị cơ sở dữ liệu) để lưu trữ và quản lý dữ liệu cho trang web của bạn.

Cài đặt MySQL bằng cách gõ lệnh:

sudo apt install mysql-server

Màn hình hiển thị:

root@marcomtoday:~# sudo apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
  libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl
  mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Suggested packages:
  libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
  libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl
  mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7
  mysql-server-core-5.7
0 upgraded, 21 newly installed, 0 to remove and 21 not upgraded.
Need to get 19.7 MB of archives.
After this operation, 157 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Bạn gõ chữ “Y” và nhấn phím Enter. Máy chủ sẽ thực hiện cài đặt MySQL.

Màn hình hiển thị những dòng cuối như sau:

Do you want to continue? [Y/n] Y
Unpacking libnginx-mod-stream (1.14.0-0ubuntu1.7) ...
Selecting previously unselected package nginx-core.
root@marcomtoday:~# sudo apt install mysql-server
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
  libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl
  mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server-5.7 mysql-server-core-5.7
Suggested packages:
  libdata-dump-perl libipc-sharedcache-perl libwww-perl mailx tinyca
The following NEW packages will be installed:
  libaio1 libcgi-fast-perl libcgi-pm-perl libencode-locale-perl libevent-core-2.1-6 libfcgi-perl
  libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl
  libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libtimedate-perl liburi-perl
  mysql-client-5.7 mysql-client-core-5.7 mysql-common mysql-server mysql-server-5.7
  mysql-server-core-5.7
0 upgraded, 21 newly installed, 0 to remove and 21 not upgraded.
Need to get 19.7 MB of archives.
After this operation, 157 MB of additional disk space will be used.
Unpacking libhttp-message-perl (6.14-1) ...
Selecting previously unselected package mysql-server.
Preparing to unpack .../14-mysql-server_5.7.32-0ubuntu0.18.04.1_all.deb ...
Unpacking mysql-server (5.7.32-0ubuntu0.18.04.1) ...
Setting up libhtml-tagset-perl (3.20-3) ...
Setting up libevent-core-2.1-6:amd64 (2.1.8-stable-4build1) ...
Setting up libencode-locale-perl (1.05-1) ...
Setting up libtimedate-perl (2.3000-2) ...
Setting up libio-html-perl (1.001-1) ...
Setting up liblwp-mediatypes-perl (6.02-1) ...
Setting up libaio1:amd64 (0.3.110-5ubuntu0.1) ...
Setting up liburi-perl (1.73-1) ...
Setting up libhtml-parser-perl (3.72-3build1) ...
Setting up libcgi-pm-perl (4.38-1) ...
Setting up mysql-client-core-5.7 (5.7.32-0ubuntu0.18.04.1) ...
Setting up libfcgi-perl (0.78-2build1) ...
Setting up libhttp-date-perl (6.02-1) ...
Setting up libhtml-template-perl (2.97-1) ...
Setting up mysql-server-core-5.7 (5.7.32-0ubuntu0.18.04.1) ...
Setting up libcgi-fast-perl (1:2.13-1) ...
Setting up libhttp-message-perl (6.14-1) ...
Setting up mysql-client-5.7 (5.7.32-0ubuntu0.18.04.1) ...
Setting up mysql-server-5.7 (5.7.32-0ubuntu0.18.04.1) ...
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Renaming removed key_buffer and myisam-recover options (if present)
Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.
Setting up mysql-server (5.7.32-0ubuntu0.18.04.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.3) ...
Processing triggers for systemd (237-3ubuntu10.43) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ureadahead (0.100.0-21) ...
root@marcomtoday:~#

Phần mềm cơ sở dữ liệu MySQL hiện đã được cài đặt nhưng cấu hình của nó vẫn chưa hoàn chỉnh.

Để bảo mật cài đặt, MySQL đi kèm với một tập lệnh sẽ hỏi liệu bạn có muốn sửa đổi một số mặc định không an toàn hay không.

Bắt đầu tập lệnh bằng cách nhập:

sudo mysql_secure_installation

Màn hình hiển thị:

root@marcomtoday:~# sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Đầu tiên, tập lệnh này sẽ hỏi bạn có muốn cấu hình VALIDATE PASSWORD? Đây là lúc bạn xem xét có nên thay đổi mật khẩu root mặc định hay không.

Người dùng root này có toàn quyền truy cập và các quyền đối với hệ điều hành của VPS. Nhờ đó, hacker có thể xâm hại vào VPS.

Bạn gõ chữ “Y” để đồng ý (khuyến nghị) hoặc bất cứ điều gì khác nếu không, và nhấn phím Enter.

Khi bạn chọn “Y”, tập lệnh sẽ yêu cầu bạn chọn mức độ mạnh của mật khẩu. Màn hình hiển thị:

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
  • LOW (0): Là cấp độ thấp nhất. Mật khẩu tối thiểu 8 ký tự.
  • MEDIUM (1): Là cấp độ trung bình. Mật khẩu tối thiểu 8 ký tự, bao gồm số, chữ in hoa, chữ thườngký tự đặc biệt.
  • STRONG (2): Là cấp độ mạnh nhất. Mật khẩu tối thiểu 8 ký tự, bao gồm số, chữ hoa, chữ thường, ký tự đặc biệt và dựa trên các từ thông dụng trong từ điển.

Tôi thường chọn “1” để giữ an toàn vì nếu chọn “2” thì việc đặt mật khẩu mới cũng sẽ trở nên khó khăn bởi độ khó của nó.

Màn hình hiển thị:

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Please set the password for root here.

New password:

Tiếp theo, bạn gõ mật khẩu root mới của mình và nhấn phím Enter. Vì lý do bảo mật nên bạn sẽ không nhìn thấy các ký tự khi gõ.

Ví dụ: Quan57906521^ (mật khẩu này đáp ứng tiêu chí của tùy chọn MEDIUM).

Sau đó, tập lệnh sẽ yêu cầu bạn nhập lại mật khẩu của mình. Khi bạn nhấn phím Enter, màn hình sẽ hiển thị:

Re-enter new password:

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :

Đối với câu hỏi còn lại, bạn nên gõ “Y” và nhấn phím Enter. Thao tác này sẽ xóa một số người dùng ẩn danh và cơ sở dữ liệu thử nghiệm, vô hiệu hóa đăng nhập root từ xa và tải các quy tắc mới.

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.

All done!
root@marcomtoday:~#

Trong các hệ thống Ubuntu chạy MySQL 5.7 (và các phiên bản mới hơn), người dùng MySQL root được xác thực bằng cách sử dụng plugin auth_socket theo mặc định chứ không phải bằng mật khẩu.

Nếu việc sử dụng plugin auth_socket để truy cập MySQL phù hợp với quy trình làm việc của bạn, bạn có thể chuyển sang bước Bước 5 (cài đặt PHP).

Tuy nhiên, nếu bạn thích sử dụng mật khẩu khi kết nối với MySQL dưới dạng root, bạn sẽ cần chuyển phương thức xác thực của nó từ auth_socket sang mysql_native_password.

Cá nhân tôi thường sử dụng mật khẩu khi kết nối với MySQL dưới dạng root.

Để thực hiện việc này, hãy mở lời nhắc MySQL từ thiết bị đầu cuối của bạn.

Gõ lệnh sau vào terminal console:

sudo mysql

Màn hình hiển thị:

root@marcomtoday:~# sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi tài khoản người dùng MySQL của bạn sử dụng bằng lệnh sau:

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

Màn hình hiển thị:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             |                                           | auth_socket           | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *21FE6B48B889E5897627A973B7B779836AE95416 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

mysql>

Trong ví dụ này, bạn có thể thấy người dùng root trên thực tế xác thực bằng cách sử dụng plugin auth_socket.

Để cấu hình tài khoản root được xác thực bằng mật khẩu, hãy chạy lệnh ALTER USER sau:

Lưu ý

Thay password thành mật khẩu mà bạn đã đặt lại ở trên. Lần này khi bạn gõ mật khẩu, nó sẽ được hiển thị. Vì vậy, bạn cần chú ý an toàn nếu bạn đang thao tác ở nơi công cộng.

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

Màn hình hiển thị (Quan57906521^ là mật khẩu ví dụ mà tôi đã đặt):

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Quan57906521^';
Query OK, 0 rows affected (0.00 sec)

mysql>

Sau đó, chạy lệnh FLUSH PRIVILEGES để yêu cầu máy chủ tải lại các bảng và đưa các thay đổi mới của bạn có hiệu lực:

FLUSH PRIVILEGES;

Màn hình hiển thị:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql>

Tiếp theo, bạn cần kiểm tra lại các phương thức xác thực được từng người dùng của bạn sử dụng để xác nhận rằng root không còn xác thực bằng plugin auth_socket nữa. Gõ lệnh sau vào terminal console:

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

Màn hình hiển thị:

mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *EB686AB65D0655AB8D3ED3A28AF9C32F1D8CF8EB | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *50FE41EA3128F3ED04D1EF35CD0E8F782BBA19A9 | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

mysql>

Bạn có thể thấy trong đầu ra, rằng người dùng MySQL root hiện xác thực bằng mật khẩu (mysql_native_password).

Bằng cách gõ lệnh sau và nhấn phím Enter, bạn có thể thoát MySQL:

exit

Màn hình hiển thị:

mysql> exit
Bye
root@marcomtoday:~#

Bây giờ, hệ thống cơ sở dữ liệu của bạn đã được thiết lập xong và bạn có thể chuyển sang cài đặt PHP.

Bước 5: Cài đặt PHP và cấu hình Nginx để sử dụng bộ xử lý PHP

Sau khi bạn đã có máy chủ web Nginx (để phục vụ các trang) và MySQL (để lưu trữ và quản lý dữ liệu), bạn sẽ cần một thứ gì đó có thể tạo nội dung động.

Bởi vậy, đây là lúc PHP phát huy tác dụng.

Vì Nginx không chứa native PHP processing như một số máy chủ web khác, bạn sẽ cần phải cài đặt php-fpm (viết tắt của fastCGI process manager).

Ngoài ra, bạn cũng sẽ cần thêm php-mysql (một mô-đun PHP cho phép PHP giao tiếp với cơ sở dữ liệu dựa trên MySQL).

Để cài đặt php-fpm và mô-đun php-mysql, bạn gõ lệnh sau vào terminal console:

sudo apt install php-fpm php-mysql

Màn hình hiện ra:

root@marcomtoday:~# sudo apt install php-fpm php-mysql
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libsodium23 php-common php7.2-cli php7.2-common php7.2-fpm php7.2-json php7.2-mysql
  php7.2-opcache php7.2-readline
Suggested packages:
  php-pear
The following NEW packages will be installed:
  libsodium23 php-common php-fpm php-mysql php7.2-cli php7.2-common php7.2-fpm php7.2-json
  php7.2-mysql php7.2-opcache php7.2-readline
0 upgraded, 11 newly installed, 0 to remove and 21 not upgraded.
Need to get 4,182 kB of archives.
After this operation, 18.1 MB of additional disk space will be used.
Do you want to continue? [Y/n]

Bạn gõ chữ “Y” và nhấn phím Enter. Máy chủ sẽ thực hiện cài đặt PHP.

Màn hình hiển thị:

Reading package lists... Done
Creating config file /etc/php/7.2/mods-available/readline.ini with new version
Setting up php7.2-json (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/json.ini with new version
Setting up php7.2-opcache (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/opcache.ini with new version
Setting up php7.2-mysql (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/mysqlnd.ini with new version

Creating config file /etc/php/7.2/mods-available/mysqli.ini with new version

Creating config file /etc/php/7.2/mods-available/pdo_mysql.ini with new version
Setting up php7.2-cli (7.2.24-0ubuntu0.18.04.7) ...
update-alternatives: using /usr/bin/php7.2 to provide /usr/bin/php (php) in auto mode
update-alternatives: using /usr/bin/phar7.2 to provide /usr/bin/phar (phar) in auto mode
update-alternatives: using /usr/bin/phar.phar7.2 to provide /usr/bin/phar.phar (phar.phar) in auto mode

Creating config file /etc/php/7.2/cli/php.ini with new version
Setting up php-mysql (1:7.2+60ubuntu1) ...
Setting up php7.2-fpm (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/fpm/php.ini with new version
Created symlink /etc/systemd/system/multi-user.target.wants/php7.2-fpm.service → /lib/systemd/system/php7.2-fpm.service.
Setting up php-fpm (1:7.2+60ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for libc-bin (2.27-3ubuntu1.3) ...
Processing triggers for systemd (237-3ubuntu10.43) ...
root@marcomtoday:~#

Như vậy, bạn đã cài đặt tất cả các thành phần của ngăn xếp LEMP bắt buộc.

Tuy nhiên, bạn vẫn cần thực hiện một vài thay đổi cấu hình để yêu cầu Nginx sử dụng bộ xử lý PHP cho nội dung động.

Để thực hiện việc này, bạn mở cửa sổ SFTP và mở tệp cấu hình khối máy chủ mới trong thư mục /etc/nginx/sites-available.

Cấu hình Nginx

Ban đầu, trong thư mục này chỉ có tệp cấu hình khối máy chủ mặc định.

Bạn cần tạo một tệp cấu hình khối máy chủ mới bằng cách chạy lệnh sau vào terminal console:

Lưu ý

Thay example.com thành tên miền của bạn. Bạn cũng cần truy cập vào phần quản lý DNS (trong website mà bạn mua tên miền) để trỏ tên miền về IP Address VPS của bạn.

Trong ví dụ này, tôi sử dụng tên miền “marcomtoday.com”.

Trỏ tên miền về IP Address VPS Vultr
sudo nano /etc/nginx/sites-available/example.com

Màn hình hiển thị:

Chỉnh sửa tệp cấu hình khối máy chủ mới

Bằng cách chỉnh sửa tệp cấu hình khối máy chủ mới, thay vì chỉnh sửa tệp mặc định, bạn có thể dễ dàng khôi phục cấu hình mặc định nếu cần.

Thêm nội dung sau vào tệp cấu hình khối máy chủ mới của bạn:

Lưu ý

Thay example.com thành tên miền của bạn.

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name example.com;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }
}

Bạn muốn hiểu hơn về những gì bạn vừa thêm?

  • listen: Xác định cổng nào mà Nginx sẽ lắng nghe. Trong trường hợp này, nó sẽ lắng nghe trên cổng 80 (cổng mặc định cho HTTP).
  • root: Xác định gốc tài liệu nơi lưu trữ các tệp do trang web cung cấp.
  • index: Cấu hình Nginx để ưu tiên cung cấp các tệp có tên index.php khi tệp chỉ mục được yêu cầu.
  • server_name: Xác định khối máy chủ nào sẽ được sử dụng cho một yêu cầu nhất định đến máy chủ của bạn. Trỏ chỉ thị này đến tên miền của bạn.
  • location /: Khối vị trí đầu tiên bao gồm một chỉ thị try_files, kiểm tra sự tồn tại của các tệp phù hợp với yêu cầu URI. Nếu Nginx không thể tìm thấy tệp thích hợp, nó sẽ trả về lỗi 404.
  • location ~ \.php$: Khối vị trí này xử lý quá trình PHP thực tế bằng cách trỏ Nginx đến tệp cấu hình fastcgi-php.conf và tệp php7.2-fpm.sock (tệp này khai báo socket nào được liên kết với php-fpm).
  • location ~ /\.ht: Khối vị trí cuối cùng xử lý các tệp .htaccess mà Nginx không xử lý. Bằng cách thêm chỉ thị deny all, nếu bất kỳ tệp .htaccess nào tình cờ tìm thấy đường vào gốc tài liệu, chúng sẽ không được cung cấp cho khách truy cập.

Khi bạn chỉnh sửa xong, bạn có thể lưu và đóng tệp bằng cách gõ tổ hợp phím CTRL+X, sau đó Y và ENTER để xác nhận.

Lúc này, khi kiểm tra lại cửa sổ SFTP, bạn sẽ thấy có thêm khối máy chủ mới vừa tạo:

Kiểm tra khối máy chủ mới tạo trên Nginx của Vultr

Tiếp theo, kích hoạt khối máy chủ mới của bạn bằng cách liên kết đến tệp đến thư mục /etc/nginx/sites-enabled/ của Nginx:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Sau đó, hủy liên kết tệp cấu hình mặc định khỏi thư mục /sites-enabled/:

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

Kiểm tra tệp cấu hình mới của bạn để tìm lỗi cú pháp bằng cách nhập:

sudo nginx -t

hoặc:

nginx -t

Nếu màn hình hiển thị như sau, tức là bạn không gặp lỗi cú pháp nào cả:

root@marcomtoday:~# sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@marcomtoday:~#

Nếu bất kỳ lỗi nào được báo cáo, hãy quay lại tệp cấu hình của bạn để xem lại nội dung của nó trước khi tiếp tục.

Khi bạn đã sẵn sàng, hãy tải lại Nginx để áp dụng các thay đổi:

sudo systemctl reload nginx

hoặc:

service nginx restart

Điều này kết thúc quá trình cài đặt và cấu hình ngăn xếp LEMP của bạn.

Bước 6: Tạo tệp PHP để kiểm tra cấu hình

Bạn cần kiểm tra ngăn xếp LEMP để xác thực rằng Nginx có thể chuyển tệp .php cho bộ xử lý PHP một cách chính xác.

Để làm điều này, hãy tạo một tệp PHP thử nghiệm trong gốc tài liệu của bạn. Mở một tệp mới có tên info.php trong gốc tài liệu của bạn bằng cách chạy lệnh sau:

sudo nano /var/www/html/info.php

Nhập các dòng sau vào tệp mới. Đây là mã PHP hợp lệ sẽ trả về thông tin về máy chủ của bạn:

<?php
phpinfo();

Khi bạn hoàn tất, bạn có thể lưu và đóng tệp bằng cách gõ tổ hợp phím CTRL+X, sau đó YENTER để xác nhận.

Bây giờ, bạn có thể truy cập trang này trong trình duyệt web của mình bằng cách truy cập vào địa chỉ IP của VPS, đằng sau thêm /info.php.

Ví dụ trong trường hợp của tôi: http://149.28.148.229/info.php

Bạn sẽ thấy một trang web được tạo bởi PHP với thông tin về máy chủ của bạn:

Trang web được tạo bởi PHP

Nếu bạn thấy một trang giống như thế này, bạn đã thiết lập xử lý PHP với Nginx thành công.

Sau khi xác minh rằng Nginx hiển thị trang một cách chính xác, tốt nhất bạn nên xóa tệp bạn đã tạo vì nó chứa thông tin nhạy cảm về môi trường PHP và máy chủ Ubuntu của bạn. Bạn có thể tạo lại tệp này nếu cần nó sau này.

Bạn có thể sử dụng rm để xóa tệp đó:

sudo rm /var/www/html/info.php

Bây giờ bạn có một ngăn xếp LEMP được cấu hình đầy đủ và hoạt động trên máy chủ Ubuntu 18.04 của mình.

3. Cách cài đặt một website WordPress mới

Khi bạn đã cấu hình xong ngăn xếp LEMP, đó là lúc máy chủ VPS Vultr của bạn đã sẵn sàng để cài đặt WordPress.

Bước 1: Tạo cơ sở dữ liệu MySQL và người dùng cho WordPress

WordPress sử dụng MySQL để quản lý cũng như lưu trữ thông tin trang web và người dùng.

Mặc dù bạn đã cài đặt MySQL nhưng bạn cần tạo cơ sở dữ liệu và người dùng cho WordPress để sử dụng.

Để bắt đầu, bạn hãy đăng nhập vào tài khoản root:

mysql -u root -p

Màn hình hiển thị:

root@marcomtoday:~# mysql -u root -p
Enter password:

Bạn nhập mật khẩu root mà bạn đã thiết lập trong khi cài đặt MySQL vào và nhấn phím Enter. Màn hình hiển thị:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Bây giờ, bạn sẽ tạo một cơ sở dữ liệu riêng mà WordPress có thể kiểm soát.

Bạn có thể tạo cơ sở dữ liệu (database) cho WordPress bằng cách nhập:

Lưu ý

Thay marcomtoday thành tên cơ sở dữ liệu mới của bạn. Tôi thường đặt tên cơ sở dữ liệu là tên trang web cho dễ nhớ và quản lý.

CREATE DATABASE marcomtoday DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Màn hình hiển thị:

mysql> CREATE DATABASE marcomtoday DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Query OK, 1 row affected (0.00 sec)

mysql>

Tiếp theo, bạn sẽ tạo một tài khoản người dùng MySQL (username) riêng biệt mà bạn sẽ sử dụng riêng để hoạt động trên cơ sở dữ liệu mới của mình.

Lưu ý

Thay marcomtoday thành tên cơ sở dữ liệu mới mà bạn vừa tạo.

Thay marcomtodayuser thành tên người dùng mới mà bạn vừa tạo.

Thay HY03101996@ thành mật khẩu cho tài khoản người dùng của bạn.

GRANT ALL ON marcomtoday.* TO 'marcomtodayuser'@'localhost' IDENTIFIED BY 'HY03101996@';

Màn hình hiển thị:

mysql> GRANT ALL ON marcomtoday.* TO 'marcomtodayuser'@'localhost' IDENTIFIED BY 'HY03101996@';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>

Tiếp theo, bạn cần chạy lệnh FLUSH PRIVILEGES để phiên bản hiện tại của MySQL biết về những thay đổi gần đây mà bạn đã thực hiện:

FLUSH PRIVILEGES;

Sau cùng, thoát khỏi MySQL bằng cách nhập:

EXIT;

Bước 2: Cài đặt các tiện ích mở rộng PHP bổ sung

Khi thiết lập ngăn xếp LEMP, bạn chỉ yêu cầu một bộ tiện ích mở rộng rất tối thiểu để PHP có thể giao tiếp với MySQL.

Tuy nhiên, WordPress và nhiều plugin của nó tận dụng các tiện ích mở rộng PHP (PHP extensions) bổ sung.

Vì vậy, bạn cần cài đặt một số tiện ích mở rộng PHP phổ biến nhất để sử dụng với WordPress.

Bằng cách chạy các lệnh sau vào terminal console, bạn có thể tải xuống và cài đặt:

sudo apt update

Màn hình hiển thị:

root@marcomtoday:~# sudo apt update
Get:1 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB]
Hit:2 http://archive.ubuntu.com/ubuntu bionic InRelease
Get:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages [1,452 kB]
Get:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88.7 kB]
Get:5 http://archive.ubuntu.com/ubuntu bionic-backports InRelease [74.6 kB]
Get:6 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages [1,787 kB]
Get:7 http://security.ubuntu.com/ubuntu bionic-security/main i386 Packages [870 kB]
Get:8 http://security.ubuntu.com/ubuntu bionic-security/main Translation-en [284 kB]
Get:9 http://security.ubuntu.com/ubuntu bionic-security/restricted amd64 Packages [185 kB]
Get:10 http://security.ubuntu.com/ubuntu bionic-security/restricted Translation-en [24.3 kB]
Get:11 http://security.ubuntu.com/ubuntu bionic-security/universe i386 Packages [968 kB]
Get:12 http://security.ubuntu.com/ubuntu bionic-security/universe amd64 Packages [1,094 kB]
Get:13 http://security.ubuntu.com/ubuntu bionic-security/universe Translation-en [244 kB]
Get:14 http://security.ubuntu.com/ubuntu bionic-security/multiverse amd64 Packages [12.8 kB]
Get:15 http://security.ubuntu.com/ubuntu bionic-security/multiverse Translation-en [2,872 B]
Get:16 http://archive.ubuntu.com/ubuntu bionic-updates/main i386 Packages [1,171 kB]
Get:17 http://archive.ubuntu.com/ubuntu bionic-updates/main Translation-en [376 kB]
Get:18 http://archive.ubuntu.com/ubuntu bionic-updates/restricted amd64 Packages [206 kB]
Get:19 http://archive.ubuntu.com/ubuntu bionic-updates/restricted Translation-en [27.9 kB]
Get:20 http://archive.ubuntu.com/ubuntu bionic-updates/universe amd64 Packages [1,697 kB]
Get:21 http://archive.ubuntu.com/ubuntu bionic-updates/universe i386 Packages [1,548 kB]
Get:22 http://archive.ubuntu.com/ubuntu bionic-updates/universe Translation-en [357 kB]
Get:23 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse amd64 Packages [35.6 kB]
Get:24 http://archive.ubuntu.com/ubuntu bionic-updates/multiverse Translation-en [7,180 B]
Fetched 12.6 MB in 5s (2,715 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
24 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@marcomtoday:~#
sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

Màn hình hiển thị:

root@marcomtoday:~# sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libxmlrpc-epi0 libzip4 php7.2-curl php7.2-gd php7.2-intl php7.2-mbstring php7.2-soap php7.2-xml
  php7.2-xmlrpc php7.2-zip
The following NEW packages will be installed:
  libxmlrpc-epi0 libzip4 php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip
  php7.2-curl php7.2-gd php7.2-intl php7.2-mbstring php7.2-soap php7.2-xml php7.2-xmlrpc php7.2-zip
0 upgraded, 18 newly installed, 0 to remove and 24 not upgraded.
Need to get 1,001 kB of archives.
After this operation, 3,719 kB of additional disk space will be used.
Do you want to continue? [Y/n]

Bạn gõ chữ “Y” và nhấn phím Enter. Máy chủ sẽ thực hiện cài đặt các tiện ích mở rộng PHP đã chỉ định.

Màn hình hiển thị:

Creating config file /etc/php/7.2/mods-available/xsl.ini with new version
Setting up php7.2-curl (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/curl.ini with new version
Setting up php-curl (1:7.2+60ubuntu1) ...
Setting up php7.2-mbstring (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/mbstring.ini with new version
Setting up php-xml (1:7.2+60ubuntu1) ...
Setting up php7.2-soap (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/soap.ini with new version
Setting up libzip4:amd64 (1.1.2-1.1) ...
Setting up libxmlrpc-epi0:amd64 (0.54.2-1.2) ...
Setting up php-mbstring (1:7.2+60ubuntu1) ...
Setting up php7.2-intl (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/intl.ini with new version
Setting up php-gd (1:7.2+60ubuntu1) ...
Setting up php-intl (1:7.2+60ubuntu1) ...
Setting up php7.2-xmlrpc (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/xmlrpc.ini with new version
Setting up php7.2-zip (7.2.24-0ubuntu0.18.04.7) ...

Creating config file /etc/php/7.2/mods-available/zip.ini with new version
Setting up php-soap (1:7.2+60ubuntu1) ...
Setting up php-zip (1:7.2+60ubuntu1) ...
Setting up php-xmlrpc (1:7.2+60ubuntu1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.3) ...
Processing triggers for php7.2-fpm (7.2.24-0ubuntu0.18.04.7) ...
root@marcomtoday:~#

Lúc này, bạn hãy khởi động lại quy trình PHP-FPM để bộ xử lý PHP đang chạy có thể tận dụng các tính năng mới được cài đặt:

sudo systemctl restart php7.2-fpm

Như vậy, bạn đã cài đặt xong tất cả các tiện ích mở rộng PHP cần thiết trên máy chủ và sẵn sàng tải xuống các tệp của WordPress.

Bước 3: Tải xuống WordPress

Trước tiên, bạn mở cửa sổ SFTP lên và tạo một thư mục mới để ghi các tệp của trang web.

(1) Vào thư mục /var/www/html.

(2) Nhấp chuột phải và chọn “Create folder”. Tôi thường đặt tên thư mục là tên miền để dễ quản lý.

Tạo folder mới

Vì lý do bảo mật, bạn nên tải phiên bản WordPress mới nhất từ ​​trang web của họ.

Mở terminal console và truy cập vào thư mục vừa tạo:

Lưu ý

Thay marcomtoday.com thành tên miền của bạn nếu tên thư mục bạn vừa tạo là tên miền.

cd /var/www/html/marcomtoday.com

Sau đó, tải xuống bản phát hành nén bằng cách nhập:

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

Màn hình hiển thị:

root@marcomtoday:/var/www/html/marcomtoday.com# curl -LO https://wordpress.org/latest.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14.7M  100 14.7M    0     0  5462k      0  0:00:02  0:00:02 --:--:-- 5462k
root@marcomtoday:/var/www/html/marcomtoday.com#

Giải nén tệp vừa tải xuống để tạo cấu trúc thư mục WordPress:

tar xzvf latest.tar.gz

Màn hình hiển thị:

...
wordpress/wp-admin/options-permalink.php
wordpress/wp-admin/widgets.php
wordpress/wp-admin/setup-config.php
wordpress/wp-admin/install.php
wordpress/wp-admin/admin-header.php
wordpress/wp-admin/post-new.php
wordpress/wp-admin/themes.php
wordpress/wp-admin/options-reading.php
wordpress/wp-trackback.php
wordpress/wp-comments-post.php
root@marcomtoday:/var/www/html/marcomtoday.com#

Tiếp theo, bạn sẽ chuyển các tệp này vào thư mục trang web của bạn.

Trước khi làm điều đó, bạn có thể sao chép tệp cấu hình mẫu sang tên tệp mà WordPress thực sự đọc:

cp /var/www/html/marcomtoday.com/wordpress/wp-config-sample.php /var/www/html/marcomtoday.com/wordpress/wp-config.php

Bây giờ, bạn có thể sao chép toàn bộ nội dung của thư mục vào thư mục trang web.

Bạn sẽ sử dụng -a để đảm bảo các quyền của bạn được duy trì. Bạn cũng cần sử dụng dấu chấm ở cuối thư mục nguồn của mình để chỉ ra rằng mọi thứ trong thư mục nên được sao chép, bao gồm mọi tệp ẩn.

sudo cp -a /var/www/html/marcomtoday.com/wordpress/. /var/www/html/marcomtoday.com

Khi bạn sao chép các tệp thì thư mục wordpress vẫn còn tồn tại, xóa thư mục này bằng cách chạy lệnh:

rm -rf /var/www/html/marcomtoday.com/wordpress

Bạn cũng cần xóa tệp nén của WordPress đã tải xuống:

rm -rf /var/www/html/marcomtoday.com/latest.tar.gz

Lúc này, cửa sổ SFTP thư mục trang web của bạn sẽ trông giống như:

Các tệp của WordPress trên Ubuntu (VPS Vultr)

Bây giờ các tệp của bạn đã có sẵn, bạn sẽ chỉ định quyền sở hữu chúng cho người dùng và nhóm www-data (do Nginx điều hành).

Sau khi chỉ định quyền, Nginx sẽ có khả năng đọc, ghi các tệp WordPress để phục vụ trang web và thực hiện cập nhật tự động.

sudo chown -R www-data:www-data /var/www/html/marcomtoday.com

Các tệp của bạn hiện nằm trong thư mục root của máy chủ và có quyền sở hữu chính xác. Tuy nhiên, bạn vẫn cần hoàn thành một số cấu hình khác.

Bước 4: Thiết lập tệp cấu hình WordPress

Tệp cấu hình của WordPress có tên là wp-config.php, nó nằm trong thư mục chính của trang web:

Thiết lập tệp cấu hình WordPress

Bước đầu tiên của việc thiết lập, bạn sẽ điều chỉnh các khóa bí mật để cung cấp một số bảo mật cho cài đặt của bạn.

WordPress cung cấp một trình tạo an toàn cho các giá trị này, bạn không phải cố gắng để nghĩ. Chúng chỉ được sử dụng trong nội bộ, vì vậy sẽ không ảnh hưởng đến khả năng sử dụng khi có các giá trị phức tạp.

Để lấy các giá trị bảo mật từ trình tạo khóa bí mật của WordPress, bạn hãy chạy lệnh sau vào terminal console:

Lưu ý

Bạn có thể tắt terminal console và mở lại bằng cách nhấp chuột trái vào biểu tượng này:

Mỗi khi bạn sử dụng lệnh này, WordPress sẽ trả về cho bạn một chuỗi giá trị khác nhau.

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

Bạn sẽ nhận lại các giá trị của riêng bạn nhưng trông giống như:

root@marcomtoday:~# curl -s https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY',         '-1P-Zi}`*v&j)B,DTBneV/C&N(9&FTcB7/=AOP)f9ys<O>|.YPws<s-]^Ibgn!n-');
define('SECURE_AUTH_KEY',  '4{48M(i{B2A+;H3]bWTZQ%5W=8[E+3v?PujZnuVl*2m*vb>S+b$@wbpRFN-.*QS<');
define('LOGGED_IN_KEY',    '[UJHh+dLvI#?~[FAc9@9|Mra2%v>,-UJ-?^%.Pom=Y|+>bi0X|6l*rLJ@]_Dp+)D');
define('NONCE_KEY',        '@=c43|/My{2j{&Hf_hPvL5oYw-[I4c13q/lS{*!-Yq&m0%Y<mzh]eKX88-J,-r4o');
define('AUTH_SALT',        'vC~--Hsq:%1SF f-LYV:C?]YfXO6h+d:2bN*nG-9)}X/#L8el@v*W>d<JGeS:@[O');
define('SECURE_AUTH_SALT', '8iw/e~>$&M;(h>-SOqz3SE-_n5nCTbY$bQwHp6]WOdF;i8ptD@3+TVEqFJG0*wT1');
define('LOGGED_IN_SALT',   '7QD? (_B|}t[[N!-JyHxDH!~k/L7_mbgT:PWCm$kT.k7tMkFXV;?_@h.&#@nG,%c');
define('NONCE_SALT',       'r>`LZ;M5.ww!!k[+4|==1#|+dr+ r43V3Hq,+,g|<qJ=x:$zy)3]XpQ+OTY3`+:i');
root@marcomtoday:~#

Đây là những dòng cấu hình mà bạn có thể dán trực tiếp vào tệp cấu hình của mình để đặt khóa an toàn.

Bây giờ, hãy mở tệp cấu hình WordPress:

Thiết lập tệp cấu hình WordPress

Tiếp theo, bạn chọn công cụ chỉnh sửa tệp là Notepad++:

Lưu ý

Mặc định, nếu bạn chọn “Edit” thì nó sẽ mở ra công cụ Notepad. Nhưng khi chọn “Edit with…”, bạn có thể nhấp vào “Browse…” rồi tìm thư mục chứa công cụ Notepad++ (trong ví dụ của tôi thì nó nằm ở ổ C của máy tính).

Chọn công cụ chỉnh sửa tệp

Tìm phần chứa các giá trị chưa được cấu hình khóa bí mật. Nó sẽ trông giống như:

Cài khóa bị mật cho tệp wp-config.php trên VPS Vultr

Xóa các dòng đó, sao chép các giá trị bên giao diện terminal console (bằng cách bôi đen):

Sao chép khóa bí mật

Và dán chúng vào vị trí các dòng đã xóa:

Dán khóa bí mật

Tiếp theo, bạn cần sửa đổi một số cài đặt kết nối cơ sở dữ liệu ở đầu tệp này.

Cài đặt kết nối cơ sở dữ liệu

Bạn sẽ phải điều chỉnh tên cơ sở dữ liệu, tên người dùng và mật khẩu mà bạn đã cấu hình trong MySQL.

Cài đặt kết nối cơ sở dữ liệu

Bạn cũng cần thêm define('FS_METHOD', 'direct'); vào trong tệp này để WordPress không nhắc nhập thông tin đăng nhập FTP (gồm địa chỉ IP và mật khẩu truy cập máy chủ) khi bạn thực hiện một số hành động.

Sau đó, bạn nhấp vào chữ Tệp trên thanh menu của Notepad++ rồi chọn Lưu và đóng tệp.

Bước 5: Cấu hình Nginx

Tiếp theo, bạn sẽ thực hiện một số điều chỉnh nhỏ đối với các tệp khối máy chủ Nginx của mình.

Đầu tiên, hãy mở tệp khối máy chủ của trang web của bạn bằng cách chạy lệnh sau:

Lưu ý

Thay marcomtoday.com thành tên miền của bạn.

sudo nano /etc/nginx/sites-available/marcomtoday.com

Trong khối server chính, bạn cần thêm một vài khối location.

Bắt đầu bằng cách tạo các khối vị trí khớp chính xác cho các yêu cầu /favicon.ico và /robots.txt.

Sao chép và dán đoạn mã sau vào tệp:

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;
}

Màn hình hiển thị:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name marcomtoday.com;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

        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ó, bạn sẽ điều chỉnh danh sách try_files để quyền kiểm soát được chuyển đến tệp index.php với các đối số yêu cầu, thay vì đặt trả về lỗi 404 làm tùy chọn mặc định.

Sao chép và dán đoạn mã sau vào tệp, đồng thời thêm dấu # vào trước dòng try_files mặc định:

try_files $uri $uri/ /index.php$is_args$args;

Màn hình hiển thị:

server {
        listen 80;
        root /var/www/html;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name marcomtoday.com;

        location / {
               #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

        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;
        }

}

Tại dòng root, bạn cũng cần thay đổi đường dẫn đến thư mục gốc trang web của bạn. Bạn cũng có thể thêm tên miền của bạn (bao gồm www) vào dòng server_name:

Lưu ý

Thay marcomtoday.com thành tên miền của bạn.

/var/www/html/marcomtoday.com

Màn hình hiển thị:

server {
        listen 80;
        root /var/www/html/marcomtoday.com;
        index index.php index.html index.htm index.nginx-debian.html;
        server_name marcomtoday.com www.marcomtoday.com;

        location / {
               #try_files $uri $uri/ =404;
                try_files $uri $uri/ /index.php$is_args$args;
        }

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

        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;
        }

}

Khi bạn hoàn tất, hãy lưu và đóng tệp bằng cách gõ tổ hợp phím CTRL+X, sau đó Y và ENTER.

Bây giờ, bạn có thể chạy lệnh sau vào terminal console để tìm lỗi cú pháp:

sudo nginx -t

Nếu không có lỗi nào được báo cáo, hãy tải lại Nginx bằng cách nhập:

sudo systemctl reload nginx

Bước 6: Hoàn tất cài đặt thông qua giao diện web

Trong trình duyệt web, bạn truy cập vào tên miền của mình và chọn ngôn ngữ bạn muốn sử dụng:

Chọn ngôn ngữ bạn muốn sử dụng

Tiếp theo, bạn sẽ đến trang thiết lập chính.

Tại đây, bạn sẽ nhập một số thông tin quan trọng, bao gồm:

  • Tên website: Chọn tên cho trang web WordPress của bạn. Ví dụ: MarCom Today.
  • Tên người dùng: Là tên bạn sẽ sử dụng để đăng nhập vào trang web của mình.

Lưu ý: Bạn không nên đặt trùng với tên cơ sở dữ liệu nhằm mục đích bảo mật. Ví dụ: quanpham1304.

  • Mật khẩu: Là mật khẩu bạn sẽ sử dụng để đăng nhập vào trang web của mình. Mặc dù nó được tạo tự động nhưng bạn nên thay đổi thành mật khẩu của mình.

Lưu ý: Bạn không nên đặt trùng với mật khẩu tài khoản root hoặc mật khẩu đăng nhập cơ sở dữ liệu nhằm mục đích bảo mật.

  • Email của bạn: Đây là email quản trị của bạn, hãy kiểm tra kỹ địa chỉ email trước khi tiếp tục.
  • Bạn có thể không chọn “Ngăn chặn các công cụ tìm kiếm đánh chỉ mục website này”.
Nhập thông tin trang web

Khi bạn nhấp vào nút “Cài đặt WordPress”, bạn sẽ được đưa đến một trang nhắc bạn đăng nhập:

Đăng nhập WordPress, website được cài đặt trên VPS Vultr

Tại trang đăng nhập, bạn điền “Tên người dùng” hoặc “Địa chỉ Email”, mật khẩu của bạn và nhập vào nút “Đăng nhập”:

Đăng nhập WordPress, website được cài đặt trên VPS Vultr

Sau khi đăng nhập, bạn sẽ được đưa đến bảng điều khiển quản trị WordPress:

Hoàn tất quá trình cài đặt một website WordPress mới trên máy chủ Ubuntu 18.04 được thiết lập tại VPS Vultr

Như vậy, bạn đã hoàn tất quá trình cài đặt một website WordPress mới trên máy chủ Ubuntu 18.04 được thiết lập tại VPS Vultr.

4. Cách chuyển WordPress từ shared hosting sang VPS

Nếu bạn đang lưu trữ website tại một nhà cung cấp shared hosting như AZDIGI và muốn chuyển trang web của mình sang VPS Vultr, phần hướng dẫn này là dành cho bạn.

Để chuyển dữ liệu web từ hosting sang VPS Vultr, bạn vẫn phải làm đầy đủ các bước nêu trên và phần này là bổ sung để hướng dẫn các bước tiếp theo của quá trình cài đặt.

Trong ví dụ này, tôi sẽ di chuyển dữ liệu website “marcomtoday.com” từ shared hosting AZDIGI sang VPS Vultr.

Đầu tiên, bạn truy cập vào giao diện cPanel của AZDIGI.

Sau đó, bạn nhấp vào “File Manager”:

Chọn File Manager trong cPanel

Tìm thư mục chứa các tệp của trang web của bạn:

Lưu ý

Nếu bạn chỉ cài đặt một website trong cPanel thì public_html (hoặc một thư mục trong đó) sẽ là thư mục chứa các tệp của trang web của bạn.

Tìm thư mục chứa các tệp của trang web của bạn

Tiếp theo, bạn chọn “Select All” và nhấp vào “Compress” để nén toàn bộ các tệp lại:

Nén các tệp của trang web lại

Bạn sẽ thấy một cửa sổ bật lên để hỏi về tùy chọn nén:

Cửa sổ bật lên hỏi về tùy chọn nén

Sau khi nén thành công, một cửa sổ sẽ bật lên. Bạn nhấp “Close” và nhấp tiếp vào “Reload” để thấy tệp sau khi nén:

Reload để thấy tệp sau khi nén

Bây giờ, bạn nhấp chuột phải vào tệp vừa nén và chọn “Download” để tải tệp xuống:

Tải xuống tệp vừa nén

Sau khi tải xuống, bạn tải lại tệp đó lên máy chủ bằng cách:

(1) Truy cập vào đường dẫn tới thư mục trang web của bạn trên máy chủ. Ví dụ của tôi là: /var/www/html/marcomtoday.com. Thay marcomtoday.com thành tên miền của bạn (nếu bạn cài theo các bước trong các phần trước).

(2) Nhấp vào tệp nén vừa tài xuống rồi di chuột từ bên trái (Local files) sang bên phải (Remote files). Thao tác này đồng nghĩa với việc bạn tải tệp lên máy chủ của Vultr.

Tải tệp nén lên máy chủ

Đợi một lát, bạn sẽ thấy tệp nén xuất hiện bên phần các tệp trang web của bạn trên máy chủ.

Để giải nén tệp này, bạn không thể dùng phương pháp giải nén thông thường như cách bạn làm trên máy tính.

Bằng cách chạy các lệnh sau trong terminal console, bạn sẽ giải nén tệp này:

Lưu ý

Thay marcomtoday.com thành tên miền của bạn.

cd /var/www/html/marcomtoday.com

Màn hình hiển thị:

root@marcomtoday:~# cd /var/www/html/marcomtoday.com
root@marcomtoday:/var/www/html/marcomtoday.com#

Nhập tiếp lệnh sau và nhấn Enter. Thao tác này cũng làm cho các tệp được giải nén ghi đè lên các tệp trước đó trên Vultr (nếu trùng tên tệp).

Lưu ý

Thay cgi-bin.tar.gz thành tên tệp nén của bạn. Tệp GZip luôn có .gz ở đuôi.

tar -xvf cgi-bin.tar.gz

Màn hình hiển thị:

...
wp-content/index.php
wp-content/upgrade/
readme.html
license.txt
wp-comments-post.php
wp-mail.php
wp-config-sample.php
root@marcomtoday:/var/www/html/marcomtoday.com#

Sau khi giải nén, bạn có thể xóa tệp nén trước đó đã tải lên máy chủ:

rm -rf /var/www/html/marcomtoday.com/cgi-bin.tar.gz

Bây giờ, bạn cần tải cơ sở dữ liệu (database) từ shared hosting lên VPS để kết nối với các tệp của trang web.

Bạn quay lại giao diện của cPanel và bạn nhấp vào “phpMyAdmin”:

Nhấp vào phpMyAdmin

Bạn có thể thấy một hoặc nhiều cơ sở dữ liệu khác nhau, bạn nhấp vào tên cơ sở dữ liệu của trang web của bạn và nhấn “Xuất”:

Lưu ý

Nếu bạn chưa biết tên cơ sở dữ liệu của trang web, bạn có thể vào lại thư mục chứa các tệp của trang web của bạn trong “File Manager”.

Sau đó, nhấp chuột phải vào tệp wp-config.php và chọn Edit. Cuộn xuống bạn sẽ thấy thông tin tên cơ sở dữ liệu của mình:

Thông tin tên cơ sở dữ liệu
Xuất cơ sở dữ liệu từ cPaanel để tải lên VPS Vultr

Khi chuyển qua giao diện xuất cơ sở dữ liệu, bạn nhấp vào nút “Thực hiện”. Máy tính sẽ tải xuống tệp SQL chứa cơ sở dữ liệu của bạn.

Xuất cơ sở dữ liệu

Sau khi tải xuống, bạn tải lại tệp SQL đó lên máy chủ tương tự như cách tải tệp nén các thư mục của trang web:

Tải tệp SQL lên máy chủ Vultr

Tiếp theo, bạn sẽ chuyển dữ liệu từ tệp SQL vừa tải lên sang một cơ sở dữ liệu mới trên Vultr.

Đầu tiên, bạn cần đăng nhập vào cơ sở dữ liệu:

mysql -u root -p

Màn hình hiển thị:

root@marcomtoday:~# mysql -u root -p
Enter password:

Bạn nhập mật khẩu root mà bạn đã thiết lập trong khi cài đặt MySQL vào và nhấn phím Enter. Màn hình hiển thị:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Bây giờ, bạn sẽ tạo một cơ sở dữ liệu riêng mà WordPress có thể kiểm soát.

Bạn có thể tạo cơ sở dữ liệu (database) cho WordPress bằng cách nhập:

Lưu ý

Vì tên cơ sở dữ liệu cũ tôi đặt là marcomtoday nên cơ sở dữ liệu mới tôi đặt là marcomtoday01. Bạn thay marcomtoday01 bằng tên cơ sở dữ liệu của mình.

create database marcomtoday01;

Màn hình hiển thị:

mysql> create database marcomtoday01;
Query OK, 1 row affected (0.00 sec)

mysql>

Tiếp theo, bạn sẽ tạo một tài khoản người dùng MySQL (username) riêng biệt mà bạn sẽ sử dụng riêng để hoạt động trên cơ sở dữ liệu mới của mình.

Lưu ý

Vì tên người dùng cũ tôi đặt là marcomtodayuser nên cơ sở dữ liệu mới tôi đặt là marcomtoday01. Bạn thay marcomtoday01 bằng tên cơ sở dữ liệu của mình.

Thay marcomtoday01 (vị trí thứ nhất) thành tên cơ sở dữ liệu mới mà bạn vừa tạo.

Thay marcomtoday01 (vị trí thứ hai) thành tên tài khoản người dùng của bạn.

Thay HY03101996@ thành mật khẩu cho tài khoản người dùng của bạn.

GRANT ALL ON marcomtoday01.* TO 'marcomtoday01'@'localhost' IDENTIFIED BY 'HY03101996@';

Màn hình hiển thị:

mysql> GRANT ALL ON marcomtoday01.* TO 'marcomtoday01'@'localhost' IDENTIFIED BY 'HY03101996@';
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql>

Bạn cần chạy lệnh FLUSH PRIVILEGES để phiên bản hiện tại của MySQL biết về những thay đổi gần đây mà bạn đã thực hiện:

FLUSH PRIVILEGES;

Sau cùng, thoát khỏi MySQL bằng cách nhập:

EXIT;

Bây giờ, bạn đã có một cơ sở dữ liệu mới và tài khoản người dùng mới.

Bước tiếp theo, bạn sẽ cần chuyển dữ liệu từ cơ sở dữ liệu cũ (tức trong tệp SQL mà bạn tải lên trước đó) sang cơ sở dữ liệu mới vừa tạo.

Đầu tiên, bạn truy cập vào thư mục trang web của bạn:

Lưu ý

Thay marcomtoday.com thành tên miền của bạn.

cd /var/www/html/marcomtoday.com

Màn hình hiển thị:

root@marcomtoday:~# cd /var/www/html/marcomtoday.com
root@marcomtoday:/var/www/html/marcomtoday.com#

Bạn gõ tiếp lệnh:

ls

Màn hình hiển thị:

root@marcomtoday:/var/www/html/marcomtoday.com# ls
cgi-bin             wp-activate.php       wp-config-sample.php  wp-load.php      wp-trackback.php
index.php           wp-admin              wp-content            wp-login.php     xmlrpc.php
license.txt         wp-blog-header.php    wp-cron.php           wp-mail.php
readme.html         wp-comments-post.php  wp-includes           wp-settings.php
tynteeco_wp246.sql  wp-config.php         wp-links-opml.php     wp-signup.php
root@marcomtoday:/var/www/html/marcomtoday.com#

Lúc này, bạn sẽ thấy xuất hiện một tệp có đuôi là .sql (chính là tệp cơ sở dữ liệu cũ bạn đã tải lên).

Tiến hành chuyển cơ sở dữ liệu cũ sang cơ sở dữ liệu mới bằng cách chạy lệnh sau:

Lưu ý

Bạn thay tynteeco_wp246.sql bằng tên tệp SQL của mình.

Thay marcomtoday01 (vị trí thứ nhất) thành tên tài khoản người dùng của bạn.

Thay marcomtoday01 (vị trí thứ hai) thành tên cơ sở dữ liệu mới mà bạn vừa tạo.

mysql -u marcomtoday01 -p marcomtoday01 < tynteeco_wp246.sql

Màn hình hiển thị:

root@marcomtoday:/var/www/html/marcomtoday.com# mysql -u marcomtoday01 -p marcomtoday01 < tynteeco_wp246.sql
Enter password:

Bạn nhập mật khẩu tài khoản người dùng vừa tạo và nhấn Enter.

Nếu màn hình hiển thị như sau và không báo lỗi, tức là bạn đã chuyển dữ liệu thành công.

root@marcomtoday:/var/www/html/marcomtoday.com# mysql -u marcomtoday01 -p marcomtoday01 < tynteeco_wp246.sql
Enter password:
root@marcomtoday:/var/www/html/marcomtoday.com#

Tiếp theo, bạn sẽ truy cập vào cơ sở dữ liệu mới bằng cách chạy lệnh:

mysql -u marcomtoday01 -p

Màn hình hiển thị:

root@marcomtoday:/var/www/html/marcomtoday.com# mysql -u marcomtoday01 -p
Enter password:

Nhập mật khẩu tài khoản người dùng vừa tạo và nhấn Enter.

Màn hình hiển thị:

root@marcomtoday:/var/www/html/marcomtoday.com# mysql -u marcomtoday01 -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 53
Server version: 5.7.32-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Bây giờ, bạn chạy sau lệnh để sử dụng cơ sở dữ liệu mới cho máy chủ của bạn:

Lưu ý

Bạn thay marcomtoday01 bằng tên cơ sở dữ liệu mới mà bạn vừa tạo.

use marcomtoday01;

Màn hình hiển thị:

mysql> use marcomtoday01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql>

Để xem các bảng cơ sở dữ liệu, bạn có thể gõ lệnh:

SHOW TABLES;

Khi màn hình hiển thị ra một bảng như bên dưới thì có nghĩa là bạn đã chuyển dữ liệu thành công:

mysql> SHOW TABLES;
+-------------------------+
| Tables_in_marcomtoday01 |
+-------------------------+
| wpni_commentmeta        |
| wpni_comments           |
| wpni_links              |
| wpni_options            |
| wpni_postmeta           |
| wpni_posts              |
| wpni_term_relationships |
| wpni_term_taxonomy      |
| wpni_termmeta           |
| wpni_terms              |
| wpni_usermeta           |
| wpni_users              |
+-------------------------+
12 rows in set (0.00 sec)

mysql>

Bạn có thể thoát MySQL bằng cách nhập:

EXIT;

Bạn cũng có thể xóa tệp SQL mà bạn đã tải lên máy chủ trước đó bằng lệnh:

rm -rf /var/www/html/marcomtoday.com/tynteeco_wp246.sql

Để có thể truy cập được vào trang web, bạn cần chỉnh sửa các thông tin của cơ sở dữ liệu mới trong tệp wp-config.php để có thể truy cập được vào trang web.

Trước tiên, bạn cần truy cập vào đường dẫn thư mục trang web của bạn trên máy chủ, nhấp chuột phải vào tệp wp-config.php và chọn “Edit”:

Sửa tệp wp-config.php

Sau đó, bạn chỉnh sửa các thông tin của cơ sở dữ liệu mới và thêm define('FS_METHOD', 'direct'); vào trong tệp:

Sửa tệp wp-config.php

Khi đã hoàn tất, bạn nhấp vào chữ Tệp trên thanh menu của Notepad++ rồi chọn Lưu và đóng tệp.

Trong trường hợp bạn chưa trỏ tên miền về địa chỉ IP của VPS thì bạn cần truy cập vào phần quản lý DNS (trong website mà bạn mua tên miền) để thực hiện việc đó.

Trỏ tên miền về IP Address VPS Vultr

Cuối cùng, bạn cần truy cập vào trang web của mình trong trình duyệt để kiểm tra việc chuyển website từ AZDIGI sang Vultr thành công hay chưa.

Chuyển website từ AZDIGI sang Vultr thành công

Nếu trang web của bạn hoạt động bình thường và không báo lỗi thì đồng nghĩa với việc bạn đã chuyển dữ liệu website thành công.

Lưu ý

Nếu bạn đang cài SSL miễn phí của hosting thì khi chuyển sang VPS có thể bạn sẽ không truy cập được vào admin do lỗi SSL.

Lỗi không truy cập được do lỗi SSL

Nếu bạn gặp lỗi tương như trên, bạn có thể cài chứng chỉ SSL của Namecheap hoặc chỉnh sửa https thành http trong MySQL trước khi xuất tệp.

Sửa https thành http trong MySQL

Bạn cần sửa https thành http ở tất cả những chỗ nó xuất hiện trong MySQL. Bạn có thể tìm https bằng cách nhấp vào từng mục ở cột bên trái rồi kiểm tra các hàng.

Nếu bạn chọn cách sửa https thành http thì sau khi xuất tệp MySQL, bạn chuyển website WordPress từ shared hosting sang VPS Vultr như hướng trên phía trên. Khi bạn thao tác đúng, bạn sẽ đăng nhập được vào WordPress:

Đăng nhập thành công WordPress sau khi sửa https thành http

Trong trường hợp bạn chọn cài đặt chứng chỉ SSL mới cho website trên VPS, bạn không cần sửa https thành http trong MySQL.

Bạn chỉ cần chuyển website WordPress từ shared hosting sang VPS như hướng dẫn bên trên, sau đó cài chứng chỉ SSL mua tại Namecheap là xong.

Kết luận

39% website trên toàn thế giới sử dụng WordPress và ngày càng phát triển. Đó là lý do tôi đi cùng với nền tảng mã nguồn mở này trong nhiều năm qua.

Mặc dù máy chủ ảo có hiệu suất mạnh mẽ nhưng nó cũng đòi hỏi người dùng cần có kiến thức về kỹ thuật để triển khai.

Tuy nhiên khi áp dụng từng bước trong bài đăng này, bạn hoàn toàn có thể tự cài đặt một trang web WordPress trên máy chủ ảo.

Viết một bình luận