Thứ năm, 21/04/2016 | 00:00 GMT+7

Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP) trong Ubuntu 16.04

Phần mềm LEMP là một group phần mềm được dùng để phục vụ các trang web động và ứng dụng web. Đây là từ viết tắt mô tả hệ điều hành Linux, với web server Nginx. Dữ liệu backend được lưu trữ trong database MySQL và xử lý bởi PHP.

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt LEMP trên server Ubuntu 16.04. Hệ điều hành Ubuntu xử lý yêu cầu đầu tiên. Ta sẽ mô tả cách chạy các thành phần còn lại.

Yêu cầu

Trước khi hoàn thành hướng dẫn này, bạn phải có account regular user , không phải root trên server của bạn với các quyền sudo . Bạn có thể tìm hiểu cách cài đặt loại account này bằng cách hoàn tất cài đặt server ban đầu Ubuntu 16.04 của ta .

Khi bạn có user của bạn , hãy đăng nhập vào server của bạn bằng tên user đó. Đến đây bạn đã sẵn sàng để bắt đầu các bước được nêu trong hướng dẫn này.

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

Để hiển thị các trang web cho khách truy cập trang web của ta , ta sẽ sử dụng Nginx, một web server hiện đại, hiệu quả.

Tất cả phần mềm ta sẽ sử dụng cho quy trình này sẽ đến trực tiếp từ repository mặc định của Ubuntu. Điều này nghĩa là ta có thể sử dụng trình quản lý gói apt để hoàn tất cài đặt.

Vì đây là lần đầu tiên ta sử dụng apt cho phiên này, ta nên bắt đầu bằng cách cập nhật index gói local của bạn . Sau đó, ta có thể cài đặt server :

  • sudo apt-get update
  • sudo apt-get install nginx

Trên Ubuntu 16.04, Nginx được cấu hình để bắt đầu chạy khi cài đặt.

Nếu bạn đang chạy firewall ufw , như đã nêu trong hướng dẫn cài đặt ban đầu của ta , bạn cần cho phép kết nối với Nginx. Nginx tự đăng ký với ufw khi cài đặt, vì vậy quy trình này khá đơn giản.

Ta khuyên bạn nên bật cấu hình chặn tối đa mà vẫn cho phép lưu lượng truy cập bạn muốn. Vì ta chưa cấu hình SSL cho server của bạn nên trong hướng dẫn này, ta chỉ cần cho phép lưu lượng truy cập trên cổng 80.

Bạn có thể kích hoạt tính năng này bằng lệnh :

  • sudo ufw allow 'Nginx HTTP'

Bạn có thể kiểm tra thay đổi bằng lệnh :

  • sudo ufw status

Bạn sẽ thấy truy cập HTTP được phép trong kết quả được hiển thị:

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

Với luật firewall mới được thêm vào, bạn có thể kiểm tra xem server có hoạt động hay không bằng cách truy cập vào domain hoặc địa chỉ IP công khai của server trong trình duyệt web .

Nếu bạn không có domain được trỏ đến server của bạn và bạn không biết địa chỉ IP công khai của server , bạn có thể tìm thấy nó bằng lệnh một trong những thông tin sau vào terminal của bạn:

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

Thao tác này sẽ in ra một vài địa chỉ IP. Bạn có thể thử lần lượt từng cái trong trình duyệt web của bạn .

Một cách khác, bạn có thể tìm địa chỉ IP của bạn với nào có thể truy cập được khi xem từ các vị trí khác trên internet:

  • curl -4 icanhazip.com

Nhập một trong các địa chỉ mà bạn nhận được trong trình duyệt web của bạn . Nó sẽ đưa bạn đến trang đích mặc định của Nginx:

http://server_domain_or_IP 

Trang mặc định của Nginx

Nếu bạn nhìn thấy trang trên, bạn đã cài đặt thành công Nginx.

Bước 2: Cài đặt MySQL để quản lý dữ liệu trang web

Bây giờ ta đã có web server , ta cần cài đặt MySQL, một hệ quản trị database , để lưu trữ và quản lý dữ liệu cho trang web của ta .

Bạn có thể cài đặt cái này dễ dàng bằng lệnh :

  • sudo apt-get install mysql-server

Bạn cần cung cấp password root (quản trị) để sử dụng trong hệ thống MySQL.

Phần mềm database MySQL hiện đã được cài đặt, nhưng cấu hình của nó vẫn chưa hoàn chỉnh.

Để bảo mật cài đặt, ta có thể chạy một tập lệnh bảo mật đơn giản sẽ hỏi liệu ta có muốn sửa đổi một số mặc định không an toàn hay không. Bắt đầu tập lệnh bằng lệnh :

  • mysql_secure_installation

Bạn cần nhập password bạn đã đặt cho account root MySQL. Tiếp theo, bạn sẽ được hỏi có muốn cấu hình VALIDATE PASSWORD PLUGIN .

Cảnh báo: Kích hoạt tính năng này là lựa chọn cần cân nhắc . Nếu được bật, password không phù hợp với tiêu chí đã chỉ định sẽ bị MySQL từ chối và báo lỗi . Điều này sẽ gây ra sự cố nếu bạn sử dụng password yếu kết hợp với phần mềm tự động cấu hình thông tin đăng nhập user MySQL, chẳng hạn như các gói Ubuntu cho phpMyAdmin. Việc tắt tính năng xác thực là an toàn, nhưng bạn phải luôn sử dụng password mạnh, duy nhất cho thông tin đăng nhập database .

Trả lời y là có hoặc bất kỳ điều gì khác để tiếp tục mà không cần bật.

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 bạn đã cài đặt xác thực , bạn cần chọn cấp độ xác thực password . Lưu ý nếu bạn nhập 2 , đối với cấp độ mạnh nhất, bạn sẽ nhận được lỗi khi đặt bất kỳ password nào không chứa số, chữ hoa và chữ thường và các ký tự đặc biệt hoặc dựa trên các từ thông dụng trong từ điể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 

Nếu bạn đã cài đặt xác thực password , bạn sẽ được hiển thị độ mạnh password cho password root hiện có và hỏi bạn có muốn thay đổi password đó không. Nếu bạn hài lòng với password hiện tại của bạn , hãy nhập n cho "không" ở dấu nhắc :

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

Đối với phần còn lại của câu hỏi này, bạn nên bấm Y và nhấn phím Enter ở mỗi hộp thoại. Thao tác này sẽ xóa một số user ẩn danh và database thử nghiệm, vô hiệu hóa đăng nhập root từ xa và tải các luật mới này để MySQL áp dụng ngay những thay đổi mà ta đã thực hiện.

Đến đây, hệ thống database của bạn đã được cài đặt xong và ta có thể tiếp tục.

Bước 3: Cài đặt PHP để xử lý

Bây giờ ta đã cài đặt Nginx để phục vụ các trang của ta và MySQL được cài đặt để lưu trữ và quản lý dữ liệu của ta . Tuy nhiên, ta vẫn chưa có bất kỳ thứ gì có thể tạo ra nội dung động. Ta có thể sử dụng PHP cho việc này.

Vì Nginx không chứa PHP processor root như một số web server khác, ta cần cài đặt php-fpm , viết tắt của “fastCGI process manager”. Ta sẽ yêu cầu Nginx chuyển các yêu cầu PHP đến phần mềm này để xử lý.

Ta có thể cài đặt module này và cũng sẽ lấy một gói trợ giúp bổ sung cho phép PHP giao tiếp với backend database của ta . Quá trình cài đặt sẽ kéo các file lõi PHP cần thiết vào. Làm điều này bằng lệnh :

  • sudo apt-get install php-fpm php-mysql

Cấu hình PHP processor

Bây giờ ta đã cài đặt các thành phần PHP của bạn , nhưng ta cần thực hiện một chút thay đổi cấu hình để giúp cài đặt của ta an toàn hơn.

Mở file cấu hình php-fpm với quyền root:

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

Những gì ta đang tìm kiếm trong file này là tham số đặt cgi.fix_pathinfo . Điều này sẽ được comment bằng dấu chấm phẩy (;) và được đặt thành “1” theo mặc định.

Đây là một cài đặt cực kỳ không an toàn vì nó yêu cầu PHP cố gắng thực thi file gần nhất mà nó có thể tìm thấy nếu không tìm thấy file PHP được yêu cầu. Về cơ bản, điều này sẽ cho phép user tạo các yêu cầu PHP theo cách cho phép họ thực thi các tập lệnh mà họ không được phép thực thi.

Ta sẽ thay đổi cả hai điều kiện này bằng cách bỏ comment và đặt nó thành “0” như sau:

/etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0 

Lưu file khi bạn hoàn tất.

Bây giờ, ta chỉ cần khởi động lại PHP processor của bạn bằng lệnh :

  • sudo systemctl restart php7.0-fpm

Điều này sẽ thực hiện thay đổi mà ta đã thực hiện.

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

Bây giờ, ta đã cài đặt tất cả các thành phần cần thiết. Thay đổi cấu hình duy nhất mà ta vẫn cần là yêu cầu Nginx sử dụng PHP processor của ta cho nội dung động.

Ta thực hiện việc này ở cấp độ khối server (các khối server tương tự như các server ảo của Apache). Mở file cấu hình khối server Nginx mặc định bằng lệnh :

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

Hiện tại, với các comment đã bị xóa, file khối server mặc định của Nginx trông giống như sau:

/ 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 cần thực hiện một số thay đổi đối với file này cho trang web của bạn .

  • Đầu tiên, ta cần thêm index.php làm giá trị đầu tiên của index thị index của ta để các file có tên index.php được phục vụ, nếu có, khi một folder được yêu cầu.
  • Ta có thể sửa đổi chỉ thị server_name để trỏ đến domain hoặc địa chỉ IP công cộng của server .
  • Đối với quá trình PHP processor thực tế, ta chỉ cần bỏ ghi chú một phân đoạn của file xử lý các yêu cầu PHP bằng cách xóa các ký hiệu bảng Anh (#) ở phía trước mỗi dòng. Đây sẽ là khối location ~\.php$ , đoạn mã fastcgi-php.conf và socket được liên kết với php-fpm .
  • Ta cũng sẽ bỏ ghi chú khối vị trí xử lý các .htaccess bằng phương pháp tương tự. Nginx không xử lý các file này. Nếu các file nào trong số này tình cờ tìm thấy đường vào root tài liệu, chúng sẽ không được cung cấp cho khách truy cập.

Những thay đổi bạn cần thực hiện có màu đỏ trong văn bản bên dưới:

/ 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;     } } 

Khi bạn đã áp dụng các thay đổi ở trên, bạn có thể lưu file .

Kiểm tra file cấu hình của bạn để tìm lỗi cú pháp bằng lệnh :

  • sudo nginx -t

Nếu có lỗi , hãy quay lại và kiểm tra lại file của bạn trước khi tiếp tục.

Khi đã sẵn sàng , hãy reload Nginx để áp dụng các thay đổi cần thiết:

  • sudo systemctl reload nginx

Bước 5: Tạo file PHP để kiểm tra cấu hình

LEMP của bạn bây giờ sẽ được cài đặt hoàn chỉnh. Ta có thể kiểm tra nó để xác nhận Nginx có thể xử lý chính xác các file .php cho PHP processor của ta .

Ta có thể làm điều này bằng cách tạo một file PHP thử nghiệm trong root tài liệu của ta . Mở một file mới có tên là info.php trong root tài liệu của bạn trong editor của bạn:

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

Nhập hoặc dán các dòng sau vào file mới. Đây là mã PHP hợp lệ sẽ trả về thông tin về server của ta :

/var/www/html/info.php
<?php phpinfo(); 

Khi bạn hoàn tất, hãy lưu file .

Bây giờ, bạn có thể truy cập trang này trong trình duyệt web của bạn bằng cách truy cập vào domain hoặc địa chỉ IP công cộng của server , theo sau là /info.php :

http://server_domain_or_IP/info.php 

Bạn sẽ thấy một trang web được tạo bởi PHP với thông tin về server của bạn:

Thông tin trang PHP

Nếu bạn thấy một trang giống như thế này, bạn đã cài đặt PHP processor với Nginx thành công.

Sau khi xác minh Nginx hiển thị trang một cách chính xác, tốt nhất là xóa file bạn đã tạo vì file có thể cung cấp cho user lạ một số gợi ý về cấu hình của bạn có thể giúp họ xâm nhập trái phép. Bạn luôn có thể tạo lại file này nếu cần sau.

Hiện tại, hãy xóa file bằng lệnh :

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

Kết luận

Đến đây bạn sẽ có một LEMP được cấu hình trên server Ubuntu 16.04 của bạn . Điều này mang lại cho bạn một nền tảng rất linh hoạt để cung cấp nội dung web cho khách truy cập của bạn.


Tags:

Các tin liên quan

Thiết lập server ban đầu với Ubuntu 16.04
2016-04-21
Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 16.04
2016-04-21
Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP) trong Ubuntu 16.04
2016-04-21
Cách di chuyển một ứng dụng phân tích cú pháp sang server phân tích cú pháp trên Ubuntu 14.04
2016-02-20
Cách sử dụng Ansible và Tinc VPN để bảo mật cơ sở hạ tầng server của bạn
2016-02-18
Cách chạy server phân tích cú pháp trên Ubuntu 14.04
2016-02-03
Cách thiết lập server VNC trên Debian 8
2015-09-29
Cách cấu hình dịch vụ Linux để khởi động tự động sau khi gặp sự cố hoặc khởi động lại - Phần 2: Tham khảo
2015-09-04
Cách thiết lập server IRC trên Ubuntu 14.04 với InspIRCd 2.0 và Shaltúre
2015-08-26
Cách chuyển tiếp cổng thông qua cổng Linux với Iptables
2015-08-20