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: user và group
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 và 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
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.