Cài đặt Nginx, PHP7.0, MySQL trên Ubuntu Server 16.04

0
541
(Last Updated On: Th12 19, 2018)

Việc cấu hình một LAMP Stack (Apache, PHP, MySQL trên máy chủ Linux) là điều không có gì khó khăn và đơn giản với hầu hết người dùng. Thế mạnh của máy chủ Web chạy Apache đó là không cần phải cấu hình quá nhiều và sử dụng ngay cho hầu hết người dùng. Thế mạnh của Apache đó là hoạt động dựa trên cấu hình của tập tin .htaccess. Hầu hết các mã nguồn có kèm theo tập tin .htaccess là coi như cấu hình xong luôn cho Apache, đến tay người dùng không phải làm gì thêm.

Sau vài năm sử dụng (cả máy chủ Web Apache và Nginx) mình nhận thấy máy chủ Web Apache hoạt động dựa trên sự ổn định và cố gắng duy trì sự hoạt động này đến người dùng cuối, tuy nhiên yêu cầu tài nguyên của hệ thống nhiều hơn (CPU và RAM), còn Nginx thì đối với nội dung động (như PHP) thì kém hiệu suất hơn so với Apache một chút (mình cảm nhận dựa trên trang WordPress với khoảng 50 Plugin được kích hoạt, Apache cho tốc độ nhanh hơn thấy rõ), tuy nhiên khi có lượt truy cập đồng thời cao, thì Nginx đã phát huy thế mạnh của mình đó là tài nguyên máy chủ không hao tốn nhiều như Apache.

Hôm nay mình xin hướng dẫn các bạn cài đặt một LEMP Stack (Nginx, PHP, MySQL trên máy chủ Linux – mà cụ thể ở đây đó là Ubuntu Server 16.04).

Đầu tiên thì chúng ta cứ cập nhật các gói thông qua dòng lệnh:

apt-get update

Và:

apt-get upgrade

Bước đầu tiên đó là chúng ta cài đặt Nginx:

apt-get install nginx

Sau khi cài đặt Nginx, bạn có thể truy cập ngay http://IP-máy-chủ để kiểm tra, bạn sẽ thấy trang chủ của Nginx ngay khi bạn cài đặt thành công.

Và bây giờ chúng ta cài đặt MySQL – đây là hệ quản trị cơ sở dữ liệu mà các ứng dụng, chương trình sẽ lưu trữ thông tin ở đây.

Để cài đặt MySQL, các bạn dùng lệnh:

apt-get install mysql-server

Đợi một lát tiến trình sẽ hỏi bạn mật khẩu cho tài khoản root:

Bạn chỉ cần điền mật khẩu và nhấn Enter để tiếp tục quá trình.

Một lần nữa tiến trình sẽ hỏi mật khẩu thêm lần nữa để khẳng định bạn đánh không nhầm:

Tiếp tục nhấn Enter hoặc chọn OK bằng phím Tab hoặc dấu cách (Back Space).

Tiếp theo là chúng ta sẽ cài đặt PHP để chạy các ứng dụng, chương trình sử dụng mã nguồn PHP. Trong trường hợp này mình sẽ cài đặt PHP 7.0.

apt-get install php7.0-fpm

PHP7.0 sẽ hoạt động cùng với Nginx thông qua PHP-FPM (tiến trình FastCGI Process Manager).

Và lúc này tiến trình FastCGI sẽ hoạt động trên một cái gọi là Socket: 

/run/php/php7.0-fpm.sock

Bây giờ chúng ta lướt qua tập tin Virtual host của Nginx xem cấu hình như thế nào để hoạt động cùng với PHP: (Các tập tin cấu hình này nằm ở thư mục /etc/nginx/sites-available/)

nano /etc/nginx/sites-available/default

Duới đây là nội dung toàn bộ tập tin này:

##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##

# Default server configuration
#
server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# SSL configuration
	#
	# listen 443 ssl default_server;
	# listen [::]:443 ssl default_server;
	#
	# Note: You should disable gzip for SSL traffic.
	# See: https://bugs.debian.org/773332
	#
	# Read up on ssl_ciphers to ensure a secure configuration.
	# See: https://bugs.debian.org/765782
	#
	# Self signed certs generated by the ssl-cert package
	# Don't use them in a production server!
	#
	# include snippets/snakeoil.conf;

	root /var/www/html;

	# Add index.php to the list if you are using PHP
	index index.html index.htm index.nginx-debian.html;

	server_name _;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to displaying a 404.
		try_files $uri $uri/ =404;
	}

	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	#location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php7.0-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
	#	# With php7.0-fpm:
	#	fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	#}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	#
	#location ~ /\.ht {
	#	deny all;
	#}
}


# Virtual Host configuration for example.com
#
# You can move that to a different file under sites-available/ and symlink that
# to sites-enabled/ to enable it.
#
#server {
#	listen 80;
#	listen [::]:80;
#
#	server_name example.com;
#
#	root /var/www/example.com;
#	index index.html;
#
#	location / {
#		try_files $uri $uri/ =404;
#	}
#}

Tuy nhiên hãy “nhảy bước” đến phần cấu hình PHP:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	#location ~ \.php$ {
	#	include snippets/fastcgi-php.conf;
	#
	#	# With php7.0-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
	#	# With php7.0-fpm:
	#	fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	#}

Dấu “#” là để nội dung đằng sau nó sẽ không hoạt động, sau khi bạn bỏ dấu “#” thì cấu hình mới có hiệu lực. Như vậy, để kích hoạt thì chúng ta sẽ lần lượt bỏ đi những dấu “#” đằng trước:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
	#
	#	# With php7.0-cgi alone:
	#	fastcgi_pass 127.0.0.1:9000;
		# With php7.0-fpm:
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	}

Như vậy, với cấu hình ở trên chúng ta đã kích hoạt xong để PHP hoạt động với Nginx sử dụng tiến trình FastCGI kết nối thông qua socket unix:/run/php/php7.0-fpm.sock.

Bạn cũng có thể thay bằng kết nối TCP bằng cách cho FastCGI kết nối thông qua Port 9000:

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	#
	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
	#
		# With php7.0-cgi alone:
		fastcgi_pass 127.0.0.1:9000;
	#	# With php7.0-fpm:
	#	fastcgi_pass unix:/run/php/php7.0-fpm.sock;
	}

Bạn đừng quên thay đổi cấu hình trong tập tin www.conf của PHP:

nano /etc/php/7.0/fpm/pool.d/www.conf

Bạn tìm đến dòng listen = /var/run/php5-fpm.sock:

Như vậy là ổn rồi. Trong trường hợp nếu bạn thiết lập bằng kết nối TCP trong nginx là 127.0.0.1:9000 thì chúng ta cũng sẽ thay đổi dòng listen = /var/run/php5-fpm.sock thay bằng listen = 127.0.0.1

Ghi chú: Bạn có thể tìm các tập tin như trong bài hướng dẫn của mình bằng lệnh: locate [tên-tập-tin]. Nếu không có locate, thì cài đặt bằng cách apt-get install locate. Sau đó nhớ dùng lệnh updatedb. Ví dụ để tìm tập tin www.conf, thì dùng lệnh:

locate www.conf

Bây giờ tiếp tục sử đổi một chút trong cấu hình PHP:

nano /etc/php/7.0/fpm/php.ini

Các bạn cấu hình dòng cgi.fix_pathinfo=0 nhé. Đây là thiết lập bảo mật thôi.

Tiếp tục là cấu hình để Nginx đọc các tập tin PHP và chuyển cho PHP biên dịch:

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

Thêm index.php sau index.

Bây giờ kiểm tra một chút xem sao, chúng ta sẽ tạo tập tin info.php với nội dung như sau:

<?php
phpinfo();
?>

Bây giờ bạn truy cập: http://IP-máy-chủ/info.php:

Và đây là kết quả.

Nhưng chưa xong đâu, các bạn đừng vội mừng nhé, chúng ta cần cài đặt thư viện để PHP và MySQL hoạt động với nhau với lệnh:

apt-get install php7.0-mysql

Bạn cũng có thể cài đặt thêm các gói mở rộng cho PHP cho các ứng dụng cần thiết.

Chú ý: Đối với máy chủ Web Apache, chúng ta có cấu hình với tập tin .htaccess. Còn Nginx không có cho nên các ứng dụng sẽ có các cấu hình khác nhau.

root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

Ví dụ như ở trên chúng ta thấy thư mục gốc đó chính là /var/www/html.

server_name bạn sẽ điền tên domain vào đây.

Cuối cùng là phần location, ở đây sẽ cấu hình để viết lại đường dẫn, hoặc là các thiết lập nâng cao khác, chẳng hạn như đối với WordPress thì sẽ thế này:

root /var/www/html;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name vngeek.com;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ /index.php?$args;
        }

Để Enable một Virtual host trong nginx, bạn cần đưa tập tin cấu hình sang thư mục /etc/nginx/sites-enabled/:

ln -s /etc/nginx/sites-available/vngeek /etc/nginx/sites-enabled/

Trong đó vngeek là tập tin Virtual host.

Bonus: Bạn có thể cài đặt thêm PHPMyAdmin để quản lý cơ sở dữ liệu dễ dàng hơn:

apt-get install phpmyadmin

Và tiếp tục symlink để chúng ta có thể truy cập trang thiết lập của PHPMyAdmin:

ln -s /usr/share/phpmyadmin /var/www/html

Bạn có thể truy cập PHPMyAdmin bằng cách truy cập địa chỉ:

http://IP-máy-chủ/phpmyadmin

Bạn cũng có thể tải về Sypex Dumper để sao lưu cơ sở dữ liệu sau này tại địa chỉ: Sypex Dumper 2.0.11 (PHP 5).

Và:

Sypex Dumper cho PHP7.0
Sypex Dumper cho PHP7.1

Chúc các bạn thành công!

Bình luận