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

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ở được cài đặt cùng nhau để cho phép máy chủ lưu trữ các trang web và ứng dụng. Đây là từ viết tắt của Linux, Emáy chủ Nginx, MySQL (sử dụng MariaDB) và PHP.

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 Fedora 32. 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 Fedora 32.

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

Đảm bảo mọi thứ đã được cập nhật.
Mã:
$ sudo dnf upgrade
Một số gói mà hệ thống của bạn cần.
Mã:
$ sudo dnf 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.

Vô hiệu hóa SELinux.
Mã:
$ sudo setenforce 0

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

Bước đầu tiên là cấu hình tường lửa. Máy chủ Fedora đi kèm với tường lửa Firewalld được cài đặt sẵn.

Kiểm tra xem tường lửa có đang chạy không.
Mã:
$ sudo firewall-cmd --state
Bạn sẽ nhận được kết quả sau.
Mã:
running
Đặt vùng mặc định của tường lửa thành public.
Mã:
$ sudo firewall-cmd --set-default-zone=public
Kiểm tra các dịch vụ/cổng hiện được phép.
Mã:
$ sudo firewall-cmd --zone=public --permanent --list-services
Kết quả sau sẽ hiển thị.
Mã:
dhcpv6-client mdns ssh
Cho phép các cổng HTTP và HTTPS.
Mã:
$ sudo firewall-cmd --zone=public --permanent --add-service=http$ sudo firewall-cmd --zone=public --permanent --add-service=https
Kiểm tra lại trạng thái của tường lửa.
Mã:
$ sudo firewall-cmd --zone=public --permanent --list-services
Bạn sẽ thấy kết quả tương tự.
Mã:
dhcpv6-client http https mdns ssh
Tải lại Tường lửa.
Mã:
$ sudo systemctl reload firewalld

Cài đặt PHP​

Theo mặc định, Fedora 32 đ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ữ REMI.

Cài đặt kho lưu trữ REMI, đây là kho lưu trữ chính thức của Fedora để cài đặt các gói PHP.
Mã:
$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm
Bật kho lưu trữ remi và tắt kho lưu trữ remi-modular. Điều này cho phép kho lưu trữ cần thiết để cài đặt các gói PHP 7.4.
Mã:
$ sudo dnf config-manager --set-enabled remi$ sudo dnf config-manager --set-disabled remi-modular
Cài đặt PHP 7.4 cùng với một số gói bổ sung.
Mã:
$ sudo dnf install -y php-cli php-fpm php-mysqlnd
Kiểm tra xem PHP có hoạt động chính xác không.
Mã:
$ php --version
Bạn sẽ thấy đầu ra tương tự.
Mã:
PHP 7.4.6 (cli) (được xây dựng: 12 tháng 5 năm 2020 08:09:15) (NTS) 
Bản quyền (c) The PHP Group 
Zend Engine v3.4.0, Bản quyền (c) 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ư những gì dành cho MySQL.

Fedora 32 mặc định đi kèm với MariaDB 10.4, đây là phiên bản ổn định mới nhất hiện có nên chúng ta sẽ sử dụng phiên bản đó.

Để cài đặt MariaDB, hãy đưa ra lệnh sau.
Mã:
$ sudo dnf install mariadb-server -y
Kiểm tra xem MariaDB đã được cài đặt đúng chưa.
Mã:
$ mysql --version
Bạn sẽ thấy đầu ra sau.
Mã:
mysql Ver 15.1 Distrib 10.4.12-MariaDB, dành cho Linux (x86_64) sử dụng trình bao bọc EditLine
Bật và khởi động dịch vụ MariaDB.
Mã:
$ sudo systemctl enable mariadb$ sudo systemctl start 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 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ười dùng Linux của bạn. Mặc dù được coi là an toàn hơn nhưng 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ã:
LƯU Ý: KHUYẾN NGHỊ CHẠY TẤT CẢ CÁC PHẦN CỦA TỪNG PHÁP NÀY CHO TẤT CẢ CÁC MÁY CHỦ MariaDB TRONG SẢN XUẤT SỬ DỤNG! VUI LÒNG ĐỌC KỸ TỪNG BƯỚC!Để đăng nhập vào MariaDB để bảo mật, chúng ta sẽ cầnmật khẩu hiện tại cho người dùng root. Nếu bạn vừa cài đặt MariaDB vàchưa đặt mật khẩu root, bạn chỉ cần nhấn enter tại đây.Nhập mật khẩu hiện tại cho root (enter nếu không có): [NHẤN ENTER]OK, mật khẩu đã sử dụng thành công, tiếp tục...Đặt mật khẩu root hoặc sử dụng unix_socket đảm bảo rằng không aicó thể đăng nhập vào người dùng root MariaDB mà không có quyền thích hợp.Bạn đã bảo vệ tài khoản root của mình, vì vậy bạn có thể trả lời 'n' một cách an toàn.Chuyển sang xác thực unix_socket [Y/n] [NHẤN ENTER]Đã bật thành công!Đang tải lại bảng đặc quyền.. ... Thành công!Bạn đã bảo vệ tài khoản root của mình, vì vậy bạn có thể trả lời 'n' một cách an toàn.Đổi mật khẩu root? [Y/n] [ANSWER n]... bỏ qua.Theo mặc định, cài đặt MariaDB có một người dùng ẩn danh, cho phép bất kỳ aiđăng nhập vào MariaDB mà không cần phải tạo tài khoản người dùng chohọ. Điều này chỉ nhằm mục đích thử nghiệm và để quá trình cài đặtdiễn ra suôn sẻ hơn một chút. Bạn nên xóa những người dùng này trước khi chuyển sangmôi trường sản xuất.Xóa người dùng ẩn danh? [Y/n] [NHẤN ENTER] ... Thành công!Thông thường, root chỉ được phép kết nối từ 'localhost'. Điều nàyđảm bảo rằng không ai có thể đoán được mật khẩu root từ mạng.Không cho phép root đăng nhập từ xa? [Y/n] [NHẤN ENTER] ... Thành công!Theo mặc định, MariaDB đi kèm với một cơ sở dữ liệu có tên là 'test' mà bất kỳ ai cũng có thểtruy cập. Điều này cũng chỉ nhằm mục đích thử nghiệm và nên xóatrước khi chuyển sang môi trường sản xuất.Xóa cơ sở dữ liệu thử nghiệm và truy cập vào cơ sở dữ liệu đó? [Y/n] [NHẤN ENTER] \- Đang xóa cơ sở dữ liệu thử nghiệm... ... Thành công! \- Xóa quyền trên cơ sở dữ liệu thử nghiệm... ... Thành công!Tải lại các bảng quyền sẽ đảm bảo rằng tất cả các thay đổi đã thực hiện cho đến naysẽ có hiệu lực ngay lập tức.Tải lại các bảng quyền ngay bây giờ? [Y/n] [NHẤN ENTER] ... Thành công!Đang dọn dẹp...Xong! Nếu bạn đã hoàn tất tất cả các bước trên, thì cài đặt MariaDBcủa bạn hiện đã an toàn.Cảm ơn bạn đã sử dụng 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​

Fedora 32 chứa gói Redis v5.0.8 nhưng kho lưu trữ Remi mà chúng tôi đã cài đặt trước đó cho PHP mang theo phiên bản Redis mới nhất (v6.0.1) tại thời điểm viết hướng dẫn này.

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

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

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.conf bằng trình soạn thảo Nano.
Mã:
$ sudo nano /etc/redis.conf
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, hãy tìm dòng bind 127.0.0.1 và thay đổ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ị bạn chọn.
Mã:
cổng 3458
Để định cấu hình Redis làm máy chủ bộ nhớ đệm, hãy đặt các giá trị sau như đã cho.
Mã:
bộ nhớ tối đa 256mbmaxmemory-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 cần thêm quy tắc vào Tường lửa để cho phép Redis hoạt động.
Mã:
$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp$ sudo firewall-cmd --reload
Bạn sẽ cần 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, Fedora 32 đi kèm với phiên bản Ổn định mới nhất của Nginx. (1.18.0).

Cài đặt Nginx.
Mã:
$ sudo dnf 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 kết quả sau tùy thuộc vào phiên bản Nginx bạn chọn cài đặt.
Mã:
Phiên bản nginx: nginx/1.18.0
Khởi động và kích hoạ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.


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ẽ tồn tại.
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 trình chỉnh sửa.
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-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_index index.php; include fastcgi_params; }}
Nhấn Ctrl + X để đóng trình soạn thảo 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ỉ 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 tệp với thư mục sites-enabled.
Mã:
$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Mở tệp /etc/nginx/nginx.conf để 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;
Thay đổi giá trị của types_hash_max_size từ 2048 thành 4096.
Mã:
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: cú pháp tệp cấu hình /etc/nginx/nginx.conf là oknginx: tệp cấu hình /etc/nginx/nginx.conf đã kiểm tra thành công
Tải lại dịch vụ Nginx.
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-fpm.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=apachegroup=apache trong tệp và đổ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.; RPM: người dùng apache được chọn để cung cấp quyền truy cập vào cùng thư mục với httpduser = nginx; RPM: Giữ một nhóm được phép ghi vào thư mục nhật ký.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 php-fpm
Để kiểm tra thiết lập PHP của bạn, hãy tạo tệp test.php trong thư mục html.
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