How to Install LEMP stack on CentOS 7

Hướng dẫn cài đặt LEMP stack trên CentOS 7 mới nhất

Giới thiệu về LEMP Stack

LEMP Stack là một nhóm các phần mềm mã nguồn mở được cài đặt cùng nhau để tạo nên một Web server có thể xử lý và lưu trữ website động. LEMP được viết tắt bởi các phần mềm tạo nên nó như sau: LEMP = Linux + Enginx + MySQL+ PHP. Trong đó Linux là hệ điều hành, ở đây mình sẽ sử dụng CentOS 7 (ngoài ra còn có rất nhiều Linux OS khác có thể sử dụng như Ubuntu, RedHat….), Enginx là một web server (thay thế cho Apache trong LAMP stack), MySQL để lưu trữ dữ liệu, nhưng trong bài này mình sẽ hướng dẫn các bạn cài đặt MariaDB làm database và PHP là một phần mềm để tiếp nhận và xử lý các nội dung động viết bằng ngôn ngữ PHP.

Trong bài này mình sẽ cài đặt các thành phần sau: PHP 7.4, MariaDB, Enginx

Yêu cầu

Để server được ổn định, bạn phải hoàn thành bước cài đặt CentOS 7 trước và cập nhật server các gói cài đặt mới nhất bằng lệnh

yum update

Bước 1- Cài đặt Web server Nginx

Để tiếp nhận và xử lý được request từ người dùng, đầu tiên phải cài đặt Nginx bằng các lệnh sau. Các bạn copy paste từng lệnh một vào terminal nhé.

Thêm CentOS 7 EPEL repository, chạy lệnh sau:

sudo yum install epel-release

Khi chạy với lệnh sudo, terminal có thể yêu cầu bạn nhập mật khẩu để xác nhận thao tác được chạy bởi quyền root.
Sau khi gói EPEL repository đã được cài đặt trên server của bạn, tiếp theo sẽ cài đặt Nginx bằng lệnh sau:

sudo yum install nginx

Một số server có bât SELinux trên CentOS thường sẽ gặp lỗi khi start nginx. Hãy chạy lệnh sau để thêm nginx vào whitelist của SELinux

semanage permissive -a httpd_t

Sau khi cài đặt hoàn tất, khởi chạy Nginx bằng cách chạy lệnh

sudo systemctl start nginx

Bạn có thể kiểm tra xem Nginx đã được cài đặt thành công hay chưa bằng cách truy cập vào địa chỉ IP của server trên trình duyệt:
http://dia-chi-ip-cua-ban/ ví dụ: http://127.0.0.1

Nếu như Nginx được cài đặt thành công, bạn sẽ thấy được màn hình như sau:

Trong trường hợp bạn không thể truy cập được hoặc truy cập vào địa chỉ IP server trên trình duyệt mà không nhận được kết quả như hình thì hay thử mở các port sau trên server: 80, 443
Nếu server bạn đang chạy Firewall thì enable port bằng các lệnh sau:

sudo firewall-cmd --add-service=http
sudo firewall-cmd --add-service=https
sudo firewall-cmd --runtime-to-permanent

Còn nếu server bạn chạy Iptables thì chạy các lệnh sau để mở port:

sudo iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Sau khi chạy các lệnh trên, hãy thử truy cập lại vào địa chỉ IP server trên trình duyệt để kiểm tra xem Nginx đã hoạt động hay chưa nhé.
Để cấu hình Nginx sẽ luôn tự động khởi chạy khi server start chạy lệnh sau:

sudo systemctl enable nginx

Mẹo: Làm cách nào để biết được IP public của server

Một số cách bạn có thể tìm IP public của server trên Cent OS như sau, bằng cách chạy một trong các lệnh bên dưới

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

Lệnh này sẽ hiển thị cho bạn 1 hoặc 2 dòng thông tin.
Một cách khác sử dụng qua một bên thứ 3 như sau:

curl http://icanhazip.com

Chạy lệnh trên sẽ trả về địa chỉ IP server của bạn. Ví dụ

$ curl http://icanhazip.com
59.153.246.63
$

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

Bây giờ, sau khi Web server đã được cài đặt và chạy thành công. Đây là lúc sẽ cài đặt MariaDB, một hệ quản trị cơ sở dữ liệu dựa trên MySQL với nhiều cải tiến và tối ưu. Để cài đặt MariaDB chạy các lệnh sau:

sudo yum install mariadb-server mariadb

Sau khi lệnh cài đặt hoàn tất, chạy lệnh sau để khởi động MariaDB

sudo systemctl start mariadb

Bây giờ, MariaDB đã được cài đặt và chạy thành công, chúng ta sẽ chạy và config một vài thông tin bảo mật của SQL bằng cách chạy lệnh bên dưới

sudo mysql_secure_installation

Một màn hình thông tin sẽ hiện ra yêu cầu bạn nhập mật khẩu của user root sql hiện tại. Bởi vì, MariaDB vừa mới cài đặt nên mật khẩu mặc định thường là không có, bạn chỉ cần gõ enter là được. Sẽ nhập các option sau

Set root password? [Y/n] y

Sau đó màn hình sẽ yêu cầu bạn nhập mật khẩu mới cho MariaDB, bạn nhập vào mật khẩu của bạn mong muốn và nhấn Enter, lặp lại một lần nữa để xác nhận.

Chú ý: Mật khẩu sẽ không hiển thị ra trên màn hình nên bạn hay nhập cẩn thận và nhấn enter nhé.

Các tùy chọn khác bạn cứ nhận Enter để nhận giá trị mặc định là được.

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!

Bước cuối cùng để hoàn thành cài đặt MariaDB là bật tự khởi động khi server bật bằng lệnh sau:

sudo systemctl enable mariadb

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

PHP là một thành phần không thể thiếu trong LEMP stack này. Nó hỗ trợ hiển thị nội dung động từ các website viết bằng PHP.

Bước đầu tiên để cài đặt PHP là cài đặt các gói hỗ trợ Remi repository cho CentOS 7:

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

Sau khi bước cài đặt trên hoàn thành. Bạn cần kiểm tra xem gói cài đặt hỗ trợ những version PHP nào. Để kiểm tra xem phiên bản PHP+ nào đang khả dụng trong gói cài đặt trên, chạy lệnh sau:

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

Bạn sẽ thấy được kết quả như sau:

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 gói PHP 7.4, đây là phiên bản đang ổn định và được support nhiều nhất hiện nay. Cấu hình Remi package cài đặt phiên bản PHP 7.4 chạy lệnh sau:

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

Bây giờ để cài đặt PHP, như thường lệ chúng ta sẽ chạy lên yum như sau:

sudo yum install php php-mysqlnd php-fpm

Sau khi quá trình cài đặt kết thúc, để kiểm tra xem PHP có cài đặt đúng version bạn đã chọn hay chưa, chạy lệnh:

php --version

Sẽ được kết quả như bên dưới:

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

Bây giờ PHP đã được cài đặt thành công. Bước tiếp theo, chúng ta cần thay đổi một vài thông tin cấu hình để PHP có thể chạy được với Nginx. Trước tiên, hãy cài đặt trình editor nano thay cho vim bằng lệnh:

sudo yum install nano

Mở file cấu hình PHP tại đường dẫn /etc/php-fpm.d/www.conf bằng trình editor nano như sau:

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

Bây giờ hãy để ý nội dung của file và tìm các thành phần sau: usergroup

Nếu bạn sử dụng nano bạn có thể nhấn tổ hợp phím CTRL+W để tìm kiếm những thành phần nà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
…

Bạn sẽ thấy giá trị hiện tại đang được set bằng apache. Hãy thay đổi giá trị đó bằng nginx ta được kết quả như bên dưới

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

Bây giờ tìm tiếp đến mục listen. Mặc định, php-fpm sẽ lắng nghe trên một host và port cụ thể thông qua TCP. Chúng ta sẽ thay đổi nó để PHP tiếp nhận request thông qua local socket file. Việc này để tối ưu tốc độ trên server.

Thay dòng listen … trong file cấu hình như sau

listen = /var/run/php-fpm/php-fpm.sock;

Cuối cùng, chúng ta thay đổi owner và group cho socket file vừa được cấu hình bên trên. Di chuyển tới mục listen.owner, listen.group listen.mode. 3 dòng này mặc định sẽ được comment lại bằng cách để dấu phía trước. Hãy kích hoạt nó lên bằng cách bỏ đi dấu ; và sửa lại giá trị như bên dưới

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Sau đó nhấn tổ hợp phím: CTRL + X, rồi nhập Y và nhấn ENTER để lưu lại file cấu hình.

Để chạy PHP chúng ta thực hiện lệnh sau:

sudo systemctl start php-fpm

Bật PHP tự động chạy khi khởi động server bằng cách

sudo systemctl enable php-fpm

Bây giờ PHP đã được cài đặt hoàn thành. Tiếp theo chúng ta sẽ cấu hình vài thông tin Nginx để có thể chạy được với PHP

Bước 4 – Cấu hình Nginx cho PHP process

Bây giờ chúng ta đã có đầy đủ các thành phần của LEMP stack được cài đặt trên server. Bước tiếp theo cấu hình vài thông tin của Nginx để thông báo cho Nginx sẽ sử dụng PHP làm bộ xử lý các nội dung động.

Cài đặt của Nginx có thể được tạo bằng các file riêng biệt, giống virtual host bên Apache. Tuy nhiên, hiện tại các thông tin cấu hình của Nginx đang chưa có gì. Chúng ta sẽ tạo một file để ghi đè thông tin mặc định của Nginx tại /etc/nginx/nginx.conf như sau.

Đầu tiên, tạo một file mới trong thư mục /etc/nginx/conf.d

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

Copy nội dung bên dưới dán vào trình editor nano đang mở

server {
    listen       80;
    server_name  localhost;

    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ào đóng file lại khi hoàn thành và khởi động lại Nginx để áp dụng các thay đổi

sudo systemctl restart nginx

Bây giờ web server đã được cài đặt đầy đủ. Bước tiếp theo kiểm tra xem toàn bộ các thành phần đã hoạt động ổn định hay chưa.

Bước 5 – Kiểm tra PHP có được xử lý đúng cách trên Nginx server hay chưa?

Bây giờ Nginx đã được cài đặt, chúng ta sẽ tạo một PHP file đơn giản để kiểm tra xem Nginx có hoạt động với PHP hay không.

Trước khi tạo file PHP test, cần đảm bảo quyền và ownership được cài đặt cho thư mục chứa code của Nginx được cấu hình đúng cách. Câu lênh bên dưới sẽ thay đổi ownership của document root mặc định Nginx sang user và group gọi là webuser. Hãy đảm bảo thay thế username và group trong câu lệnh bên dưới bằng username và group trên máy của bạn

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

Bây giờ, tạo một file PHP có tên info.php tại thư mục /usr/share/nginx/html để test kết quả nào:

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

Dán nội dung bên dưới vào cửa sổ trình editor

<?php

phpinfo();

Lưu và đóng cửa sổ edit khi hoàn thành.

Bây giờ bạn hãy truy cập vào server bằng trình duyệt trỏ đến file info.php vừa tạo như sau:

http://dia-chi-ip-cua-ban/info.php

Bạn sẽ thấy kết quả như hình

PHP Info 7.4

Sau khi kiểm tra thông tin xong, hay nhớ xóa file info.php đi để tăng tính bảo mật của server nhé. Chạy lệnh sau để xóa:

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

Tổng kết

Trong bài hướng dẫn này, chúng ta đã cài đặt một web server hoàn chỉnh sử dung LEMP Stack để host và chạy ứng dụng PHP. Bây giờ bạn có thể tìm hiểu thêm một vài cấu hình Nginx nâng để có thể sử dụng và tùy chỉnh theo nhu cầu.

Cảm ơn bạn đã qua tâm, nếu có bất cứ vấn đề gì vui lòng để lại comment mình sẽ trả lời trong thời gian sớm nhất.

 

Được đăng bởi

Jacob Phạm

Đơn giản là một lập trình viên Fullstack với những đam mê Lập trình, tìm hiều công nghệ và chia sẻ kiến thức có được qua quá trình học tập và làm việc.