Cách cài đặt Linux, Nginx, MariaDB, PHP ( LEMP) trên Debian 10
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. Tên “LEMP” là từ viết tắt mô tả hệ điều hành L inux, với web server ( E ) Nginx. Dữ liệu backend được lưu trữ trong database M ariaDB và xử lý bởi P HP.Mặc dù ngăn xếp phần mềm này thường bao gồm MySQL làm hệ thống quản lý database , một số bản phân phối Linux - bao gồm cả Debian - sử dụng MariaDB làm phần mềm thay thế cho MySQL.
Trong hướng dẫn này, bạn sẽ cài đặt LEMP trên server Debian 10 sử dụng MariaDB làm hệ thống quản lý database .
Yêu cầu
 Để hoàn thành hướng dẫn này, bạn cần truy cập vào  server  Debian 10.  Server  này phải có một  regular user  được  cấu hình  với các  quyền  sudo và firewall  được kích hoạt với ufw . Để  cài đặt  điều này, bạn có thể làm theo hướng dẫn  Cài đặt   Server  Ban đầu với Debian 10 của  ta .
Bước 1 - Cài đặt Server Web Nginx
Để cung cấp các trang web cho khách truy cập trang web , ta sẽ sử dụng Nginx , một web server phổ biến nổi tiếng về hiệu suất tổng thể và tính ổn định.
 Tất cả phần mềm bạn sẽ sử dụng cho quy trình này sẽ đến trực tiếp từ  repository  mặc định của Debian. Điều này  nghĩa là  bạn 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 bạn sử dụng apt cho phiên này, bạn nên bắt đầu bằng cách cập nhật  index gói  local   của bạn . Sau đó, bạn có thể cài đặt  server :
- sudo apt update 
- sudo apt install nginx 
Trên Debian 10, Nginx được cấu hình để bắt đầu chạy khi cài đặt.
 Nếu bạn đang chạy firewall  ufw , bạn  cần  cho phép kết nối với Nginx. Bạn nên kích hoạ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  nên bây giờ bạn chỉ cần cho phép  truy cập HTTP  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ị:
OutputStatus: active  To                         Action      From --                         ------      ---- OpenSSH                    ALLOW       Anywhere Nginx HTTP                 ALLOW       Anywhere OpenSSH (v6)               ALLOW       Anywhere (v6) Nginx HTTP (v6)            ALLOW       Anywhere (v6) Bây giờ, hãy 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 .
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://your_domain_or_IP 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 MariaDB
Đến đây bạn đã có một web server và đang chạy, bạn cần cài đặt hệ thống database để có thể lưu trữ và quản lý dữ liệu cho trang web của bạn .
 Trong Debian 10, mysql-server gói, thường được sử dụng để cài đặt  server  MySQL, đã được thay thế bằng default-mysql-server . Siêu gói này tham chiếu đến MariaDB , một nhánh cộng đồng của  server  MySQL root  của Oracle và nó hiện là  server  database  tương thích với MySQL mặc định có sẵn trên repository  trình quản lý gói dựa trên debian.
 Tuy nhiên, để có khả năng tương thích lâu hơn, bạn nên cài đặt MariaDB thay vì sử dụng gói siêu nhỏ bằng gói thực tế của chương trình, mariadb-server .
Để cài đặt phần mềm này, hãy chạy:
- sudo apt install mariadb-server 
Khi quá trình cài đặt kết thúc, bạn nên chạy tập lệnh bảo mật được cài đặt sẵn với MariaDB. Tập lệnh này sẽ xóa một số cài đặt mặc định không an toàn và khóa quyền truy cập vào hệ thống database của bạn. Bắt đầu tập lệnh tương tác bằng lệnh:
- sudo mysql_secure_installation 
Tập lệnh này sẽ đưa bạn qua một loạt  dấu nhắc , nơi bạn có thể thực hiện một số thay đổi đối với  cài đặt  MariaDB  của bạn .  Dấu nhắc  đầu tiên sẽ yêu cầu bạn nhập password  gốc của database  hiện tại. Điều này không được nhầm lẫn với gốc hệ thống .  User  gốc database  là  admin-user  có đầy đủ các  quyền  đối với hệ thống database . Vì bạn vừa cài đặt MariaDB và chưa thực hiện bất kỳ thay đổi cấu hình nào nên password  này sẽ trống, vì vậy chỉ cần nhấn ENTER tại  dấu nhắc .
  Dấu nhắc  tiếp theo hỏi bạn có muốn  cài đặt  password  gốc database  hay không . Vì MariaDB sử dụng một phương pháp xác thực đặc biệt cho  user  root thường an toàn hơn so với sử dụng password , bạn không cần  cài đặt  điều này ngay bây giờ. Gõ N và sau đó nhấn ENTER .
 Từ đó, bạn có thể nhấn Y rồi ENTER để chấp nhận giá trị mặc định cho tất cả các câu hỏi tiếp theo. Thao tác này sẽ xóa  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 để MariaDB  áp dụng ngay  những thay đổi bạn đã thực hiện.
 Khi bạn hoàn tất, hãy đăng nhập vào console  MariaDB  bằng lệnh :
- sudo mariadb 
Thao tác này sẽ kết nối với  server  MariaDB dưới dạng root  user  database  quản trị, được suy ra bằng cách sử dụng sudo khi chạy lệnh này. Bạn sẽ thấy  kết quả  như thế này:
OutputWelcome to the MariaDB monitor.  Commands end with ; or \g. Your MariaDB connection id is 74 Server version: 10.3.15-MariaDB-1 Debian 10  Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.  Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.  MariaDB [(none)]>   Lưu ý  bạn không cần cung cấp password  để kết nối  với quyền  là  user  root . Điều đó hoạt động vì phương pháp xác thực mặc định cho  user  MariaDB quản trị là unix_socket thay vì password . Mặc dù điều này thoạt đầu có vẻ là một mối lo ngại về bảo mật, nhưng nó làm cho  server  database  an toàn hơn vì  user  duy nhất được phép đăng nhập  với quyền   user  MariaDB gốc là  user  hệ thống có  quyền  sudo kết nối từ console  hoặc thông qua một ứng dụng chạy với  quyền  như nhau. Về mặt thực tế, điều đó  nghĩa là  bạn sẽ không thể sử dụng  user  root database  quản trị để kết nối từ ứng dụng PHP  của bạn .
 Để tăng cường bảo mật, tốt nhất bạn nên  cài đặt  các account   user  chuyên dụng với ít  quyền  mở rộng hơn cho mọi database , đặc biệt nếu bạn có kế hoạch lưu trữ nhiều database  trên  server   của bạn . Để chứng minh  cài đặt  như vậy,  ta  sẽ tạo database  có tên example_database và  user  có tên example_user , nhưng bạn có thể thay thế các tên này bằng các giá trị khác nhau.
 Để tạo database  mới, hãy chạy lệnh sau từ console  MariaDB của bạn:
- CREATE DATABASE example_database; 
 Đến đây bạn  có thể tạo một  user  mới và cấp cho họ các  quyền  đầy đủ trên database  tùy chỉnh mà bạn vừa tạo. Lệnh sau định nghĩa password  của  user  này là password , nhưng bạn nên thay thế giá trị này bằng một password  an toàn do chính bạn chọn.
- GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION; 
Điều này sẽ cung cấp cho user example_user toàn quyền đối với database example_database , đồng thời ngăn user này tạo hoặc sửa đổi database khác trên server của bạn.
Xóa các quyền đảm bảo rằng chúng được lưu và khả dụng trong phiên hiện tại:
- FLUSH PRIVILEGES; 
Sau đó, thoát khỏi shell MariaDB:
- exit 
Bạn có thể kiểm tra xem user mới có quyền thích hợp hay không bằng cách đăng nhập lại vào console MariaDB, lần này bằng thông tin đăng nhập user tùy chỉnh:
- mariadb -u example_user -p 
Lưu ý cờ -p trong lệnh này, nó sẽ nhắc bạn nhập password  được sử dụng khi tạo  user  example_user . Sau khi đăng nhập vào console  MariaDB, hãy  xác nhận  bạn có quyền truy cập vào database  example_database :
- SHOW DATABASES; 
Điều này sẽ cung cấp cho bạn kết quả sau:
Output+--------------------+ | Database           | +--------------------+ | example_database   | | information_schema | +--------------------+ 2 rows in set (0.000 sec) Để thoát khỏi vỏ MariaDB, hãy nhập:
- exit 
Đến đây, hệ thống database của bạn đã được cài đặt và bạn có thể chuyển sang cài đặt PHP, thành phần cuối cùng của LEMP .
Bước 3 - Cài đặt PHP để xử lý
Bạn đã cài đặt Nginx để phân phát nội dung của bạn và đã cài đặt MySQL để lưu trữ và quản lý dữ liệu . Đến đây bạn có thể cài đặt PHP để xử lý mã và tạo nội dung động cho web server .
 Trong khi Apache nhúng trình thông dịch PHP trong mỗi yêu cầu, Nginx yêu cầu một chương trình bên ngoài để xử lý quá trình  PHP processor  và hoạt động như cầu nối giữa chính trình thông dịch PHP và  web server . Điều này cho phép hiệu suất tổng thể tốt hơn trong hầu hết các trang web dựa trên PHP, nhưng nó yêu cầu cấu hình bổ sung. Bạn  cần  cài đặt php-fpm , viết tắt của “PHP fastCGI process manager” và yêu cầu Nginx chuyển các yêu cầu PHP đến phần mềm này để xử lý. Ngoài ra, bạn  cần  php-mysql , một module  PHP cho phép PHP giao tiếp với database  dựa trên MySQL. Các gói PHP cốt lõi sẽ tự động được cài đặt dưới dạng các gói phụ thuộc.
 Để cài đặt các gói php-fpm và php-mysql , hãy chạy:
- sudo apt install php-fpm php-mysql 
Đến đây bạn đã cài đặt các thành phần PHP của bạn . Tiếp theo, bạn sẽ cấu hình Nginx để sử dụng chúng.
Bước 4 - Cấu hình Nginx để sử dụng PHP processor
Khi sử dụng web server Nginx, các khối server (tương tự như server ảo trong Apache) được dùng để đóng gói các chi tiết cấu hình và lưu trữ nhiều domain trên một server . Trong hướng dẫn này, ta sẽ sử dụng your_domain làm domain mẫu. Để tìm hiểu thêm về cách cài đặt domain với DigitalOcean, hãy xem phần giới thiệu của ta về DigitalOcean DNS .
 Trên Debian 10, Nginx có một khối  server  được bật theo mặc định và được  cấu hình  để cung cấp tài liệu ra khỏi folder  tại /var/www/html . Mặc dù điều này hoạt động tốt cho một trang web nhưng có thể trở nên khó quản lý nếu bạn đang lưu trữ nhiều trang web. Thay vì sửa đổi /var/www/html , hãy tạo cấu trúc folder  trong /var/www cho trang web your_domain , giữ nguyên /var/www/html làm folder  mặc định sẽ được cung cấp nếu yêu cầu của khách hàng không  trùng với  bất kỳ các trang web khác.
Tạo folder web root cho your_domain như sau:
- sudo mkdir /var/www/your_domain 
Tiếp theo, chỉ định quyền sở hữu folder với biến môi trường $ USER, biến này sẽ tham chiếu đến user hệ thống hiện tại của bạn:
- sudo chown -R $USER:$USER /var/www/your_domain 
Sau đó, mở file  cấu hình mới trong folder  sites-available của Nginx bằng  editor  dòng lệnh  bạn muốn . Ở đây,  ta  sẽ sử dụng nano :
- sudo nano /etc/nginx/sites-available/your_domain 
Thao tác này sẽ tạo một file trống mới. Dán vào cấu hình cơ bản sau:
server {     listen 80;     listen [::]:80;      root /var/www/your_domain;     index index.php index.html index.htm;      server_name your_domain;      location / {         try_files $uri $uri/ =404;     }      location ~ \.php$ {         include snippets/fastcgi-php.conf;         fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;     } } Đây là cấu hình cơ bản lắng nghe trên cổng 80 và phục vụ các file  từ root  web bạn vừa tạo. Nó sẽ chỉ phản hồi các yêu cầu tới  server  lưu trữ hoặc địa chỉ IP được cung cấp sau server_name và  các file   nào có .php sẽ được xử lý bởi php-fpm trước khi Nginx gửi kết quả cho  user .
 Khi bạn chỉnh sửa xong, hãy  lưu file  . Nếu bạn đã sử dụng nano để tạo file , hãy làm như vậy  bằng lệnh  CTRL + X , sau đó nhập y và ENTER để xác nhận.
 Kích hoạt cấu hình của bạn bằng cách liên kết đến file  cấu hình từ folder  sites-enabled của Nginx:
- sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/ 
Điều này sẽ thông báo cho Nginx sử dụng cấu hình trong lần reload tiếp theo. Bạn có thể kiểm tra cấu hình của bạn để tìm lỗi cú pháp bằng lệnh :
- sudo nginx -t 
Nếu bất kỳ lỗi nào được báo cáo, hãy quay lại file cấu hình của bạn để xem lại nội dung của nó trước khi tiếp tục.
Khi đã sẵn sàng , hãy reload Nginx để áp dụng các thay đổi :
- sudo systemctl reload nginx 
Tiếp theo, bạn sẽ tạo một file trong folder root web mới của bạn để kiểm tra quá trình PHP processor .
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.  Bạn có thể kiểm tra nó để xác thực rằng Nginx có thể xử lý chính xác các file  .php cho  PHP processor  của bạn.
 Bạn 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 bạn. 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:
- nano /var/www/your_domain/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 bạn:
<?php phpinfo(); ?> Khi bạn hoàn tất, hãy  lưu file    bằng lệnh  CTRL + X rồi đến y và ENTER để xác nhận.
  Như vậy,  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 mà bạn đã  cài đặt  trong file  cấu hình Nginx  của bạn , theo sau là /info.php :
http://your_domain/info.php Bạn sẽ thấy một trang web chứa thông tin chi tiết về server của bạn:
 Sau khi kiểm tra thông tin liên quan về  server  PHP của bạn thông qua trang đó, tốt nhất là xóa file  bạn đã tạo vì nó chứa thông tin nhạy cảm về môi trường PHP và  server  Debian của bạn. Bạn có thể sử dụng rm để xóa file  đó:
- rm /var/www/your_domain/info.php 
Bạn luôn có thể tạo lại file này nếu sau này bạn cần. Tiếp theo, ta sẽ kiểm tra kết nối database từ phía PHP.
Bước 6 - Kiểm tra kết nối database từ PHP (Tùy chọn)
Nếu bạn muốn kiểm tra xem PHP có thể kết nối với MariaDB và thực thi các truy vấn database hay không, bạn có thể tạo một bảng kiểm tra với dữ liệu giả và truy vấn nội dung của nó từ một tập lệnh PHP.
Đầu tiên, kết nối với console MariaDB với user database bạn đã tạo ở Bước 2 của hướng dẫn này:
- mariadb -u example_user -p 
Tạo một bảng có tên todo_list . Từ console MariaDB, hãy chạy câu lệnh sau:
CREATE TABLE example_database.todo_list (     item_id INT AUTO_INCREMENT,     content VARCHAR(255),     PRIMARY KEY(item_id) ); Bây giờ, hãy chèn một vài hàng nội dung trong bảng thử nghiệm. Bạn có thể cần lặp lại lệnh tiếp theo một vài lần, sử dụng các giá trị khác nhau:
- INSERT INTO example_database.todo_list (content) VALUES ("My first important item"); 
Để xác nhận dữ liệu đã được lưu thành công vào bảng của bạn, hãy chạy:
- SELECT * FROM example_database.todo_list; 
Bạn sẽ thấy kết quả sau:
Output+---------+--------------------------+ | item_id | content                  | +---------+--------------------------+ |       1 | My first important item  | |       2 | My second important item | |       3 | My third important item  | |       4 | and this one more thing  | +---------+--------------------------+ 4 rows in set (0.000 sec)  Sau khi xác nhận bạn có dữ liệu hợp lệ trong bảng thử nghiệm của bạn , bạn có thể thoát khỏi console MariaDB:
- exit 
 Đến đây bạn  có thể tạo tập lệnh PHP sẽ kết nối với MariaDB và truy vấn nội dung của bạn. Tạo một file  PHP mới trong folder  root  web tùy chỉnh của bạn bằng trình soạn thảo  bạn muốn .  Ta  sẽ sử dụng nano cho điều đó:
- nano /var/www/your_domain/todo_list.php 
Thêm nội dung sau vào tập lệnh PHP của bạn:
<?php $user = "example_user"; $password = "password"; $database = "example_database"; $table = "todo_list";  try {   $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);   echo "<h2>TODO</h2><ol>";    foreach($db->query("SELECT content FROM $table") as $row) {     echo "<li>" . $row['content'] . "</li>";   }   echo "</ol>"; } catch (PDOException $e) {     print "Error!: " . $e->getMessage() . "<br/>";     die(); } Lưu file khi bạn chỉnh sửa xong.
  Như vậy,  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 mà bạn đã  cài đặt  trong file  cấu hình Nginx  của bạn , theo sau là /todo_list.php :
http://your_domain/todo_list.php Bạn sẽ thấy một trang như thế này, hiển thị nội dung bạn đã chèn vào bảng thử nghiệm của bạn :
Điều đó nghĩa là môi trường PHP của bạn đã sẵn sàng kết nối và tương tác với server MariaDB của bạn.
Kết luận
 Trong hướng dẫn này, bạn đã xây dựng một nền tảng linh hoạt để cung cấp các trang web và ứng dụng PHP cho khách truy cập  của bạn , sử dụng Nginx làm  web server . Bạn đã  cài đặt  Nginx để xử lý các yêu cầu PHP thông qua php-fpm và bạn cũng  cài đặt  database  MariaDB để lưu trữ dữ liệu trang web  của bạn .
Để cải thiện hơn nữa cài đặt hiện tại của bạn , bạn có thể cài đặt Composer để quản lý gói và phụ thuộc bằng PHP, đồng thời bạn cũng có thể cài đặt certificate OpenSSL cho trang web của bạn bằng Let's Encrypt .
Các tin liên quan
Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên CentOS 82020-02-24
Thiết lập server ban đầu với CentOS 8
2020-02-06
Cách thiết lập Nền tảng Cloud IDE server mã trên Ubuntu 18.04 [Quickstart]
2020-01-02
Cách thiết lập server lưu trữ đối tượng bằng Minio trên Ubuntu 18.04
2019-12-13
Cách thiết lập server GraphQL trong Node.js với server Apollo và Sequelize
2019-12-12
Cách xây dựng server GraphQL trong Node.js bằng GraphQL-yoga và MongoDB
2019-12-12
Cách sử dụng Ansible để tự động thiết lập server ban đầu trên Ubuntu 18.04
2019-11-27
Cách sử dụng Ansible để tự động thiết lập server ban đầu trên Ubuntu 18.04
2019-11-27
Cách sử dụng Ansible để tự động thiết lập server ban đầu trên Ubuntu 18.04
2019-11-27
Sử dụng Sự kiện do server gửi trong Node.js để tạo ứng dụng thời gian thực
2019-11-18
 

