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

//

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

LEMP là gì?

LEMP( Linux, Nginx, PHP và Mysql)

Hướng dẫn cài đặt LEMP

Trong bài viết này mình sẽ hướng dẫn cài đặt LEMP trên centos 7, ngoài ra các bạn cũng có thể tham khảo cách cài đặt LEMP trên ubuntu 18.04 tại đây

Hướng dẫn cài đặt LEMP trên centos 7 step by step

Trước tiên chúng ta cần update centos 7 bằng lệnh sau:

yum -y update

Sau khi thực hiện update xong chúng ta thực hiện các bước install LEMP

Bước 1 Cài đặt Nginx Server

Nginx mới nhất không có sẵn trong CentOS repositories, vì vậy chúng ta chúng ta phải thêm repository của Nginx project để cài đặt nó

Chạy lệnh sau:

nano /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Xong lưu lại và thoát

Tiếp tục chạy lệnh sau để cài đặt Nginx

yum -y install nginx

Start Nginx và khởi động nó sau khi hệ thống reboot

systemctl enable nginx.service
systemctl start nginx.service

Tiếp theo chúng ta cần thiết lập firewall open port 80 và 443 cho dịch vụ web

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

Kiểm tra Nginx đã hoạt động chưa, các bạn mở trình duyệt web truy cập ip server

Kiểm tra Nginx

Bước 3: Cài đặt Mysql hoặc MariaDB

Các bạn có thể sử dụng Mysql hoặc MariaDB, mình sẽ hướng cách cài đặt cả 2 loại csdl này, các bạn có thể chọn 1 trong 2

1. Cài đặt Mysql

Chạy lênh sau để cài đặt Mysql

yum install mysql-server

Mặc đinh khi cài đặt Mysql trên ubuntu sẽ là Mysql 5.7, để cài đặt phiên bản mới hơn các bạn thực hiện như sau

Chúng ta cần tải và chuẩn bị MySQL repository để cài đặt Mysql trên centos

Để tải  MySQL  repositories mới nhất các bạn truy cập link sau: https://dev.mysql.com/downloads/repo/yum/

Ở đây mình cài Mysql 8.0 mới nhất, mình sẽ chạy các lệnh sau:

wget http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

rpm -Uvh mysql80-community-release-el7-3.noarch.rpm

yum update - y

Tiếp theo chúng ta chạy lệnh sau để cài đặt  Mysql

yum install -y mysql-server

Sau khi cài đặt MySQL hoàn thành, thực hiện tự khởi động Mysql sau khi reboot hệ thống

systemctl start mysql
systemctl enable mysql

Tiếp theo chúng ta cần thiết lập bảo mật mysql

mysql_secure_installation

Bạn sẽ được yêu cầu thiết lập các thông tin dưới đây

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : <-- 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? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL 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? (Press y|Y for Yes, any other key for No) : <-- 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? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

Ok vậy là xong

2. Cài đặt MariaDB

Chạy lệnh sau để cài đặt MariaDB

yum -y install mariadb-server mariadb MariaDB-client

Lưu ý với lệnh trên chúng ta chỉ cài đặt bản MariaDB v5 cũ nếu muốn cài bản mới nhất các bạn phải thực thêm MariaDB YUM repository

Đầu tiên truy cập vào kho file cài đặt maraDB và chọn phiên bản cần cài tại đây Source MariaDB

Ở đây mình chọn phiên bản mariadb 10.3 cài đặt trên centos 7 thì đươc thông tin tạo MariaDB YUM repository như sau:

# MariaDB 10.3 CentOS repository list
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb] name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Chạy lệnh sau

nano /etc/yum.repos.d/MariaDB.repo

Copy nội dung ở trên paste vào xong lưu lại và thoát

Chạy lệnh sau để cài đặt MariaDB

yum -y install mariadb-server mariadb MariaDB-client

Sau khi cài đặt MySQL hoàn thành, thực hiện tự khởi động Mysql sau khi reboot hệ thống

systemctl enable mariadb.service
systemctl start mariadb.service

Tiếp theo chúng ta cần thiết lập bảo mật mysql

mysql_secure_installation

Thực hiện thiết lập các bước dưới đây

[root@example ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found
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] <-- ENTER
New password: <-- yourrootsqlpassword
Re-enter new password: <-- yourrootsqlpassword
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] <-- ENTER
... 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] <-- ENTER
... 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] <-- ENTER
- 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] <-- ENTER
... 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!

Ok xong.

Bước 4: Cài đặt PHP

Phiên bản cài đặt mặc định trên centos là php 5.4 khá cũ, ở đây mình sẽ cài đặt PHP 7 phiên bản mới và ổn định hiện nay

Trước tiên chúng ta cần thêm EPEL Repository Remi CentOS repository đây là những kho chứa các bản cài đặt cập nhật mới nhất của linux

Đối với các phiên bản khác xem tại đây: https://rpms.remirepo.net/wizard/

Thêm  Remi repository, chạy các lệnh sau

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

Thêm EPEL Repository

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

cài đặt gói: yum-utils

 yum install yum-utils

Chạy lệnh sau để enable the repository:

yum-config-manager --enable remi-php72
yum update

mở file remi-php72.repo

nano /etc/yum.repo.d/remi-php72.repo

sửa giá trị enabled=1

Xong lưu lại và thoát

Chạy lệnh sau để cài đặt PHP kèm module theo yêu cầu

yum install php72u-fpm php72u-bcmath php72u-json php72u-cli php72u-openssl php72u-pdo php72u-mbstring php72u-tokenizer php72u-curl php72u-mysqlnd php72u-ldap php72u-zip php72u-fileinfo php72u-gd php72u-dom php72u-mcrypt

NOTE

Ở đây mình sẽ cài đặt thêm APC, APC là một FREE PHP Extension, là một công cụ hỗ trợ opcode caching rất đơn giản và hiệu quả

pecl install apc
[root@example ~]# pecl install apc
downloading APC-3.1.13.tgz ...
Starting to download APC-3.1.13.tgz (171,591 bytes)
.................done: 171,591 bytes
55 source files, building
running: phpize
Configuring for:
PHP Api Version: 20100412
Zend Module Api No: 20100525
Zend Extension Api No: 220100525
Enable internal debugging in APC [no] : <-- ENTER
Enable per request file info about files used from the APC cache [no] : <-- ENTER
Enable spin locks (EXPERIMENTAL) [no] : <-- ENTER
Enable memory protection (EXPERIMENTAL) [no] : <-- ENTER
Enable pthread mutexes (default) [no] : <-- ENTER
Enable pthread read/write locks (EXPERIMENTAL) [yes] : <-- ENTER
building in /var/tmp/pear-build-rootVrjsuq/APC-3.1.13

Tiếp theo cần sửa file php.ini

nano /etc/php.ini

Sửa giá trị dòng dưới đây
cgi.fix_pathinfo=0

Đọc http://wiki.nginx.org/Pitfalls để hiểu hơn
Thêm dòng sau vào cuối file

extension=apc.so

Tiếp theo bạn cần sửa lại múi giờ của mình

date.timezone = "your_timezone"

Xem timezone bằng lệnh sau

cat /etc/sysconfig/clock

Xong lưu file lại là xong

Bước 5. CẤU HÌNH PHP-FPM LÀM VIỆC VỚI NGINX

Cấu hình php-fpm mở file www.conf

nano /etc/php7.2-fpm.d/www.conf

Thay đổi i thông số như bên dưới.

user = nginx
group = nginx
listen = /var/run/php-fpm/php7.2-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

#thay listen = 127.0.0.1:9000
Thành
listen = /var/run/php-fpm/php7.2-fpm.sock

listen: khai báo dùng unix domain thay cho socket domain
Khởi động php-fpm và cho phép boot cùng hệ điều hành.

systemctl enable php-fpm.service
systemctl start php-fpm.service

CẤU HÌNH NGINX
Mở file virtualhost mặc định của nginx

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

Sửa nội dung như dưới đây

[...]
server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/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           /usr/share/nginx/html;
        try_files $uri =404;
        fastcgi_pass   unix:/var/run/php-fpm/php7.2-fpm.sock;
        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;
    }
}

Lưu lại và thoát
Xong khởi động lại Nginx

systemctl restart nginx.service

Tạo file php.info trong thư mục gốc của web root /usr/share/nginx/html

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

Ok giờ mở trình duyệt web lên và kiểm tra kết quả nhé (ex: http://localhost/info.php)
Chúc các bạn thành công

Link tham khảo

Các bạn nên đọc kỹ thông tin tham khảo ở các link dưới đây  trước khi thực hiện, ngoài ra các bạn cũng cần nắm rõ các yêu cầu của mã nguồn xây dựng website để cài đặt các gói hỗ trợ cần thiết

  • nginx: http://nginx.org/
  • nginx Wiki: http://wiki.nginx.org/
  • PHP: http://www.php.net/
  • PHP-FPM: http://php-fpm.org/
  • MySQL: http://www.mysql.com/
  • CentOS: http://www.centos.org/
  • MariaDB: https://mariadb.org

Leave a Comment