Thứ tư, 23/05/2018 | 00:00 GMT+7

Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP) trên Ubuntu 18.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à viết tắt của hệ điều hành L inux, với một web server Nginx (phát âm như “ E ngine-X”). Dữ liệu backend được lưu trữ trong database M ySQL và xử lý bởi P HP.

Hướng dẫn này sẽ cài đặt LEMP trên server Ubuntu 18.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 . Cài đặt account này bằng cách hoàn thành hướng dẫn cài đặt server ban đầu của ta cho Ubuntu 18.04 .

Khi bạn có user của bạn , 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 Server Web 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 được sử dụng trong quy trình này sẽ đến 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 thành các cài đặt cần thiết.

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

  • sudo apt update
  • sudo apt install nginx

Trên Ubuntu 18.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ư trong hướng dẫn cài đặt ban đầu, 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 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ì bạn chưa cấu hình SSL cho server của bạn trong hướng dẫn này, bạn sẽ chỉ cần cho phép lưu lượng truy cập trên cổng 80 .

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

Đầu ra của lệnh này sẽ cho thấy truy cập HTTP được phép:

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 cộng 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 cộng của server , bạn có thể tìm domain đó bằng cách chạy lệnh sau:

  • 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 được xem từ các vị trí khác trên internet:

  • curl -4 icanhazip.com

Nhập địa chỉ mà bạn nhận được trong trình duyệt web của bạn và địa chỉ đó 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

Đến đây bạn đã có một web server , bạn 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ài đặt MySQL bằng lệnh :

  • sudo apt install mysql-server

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, MySQL đi kèm với một tập lệnh 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 :

  • sudo mysql_secure_installation

Tập lệnh này sẽ hỏi bạn 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 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 , tập lệnh cũng sẽ yêu cầu bạn chọn mức 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ẽ gặp lỗi khi đặt bất kỳ password nào không chứa số, chữ hoa và chữ thường và 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 

Tiếp theo, bạn cần gửi và xác nhận password root :

Please set the password for root here.  New password:  Re-enter new password: 

Đối với các câu hỏi còn lại, bạn nên nhấn Y và nhấn ENTER tại mỗi dấu nhắc . 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.

Lưu ý trong hệ thống Ubuntu chạy MySQL 5.7 (và các version mới hơn), user MySQL gốc được đặt để xác thực bằng cách sử dụng plugin auth_socket theo mặc định chứ không phải bằng password . Điều này cho phép một số bảo mật và hữu dụng trong nhiều trường hợp, nhưng nó cũng có thể làm phức tạp thêm khi bạn cần cho phép một chương trình bên ngoài (ví dụ: phpMyAdmin) truy cập vào user .

Nếu việc sử dụng plugin auth_socket để truy cập MySQL phù hợp với cách làm việc của bạn, bạn có thể chuyển sang Bước 3. Tuy nhiên, nếu bạn muốn sử dụng password khi kết nối với MySQL dưới dạng root , bạn cần chuyển phương thức xác thực của nó từ auth_socket sang mysql_native_password . Để thực hiện việc này, hãy mở dấu nhắc MySQL từ terminal của bạn:

  • sudo mysql

Tiếp theo, hãy kiểm tra phương thức xác thực mà mỗi account user MySQL của bạn sử dụng bằng lệnh sau:

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

Trong ví dụ này, bạn có thể thấy rằng user root trên thực tế xác thực bằng cách sử dụng plugin auth_socket . Để cấu hình account gốc để xác thực bằng password , hãy chạy ALTER USER sau. Đảm bảo thay đổi password thành một password mạnh mà bạn chọn:

  • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Sau đó, chạy FLUSH PRIVILEGES yêu cầu server reload các bảng tài trợ và áp dụng các thay đổi của bạn có hiệu lực:

  • FLUSH PRIVILEGES;

Kiểm tra lại các phương thức xác thực được sử dụng bởi từng user của bạn để xác nhận root không còn xác thực bằng plugin auth_socket :

  • SELECT user,authentication_string,plugin,host FROM mysql.user;
Output
+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

Bạn có thể thấy trong kết quả ví dụ này user MySQL gốc hiện xác thực bằng password . Khi bạn xác nhận điều này trên server của bạn , bạn có thể thoát MySQL shell:

  • exit

Lưu ý : Sau khi cấu hình user MySQL gốc của bạn để xác thực bằng password , bạn sẽ không thể truy cập MySQL bằng sudo mysql sử dụng trước đó nữa. Thay vào đó, bạn phải chạy như sau:

  • mysql -u root -p

Sau khi nhập password vừa đặt, bạn sẽ thấy dấu nhắc MySQL.

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

Bước 3 - Cài đặt PHP và cấu hình Nginx để sử dụng PHP processor

Đến đây bạn đã cài đặt Nginx để phục vụ các trang của bạn và MySQL được cài đặt để lưu trữ và quản lý dữ liệu . Tuy nhiên, bạn vẫn chưa có gì có thể tạo nội dung động. Đây là lúc PHP phát huy tác dụng.

Vì Nginx không chứa PHP processor root như một số web server khác, bạn 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ý.

Lưu ý : Tùy thuộc vào nhà cung cấp cloud của bạn, bạn có thể cần thêm repository universe của Ubuntu, bao gồm phần mềm open-souce và miễn phí được duy trì bởi cộng đồng Ubuntu, trước khi cài đặt gói php-fpm . Bạn có thể thực hiện việc này bằng lệnh :

  • sudo add-apt-repository universe

Cài đặt module php-fpm cùng với một gói trợ giúp bổ sung, php-mysql , sẽ cho phép PHP giao tiếp với backend database của bạn. 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 install php-fpm php-mysql

Đến đây bạn đã cài đặt tất cả các thành phần LEMP bắt buộc, nhưng bạn vẫn cần thực hiện một vài thay đổi cấu hình để yêu cầu Nginx sử dụng PHP processor cho nội dung động.

Điều này được thực hiện ở cấp độ khối server (các khối server tương tự như các server ảo của Apache). Để thực hiện việc này, hãy mở file cấu hình khối server mới trong folder /etc/nginx/sites-available/ . Trong ví dụ này, file cấu hình khối server mới được đặt tên là example.com , mặc dù bạn có thể đặt tên file của bạn bạn muốn :

  • sudo nano /etc/nginx/sites-available/example.com

Bằng cách chỉnh sửa file cấu hình khối server mới, thay vì chỉnh sửa file mặc định, bạn có thể dễ dàng khôi phục cấu hình mặc định nếu cần.

Thêm nội dung sau, đã được lấy và sửa đổi một chút từ file cấu hình khối server mặc định, vào file cấu hình khối server mới của bạn:

/etc/nginx/sites-available/example.com
server {         listen 80;         root /var/www/html;         index index.php index.html index.htm index.nginx-debian.html;         server_name example.com;          location / {                 try_files $uri $uri/ =404;         }          location ~ \.php$ {                 include snippets/fastcgi-php.conf;                 fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;         }          location ~ /\.ht {                 deny all;         } } 

Đây là những gì mỗi lệnh và khối vị trí này làm:

  • listen - Xác định cổng nào mà Nginx sẽ lắng nghe. Trong trường hợp này, nó sẽ lắng nghe trên cổng 80 , cổng mặc định cho HTTP.
  • root - Xác định root tài liệu nơi lưu trữ các file do trang web cung cấp.
  • index - Cấu hình Nginx để ưu tiên phục vụ các file có tên là index.php khi file index được yêu cầu, nếu chúng có sẵn.
  • server_name - Xác định khối server nào sẽ được sử dụng cho một yêu cầu nhất định đến server của bạn. Trỏ chỉ thị này đến domain hoặc địa chỉ IP công cộng của server của bạn.
  • location / - Khối vị trí đầu tiên bao gồm chỉ thị try_files , kiểm tra sự tồn tại của các file phù hợp với yêu cầu URI. Nếu Nginx không thể tìm thấy file thích hợp, nó sẽ trả về lỗi 404.
  • location ~ \.php$ - Khối vị trí này xử lý quá trình PHP thực tế bằng cách trỏ Nginx đến file cấu hình fastcgi-php.conf và file php7.2-fpm.sock , file này khai báo socket nào được liên kết với php-fpm .
  • location ~ /\.ht - Khối vị trí cuối cùng xử lý các .htaccess mà Nginx không xử lý. Bằng cách thêm chỉ thị deny all , nếu bất kỳ .htaccess nào tìm thấy đường vào folder root của tài liệu, chúng sẽ không được cung cấp cho khách truy cập.

Sau khi thêm nội dung này, hãy lưu file . Kích hoạt khối server mới của bạn bằng cách tạo một softlink từ file cấu hình khối server mới của bạn (trong folder /etc/nginx/sites-available/ ) đến folder /etc/nginx/sites-enabled/ :

  • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Sau đó, hủy liên kết file cấu hình mặc định khỏi folder /sites-enabled/ :

  • sudo unlink /etc/nginx/sites-enabled/default

Lưu ý : Nếu bạn cần khôi phục cấu hình mặc định, bạn có thể thực hiện bằng cách tạo lại softlink , như sau:

  • sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

Kiểm tra file cấu hình mới 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

Đến đây là kết thúc việc cài đặt và cấu hình LEMP của bạn. Tuy nhiên, cần thận trọng khi xác nhận tất cả các thành phần có thể giao tiếp với nhau.

Bước 4 - 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. Bạn 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 .

Để thực hiện việc này, hãy sử dụng editor của bạn để tạo một file PHP thử nghiệm có tên là info.php trong folder root của tài liệu của bạn:

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

Nhập 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 bạn:

/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 của server hoặc địa chỉ IP công cộng, theo sau là /info.php :

http://your_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 chính xác, tốt nhất là xóa file bạn đã tạo vì nó 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.

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

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

Như vậy, bây giờ bạn có một LEMP được cấu hình đầy đủ và hoạt động trên server Ubuntu 18.04 của bạn .

Kết luận

LEMP là một nền tảng mạnh mẽ cho phép bạn cài đặt và phục vụ gần như bất kỳ trang web hoặc ứng dụng nào từ server của bạn.

Có một số bước tiếp theo bạn có thể thực hiện từ đây. Ví dụ: bạn nên đảm bảo các kết nối đến server của bạn được bảo mật. Để làm điều này, bạn có thể bảo mật cài đặt Nginx của bạn bằng Let's Encrypt . Theo hướng dẫn này, bạn sẽ nhận được certificate TLS / SSL miễn phí cho server của bạn , cho phép server cho truy cập qua HTTPS.


Tags:

Các tin liên quan

server Express cơ bản trong Node.js
2018-05-04
Thiết lập server ban đầu với Ubuntu 18.04
2018-04-27
Tự động thiết lập server ban đầu với Ubuntu 18.04
2018-04-27
Bắt đầu với kết xuất phía server bằng Nuxt.js
2018-04-16
Cách bảo vệ server của bạn trước lỗ hổng Meltdown và Spectre
2018-01-10
Sơ lược về lịch sử Linux
2017-10-27
Cách thiết lập Shiny Server trên Ubuntu 16.04
2017-10-25
Cách thiết lập server lưu trữ đối tượng bằng Minio trên Ubuntu 16.04
2017-08-30
Cách chạy server MongoDB an toàn với OpenVPN và Docker trên Ubuntu 16.04
2017-03-24
Kết xuất phía server cơ bản với Vue.js và Express
2017-03-14