Ra mắt hai series mới cực hot Trí tuệ nhân tạo A đến ZPython công cụ không thể thiếu khi nghiên cứu Data science, Machine learning.

Hướng dẫn cài đặt PHP Nginx MariaDB trên CentOS 7

LEMP là một bộ phần mềm máy chủ web nổi tiếng bao gồm PHP (PHP-FPM), NginX, MySQL (MariaDB) trên nền hệ điều hành Linux. Một bộ phần mềm máy chủ khác cũng rất nổi tiếng là LAMP (là chữ đầu trong các thành phần: Nền tảng Linux, máy chủ web Apache, CSDL MySQL-sử dụng MariaDB, ngôn ngữ PHP). Các thành phần của LEMP bao gồm:

  • LEMP thay thế máy chủ web Apache bởi NginX (đọc là engine X), một webserver nhỏ gọn, ít tốn RAM nhưng hoạt động rất mạnh mẽ và ổn định.
  • MariaDB là phiên bản mã nguồn mở hoạt động giống như MySQL và cũng do chính nhóm phát triển MySQL tạo ra, sau khi MySQL về tay Oracle, MySQL đã dừng lại và cộng đồng phát triển hướng sang MariaDB.
  • LEMP hỗ trợ ngôn ngữ PHP phiên bản >=5.3.*, 7.0

Bài hướng dẫn này sử dụng máy chủ VPS chạy CentOS 7 tại Vultr. Trước khi bắt đầu hướng dẫn này, bạn nên có một tài khoản khác tài khoản root được thiết lập trên server. Tạo nhanh một tài khoản adshare như dưới đây:

[root@adshare01 ~]# adduser adshare
[root@adshare01 ~]# passwd adshare
Changing password for user adshare.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@adshare01 ~]# gpasswd -a adshare wheel
Adding user adshare to group wheel

Một số hành động cài đặt, chạy các dịch vụ cần quyền root, sử dụng lệnh sudo su để lấy quyền root

[adshare@adshare01 ~]$ sudo su
[sudo] password for adshare:
[root@adshare01 adshare]#

Bước 1: Cài đặt NginX

Đầu tiên chúng ta cài repo EPEL và REMI vào trước. EPEL (Extra Packages for Enterprise Linux) là một dự án repository cung cấp bởi Fedora team nó chứa rất nhiều các gói add-on hay dùng cho các phiên bản Linux nhưu RedHat, CentOS... Câu lệnh để cài đặt repo EPEL như sau:

yum install epel-release

Tiếp đến cài đặt repo REMI, đây cũng là repository miễn phí được duy trì bởi Remi Collect. Sở dĩ nên cài đặt cả hai kho các gói addon để giúp cho hệ thống có thể tải được các gói một cách tốt nhất.

rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Với các phiên bản CentOS 5, 6 sử dụng các lệnh tương ứng sau:

# CentOS 5
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# CentOS 6
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rp

Tiếp theo chúng ta sẽ cài đặt repository NginX:

[root@adshare01 adshare]# yum install nginx

Sau khi đã cài đặt xong webserver NginX, khởi động webserver nên và kiểm tra thôi:

[root@adshare01 adshare]# sudo systemctl start nginx

Kiểm tra xem máy chủ web đã chạy chưa, mở trình duyệt gõ vào đường dẫn http://dia_chi_ip_public hoặc http://domain_name nếu đã cấu hình DNS. Để xem địa chỉ IP public của máy chủ, sử dụng lệnh:

[root@adshare01 adshare]# ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Nếu mọi thứ ok, trang mặc định của webserver NginX như sau: Màn hình trang mặc định webserver NginX Nếu bạn chưa thể vào được trang mặc định này, có thể trên VPS của bạn đang thiết lập firewall, thực hiện các lệnh sau cho phép các giao thức HTTP và HTTPS chạy qua firewall:

[root@adshare01 adshare]# firewall-cmd --permanent --zone=public --add-service=http 
[root@adshare01 adshare]# firewall-cmd --permanent --zone=public --add-service=https
[root@adshare01 adshare]# firewall-cmd --reload

Cấu hình để NginX start khi khởi động máy chủ:

[root@adshare01 adshare]# systemctl enable nginx

Bước 2: Cài đặt CSDL MySQL (hiện nay là MariaDB)

Chúng ta sử dụng yum để yêu cầu và cài đặt mariaDB

[root@adshare01 adshare]# yum install mariadb-server mariadb

Sau khi cài đặt xong, bật MariaDB lên:

[root@adshare01 adshare]# systemctl start mariadb

Như vậy, MariaDB đã chạy, tuy nhiên chúng ta cần chạy một script nữa về bảo mật, nó giúp loại bỏ một số mặc định nguy hiểm bằng lệnh sau:

  • Thay đổi mật khẩu root trên CSDL
  • Loại bỏ những user nặc danh
  • Không cho phép root remote từ xa
  • Loại bỏ các CSDL test
  • Reload privilege tables
[root@adshare01 adshare]# 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.

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!

Để khởi động MariaDB cùng máy chủ sử dụng lệnh

[root@adshare01 adshare]# systemctl enable mariadb

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

Cài đặt hai gói php-mysql và php-fpm

[root@adshare01 adshare]# yum install php php-mysql php-fpm

Tiếp đó, chúng ta cấu hình các thông số cho PHP: Mở file cấu hình php-fpm chính từ dòng lệnh:

[root@adshare01 adshare]# nano /etc/php.ini

Tìm đến tham số cgi.fix_pathinfo đang được comment lại bằng dấu ; và thiết lập giá trị cho tham số này bằng 0. Đây là một thiết lập cực lỏng lẻo về bảo mật, tham số này cho phép PHP sẽ thực thi một file gần nó nhất nếu không có file PHP nào phù hợp. Sử dụng Ctrl + W để tìm kiếm trong nano.

cgi.fix_pathinfo=0

Save và close file này (Ctrl+O để save file và Ctrl+X để thoát). Tiếp đến mở file cấu hình php-fpm www.conf

[root@adshare01 adshare]# nano /etc/php-fpm.d/www.conf

Tìm đến tham số listen và thay bằng:

listen = /var/run/php-fpm/php-fpm.sock

Tìm đến listen.owner và listen.group rồi bỏ comment đi

listen.owner = nobody
listen.group = nobody

Tìm đến tham số user = apache, group = apache và thay đổi bằng:

user = nginx
group = nginx

Như vậy đã cấu hình xong file www.conf thực hiện save và thoát. Start PHP processor lên bằng lệnh:

[root@adshare01 adshare]# systemctl start php-fpm

Sau đó, cho phép nó start cùng hệ thống khi khởi động:

[root@adshare01 adshare]# systemctl enable php-fpm

Bước 4: Cấu hình NginX để xử lý các trang PHP

3 bước đầu chúng ta đã cài đặt đủ các thành phần để một webserver hoạt động, trong bước 4 này chúng ta sẽ thực hiện cấu hình NginX để NginX hiểu và xử lý các trang PHP. Chúng ta cấu hình NginX trên server block level (tương tự như việc thiết lập virtual host trên Apache). Để mở NginX server block sử dụng:

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

mặc định cấu hình NginX server block như sau:

server {
   listen 80;
   server_name localhost;

   location / {
      root /usr/share/nginx/html;
      index index.html index.htm;
   }
   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
     root /usr/share/nginx/html;
   }
}

Chúng ta cần thực hiện một số thay đổi để NginX xử lý được trang PHP:

  • Đầu tiên, chúng ta cần thêm index.php vào giá trị index để cho phép chạy index.php khi một thư mục được yêu cầu.
  • Tiếp theo, thay đổi server_name trỏ tới tên miền hoặc địa chỉ IP public.
  • Bỏ comment ở một số cấu hình xử lý lỗi yêu cầu như 404.

Thêm try_files để đảm bảo Nginx không truyền các yêu cầu khác PHP đến phần xử lý PHP. Kết quả, chúng ta có cấu hình cho Nginx server block.

server {
    listen 80;
    erver_name server_domain_name_or_IP;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

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

Khởi động lại Nginx để nhận cấu hình mới.

systemctl restart nginx

Bước 5: Kiểm tra webserver xử lý trang PHP tốt chưa?

Chúng ta sẽ tạo một trang PHP và test chạy từ trình duyệt xem web server đã chạy ổn chưa. Thư mục Nginx mặc định là /usr/share/nginx/html/, tạo một file info.php với nội dung: Sau đó, mở trình duyệt và chạy đường dẫn: http://địa_chỉ_ip_public/info.php, nếu trang thông tin PHP hiện ra thì mọi bước cài đặt đã tốt. Chú ý, xóa file info.php tránh để thông tin bị lộ.

Bonus: Cài đặt wordpress trên CentOS 7 với LEMP (PHP, NginX, MariaDB)

Tạo database cho wordpress

Đăng nhập vào MySQL (MariaDB) với quyền root

mysql -u root -p

Tạo database

CREATE DATABASE wordpress;

Tạo một user trên database

CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';

Gán quyền cho user này với database mới tạo

GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost IDENTIFIED BY 'password';

Bắt buộc MySQL cập nhật lại quyền

FLUSH PRIVILEGES;

Tải bộ cài wordpress

Cài đặt module php-gd phục vụ cho việc thay đổi kích thước ảnh trong wordpress phục vụ chức năng thumbnails:

yum install php-gd

Tải file nén chứa wordpress về máy chủ

wget http://wordpress.org/latest.tar.gz

Giải nén file vừa tải về, khi giải nén được thư mục wordpress

tar xzvf latest.tar.gz

Copy toàn bộ nội dung thư mục này sang thư mục /var/www/html/ cùng với toàn bộ quyền mặc định

rsync -avP ~/wordpress/ /var/www/html/

Tạo một thư mục uploads chứa các file cần tải lên wordpress

mkdir /var/www/html/wp-content/uploads

Gán quyền để wordpress có thể xử lý được các thư mục này

chown -R nginx:nginx /var/www/html/*

Cấu hình Wordpress

Chuyển đến thư mục gốc chứa wordpress

cd /var/www/html

Copy file cấu hình mẫu sang thành wp-config.php

cp wp-config-sample.php wp-config.php

Chỉnh sửa nội dung file cấu hình

nano wp-config.php

Thêm vào các thông tin về tên CSDL, username, password vào wp-config.php

/ ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');

/** MySQL database username */
define('DB_USER', 'wordpressuser');

/** MySQL database password */
define('DB_PASSWORD', 'password');

Thay đổi Nginx server block xử lý đường dẫn gốc web:

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

Tìm đến dòng root /usr/share/nginx/html; và chuyển về thư mục gốc của wordpress

root /var/www/html;

Ok, done. Chạy wordpress installer từ trình duyệt bằng đường dẫn http://địa_chỉ_ip_public. Bạn nhớ khởi động lại nginx để cập nhật cấu hình.


CÁC BÀI VIẾT KHÁC

FirebirD

Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.

Laravel Elixir sẽ có tên mới Laravel Mix từ phiên bản 5.4

Hướng dẫn cài đặt PHP framework Laravel

5 Bình luận trong "Hướng dẫn cài đặt PHP Nginx MariaDB trên CentOS 7"

  1. Quang Liêm

    6 years ago

    Phản hồi
    Nginx sử dụng php-fpm vậy các câu lệnh liên quan đến composer thì sài thế nào ợ?
  2. Halo IT

    6 years ago

    Phản hồi
    Tôi cài wordpress theo hướng dẫn trên với Nginx, MariaDB, PHP-FPM trên Ubutu 16.10 vào trang chủ và trang admin wp-admin thì được nhưng các trang bài viết lại không được, báo lỗi 404. Phải xử lý thế nào ad giúp với.
    1. trung kiên

      6 years ago

      Phản hồi
      Bạn cài mới hay copy source code từ website khác sang, nếu cài đặt mới có thể phần cấu hình rewrite chưa chuẩn, nếu là copy từ website khác có thể do bạn chưa cài đặt lại Site Address (URL). Bạn gửi cấu hình Nginx server block cho mình vào đây nhé.
      1. Halo IT

        6 years ago

        Phản hồi
        tôi làm theo đúng hướng dẫn ở trên, chưa cấu hình thêm gì cả, ad xem lại giúp
  3. Halo IT

    6 years ago

    Phản hồi
    tôi đã làm được rồi, thanks ad

Thêm bình luận