post-image

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

Tổng quan

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
Code language: PHP (php)

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]#
Code language: PHP (php)

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
Code language: JavaScript (javascript)

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
Code language: PHP (php)

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

[root@adshare01 adshare]# yum install nginx
Code language: CSS (css)

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
Code language: CSS (css)

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/\/.*$//'
Code language: PHP (php)

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
Code language: PHP (php)

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

[root@adshare01 adshare]# systemctl enable nginx
Code language: CSS (css)

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
Code language: CSS (css)

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

[root@adshare01 adshare]# systemctl start mariadb
Code language: CSS (css)

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!
Code language: PHP (php)

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

[root@adshare01 adshare]# systemctl enable mariadb
Code language: CSS (css)

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
Code language: CSS (css)

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
Code language: PHP (php)

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
Code language: PHP (php)

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

listen = /var/run/php-fpm/php-fpm.sock
Code language: JavaScript (javascript)

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
Code language: CSS (css)

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

[root@adshare01 adshare]# systemctl enable php-fpm
Code language: CSS (css)

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
Code language: JavaScript (javascript)

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; } }
Code language: PHP (php)

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ộ. kiem tra xu ly php bang file info php

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';
Code language: CSS (css)

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';
Code language: CSS (css)

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
Code language: JavaScript (javascript)

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
Code language: CSS (css)

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/
Code language: JavaScript (javascript)

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
Code language: JavaScript (javascript)

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

chown -R nginx:nginx /var/www/html/*
Code language: JavaScript (javascript)

Cấu hình WordPress

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

cd /var/www/html
Code language: JavaScript (javascript)

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

cp wp-config-sample.php wp-config.php
Code language: CSS (css)

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

nano wp-config.php
Code language: CSS (css)

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');
Code language: PHP (php)

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

nano /etc/nginx/conf.d/default.conf
Code language: JavaScript (javascript)

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;
Code language: JavaScript (javascript)

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ạn có thể tham khảo các bài viết hay về Laravel tại đây.


Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.

Nguồn tham khảo: allravel

Leave a Reply

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