LEMP Stack là một nhóm các phần mềm mã nguồn mở thường được cài đặt chung với nhau trên server để host các website động và ứng dụng web. Bài viết này sẽ hướng dẫn chi tiết các bước cài đặt và cấu hình LEMP Stack trên CentOS 7.
Bước 1 – Enable repo Software Collections
LEMP gồm các thành phần sau: Hệ điều hành Linux, web server ENginx (thay cho Apache trong LAMP Stack), database MySQL để lưu trữ dữ liệu bằng MariaDB, và PHP để xử lý dữ liệu động. Các thành phần của LEMP Stack thường được cài đặt bằng repo EPEL của CentOS 7. Tuy nhiên repo này chỉ chứa một số phiên bản lỗi thời của các package, chẳng hạn như PHP chỉ hỗ trợ đến phiên bản 5.4.16. Vì vậy bài viết này sẽ sử dụng Software Collections (SCLs) – một bộ tài nguyên dành cho các developer được cung cấp bởi RedHat để hỗ trợ cài đặt LEMP Stack.
Để bắt đầu, bạn cần có sẵn một server CentOS 7 với một user non-root. Nếu bạn chưa có server hoặc đang tìm kiếm giải pháp lưu trữ với chi phí tiết kiệm thì có thể tham khảo sử dụng dịch vụ VPS tại Vietnix. Vietnix là một trong những nhà cung cấp dịch vụ VPS hàng đầu tại Việt Nam, với nhiều lựa chọn về cấu hình và giá cả phải chăng như VPS Giá Rẻ, Cloud Server, VPS Cao Cấp, VPS NVMe, VPS GPU.
Bạn sẽ được toàn quyền quản trị VPS và có thể thoải mái cài đặt phần mềm, ứng dụng theo nhu cầu sử dụng. Ngoài ra, bạn cũng sẽ được hỗ trợ 24/7 bởi đội ngũ kỹ thuật giàu chuyên môn nếu gặp vấn đề trong quá trình sử dụng. Liên hệ để được tư vấn chi tiết hơn và trải nghiệm VPS Vietnix ngay hôm nay.
Trước tiên, để truy cập được SCLs cho CentOS thì bạn cần cài đặt file phát hành CentOS Linux Software Collections:
sudo yum install centos-release-scl
Sau đó bạn có thể xem danh sách các package SCL hiện có bằng lệnh sau:
yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available
Để tránh bất kỳ xung đột nào trên hệ thống thì các package SCL sẽ được cài đặt trong thư mục /opt/rh
.
Mọi file cấu hình cho package SCL đều được lưu trữ ở thư mục tương ứng, bên trong /etc/opt/rh
. Các package SCL cung cấp các shell script định nghĩa những biến môi trường cần thiết cho các ứng dụng đi kèm như PATH
, LD_LIBRARY_PATH
, hay MANPATH
. Các script này được lưu trữ trong file system dưới dạng /opt/rh/package-name/enable
.
Xem thêm: Cách cài đặt LAMP Stack trên CentOS 7
Bước 2 – Cài đặt Nginx Web Server
Để hiển thị các trang web cho khách truy cập thì bạn cần cài đặt Nginx – một web server hiện đại và được sử dụng rất phổ biến hiện này.
Nginx có thể được cài đặt bằng lệnh yum
như bên dưới đây. Lưu ý rằng bạn cần đổi giá trị 112
thành phiên bản Nginx muốn cài đặt:
sudo yum install rh-nginx112
Sau khi quá trình cài đặt hoàn tất thì bạn có thể chạy Nginx bằng lệnh sau:
sudo systemctl start rh-nginx112-nginx
Xác nhận xem Nginx có đang chạy không:
sudo systemctl status rh-nginx112-nginx
Output
● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago
Main PID: 10556 (nginx)
CGroup: /system.slice/rh-nginx112-nginx.service
├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx
├─10557 nginx: worker process
└─10558 nginx: worker process
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server...
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok
Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful
Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server.
Hint: Some lines were ellipsized, use -l to show in full.
Ở bước này, server vẫn chưa được bảo vệ khỏi các truy cập trái phép từ những user chưa được ủy quyền. Do đó bạn cần thiết lập một tường lửa bằng firewalld như sau:
sudo yum install firewalld
Sau đó khởi động dịch vụ tường lửa:
sudo systemctl start firewalld
Tiếp đến, thêm một số quy tắc tường lửa để cho phép truy cập SSH đến server, đồng thời cho phép kết nối HTTP và HTTPS đến Nginx:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https
Bây giờ hãy reload lại firewalld để áp dụng các quy tắc mới:
sudo firewall-cmd --reload
Sau khi thiết lập tường lửa xong, bạn có thể kiểm tra xem server đã bắt đầu hoạt động chưa bằng cách truy cập vào tên miền hoặc địa chỉ IP public của server từ trình duyệt web.
Nếu bạn không có tên miền nào trỏ đến server hoặc không biết địa chỉ IP public của server thì có thể dùng lệnh sau để tìm:
curl -4 icanhazip.com
Nhập địa chỉ IP có được từ lệnh trên vào thanh địa chỉ của trình duyệt web:
http://server_domain_or_IP
Bây giờ bạn sẽ thấy được trang Landing Page mặc định của Nginx:
Như vậy là bạn đã hoàn tất việc cài đặt Nginx. Trước khi bắt đầu, hãy cho phép Nginx khởi động mỗi khi server boot bằng lệnh sau:
sudo systemctl enable rh-nginx112-nginx
Xem thêm: Cách cài đặt MySQL trên CentOS 7
Bước 3 – Cài đặt MariaDB để quản lý dữ liệu
Sau khi cài đặt xong web server thì bạn cần cài đặt MariadB (Cách cài đặt MariaDB trên CentOS 7 chi tiết tại đây) để lưu trữ và quản lý dữ liệu của trang. Sử dụng lệnh dưới đây để cài đặt MariaDB (Lưu ý thay 102
thành phiên bản tương ứng bạn muốn cài đặt):
sudo yum install rh-mariadb102
Sau đó khởi động dịch vụ bằng lệnh:
sudo systemctl start rh-mariadb102-mariadb
Tiếp theo bạn cần bảo mật MariaDB. MariaDB được cài đặt kèm với một số script bảo mật có sẵn để người dùng chỉnh sửa các thiết lập chưa an toàn. Bạn có thể script bằng lệnh dưới đây:
source /opt/rh/rh-mariadb102/enable
mysql_secure_installation
Sau đó hệ thống sẽ hỏi người dùng về mật khẩu root. Vì đã cài đặt MySQL nên bạn có thể không có mật khẩu root, do đó hãy bỏ qua bằng cách nhấn ENTER. Bây giờ hệ thống tiếp tục hỏi xem bạn có muốn tạo mật khẩu root hay không. Nhấn Y để tiếp tục rồi làm theo các hướng dẫn:
. . .
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 authorization.
Set root password? [Y/n] Y
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
... Success!
. . .
Ở các phần sau, bạn chỉ cần nhấn ENTER để sử dụng các thiết lập mặc định, gồm có: Xóa các user ẩn danh và database kiểm thử, disable đăng nhập root từ xa, đồng thời áp dụng các thay đổi.
Cuối cùng là thiết lập để cho phép MariaDb khởi động khi server boot:
sudo systemctl enable rh-mariadb102-mariadb
Bước 4 – Cài đặt và cấu hình PHP
Đến đây thì bạn đã cài đặt xong Nginx và MariaDB, tuy nhiên vẫn chưa thể tạo nội dung động. Do đó bạn cần có thêm một công cụ nữa là PHP.
Nginx không có bộ xử lý PHP native như các web server khác, do đó bạn cần cài đặt thêm php-fpm
(fastCGI process manager). Sau đó bạn sẽ cấu hình để Nginx có thể truyền các request PHP đến cho phần mềm này xử lý.
Trước tiên, bạn cài đặt module kèm theo một package hỗ trợ để PHP giao tiếp với backend database:
sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd
Sau đó bạn cần thay đổi một số thiết lập để tăng cường bảo mật cho hệ thống. Mở file cấu hình php.ini
bằng quyền root như sau:
sudo vi /etc/opt/rh/rh-php71/php.ini
Tìm tham số cgi.fix_pathinfo
trong file này, dòng này đang được comment bằng dấu ;
và giá trị mặc định là 1
.
Đây là một thiết lập rất kém bảo mật, vì nó sẽ chỉ dẫn PHP thực thi file gần nhất có thể tìm được nếu không tìm thấy file PHP được yêu cầu. Điều này sẽ giúp user có thể tạo ra các PHP request cho phép thực thi được các script trái phép.
Do đó, hãy uncomment dòng này rồi đặt giá trị thành 0
như sau:
cgi.fix_pathinfo=0
Sau đó lưu rồi đóng file (nhấn ESC, nhập :wq
rồi nhấn ENTER).
Tiếp theo, mở file cấu hình của php-fpm:
sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf
Theo mặc định thì file này được cấu hình để hoạt động với server Apache. Vì bạn đã cài đặt Nginx trên server nên hãy tìm dòng user
và group
, sau đó đổi giá trị thành nginx
như sau:
user = nginx
group = nginx
Cuối cùng lưu rồi đóng file.
Bây giờ bạn có thể khởi động bộ xử lý PHP với lệnh sau:
sudo systemctl start rh-php71-php-fpm
Sau đó cho phép php-fpm khởi động khi server boot:
sudo systemctl enable rh-php71-php-fpm
Ở bước tiếp theo, bạn cần cấu hình để PHP có thể hoạt động được cả với những phần mềm khác và giúp server có thể phân phối chính xác các nội dung cần thiết của trang.
Bước 5 – Cấu hình cho Nginx sử dụng PHP Processor
Đến bước này thì bạn đã cài đặt xong các thành phần cần thiết cho LEMP Stack. Bây giờ bạn cần yêu cầu Nginx sử dụng PHP processor cho nội dung động. Cấu hình này có thể thay đổi ở mức độ server block (các server block ở đây có vai trò tương tự như virtual host của Apache).
Trước tiên, mở file cấu hình server block của Nginx:
sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf
Sau đó uncomment block location ~ \.php$
(là đoạn file xử lý các PHP request, bên trong block server
) và các nội dung của nó. Bạn có thể uncomment bằng cách bỏ ký tự #
ở đầu dòng. Bên cạnh đó bạn cũng cần cập nhật option fastcgi_param
thành SCRIPT FILENAME $document_root$fastcgi_script_name
giúp PHP biết vị trí của tài liệu root để tìm kiếm các file cần xử lý.
Bây giờ block server
sẽ có dạng như dưới đây:
...
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /opt/rh/rh-nginx112/root/usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
...
Sau đó lưu rồi đóng file.
Bây giờ bạn có thể kiểm tra file cấu hình có lỗi cú pháp nào không bằng lệnh sau:
source /opt/rh/rh-nginx112/enable
sudo nginx -t
Nếu có bất kỳ lỗi nào thì hãy mở lại file để kiểm tra.
Sau khi hoàn tất, reload lại Nginx để áp dụng các thay đổi mới:
sudo systemctl reload rh-nginx112-nginx
Bước 6 – Tạo file PHP để kiểm tra cấu hình
Ở bước cuối cùng, bạn sẽ kiểm tra xem Nginx có thể chuyển các file .php
đến bộ xử lý PHP một cách chính xác hay không. Điều này được thực hiện bằng cách tạo một file test PHP trong tài liệu root.
Mở file info.php
trong tài liệu root:
sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
Sau đó thêm dòng code PHP dưới đây để nhận thông tin về server:
<?php phpinfo(); ?>
Sau đó lưu rồi đóng lại file. Bây giờ hãy thử truy cập vào trang bằng cách nhập tên miền hoặc địa chỉ IP public của server, sau đó thêm /info.php
vào thành địa chỉ:
http://server_domain_or_IP/info.php
Bây giờ bạn sẽ thấy một trang được tạo bởi PHP, chứa thông tin về server:
Như vậy là bạn đã thiết lập PHP thành công. Sau đó bạn nên xóa file vừa tạo ở trên vì những người dùng trái phép có thể lấy thông tin về cấu hình từ những file này để xâm nhập vào hệ thống:
sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php
Với hơn 10 năm kinh nghiệm làm việc và đồng hành cùng hơn 50.000 khách hàng cá nhân và doanh nghiệp, Vietnix đã trở thành một trong những nhà cung cấp giải pháp VPS hàng đầu tại Việt Nam. Trong đó, một số thương hiệu đã tin chọn Vietnix có thể kể tới như UB Group, iVIVU, SEOSONA, Vietnamworks, SAGO Media,…
Với hơn 100.000 dịch vụ được kích hoạt, Vietnix tự hào về tỷ lệ khách hàng giới thiệu dịch vụ sau khi sử dụng lên tới 97%. Năm 2022, Vietnix đã được trao giải thưởng Thương hiệu Việt Nam xuất sắc, càng khẳng định vị trí là một trong những nhà cung cấp dịch vụ uy tín, chất lượng hàng đầu. Hãy để Vietnix trở thành người đồng hành cùng bạn trong hành trình kinh doanh trực tuyến trên internet.
Mọi vấn đề thắc mắc cần tư vấn, quý khách vui lòng liên hệ:
- Địa chỉ: 265 Hồng Lạc, Phường 10, Quận Tân Bình, Thành Phố Hồ Chí Minh
- Hotline: 1800 1093
- Email: sales@vietnix.com.vn
Qua bài viết về cách cài đặt và cấu hình LEMP Stack trên CentOS 7 này, bạn đã cài đặt thành công bộ phần mềm LEMP Stack bằng Software Collections trên CentOS 7. Ngoài ra, SCL còn có một số bản cài đặt phần mềm và chuyển đổi qua lại giữa chúng. Người dùng có thể tham khảo danh sách chọn lọc cài đặt phù hợp cho hệ thống mình. Nếu có bất kỳ thắc mắc nào khác, hãy để lại ở phần comment bên dưới để được Vietnix hỗ trợ nhanh nhất nhé!