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.
Người dùng sudo không phải root.
Đảm bảo mọi thứ đã được cập nhật.
Một số gói mà hệ thống của bạn cần.
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.
Kiểm tra xem tường lửa có đang chạy không.
Bạn sẽ nhận được kết quả sau.
Đặt vùng mặc định của tường lửa thành public.
Kiểm tra các dịch vụ/cổng hiện được phép.
Kết quả sau sẽ hiển thị.
Cho phép các cổng HTTP và HTTPS.
Kiểm tra lại trạng thái của tường lửa.
Bạn sẽ thấy kết quả tương tự.
Tải lại Tường lửa.
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.
Bật kho lưu trữ
Cài đặt PHP 7.4 cùng với một số gói bổ sung.
Kiểm tra xem PHP có hoạt động chính xác không.
Bạn sẽ thấy đầu ra tương tự.
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.
Kiểm tra xem MariaDB đã được cài đặt đúng chưa.
Bạn sẽ thấy đầu ra sau.
Bật và khởi động dịch vụ 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.
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).
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
Nhập mật khẩu gốc của bạn khi được nhắc.
Sử dụng lệnh sau để cài đặt Redis và tiện ích mở rộng PHP Redis tương ứng.
Kích hoạt dịch vụ Redis.
Mở tệp
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
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.
Để định cấu hình Redis làm máy chủ bộ nhớ đệm, hãy đặt các giá trị sau như đã cho.
Đ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.
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.
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.
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.
Kiểm tra xem nó có hoạt động bình thường không.
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.
Khởi động và kích hoạt 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.
Tạo thư mục nơi trang web của bạn sẽ tồn tại.
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.
Dán mã sau vào trình chỉnh sửa.
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ữ
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
Mở tệp
Dán các dòng sau sau dòng
Thay đổi giá trị của
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.
Bạn sẽ thấy đầu ra sau cho biết cấu hình của bạn là chính xác.
Tải lại dịch vụ Nginx.
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
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.
Để kiểm tra thiết lập PHP của bạn, hãy tạo tệp
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.
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ã:
$ sudo dnf install wget curl nano -y
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
Mã:
running
Mã:
$ sudo firewall-cmd --set-default-zone=public
Mã:
$ sudo firewall-cmd --zone=public --permanent --list-services
Mã:
dhcpv6-client mdns ssh
Mã:
$ sudo firewall-cmd --zone=public --permanent --add-service=http$ sudo firewall-cmd --zone=public --permanent --add-service=https
Mã:
$ sudo firewall-cmd --zone=public --permanent --list-services
Mã:
dhcpv6-client http https mdns ssh
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
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
Mã:
$ sudo dnf install -y php-cli php-fpm php-mysqlnd
Mã:
$ php --version
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
Mã:
$ mysql --version
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
Mã:
$ sudo systemctl enable mariadb$ sudo systemctl start mariadb
Mã:
$ sudo mysql_secure_installation
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!
Mã:
$ sudo mysql
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
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
bind 127.0.0.1
và thay đổi thành dòng sau.
Mã:
bind 0.0.0.0
Mã:
cổng 3458
Mã:
bộ nhớ tối đa 256mbmaxmemory-policy allkeys-lru
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
Khởi động lại máy chủ Redis để áp dụng các thay đổi.
Mã:
$ sudo systemctl restart redis
Mã:
$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp$ sudo firewall-cmd --reload
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
Mã:
$ nginx -v
Mã:
Phiên bản nginx: nginx/1.18.0
Mã:
$ sudo systemctl start nginx$ sudo systemctl enable nginx
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
Mã:
$ sudo mkdir /var/www/example.com/html -p
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
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; }}
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/
/etc/nginx/nginx.conf
để chỉnh sửa.
Mã:
$ sudo nano /etc/nginx/nginx.conf
include /etc/nginx/conf.d/*.conf
Mã:
include /etc/nginx/sites-enabled/*.conf;server_names_hash_bucket_size 64;
types_hash_max_size
từ 2048 thành 4096.
Mã:
types_hash_max_size 4096;
Mã:
$ sudo nginx -t
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
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
user=apache
và group=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...
Khởi động lại quy trình PHP-fpm.
Mã:
$ sudo systemctl restart php-fpm
test.php
trong thư mục html
.
Mã:
$ sudo nano /var/www/example.com/html/test.php
Mã: