Cách cài đặt Nginx với PHP và MariaDB (LEMP Stack) với Opcache, Redis và Let's Encrypt trên Ubuntu

theanh

Administrator
Nhân viên
Từ viết tắt "LEMP" là viết tắt của một nhóm phần mềm thường được cài đặt cùng nhau để cho phép máy chủ lưu trữ các trang web động và ứng dụng web. Thuật ngữ này thực chất là từ viết tắt đại diện cho bốn thành phần chính:
  1. Linux: Hệ điều hành. Linux là hệ điều hành mã nguồn mở phổ biến đóng vai trò là nền tảng cho máy chủ.
  2. Engine-X (phát âm là "nginx"): Máy chủ web. Nginx là máy chủ web hiệu suất cao được biết đến với tính ổn định, bộ tính năng phong phú, cấu hình đơn giản và mức tiêu thụ tài nguyên thấp.
  3. MySQL hoặc MariaDB: Hệ thống cơ sở dữ liệu. MySQL là hệ thống quản lý cơ sở dữ liệu quan hệ được sử dụng rộng rãi để lưu trữ và quản lý dữ liệu cho trang web hoặc ứng dụng. Lưu ý rằng MySQL đôi khi được thay thế bằng MariaDB, một nhánh nâng cao, hoàn toàn mã nguồn mở, do cộng đồng phát triển của MySQL.
  4. PHP: Ngôn ngữ lập trình. PHP là ngôn ngữ kịch bản phía máy chủ được thiết kế cho phát triển web, nhưng cũng được sử dụng như một ngôn ngữ lập trình mục đích chung.
Ngăn xếp LEMP là lựa chọn phổ biến để lưu trữ các trang web yêu cầu cơ sở dữ liệu và xử lý phía máy chủ, chẳng hạn như các trang web WordPress, nền tảng thương mại điện tử và các ứng dụng web động khác. Nó tương đương với ngăn xếp LAMP, trong đó Apache (được biểu thị bằng chữ "A" trong LAMP) được sử dụng thay cho Nginx.

Trong hướng dẫn này, bạn sẽ cài đặt ngăn xếp LEMP trên máy chủ chạy Ubuntu 20.04. Chúng tôi cũng sẽ cài đặt phpMyAdmin, Redis, Opcache và Let's Encrypt SSL.

Điều kiện tiên quyết​


  • Máy chủ chạy Ubuntu 20.04.

  • Người dùng sudo không phải root.

  • Đảm bảo mọi thứ được cập nhật.
Mã:
$ sudo apt update
$ sudo apt upgrade
[*]
Một số gói mà hệ thống của bạn cần.
Mã:
$ sudo apt install wget curl nano -y
Một số gói này có thể đã được cài đặt trên hệ thống của bạn.

Cấu hình Tường lửa​

Bước đầu tiên là cấu hình tường lửa. Ubuntu đi kèm với ufw (Uncomplicated Firewall) theo mặc định.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo ufw status
Bạn sẽ nhận được kết quả sau.
Mã:
Status: inactive
Cho phép cổng SSH để tường lửa không làm gián đoạn kết nối hiện tại khi bật nó.
Mã:
$ sudo ufw allow OpenSSH
Cho phép cả cổng HTTP và HTTPS.
Mã:
$ sudo ufw allow 80
$ sudo ufw allow 443
Kích hoạt Tường lửa
Mã:
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy thông báo tương tự đầu ra.
Mã:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)

Cài đặt PHP​

Theo mặc định, Ubuntu 20.04 đi kèm với PHP 7.4 nhưng để có kho lưu trữ PHP được cập nhật, chúng tôi sẽ thêm kho lưu trữ PHP của Ondrej.

Cài đặt kho lưu trữ PHP của Ondrej.
Mã:
$ sudo add-apt-repository ppa:ondrej/php
Cài đặt PHP 7.4 cùng với một số gói.
Mã:
$ sudo apt install php-cli php-fpm php-mysql -y
Kiểm tra xem PHP có hoạt động chính xác không.
Mã:
$ php --version
Bạn sẽ thấy một output.
Mã:
PHP 7.4.5 (cli) (built: Apr 28 2020 14:49:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Cài đặt MariaDB​

MariaDB là một sự thay thế trực tiếp cho MySQL, có nghĩa là các lệnh để chạy và vận hành MariaDB giống như các lệnh dành cho MySQL.

Ubuntu 20.04 theo mặc định đi kèm với MariaDB 10.3, phiên bản này hơi lỗi thời. Để có phiên bản ổn định mới nhất của Mariadb, chúng ta sẽ cài đặt kho lưu trữ chính thức của nó.

Thêm kho lưu trữ chính thức của Mariadb.
Mã:
$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu focal main'
Để cài đặt MariaDB, hãy đưa ra lệnh sau.
Mã:
$ sudo apt install mariadb-server -y
Kiểm tra xem MariaDB đã được cài đặt chưa chính xác.
Mã:
$ mysql --version
Bạn sẽ thấy kết quả sau.
Mã:
mysql Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Kích hoạt MariaDB dịch vụ.
Mã:
$ sudo systemctl enable mariadb
Chạy lệnh sau để thực hiện cấu hình mặc định như cung cấp mật khẩu gốc, xóa người dùng ẩn danh, không cho phép đăng nhập gốc từ xa và xóa các bảng thử nghiệm.
Mã:
$ sudo mysql_secure_installation
Với MariaDB 10.4, giờ đây bạn sẽ được hỏi giữa việc sử dụng mật khẩu gốc hay plugin unix_socket. Plugin unix_socket cho phép bạn đăng nhập vào MariaDB bằng thông tin đăng nhập người dùng Linux của bạn. Mặc dù vậy, plugin này được coi là an toàn hơn vì bạn sẽ cần tên người dùng/mật khẩu truyền thống để sử dụng các ứng dụng của bên thứ 3 như phpMyAdmin. Chúng tôi sẽ sử dụng plugin unix_socket cho hướng dẫn này. Bạn vẫn có thể sử dụng phpMyAdmin thông qua bất kỳ người dùng nào mà bạn tạo cho cơ sở dữ liệu của mình.

Nhấn Enter sẽ chọn tùy chọn mặc định (tùy chọn được viết hoa, trong trường hợp này là Y).
Mã:
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.
Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...
Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.
You already have your root account protected, so you can safely answer 'n'.
Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables.. ... Success!
You already have your root account protected, so you can safely answer 'n'.
Change the root password? [Y/n] [ANSWER n]
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB 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? [Y/n] [PRESS ENTER] ... 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? [Y/n] [PRESS ENTER] ... Success!
By default, MariaDB 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? [Y/n] [PRESS ENTER] \- 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? [Y/n] [PRESS ENTER] ... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Vậy là xong. Lần tới khi bạn muốn đăng nhập vào MySQL, hãy sử dụng lệnh sau
Mã:
$ sudo mysql
Nhập mật khẩu gốc của bạn khi được nhắc.

Cài đặt Redis​

Sử dụng lệnh sau để cài đặt Redis và tiện ích mở rộng PHP Redis tương ứng.
Mã:
$ sudo apt install redis php-redis

Cấu hình Redis Máy chủ​

Chúng ta hãy thực hiện một số cấu hình cơ bản trên máy chủ Redis.

Mở tệp /etc/redis/redis.conf bằng trình soạn thảo Nano.
Mã:
$ sudo nano /etc/redis/redis.conf
Bên trong tệp, hãy định vị Chỉ thị supervised. Chỉ thị này cho phép bạn khai báo hệ thống init để quản lý Redis dưới dạng dịch vụ. Theo mặc định, chỉ thị này được đặt thành no. Vì chúng ta đang sử dụng Ubuntu sử dụng hệ thống khởi tạo systemd, hãy thay đổi giá trị của nó từ no thành systemd như sau.
Mã:
supervised systemd
Nếu bạn muốn máy khách từ xa kết nối với phiên bản Redis của mình thì hãy tìm dòng bind 127.0.0.1 và đổi thành dòng sau.
Mã:
bind 0.0.0.0
Bạn cũng có thể thay đổi cổng mặc định mà Redis lắng nghe từ 6379 thành giá trị của bạn lựa chọn.
Mã:
port 3458
Để cấu hình Redis làm máy chủ bộ nhớ đệm, hãy đặt các giá trị sau như đã cho.
Mã:
maxmemory 256mb
maxmemory-policy allkeys-lru
Điều này yêu cầu Redis xóa bất kỳ khóa nào bằng thuật toán LRU khi bộ nhớ tối đa đạt đến 256MB. Bạn có thể thiết lập giá trị bộ nhớ theo yêu cầu của bạn và máy chủ bạn đang sử dụng.

Bạn có thể thiết lập mật khẩu để bất kỳ máy khách nào cần Redis sẽ được yêu cầu xác thực trước. Để thực hiện việc đó, hãy thiết lập mật khẩu bằng lệnh sau.
Mã:
requirepass
Bạn có thể tìm thấy nhiều lệnh hơn để thay đổi trong tệp cấu hình. Sau khi hoàn tất, hãy nhấn Ctrl + X và nhập Y khi được nhắc lưu tệp.

Khởi động lại máy chủ Redis để áp dụng các thay đổi.
Mã:
$ sudo systemctl restart redis
Chúng ta cũng sẽ cần thêm quy tắc vào Tường lửa của mình nếu bạn muốn các máy khách từ xa kết nối với quy tắc đó. Nếu không, bạn có thể bỏ qua bước này.
Mã:
$ sudo ufw allow 6379/tcp
Bạn sẽ cần phải thay đổi giá trị trong lệnh trên để khớp với bất kỳ cổng nào bạn đã chọn trong tệp cấu hình ở trên.

Cài đặt Nginx​

Theo mặc định, Ubuntu 20.04 đi kèm với phiên bản Mainline mới nhất của Nginx. (1.17.10). Tuy nhiên, chúng tôi sẽ chuyển sang sử dụng kho lưu trữ ổn định chính thức của Nginx.

Trước tiên, hãy cài đặt một số điều kiện tiên quyết.
Mã:
$ sudo apt install curl gnupg2 ca-certificates lsb-release
Một số trong số này đã được cài đặt trên hệ thống của bạn.

Thêm kho lưu trữ của Nginx.
Mã:
$ echo "deb [arch=amd64] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
$ curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
Cài đặt Nginx.
Mã:
$ sudo apt update
$ sudo apt install nginx -y
Kiểm tra xem nó có hoạt động bình thường không.
Mã:
$ nginx -v
Bạn sẽ thấy đầu ra sau tùy thuộc vào phiên bản Nginx bạn chọn cài đặt.
Mã:
nginx version: nginx/1.18.0
Khởi động và bật Nginx.
Mã:
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Mở địa chỉ IP của máy chủ trong trình duyệt để xem trang sau. Điều này có nghĩa là Nginx đang hoạt động bình thường.


data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22385%22%3E%3C/svg%3E

Cấu hình Nginx​

Thiết lập các thư mục nơi các khối máy chủ sẽ tồn tại.
Mã:
$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled
Tạo thư mục nơi trang web của bạn sẽ trực tiếp.
Mã:
$ sudo mkdir /var/www/example.com/html -p
Sử dụng lệnh -p sẽ tạo các thư mục cha không tồn tại trước đó.

Chạy lệnh sau để thêm tệp cấu hình cho trang web của bạn.
Mã:
$ sudo nano /etc/nginx/sites-available/example.com.conf
Dán mã sau vào biên tập viên.
Mã:
server { listen *:80; server_name example.com; root /var/www/example.com/html; index index.php index.html; location / { try_files $uri $uri/ =404; } access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; }
}
Nhấn Ctrl + X để đóng trình biên tập và nhấn Y khi được nhắc lưu tệp.

Tệp này giả định rằng chúng tôi sẽ lưu trữ example.com trong thư mục /var/www/html. Nếu bạn không sử dụng bất kỳ tên miền nào và cấu hình máy chủ của mình để có thể truy cập chỉ thông qua địa chỉ IP/localhost, bạn sẽ cần xóa các thiết lập khối máy chủ tương ứng khỏi tệp nginx.conf nếu không, nó sẽ làm hỏng khối máy chủ mà bạn sẽ tạo.

Kích hoạt tệp cấu hình này bằng cách liên kết nó tới thư mục sites-enabled.
Mã:
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Mở /etc/nginx/nginx.conf tệp để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
Dán các dòng sau sau dòng include /etc/nginx/conf.d/*.conf
Mã:
include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;
types_hash_max_size 4096;
Nhấn Ctrl + X để đóng trình soạn thảo và nhấn Y khi được nhắc lưu tệp. Kiểm tra cấu hình Nginx.
Mã:
$ sudo nginx -t
Bạn sẽ thấy đầu ra sau cho biết cấu hình của bạn là chính xác.
Mã:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Tải lại Nginx dịch vụ.
Mã:
$ sudo systemctl reload nginx

Cấu hình PHP-FPM​

Mở tệp /etc/php-fpm.d/www.conf.
Mã:
$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf
Chúng ta cần đặt người dùng/nhóm Unix của các tiến trình PHP thành nginx. Tìm các dòng user=www-datagroup=www-data trong tệp và thay đổi chúng thành nginx.
Mã:
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
Ngoài ra, hãy tìm các dòng listen.owner=www-datalisten.group=www-data trong tệp và thay đổi chúng thành nginx.
Mã:
listen.owner = nginx
listen.group = nginx
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Khởi động lại PHP-fpm quá trình.
Mã:
$ sudo systemctl restart php7.4-fpm
Để kiểm tra thiết lập PHP của bạn, hãy tạo một tệp test.php trong html thư mục.
Mã:
$ sudo nano /var/www/example.com/html/test.php
Thêm nội dung sau vào đó và lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.
Mã:
 
Back
Bên trên