Hướng dẫn cài đặt LEMP trên Centos 7
LEMP là gì?
LEMP( Linux, Nginx, PHP và Mysql)
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
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 và 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