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

3 năm trước
LEMP Stack

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

 

LEMP stack là một nhóm các phần mềm được sử dụng để tạo nên một web server phục vụ Web động và các ứng dụng web. Nhóm phần mềm này gồm hệ điều hành Linux, phần mềm chạy dịch vụ web server là Nginx. Cơ sở dữ liệu được lưu trữ trên MySQL và các thành phần " động" được xử lí bởi PHP.

Bài viết này hướng dẫn bạn cách cài đặt LEMP Stack trên server Ubuntu 16.04. Bạn có thể cài Ubuntu trên máy ảo hoặc sử dụng Ubuntu Server của ViCloud

 

Yêu cầu tiên quyết

Sau khi đã có tài khoản, đăng nhập rồi tiến đến Bước 1.

 

Bước 1: Cài đặt Nginx web server

 

Để hiển thị website tới người dùng, ta sẽ cài đặt Nginx, một web server hiện đại với nhiều tính năng hiệu quả.

Vì mọi gói ta sẽ cài đều nằm trong kho ứng dụng của Ubuntu, ta sẽ dùng trình quản lí gói apt để cài đặt.

Update local package index để cập nhật phiên bản mới nhất của ứng dụng, sau đó cài Nginx:

sudo apt-get update sudo apt-get install nginx 

Trên Ubuntu 16.04, Nginx được cấu hình sắn để tự động khởi động cùng hệ thống, nên ta không cần làm gì thêm.

Nếu ufw firewall đang bật, bạn sẽ cần cấu hình lại nó để cho phép những kết nối đến Nginx. Trong quá trình cài đặt, Nginx tự đăng kí profile của mình với ufw . Bình thường chỉ cần chọn chế độ kết nối sao cho firewall chỉ cho phép một lượng tối thiểu truy cập đến server. Ở đây, do chưa cấu hình SSH cho server, ta chỉ cho phép cổng 80( cổng mặc định cho các thông điệp HTTP)

Dùng lệnh:

sudo ufw allow 'Nginx HTTP' 

 

Kiểm tra trang thái của ufw

sudo ufw status 

 

Ouput:

OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere 
Nginx HTTP ALLOW Anywhere 
OpenSSH (v6) ALLOW Anywhere (v6) 
Nginx HTTP (v6) ALLOW Anywhere (v6)
 

Với thiết lập firewall mới, bạn có thể kiểm tra lại xem server có hoạt động đúng yêu cầu hay chưa bằng cách truy cập vào tên miền( domain name) hoặc public IP address của server của bạn trong trình duyệt.

Nếu server chưa có tên miền và bạn cũng không biết piblic IP adress của nó. bạn có gõ lệnh sau trên terminal:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' 

 

Chọn trong số các địa chỉ IP được hiển thị để kiểm tra kết nối.
 

Một cách khác là dùng lệnh:

curl -4 icanhazip.com 

Nhập địa chỉ IP hoặc tên miền của server vào trình duyệt:

http://server_domain_or_IP

Nginx default page

Nếu thấy trang web trên được hiển thị, bạn đã thành công.

 

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

Giờ hãy tiến hành cài đặt MySQL, hệ quản trị cơ sở dữ liệ để lưu trữ các trang web với lệnh:

sudo apt-get install mysql-server 

 

Nhập vào mật khẩu root của bạn để tiếp tục.

Đến đây MySQL đã được cài đặt, nhưng vẫn chưa được cấu hình để sử dung. Để cấu hình MySQL, trước hết hãy cài đặt những gói bảo mật của nó với lệnh:

mysql_secure_installation 

 

Nhập vào root password của bạn một lần nữa.Tiếp theo bạn sẽ được hỏi có muốn cấu hình VALIDATE PASSWORD PLUGIN hay không.

Warning: Kích hoạt tính năng này đôi khi lại gây những bất tiện. Khi nó được kích hoạt, những mật khẩu không thỏa mãn về bảo mật sẽ không được chấp nhận. Vấn đề sẽ xảy ra nếu bạn dùng một mật khẩu yếu để kết hợp với những phần mềm tự động thay đổi cấu hình user của MySQL, chẳng hạn như một số gói của Ubuntu dành cho phpMyAdmin​. Bạn có thể bỏ qua bước này, nhưng hãy dùng những mật khẩu đủ mạnh để đảm bảo bảo mật cho hệ thống.

Nhập y để đồng ý, hoặc bất cứ kí tự khác để bỏ qua.

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:

Nếu chọn y, bạn sẽ cần chọn mức độ bảo mật. Nếu chọn cho mức bảo mật cao nhất, mật khẩu của bạn phải chứa số, chữ in hoa và in thường cũng như các kí tự đặc biệt, và những từ có trong từ điển (tiếng Anh) cũng sẽ không được chấp nhận.

There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Sau đó bạn sẽ nhận được một thông báo về độ bảo mật của root pasword, và yêu cầu có muốn đổi mật khẩu hay không. Chọn để giữ nguyên.

Using existing password for root.
Estimated strength of the password: 100Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

Với phần còn lại , bấm Y rồi Enter. Bạn đã tăng tính bảo mật bằng cách xóa bỏ các tài khoản vô danh, các test database, khóa chức năng đăng nhập từ xa cho tài khoản root và tải một số quy định mới.

Đến đây hãy chuyển đến Bước 3.

 

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

 

Chúng ta đã cài đặt Nginx để làm web server và MySQL để lưu trữ dữ liệu. Tuy nhiên ta vẫn chưa có khả năng xử lí và hiển thị những web động, và PHP sẽ giúp ta giải quyết vấn đề này.

Do Nginx không hỗ trợ xử lý PHP thuần như những web server khác, ta cần cài php-fpm (fastCGI process manager) và chuyển những yêu cầu xử lí động đến để nó xử lí.

Chúng ta có thể vừa cài module này và một vài helper package (gói trợ giúp) giúp PHP có thể giao tiếp với cơ sở dữ liệu. Gõ lệnh:

sudo apt-get install php-fpm php-mysql

 

Cấu hình PHP Processor (Bộ xử lí PHP)

 

Sau khi cài đật những thành phần của PHP, ta cần bảo mật chúng bằng cách edit file cấu hình chính của php-fpm bằng nano:

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

 

Tìm đến thuộc tính cgi.fix_pathinfo. được đánh dấu bằng dấu chấm phẩy (;) và có giá trị mặc định là "1".

Đây là một cài đặt cực kì kếm bảo mật, vì nó yêu cầu PHP chạy file gần nhất nếu không thể phản hồi chính xác file PHP cần tìm. Điều này cho phép user truy cập vào những file PHP không được phép. Ta sẽ sửa file này bằng cách xóa dấu ";" và set giá trị của nó về 1 như sau:

/etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0
Lưu và đóng file, song đó khởi động lại PHP processor với lệnh: 
sudo systemctl restart php7.0-fpm 
 

Bước 4: Cấu hình Nginx để sử dụng PHP Processor

Như đã đề cập ở bước 3, những thành phần động không thể được bằng Nginx thuần túy mà phải thông qua PHP Processor. Ta sẽ điều hướng những yêu cầu PHP đến PHP processor để xử lí chúng.

Ta sẽ thực hiện nó tở mức server block (server block gần giống với Virtual Host của Apache). Mở file cấu hình mặc định cho Server Block của Nginx:

sudo nano /etc/nginx/sites-available/default 

 

Nó sẽ trông gần giống thế này:

/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files $uri $uri/ =404;
}}

Ta sẽ chỉnh sửa một số mục như sau:

  • Thêm index.php thành giá trị đàu tiên của dòng index để những file tên index.php có thể được gọi khi có thể.
  • Đổi server_name thành domain name hoặc public IP address của server của bạn.
  • Bỏ dấu (#) ở đầu mỗi dòng trong khối địa chỉ location ~\.php$ bao gồm snippet fastcgi-php.conf , và socket kết nối với php-fpm để cho phép xử lí những file .php trong khối địa chỉ đó(xem phần chữ đỏ)
  • Làm tương tự với những file trong khối địa chỉ .htaccess để chặn tất cả các yêu cầu đến những file trong này.
/etc/nginx/sites-available/default
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name server_domain_or_IP;
location / {
try_files $uri $uri/ =404;
}location ~ \.php$ {include snippets/fastcgi-php.conf;fastcgi_pass unix:/run/php/php7.0-fpm.sock;}location ~ /\.ht {deny all;}}

Lưu rồi đóng file.

Kiểm tra lỗi cú pháp:

sudo nginx -t 

 

Nếu phát hiện lỗi, mở lại file rồi sửa chúng.

Reload Nginx để lưu những thay đổi.

sudo systemctl reload nginx 

 

 

Bước 5: Tạo File PHP để test

LEMP stack của bạn đến đây đã được cài xong. Ta sẽ kiểm tra lại xem Nginx đã chuyển việc xử lí các file .php đến PHP processor chưa.

Tạo một file PHP trong thư mục root tên info.php bằng nano:

sudo nano /var/www/html/info.php 

 

Paste đoạn code sau vào:

/var/www/html/info.php

Lưu rồi đóng.

Gõ lệnh sau để yêu cầu file /info.php từ server:

http://server_domain_or_IP/info.php

Trang mặc định của PHP:

PHP page info

 

Xóa file .php vùa tạo, vì nó sẽ để lộ thông tin về server cho người khác bằng lệnh:

sudo rm /var/www/html/info.php