Hướng dẫn cài đặt LEMP Stack trên CentOS 7

Mục lục

1. Tổng quan

  • LEMP là chữ viết tắt thường được dùng để chỉ sự sử dụng các phần mềm Linux, Nginx, MySQL/MariaDB và PHP/PHP-FPM để tạo nên một môi trường máy chủ Web giúp triển khai các website trên môi trường Internet với Nginx Server là một Web Server mã nguồn mở mạnh mẽ sử dụng ít tài nguyên hệ thống. Ưu điểm của Nginx là cho phép xử lý tốc độ tải cao hơn đối với các HTTP request.

2. Cài đặt LEMP trên CentOS 7

Tắt Selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && setenforce 0

Sau khi tắt selinux ta cập nhật lại hệ thống và khởi động lại để disable selinux

yum -y update && reboot

a. Cài đặt Nginx

Theo mặc định thì khi cài đặt Nginx qua repo của CentOS sẽ không là phiên bản mới nhất. Để cài đặt phiên bản mới nhất của Nginx chúng ta cần thêm repository của nginx bằng cách tạo file /etc/yum.repos.d/nginx.repo với nội dung sau:

vi /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Sau khi thêm repository ta chạy lệnh bên dưới để cài đặt nginx

yum install -y  nginx

Để kiểm tra nginx đã cài đặt thành công hay chưa ta có thể xem version bằng lệnh

nginx -v

Để truy cập được website thì ta có thể tắt firewall hoặc mở các port sau:

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Backup lại file nginx.conf và cấu hình

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
vi /etc/nginx/nginx.conf
user nginx;

worker_processes auto;
pid /var/run/nginx.pid;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

events {
worker_connections 10240;
}

http {
include /etc/nginx/mime.types;

default_type application/octet-stream;
tcp_nopush on;
tcp_nodelay on;
sendfile on;

log_format bytes '$bytes_sent $request_length';

keepalive_timeout 15;
types_hash_max_size 2048;

disable_symlinks if_not_owner from=$document_root;

server_tokens off;

add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

client_max_body_size 1024m;
client_body_buffer_size 128k;

server_names_hash_bucket_size 128;
server_names_hash_max_size 10240;

ssl_dhparam /etc/nginx/ssl/dhparams.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
proxy_read_timeout 1800s;

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;

index index.html index.htm index.php;

gzip on;
gzip_static on;
gzip_disable "msie6";
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 1;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js image/svg+xml;
gzip_buffers 16 8k;

include /etc/nginx/conf.d/*.conf;
}

Kiểm tra cấu hình nginx bằng lệnh

nginx -t

Khởi động Nginx

systemctl enable nginx
systemctl start nginx

b. Cài đặt Mariadb

Cũng tương tự như Nginx ta tạo repo để có thể cài đặt phiên bản mariadb mới hơn. Ở đây mình sẽ sử dụng phiên bản MariaDB 10.4.12

vi /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.4.18/rhel7-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Sau khi tạo repo ta chạy lệnh sau để cài đặt mariadb

yum install MariaDB-server MariaDB-client -y

Khởi động MariaDB

systemctl enable mariadb
systemctl start mariadb

Đặt mật khẩu cho tài khoản root trong database mariadb

mysql_secure_installation

[root@centos7 ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
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!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
… Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
… Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
Dropping test database…
… Success!
Removing privileges on test database…
… Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n]
Y
… Success!
Cleaning up…
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

c. Cài đặt PHP-FPM

Phiên bản PHP có sẵn mặc định trong máy chủ CentOS 7 đã lỗi thời và vì lý do đó, chúng ta sẽ cần cài đặt kho lưu trữ gói của bên thứ ba để có được PHP 7+ và cài đặt nó trên máy chủ CentOS 7 của bạn.

Remi là kho lưu trữ gói phổ biến cung cấp các bản phát hành PHP cập nhật nhất cho các máy chủ CentOS để cài đặt kho Remi cho CentOS 7. Ở bài viết này mình sẽ sử dụng PHP 7.3:

yum -y install yum-utils epel-release
rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php73

Bây giờ chúng ta có thể tiến hành sử dụng yum để cài đặt PHP như bình thường. Lệnh sau sẽ cài đặt tất cả các gói cần thiết để cài đặt PHP 7.3 trong Nginx và cho phép nó kết nối với cơ sở dữ liệu dựa trên MySQL:

yum -y install php-fpm php-ldap php-zip php-embedded php-cli php-mysql php-common php-gd php-xml php-mbstring php-mcrypt php-pdo php-soap php-json php-simplexml php-process php-curl php-bcmath php-snmp php-pspell php-gmp php-intl php-imap perl-LWP-Protocol-https php-pear-Net-SMTP php-enchant php-pear php-devel php-zlib php-xmlrpc php-tidy php-mysqlnd php-opcache php-cli php-pecl-zip unzip gcc

Backup file cấu hình mặc định của php-fpm

cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.bak
vi /etc/php-fpm.d/www.conf
[www]
user = nginx
group = nginx
listen = /var/run/php-fpm.sock;
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 20
pm.max_requests = 500
;slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache
security.limit_extensions = .php .php52 .php53 .php54 .php55 .php56 .php60 .php70 .php71 .php73

Tiếp theo ta sửa quyền cho nginx với lệnh sau:

chown -R nginx:nginx /var/lib/php/*

Cuối cùng là khởi động php-fpm

systemctl enable php-fpm
systemctl start php-fpm

d. Cấu hình Nginx

Ta chỉnh sửa file default.conf với cấu hình sau

vi /etc/nginx/conf.d/default.conf
server {
    listen 80;
    server_name localhost;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    root /usr/share/nginx/html;
    index index.html index.htm index.php;

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

Sau khi đã chỉnh sửa ta lưu lại và reset nginx để nhận file cấu hình

systemctl restart nginx

Cuối cùng, ta tạo file info.php để kiểm tra web đã hoạt động chưa

vi /usr/share/nginx/html/info.php
<?php
phpinfo();

Sau khi reset nginx ta kiểm tra bằng cách truy cập browers và gõ http://IPaddress/info.php

Chúc các bạn thành công!

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

Your email address will not be published. Required fields are marked *