Cách cài đặt Nginx với PHP và MySQL (LEMP Stack) trên Ubuntu 22.04

theanh

Administrator
Nhân viên
Ngăn xếp phần mềm LEMP là một nhóm phần mềm nguồn mở cho phép máy chủ lưu trữ các trang web và ứng dụng động được viết bằng PHP. Đây là từ viết tắt của Linux, Nginx (phát âm là Engine-X), MySQL và PHP.

Hướng dẫn này sẽ chỉ cho bạn cách cài đặt Ngăn xếp LEMP trên máy chủ Ubuntu 22.04. Bạn cũng sẽ học cách cài đặt các ứng dụng như phpMyAdmin.

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

  • Máy chủ chạy Ubuntu 22.04.
  • Người dùng không phải root có quyền sudo.
  • Tường lửa đơn giản (UFW) được bật và đang chạy.

  • Mọi thứ đã được cập nhật.
    Mã:
    $ sudo apt update && sudo apt upgrade

Bước 1 - Cấu hình Tường lửa​

Bước đầu tiên trước khi cài đặt bất kỳ gói nào là cấu hình tường lửa để cho phép kết nối HTTP và HTTPS.

Kiểm tra trạng thái của tường lửa.
Mã:
$ sudo ufw status
Bạn sẽ thấy nội dung tương tự như sau.
Mã:
Trạng thái: activeTo Action From-- ------ ----OpenSSH ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)
Cho phép cổng HTTP và HTTPs.
Mã:
$ sudo ufw allow http$ sudo ufw allow https
Kiểm tra lại trạng thái để xác nhận.
Mã:
$ sudo ufw statusTrạng thái: activeĐến Hành động Từ-- ------ ----OpenSSH ALLOW Anywhere80/tcp ALLOW Anywhere443/tcp ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)80/tcp (v6) ALLOW Anywhere (v6)443/tcp (v6) ALLOW Anywhere (v6)

Bước 2 - Cài đặt PHP​

Ubuntu 22.04 được cài đặt sẵn PHP 8.1 theo mặc định. Bạn có thể cài đặt bằng cách chạy lệnh sau.
Mã:
$ sudo apt install php-fpm php-cli php-mysqlnd php-mbstring php-xml php-gd
Chúng tôi đã cài đặt các tiện ích mở rộng MySQL, CLI, GD, Mbstring và XML của PHP. Bạn có thể cài đặt bất kỳ tiện ích mở rộng bổ sung nào theo yêu cầu của mình.

Để luôn sử dụng phiên bản PHP mới nhất hoặc nếu bạn muốn cài đặt nhiều phiên bản PHP, hãy thêm kho lưu trữ PHP của Ondrej.

Thêm kho lưu trữ PHP của Ondrej.
Mã:
$ sudo add-apt-repository ppa:ondrej/php
Bây giờ, bạn có thể cài đặt bất kỳ phiên bản PHP nào.
Mã:
$ sudo apt install php8.0-fpm php8.0-cli
Kiểm tra phiên bản PHP đã cài đặt.
Mã:
$ php --versionPHP 8.1.2 (cli) (được xây dựng: 13 tháng 6 năm 2022 13:52:54) (NTS)Bản quyền (c) The PHP GroupZend Engine v4.1.2, Bản quyền (c) Zend Technologies với Zend OPcache v8.1.2, Bản quyền (c), của Zend Technologies

Bước 3 - Cài đặt MySQL​

Ubuntu 22.04 đi kèm với phiên bản MySQL mới nhất. Bạn có thể cài đặt bằng một lệnh duy nhất.
Mã:
$ sudo apt install mysql-server
Kiểm tra phiên bản MySQL.
Mã:
$ mysql --versionmysql Ver 8.0.29-0ubuntu0.22.04.2 cho Linux trên x86_64 ((Ubuntu))
Bước này cần thiết cho MySQL phiên bản 8.0.28 trở lên. Nhập MySQL Shell.
Mã:
$ sudo mysql
Chạy lệnh sau để đặt mật khẩu cho người dùng root của bạn. Đảm bảo mật khẩu có sự kết hợp giữa số, chữ hoa, chữ thường và ký tự đặc biệt.
Mã:
mysql> ALTER USER 'root'@'localhost' ĐƯỢC XÁC NHẬN VỚI mysql_native_password BỞI 'YourPassword12!';
Thoát khỏi shell.
Mã:
mysql> exit
Chạy tập lệnh cài đặt bảo mật MySQL.
Mã:
$ sudo mysql_secure_installation
Bạn sẽ được yêu cầu cài đặt Thành phần Xác thực Mật khẩu. Thành phần này kiểm tra độ mạnh của mật khẩu được sử dụng trong MySQL. Nhấn Y để cài đặt.

Tiếp theo, bạn sẽ được yêu cầu đặt mức chính sách xác thực mật khẩu. Chọn 2 vì đây là mức mạnh nhất.

Tiếp theo, nhập mật khẩu gốc của bạn. Nhấn N để từ chối thay đổi.

Nhấn Y để xóa người dùng ẩn danh, không cho phép đăng nhập root từ xa, xóa cơ sở dữ liệu thử nghiệm và tải lại bảng đặc quyền.

Bước 4 - Cấu hình MySQL​

Đăng nhập vào shell MySQL. Nhập mật khẩu root của bạn khi được nhắc.
Mã:
$ sudo mysql -u root -p
Tạo một cơ sở dữ liệu mẫu.
Mã:
mysql> CREATE DATABASE exampledb;
Tạo một tài khoản người dùng SQL.
Mã:
mysql> CREATE USER 'exampleuser'@'localhost' IDENTIFIED BY 'YourPassword2!';
Cấp tất cả các đặc quyền trên cơ sở dữ liệu cho người dùng.
Mã:
mysql> CẤP TẤT CẢ CÁC QUYỀN TRÊN exampledb.* CHO 'exampleuser'@'localhost';
Xóa bỏ các quyền của người dùng.
Mã:
mysql> XẢ BỎ CÁC QUYỀN;
Thoát khỏi shell.
Mã:
mysql> thoát
Chúng ta hãy đăng nhập lại vào shell MySQL bằng người dùng mới tạo.
Mã:
$ sudo mysql -u exampleuser -p
Tạo một bảng thử nghiệm.
Mã:
mysql> CREATE TABLE exampledb.name_list ( sno INT AUTO_INCREMENT, content VARCHAR(255), PRIMARY KEY(sno) );
Chèn dữ liệu thử nghiệm.
Mã:
mysql> INSERT INTO exampledb.name_list (content) VALUES ("Navjot");
Lặp lại lệnh trên nhiều lần để thêm nhiều mục nhập hơn. Chạy lệnh sau để kiểm tra nội dung của bảng.
Mã:
mysql> SELECT * FROM exampledb.name_list;
Bạn sẽ nhận được kết quả sau.
Mã:
+-----+---------+| sno | content |+-----+---------+| 1 | Navjot || 2 | Adam || 3 | Josh || 4 | Peter |+-----+---------+4 hàng trong tập hợp (0,00 giây)
Thoát khỏi shell MySQL.
Mã:
mysql> exit

Bước 5 - Cài đặt Nginx​

Ubuntu 22.04 đi kèm với phiên bản Nginx cũ hơn. Để cài đặt phiên bản mới nhất, bạn cần tải xuống kho lưu trữ Nginx chính thức.

Nhập khóa ký của Nginx.
Mã:
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Thêm kho lưu trữ cho phiên bản ổn định của Nginx.
Mã:
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \| sudo tee /etc/apt/sources.list.d/nginx.list
Cập nhật kho lưu trữ hệ thống.
Mã:
$ sudo apt update
Cài đặt Nginx.
Mã:
$ sudo apt install nginx
Xác minh cài đặt.
Mã:
$ nginx -vphiên bản nginx: nginx/1.22.0

Bước 6 - Cấu hình PHP-FPM​

Mở php.ini để chỉnh sửa.
Mã:
$ sudo nano /etc/php/8.1/fpm/php.ini
Để đặt kích thước tải lên tệp, hãy thay đổi giá trị của upload_max_filesize và post_max_size variables.
Mã:
upload_max_filesize = 50M...post_max_size = 50M
Cấu hình giới hạn bộ nhớ của PHP tùy thuộc vào tài nguyên và yêu cầu của máy chủ.
Mã:
memory_limit = 256M
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Mở tệp /etc/php/8.0/fpm/pool.d/www.conf.
Mã:
$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf
Chúng ta cần đặt người dùng/nhóm Unix của các quy trình PHP thành nginx. Tìm các dòng user=www-data và group=www-data trong tệp và thay đổi chúng thành nginx.
Mã:
...; Người dùng/nhóm quy trình Unix; Lưu ý: Người dùng là bắt buộc. Nếu nhóm không được đặt, nhóm người dùng mặc định; sẽ được sử dụng.user = nginxgroup = nginx...
Ngoài ra, hãy tìm các dòng listen.owner=www-data và listen.group=www-data trong tệp và đổi chúng thành nginx.
Mã:
listen.owner = nginxlisten.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 quy trình PHP-fpm.
Mã:
$ sudo systemctl restart php8.1-fpm

Bước 7 - Cài đặt phpMyAdmin​

Tải xuống tệp lưu trữ phpMyAdmin cho ngôn ngữ tiếng Anh.
Mã:
$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-english.tar.gz
Tạo một thư mục công khai cho trang web.
Mã:
$ sudo mkdir /var/www/html/example.com -p
Giải nén tệp lưu trữ vào thư mục công khai.
Mã:
$ sudo tar -xzvf phpMyAdmin-5.2.0-english.tar.gz -C /var/www/example.com
Chuyển sang thư mục công khai.
Mã:
$ cd /var/www/html/example.com
Đổi tên thư mục đã giải nén thành một tên khó hiểu để cải thiện bảo mật.
Mã:
$ sudo mv phpMyAdmin-5.2.0-english sm175

Bước 8 - Cấu hình phpMyAdmin​

Sao chép tệp cấu hình mẫu.
Mã:
$ sudo cp sm175/config.sample.inc.php sm175/config.inc.php
Mở tệp cấu hình để chỉnh sửa.
Mã:
$ sudo nano sm175/config.inc.php
Tìm dòng $cfg['blowfish_secret'] = ''; và nhập chuỗi ngẫu nhiên gồm 32 ký tự để xác thực dựa trên cookie.

Bạn có thể sử dụng trình tạo blowfish trực tuyến của phpSolved hoặc thực hiện thông qua dòng lệnh.

Sao chép giá trị và dán như hiển thị.
Mã:
$cfg['blowfish_secret'] = 'Tc/HfLPBOAPxJ-rhQP}HJoZEK69c3j:m';
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Thay đổi quyền sở hữu của trang web và phpMyAdmin thành máy chủ Nginx.
Mã:
$ sudo chown -R nginx:nginx /var/www/html/example.com
Xóa thư mục thiết lập phpMyAdmin.
Mã:
$ sudo rm -rf /var/www/html/example.com/sm175/setup

Bước 9 - Cấu hình Opcache​

Opcache là hệ thống lưu trữ đệm của PHP. Nó hoạt động bằng cách lưu mã bytecode được biên dịch trước trong bộ nhớ, do đó, mỗi lần người dùng truy cập một trang, trang đó sẽ tải nhanh hơn. Opcache được cài đặt theo mặc định. Để xác minh, hãy kiểm tra phiên bản PHP.
Mã:
$ php --versionPHP 8.1.2 (cli) (được xây dựng: 13 tháng 6 năm 2022 13:52:54) (NTS)Bản quyền (c) The PHP GroupZend Engine v4.1.2, Bản quyền (c) Zend Technologies với Zend OPcache v8.1.2, Bản quyền (c), của Zend Technologies
Điều này cho chúng ta biết rằng Opcache đã được cài đặt và khả dụng. Trong trường hợp nó không hiển thị ở đây, bạn có thể cài đặt thủ công bằng cách chạy lệnh sau.
Mã:
$ sudo apt install php-opcache
Để thay đổi cài đặt Opcache, hãy mở tệp /etc/php/8.1/fpm/conf.d/10-opcache.ini để chỉnh sửa.
Mã:
$ sudo nano /etc/php/8.1/fpm/conf.d/10-opcache.ini
Các cài đặt sau sẽ giúp bạn bắt đầu sử dụng Opcache và thường được khuyến nghị để có hiệu suất tốt. Bạn có thể bật cấu hình bằng cách bỏ chú thích bằng cách xóa dấu chấm phẩy trước cấu hình.
Mã:
opcache.enable_cli=1opcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=4000opcache.revalidate_freq=60
Lưu tệp bằng cách nhấn Ctrl + X và nhập Y khi được nhắc.

Bước 10 - Cài đặt Certbot cho SSL​

Chúng ta cần cài đặt Certbot để tạo chứng chỉ SSL miễn phí do Let's Encrypt cung cấp.

Bạn có thể cài đặt Certbot bằng kho lưu trữ của Ubuntu hoặc tải phiên bản mới nhất bằng công cụ Snapd. Chúng tôi sẽ sử dụng phiên bản Snapd.

Ubuntu 22.04 được cài đặt Snapd theo mặc định. Chạy các lệnh sau để đảm bảo phiên bản Snapd của bạn được cập nhật.
Mã:
$ sudo snap install core$ sudo snap refresh core
Cài đặt Certbot.
Mã:
$ sudo snap install --classic certbot
Sử dụng lệnh sau để đảm bảo lệnh Certbot có thể chạy bằng cách tạo liên kết tượng trưng đến thư mục /usr/bin.
Mã:
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Bước 11 - Kiểm tra trang web demo​

Tạo trang web​

Tạo và mở trang thử nghiệm để chỉnh sửa.
Mã:
$ sudo nano /var/www/html/example.com/index.php
Dán mã sau trong đó.
Mã:
 
Back
Bên trên