Hướng dẫn cài đặt LEMP Stack trên CentOS 7
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!