Hướng dẫn cài LEMP Stack (Nginx, MariaDB, PHP) trên CentOS 7 từ A-Z

Hướng dẫn cài LEMP Stack (Nginx, MariaDB, PHP) trên CentOS 7 từ A-Z

LEMP stack là bộ phần mềm mã nguồn mở được triển khai đồng bộ, giúp máy chủ lưu trữ và vận hành các trang web cùng ứng dụng web động. Tên gọi này là viết tắt của Linux, Nginx (thay thế Apache trong LAMP stack), MySQL và PHP, nơi dữ liệu trang web được lưu trữ trong cơ sở dữ liệu MySQL và nội dung động được xử lý bởi PHP.

Trong hướng dẫn này, chúng ta sẽ cài đặt LEMP stack với PHP 7.4 trên máy chủ CentOS 7, sử dụng MariaDB làm hệ quản trị cơ sở dữ liệu. MariaDB hoạt động như một sự thay thế drop-in cho MySQL gốc, cho phép bạn chuyển đổi mà không cần điều chỉnh cấu hình hoặc mã nguồn ứng dụng.

Yêu cầu

Trước khi bắt đầu với bài hướng dẫn này, bạn nên tạo một tài khoản người dùng không phải root riêng trên máy chủ của bạn. Bạn có thể học cách thực hiện điều này qua các bước 1-4 trong bài hướng dẫn thiết lập máy chủ ban đầu cho centos 7.

Bước 1 – Cài đặt nginx

Để hiển thị trang web cho khách truy cập, chúng ta sẽ sử dụng Nginx, một máy chủ web hiệu suất cao. Để lấy phiên bản nginx mới nhất, trước tiên chúng ta cài đặt kho EPEL chứa các phần mềm bổ sung cho hệ điều hành centos 7.

Để thêm kho EPEL cho centos 7, chạy lệnh:

sudo yum install epel-release

Vì chúng ta sử dụng lệnh sudo, các thao tác này được thực thi với đặc quyền root. Hệ thống sẽ yêu cầu bạn nhập mật khẩu của tài khoản người dùng thường để xác thực quyền thực hiện các lệnh với đặc quyền root. Bạn cũng sẽ được nhắc xác nhận cài đặt, hãy nhấn Y để tiếp tục.

Sau khi kho EPEL đã được cài đặt trên máy chủ, cài đặt nginx bằng lệnh:

sudo yum install ngin

Khi cài đặt hoàn tất, khởi động dịch vụ nginx bằng lệnh:

sudo systemctl start nginx

Bạn có thể kiểm tra nhanh ngay lập tức xem mọi thứ đã diễn ra như kế hoạch bằng cách truy cập địa chỉ IP công khai của máy chủ trong trình duyệt web (nếu bạn chưa biết địa chỉ IP công khai, hãy xem mục “Cách tìm địa chỉ IP công khai của máy chủ” bên dưới):

Mở trình duyệt và truy cập:

http://server_domain_name_or_IP/
Bạn sẽ thấy trang mặc định của nginx trên centos 7 – trang này nhằm mục đích cung cấp thông tin và kiểm tra. Nếu bạn nhìn thấy trang này, máy chủ web của bạn đã được cài đặt đúng cách.

cach cai dat linux nginx mysql php lemp stack tren centos 7 2

Để kích hoạt nginx tự động khởi động cùng hệ thống, chạy lệnh:

sudo systemctl enable nginx

Cách tìm địa chỉ IP công khai của máy chủ

Nếu bạn không biết địa chỉ IP công khai của máy chủ, có vài cách để tìm. Thông thường, đây là địa chỉ bạn dùng để kết nối qua SSH.

Từ dòng lệnh, bạn có thể dùng công cụ iproute2 để lấy địa chỉ bằng cách nhập:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Lệnh trên sẽ trả về một hoặc hai dòng, đều là địa chỉ hợp lệ; bạn có thể thử từng địa chỉ nếu cần.

Một cách khác là sử dụng một dịch vụ bên ngoài để biết máy chủ của bạn được nhìn nhận như thế nào, bằng cách chạy:

curl http://icanhazip.com

Dù sử dụng phương pháp nào, hãy nhập địa chỉ IP đó vào thanh địa chỉ của trình duyệt để truy cập máy chủ.

Bước 2 – Cài đặt mariadb

Khi máy chủ web của bạn đã chạy, đã đến lúc cài đặt MariaDB – một sự thay thế drop-in cho MySQL. MariaDB là nhánh phát triển từ cộng đồng của hệ quản trị cơ sở dữ liệu quan hệ MySQL.

Lại một lần nữa, chúng ta sử dụng yum để cài đặt phần mềm, lần này cùng với một số gói hỗ trợ để giúp các thành phần giao tiếp với nhau:

sudo yum install mariadb-server mariadb

Sau khi cài đặt xong, khởi động MariaD

sudo systemctl start mariadb

Khi MariaDB đã chạy, chúng ta muốn chạy một script bảo mật để loại bỏ một số thiết lập mặc định nguy hiểm và khóa truy cập vào cơ sở dữ liệu. Khởi chạy script tương tác bằng lệnh:

sudo mysql_secure_installation

Script sẽ yêu cầu bạn nhập mật khẩu hiện tại của root trong MariaDB. Vì bạn vừa cài đặt MariaDB, mật khẩu sẽ để trống, hãy nhấn ENTER. Sau đó, script sẽ hỏi bạn có muốn thiết lập mật khẩu cho root hay không – nhập Y và làm theo hướng dẫn.

Script mysql_secure_installation sẽ xuất hiện như sau:

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!

Tiếp tục, nhấn ENTER cho các câu hỏi còn lại để chấp nhận các giá trị mặc định. Việc này sẽ xóa bỏ một số người dùng mẫu và cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa và tải các quy tắc mới vào MySQL.

Cuối cùng, để kích hoạt MariaDB tự động khởi động khi máy khởi động, chạy:

sudo systemctl enable mariadb

Tới thời điểm này, hệ thống cơ sở dữ liệu của bạn đã được thiết lập, chúng ta chuyển sang bước tiếp theo.

Bước 3 – Cài đặt php

PHP là thành phần của hệ thống giúp xử lý mã để hiển thị nội dung động. Nó có thể chạy các script, kết nối với cơ sở dữ liệu MySQL để lấy thông tin, và chuyển nội dung đã xử lý cho máy chủ web hiển thị.

Phiên bản PHP có sẵn mặc định trên centos 7 khá cũ, vì vậy chúng ta cần cài đặt một kho phần mềm bên thứ ba để có được PHP 7+ cho máy chủ centos 7. Remi là một kho phần mềm phổ biến cung cấp các bản phát hành PHP cập nhật nhất cho centos.

Để cài đặt kho Remi cho centos 7, chạy lệnh:

sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Sau khi cài đặt xong, bạn cần kích hoạt kho chứa phiên bản PHP bạn mong muốn. Để kiểm tra các phiên bản PHP 7+ có sẵn trong kho Remi, chạy:

yum --disablerepo="*" --enablerepo="remi-safe" list php[7-9][0-9].x86_64

Kết quả sẽ xuất hiện như sau:

Output

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * remi-safe: mirrors.ukfast.co.uk
Available Packages
php70.x86_64                                              2.0-1.el7.remi                                       remi-safe
php71.x86_64                                              2.0-1.el7.remi                                       remi-safe
php72.x86_64                                              2.0-1.el7.remi                                       remi-safe
php73.x86_64                                              2.0-1.el7.remi                                       remi-safe
php74.x86_64                                              1.0-3.el7.remi                                       remi-safe
php80.x86_64                                              1.0-3.el7.remi                                       remi-safe

Trong bài hướng dẫn này, chúng ta sẽ cài đặt PHP 7.4, phiên bản ổn định mới nhất hiện nay.

Để kích hoạt kho Remi chứa PHP 7.4, chạy lệnh:

sudo yum-config-manager --enable remi-php74

Bây giờ, tiến hành cài đặt PHP bằng yum. Lệnh sau sẽ cài đặt tất cả các gói cần thiết để cài đặt PHP 7.4 trong Nginx và cho phép nó kết nối với cơ sở dữ liệu MySQL:

sudo yum install php php-mysqlnd php-fpm

Để xác nhận rằng PHP đã được cài đặt với phiên bản bạn chọn, chạy:

php --version

Kết quả đầu ra mẫu:

Output

PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

PHP đã được cài đặt thành công trên hệ thống của bạn. Tiếp theo, chúng ta cần thực hiện một vài điều chỉnh đối với cấu hình mặc định.

Để thuận tiện chỉnh sửa các file trên centos, trước tiên cài đặt trình soạn thảo nano (thân thiện hơn vi):

sudo yum install nano

Mở file cấu hình /etc/php-fpm.d/www.conf bằng nano (hoặc trình soạn thảo ưa thích của bạn):

sudo nano /etc/php-fpm.d/www.conf

Tìm các chỉ thị user và group trong file. Nếu bạn dùng nano, nhấn CTRL+W để tìm kiếm.

Trong file /etc/php-fpm.d/www.conf, bạn sẽ thấy:

…
; 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 = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
…

Chúng ta cần thay đổi thành:

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

Tiếp theo, tìm chỉ thị listen. Mặc định, php-fpm sẽ lắng nghe trên một địa chỉ host và cổng qua TCP. Chúng ta muốn thay đổi để nó lắng nghe trên một socket cục bộ nhằm cải thiện hiệu năng. Sửa dòng chứa listen thành:

listen = /var/run/php-fpm/php-fpm.sock;
Cuối cùng, thay đổi cài đặt owner và group cho socket đã định nghĩa trong chỉ thị listen. Tìm các chỉ thị listen.owner, listen.grouplisten.mode. Các dòng này thường bị comment (có dấu ; ở đầu dòng). Hãy bỏ comment và thay đổi owner, group thành nginx:
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Lưu và đóng file khi hoàn tất. Nếu bạn dùng nano, nhấn CTRL+X, sau đó Y và ENTER.

Để kích hoạt và khởi động dịch vụ php-fpm, chạy:

sudo systemctl start php-fpm

Môi trường PHP của bạn đã sẵn sàng. Tiếp theo, chúng ta sẽ cấu hình nginx để chuyển tất cả các yêu cầu cho script PHP đến php-fpm.

Bước 4 – Cấu hình nginx xử lý trang PHP

Hiện tại, tất cả các thành phần cần thiết đã được cài đặt. Việc cấu hình duy nhất cần thực hiện là cho nginx sử dụng bộ xử lý PHP cho nội dung động.

Nginx có một thư mục chuyên dụng, nơi bạn có thể định nghĩa mỗi trang web được lưu trữ như một file cấu hình riêng, sử dụng server block (tương tự như virtual hosts của Apache).

Với cài đặt mặc định, thư mục này thường trống. Chúng ta sẽ tạo một file mới để làm trang web PHP mặc định trên máy chủ, ghi đè cấu hình server block mặc định trong file /etc/nginx/nginx.conf.

Trước tiên, mở file mới trong thư mục /etc/nginx/conf.d:

sudo nano /etc/nginx/conf.d/default.conf

Sao chép khối định nghĩa server cho PHP dưới đây vào file cấu hình và nhớ thay đổi chỉ thị server_name sao cho trỏ tới tên miền hoặc địa chỉ IP của máy chủ bạn:

server {
    listen       80;
    server_name  server_domain_or_IP;

    root   /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Lưu và đóng file sau khi chỉnh sửa.

Tiếp theo, khởi động lại nginx để áp dụng các thay đổi:

sudo systemctl restart nginx

Máy chủ web của bạn giờ đã được cấu hình đầy đủ. Bước tiếp theo là kiểm tra tích hợp PHP với nginx.

Bước 5 – Kiểm tra xử lý PHP trên máy chủ web

Giờ đây, máy chủ web đã được cài đặt, hãy tạo một script PHP kiểm tra để xác nhận nginx xử lý các file .php thông qua php-fpm.

Trước khi tạo script, chúng ta sẽ thay đổi quyền sở hữu mặc định cho thư mục document root của nginx để tài khoản người dùng thường có thể tạo file mà không cần dùng sudo.

Chạy lệnh sau để thay đổi quyền sở hữu của thư mục /usr/share/nginx/html sang một tài khoản và nhóm (ví dụ sammy); nhớ thay đổi tên người dùng và nhóm cho phù hợp với hệ thống của bạn:

sudo chown -R sammy.sammy /usr/share/nginx/html/

Tiếp theo, tạo file test PHP có tên info.php trong thư mục /usr/share/nginx/html:

nano /usr/share/nginx/html/info.php

Thêm đoạn mã PHP sau vào file, đoạn mã này sẽ hiển thị thông tin về môi trường PHP hiện hành trên máy chủ:

<?php

phpinfo();

Lưu và đóng file.

Bây giờ, mở trình duyệt và truy cập:

http://server_host_or_IP/info.php

cach cai dat linux nginx mysql php lemp stack tren centos 7 3

Bạn sẽ thấy một trang web hiển thị thông tin về PHP. Sau khi kiểm tra thông tin cần thiết, tốt nhất nên xóa file này vì nó chứa thông tin nhạy cảm về môi trường PHP và máy chủ centos của bạn. Để xóa, chạy:

rm /usr/share/nginx/html/info.php

Bạn luôn có thể tạo lại file này nếu cần kiểm tra thông tin trong tương lai.

Kết luận

Trong bài hướng dẫn này, bạn đã xây dựng một nền tảng vững chắc và linh hoạt để phục vụ các trang web và ứng dụng PHP, sử dụng Nginx làm máy chủ web và phiên bản PHP mới nhất. Bạn đã thiết lập Nginx xử lý các yêu cầu PHP thông qua php-fpm và cấu hình cơ sở dữ liệu MariaDB để quản lý dữ liệu trang web một cách hiệu quả.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *