Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên CentOS

Trong bài này, xTraffic.pep.vn sẽ hướng dẫn các bạn cách cài đặt trọn bộ Nginx, MySQL, PHP (LEMP) trên CentOS (Linux) để chạy các và blog bằng VPS hay Server của bạn

Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên CentOS - CentOS LEMP Linux MySQL nginx PHP - Hosting

LEMP là gì?

LEMP là từ viết tắt của các khái niệm sau :

  • L : Linux (ở đây chúng ta sử dụng CentOS) là hệ điều hành mã nguồn mở đuợc sử dụng chủ yếu trên các server để phục vụ nhiều mục đích khác nhau;
  • E : Nginx là phần mềm máy chủ web cũng tương tự như Apache nhưng có sức chịu tải lớn hơn rất nhiều so với Apache nên thường được sử dụng trên các ứng dụng web rất đông người truy cập và bitly.com là một trong số đó. được phát âm là “engine-x” nên được viết tắt thành chữ E trong LEMP
  • M : MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở rất phổ biến do tính năng bảo mật, dễ sử dụng, và miễn phí. MySQL thường được dùng để lưu trữ dữ liệu cho các ứng dụng web và thường dùng chung với PHP
  • P : PHP là một ngôn ngữ lập trình kịch bản mã nguồn mở, chủ yếu được dùng để phát triển các ứng dụng web trên phía máy chủ (Server Side).

Hướng dẫn cài đặt Nginx, MySQL, PHP (LEMP) trên CentOS

Để thực hiện được theo bài viết này, bạn cần phải có VPS hoặc Server và quyền quản trị root cao nhất của VPS. Nếu bạn chưa có VPS thì có thể tạo và sử dụng VPS giá rẻ của DigitalOcean theo hướng dẫn tại đây

Bước 1 : Cài đặt các Repositories cần thiết

Chúng ta sẽ sử dụng lệnh YUM để cài đặt các phần mềm cần thiết cho bài này, do đó việc đầu tiên là phải cập nhật các Repositories cần thiết cho YUM. Do server chủ yếu chạy CentOS phiên bản 64 bit nên trong bài này mình sẽ hướng dẫn các bạn cài đặt cho CentOS phiên bản 64bit.

Bạn chạy lệnh bên dưới để cài đặt EPEL Repository :

sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Bạn chạy lệnh bên dưới để cài đặt REMI Repository :

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

Sau đó bạn mở file “/etc/yum.repos.d/remi.repo” và tìm để chỉnh sửa những dòng sau :

[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

Sửa “enabled=0” thành “enabled=1“. Nếu bạn muốn cài PHP 5.5 thì tìm

[remi-php55]
name=Les RPM de remi de PHP 5.5 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php55/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

Sửa “enabled=0” thành “enabled=1“. Còn nếu bạn muốn cài PHP 5.6 thì tìm

[remi-php56]
name=Les RPM de remi de PHP 5.6 pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/php56/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

Sửa “enabled=0” thành “enabled=1“.

Bước 2 : Cài đặt MySQL

Bạn chạy lệnh sau để cài đặt MySQL bằng YUM :

sudo yum install -y mysql mysql-server

Sau khi cài đặt MySQL bằng lệnh YUM xong, bạn chạy lệnh sau để khởi động MySQL :

sudo /etc/init.d/mysqld restart

Hoặc bạn cũng có thể khởi động MySQL bằng lệnh sau :

sudo service mysqld start

Sau đó, bạn cần thiết lập ban đầu cho MySQL (chạy duy nhất 1 lần sau khi cài đặt MySQL) bằng lệnh sau :

sudo /usr/bin/mysql_secure_installation

Đầu tiên, MySQL sẽ hỏi bạn root password, bạn cần ghi nhớ và nhập theo yêu cầu của MySQL

Sau đó, MySQL sẽ hỏi bạn các câu hỏi để thiết lập lần đầu, bạn đọc kỹ hướng dẫn và làm theo yêu cầu (thông thường mình sẽ chọn Y)

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

Cũng giống MySQL, chúng ta sẽ cài đặt Nginx bằng lệnh đơn giản của YUM sau :

sudo yum install -y nginx

Sau khi cài đặt Nginx thành công, chúng ta sẽ khởi động Nginx bằng lệnh sau :

sudo /etc/init.d/nginx start

Hoặc bạn cũng có thể khởi động Nginx bằng lệnh sau :

sudo service nginx start

Kiểm tra phiên bản của Nginx bằng lệnh sau :

nginx -v

Ví dụ :

[root@xtraffic ~]# nginx -v
nginx version: nginx/1.0.15
[root@xtraffic ~]#

Để chắc chắn bạn đã cài đặt và chạy Nginx thành công trên Server, bạn sử dụng trình duyệt web bất kỳ (Chrome, Firefox,…) và truy cập vào địa chỉ IP của Server. Nếu bạn không biết địa chỉ IP của Server thì bạn chạy lệnh sau :

ifconfig eth0 | grep inet | awk '{ print $2 }'

Nếu bạn thấy trang như bên dưới thì có nghĩa là bạn đã cài đặt Nginx trên CentOS thành công :

Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên CentOS - CentOS LEMP Linux MySQL nginx PHP - Hosting

Trang Nginx

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

Nginx chạy với PHP thông qua chương trình PHP-FPM, do đó bạn chạy lệnh sau để cài đặt gói chương trình PHP-FPM bằng YUM :

sudo yum install -y php-fpm php-mysql

Cài đặt các thư viện phổ biến cho PHP bằng lệnh YUM :

yum install -y php-common php-bcmath php-cli php-devel php-mcrypt php-mysql php-mysqlnd php-password-compat php-pclzip php-pdo php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-dba php-embedded php-enchant php-mbstring php-intl libssh2 php-pecl-ssh2 php-pecl-memcached php-pecl-redis php-soap php-xmlseclibs php-phpseclib php-php-gettext php-phpass php-pecl-zip php-opcache php-mssql php-magickwand php-pecl-crypto php-pecl-geoip php-pecl-igbinary php-pecl-oauth php-pecl-rar php-pecl-yaml php-pgsql php-phpseclib-crypt-aes php-phpseclib-crypt-base php-phpseclib-crypt-blowfish php-phpseclib-crypt-des php-phpseclib-crypt-hash php-phpseclib-crypt-random php-phpseclib-crypt-rijndael php-phpseclib-crypt-rsa php-phpseclib-crypt-tripledes php-phpseclib-crypt-twofish

Kiểm tra phiên bản của PHP bằng lệnh sau :

php -v

Ví dụ :

[root@xtraffic ~]# php -v
PHP 5.4.39 (cli) (built: Mar 19 2015 06:59:35)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies
[root@xtraffic ~]#

Khởi động PHP-FPM bằng lệnh sau :

sudo service php-fpm start

Bước 5 : Thêm user mới

Vì mục đích an toàn nên chúng ta cần tạo 1 user mới để chạy web. Trong ví dụ này, chúng ta sẽ tạo user mới có username là pepvn thuộc group cũng tên là pepvn Để tạo user mới bạn chạy lệnh sau :

useradd pepvn -pUSER_PASSWORD

Bạn thay USER_PASSWORD bằng password mạnh từ 8 ký tự trở lên và có cả chữ hoa + thường + chữ số. Nếu bạn muốn thay đổi password cho user pepvn thì bạn chạy lệnh sau :

passwd pepvn

Sau đó bạn nhập lại 2 lần chính xác password mới mà bạn muốn đổi. Sau khi thêm user mới bằng lệnh useradd bên trên, hệ thống sẽ tự động tạo 1 thư mục mới tương ứng với username vừa tạo “/home/pepvn/” Để thuận lợi trong việc quản lý các website thì mình sẽ tạo thư mục “/home/pepvn/domains/” để chứa các website chạy trên VPS/Server này. Tiếp theo, mình sẽ setup để chạy website có domain là xtraffic.pep.vn. Bạn nên tạo folder “/home/pepvn/domains/pep.vn/xtraffic” để chứa source code của website và dễ quản lý. Bạn chạy lệnh sau :

mkdir -p /home/pepvn/domains/pep.vn/xtraffic/

 

Bước 6 : Cấu hình Nginx

Các file cấu hình của Nginx thường được đặt tại thư mục “/etc/nginx/” và có phần mở rộng là “*.conf” Chúng ta sẽ mở file cấu hình chính của Nginx tại “/etc/nginx/nginx.conf“. Tại đây, bạn tìm dòng “worker_processes” và chỉnh lại thành “worker_processes 8;” . Trong đó 8 là số CPUs trên Server của bạn, nếu bạn muốn biết số CPUs trên Server của bạn thì bạn có thể dùng lệnh sau :

lscpu

Bạn tìm dòng có chữ “CPU(s): ” là số CPUs trên server của bạn. Sau đó, bạn tạo 1 file mới trong thư mục “/etc/nginx/conf.d/” có tên là “my_websites_configs.conf” (đường dẫn đầy đủ là “/etc/nginx/conf.d/my_websites_configs.conf” ) có nội dung như sau :

#
# Website : xtraffic.pep.vn
#
server {

	listen       80;
	server_name  xtraffic.pep.vn;
	root        /home/pepvn/domains/pep.vn/xtraffic;
	index       index.html index.htm index.php;


	# redirect server error 404 pages to the static page /404.html
	error_page  404              /404.html;
	location = /404.html {
		root   /usr/share/nginx/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;
	}


	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	location ~ .(php|phtml)$ {
		fastcgi_pass   127.0.0.1:9000;
		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;
	}


}

Cấu hình bên trên được sử dụng cho của xtraffic.pep.vn , để sử dụng cho tên miền của bạn thì bạn có thể thay thế tại dòng “server_name” Folder chứa toàn bộ code website được đặt tại thư mục “/home/pepvn/domains/pep.vn/xtraffic“, bạn có thể thay đổi theo ý muốn cùa mình bằng cách thay đổi tham số tại dòng “root /home/pepvn/domains/pep.vn/xtraffic;” Mặc định Nginx sẽ sử dụng port 9000 cho php-fpm, nếu bạn muốn thay đổi port khác cho php-fpm thì bạn thay thế tại dòng “fastcgi_pass 127.0.0.1:9000;” Sau đó, bạn mở file cấu hình php-fpm tại đường dẫn “/etc/php-fpm.d/www.conf” rồi tìm và thay đổi các dòng sau : “user = apache” thành “user = pepvn” “group = apache” thành “group = pepvn” Bạn khởi động lại Nginx và PHP-FPM để cập nhật các thay đổi bạn vừa cấu hình bằng 2 dòng lệnh sau :

sudo service nginx restart
sudo service php-fpm restart

Bước 7 : Mở port cho VPS bằng iptables

Bạn mở file “/etc/sysconfig/iptables” và thêm vào dòng sau :

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Lưu ý : bạn phải thêm vào ngay phía trước dòng (nếu có) “-A INPUT -j REJECT –reject-with icmp-host-prohibited” thì mới mở được port theo ý muốn. Nếu bạn muốn mở port 443 (được dùng cho https://) thì bạn thêm vào dòng sau :

-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

Sau đó bạn lưu lại và khởi động lại iptables để áp dụng thay đổi cấu hình :

service iptables restart

Bước 8 : Cấu hình SELinux

Bạn kiểm tra trạng thái hiện tại của SELinux bằng lệnh sau :

sudo getenforce

Nếu bạn thấy “Enforcing” thì cần phải làm thêm bước sau để PHP có thể xử lý truy vấn :

sudo chcon -Rt httpd_sys_content_t /home/pepvn/domains/pep.vn/xtraffic

Bạn thay “/home/pepvn/domains/pep.vn/xtraffic” bằng đường dẫn thư mục chứa source website của bạn.

Bước 9 : Thiết lập quyền sở hữu tập tin và thư mục

Nếu bạn đăng nhập bằng username pepvn để upload và tạo file hoặc thư mục thì không cần thực hiện bước này. Tuy nhiên nếu bạn gặp rắc rối về việc không có quyền thực thi, đọc hoặc ghi các file hoặc thư mục trong “/home/pepvn/” thì bạn có thể chạy lệnh sau để đổi quyền sở hữu các tập tin và thư mục trong “/home/pepvn/”

chown -R pepvn:pepvn /home/pepvn/

Sau khi chạy lệnh này thì những folder hoặc file không phải quyền sở hữu của user pepvn sẽ chuyển thành pepvn và group pepvn.

Bước 10 : Tạo trang PHP Info

Bạn tạo 1 file index.php trong thư mục “/home/pepvn/domains/pep.vn/xtraffic” ( “/home/pepvn/domains/pep.vn/xtraffic/index.php” ) có nội dung như sau :

<?php
phpinfo();
?>

Sau đó bạn mở trình duyệt và truy cập vào tên miền bạn cấu hình ở bước trên (ví dụ : http://xtraffic.pep.vn) và thấy thông tin trang phpinfo như hình bên dưới thì bạn đã cài đặt thành công Nginx và PHP trên CentOS của bạn :

Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên CentOS - CentOS LEMP Linux MySQL nginx PHP - Hosting

Trang phpinfo

Bước 9 : Thiết lập tự khởi động LEMP

Để LEMP tự khởi động mỗi khi VPS hay Server reboot thì bạn cần thực hiện những lệnh sau : Tự động chạy MySQL :

sudo chkconfig --levels 235 mysqld on

Tự động chạy Nginx :

sudo chkconfig --levels 235 nginx on

Tự động chạy php-fpm :

sudo chkconfig --levels 235 php-fpm on

Vậy là chúng ta đã hoàn tất việc cài đặt thành công Linux, Nginx, MySQL, PHP (LEMP) trên CentOS của bạn. Bạn có thể sử dụng LEMP để chạy bất kỳ dịch vụ web nào như : blog WordPress, Drupal, Joomla hay website tự code của bạn bằng PHP… Nếu các bạn gặp bất kỳ vấn đề nào khi thực hiện bài hướng dẫn này thì có thể comment bên dưới để mình hướng dẫn cách khắc phục. Chúc các bạn có nhiều ứng dụng web thành công :)

** This article is copyrighted by xTraffic’s Blog **