Cách cài đặt Linux, Apache, MariaDB, PHP (LAMP) trên Debian 10
LAMP là một group phần mềm nguồn mở thường được cài đặt cùng nhau để cho phép server lưu trữ các trang web động và ứng dụng web. Thuật ngữ này thực sự là một từ viết tắt đại diện cho hệ điều hành L inux, với web server A pache. Dữ liệu trang web được lưu trữ trong database M ariaDB và nội dung động được 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, ta sẽ cài đặt LAMP trên server Debian 10, sử dụng MariaDB làm hệ quản trị database .
Yêu cầu
 Để hoàn thành hướng dẫn này, bạn cần phải có  server  Debian 10 với account   user  không root sudo -bật lên và firewall  cơ bản. Điều này có thể được  cấu hình  bằng cách sử dụng hướng dẫn  cài đặt   server  ban đầu của  ta  cho Debian 10 .
Bước 1 - Cài đặt Apache và Cập nhật Tường lửa
Web server Apache là một trong những web server phổ biến nhất trên thế giới. Nó được ghi chép đầy đủ và đã được sử dụng rộng rãi trong phần lớn lịch sử của web, điều này khiến nó trở thành lựa chọn mặc định tuyệt vời để lưu trữ một trang web.
Cài đặt Apache bằng trình quản lý gói của Debian, APT:
- sudo apt update 
- sudo apt install apache2 
Vì đây là sudo , các thao tác này được thực hiện với  quyền  root. Nó sẽ yêu cầu bạn nhập password  của  regular user  để xác minh ý định của bạn.
 Khi bạn đã nhập password   của bạn , apt sẽ cho bạn biết gói nào dự định cài đặt và chúng sẽ chiếm thêm bao nhiêu dung lượng đĩa. Nhấn Y và nhấn ENTER để tiếp tục và quá trình cài đặt sẽ tiếp tục.
Tiếp theo, giả sử rằng bạn đã làm theo hướng dẫn cài đặt server ban đầu bằng cách cài đặt và bật firewall UFW , hãy đảm bảo firewall của bạn cho phép truy cập HTTP và HTTPS.
Khi được cài đặt trên Debian 10, UFW được tải với các cấu hình ứng dụng mà bạn có thể sử dụng để điều chỉnh cài đặt firewall của bạn . Xem danh sách đầy đủ các cấu hình ứng dụng bằng lệnh:
- sudo ufw app list 
Các cấu hình WWW được sử dụng để quản lý các cổng được sử dụng bởi  web server :
OutputAvailable applications: . . .   WWW   WWW Cache   WWW Full   WWW Secure . . . Nếu bạn kiểm tra profile  WWW Full , nó cho thấy rằng nó cho phép lưu lượng đến các cổng 80 và 443 :
- sudo ufw app info "WWW Full" 
OutputProfile: WWW Full Title: Web Server (HTTP,HTTPS) Description: Web Server (HTTP,HTTPS)  Ports:   80,443/tcp Cho phép truy cập HTTP và HTTPS đến cho cấu hình này:
- sudo ufw allow in "WWW Full" 
Bạn có thể kiểm tra tại chỗ ngay lập tức để xác minh mọi thứ đã diễn ra theo kế hoạch bằng cách truy cập địa chỉ IP công cộng của server trong trình duyệt web :
http://your_server_ip Bạn sẽ thấy trang web Debian 10 Apache mặc định, trang này dành cho mục đích kiểm tra và thông tin. Nó trông giống như sau :
Nếu bạn nhìn thấy trang này, thì web server của bạn hiện đã được cài đặt chính xác và có thể truy cập thông qua firewall của bạn.
Nếu bạn không biết địa chỉ IP công cộng của server của bạn là gì, bạn có thể tìm thấy nó bằng một số cách. Thông thường, đây là địa chỉ bạn sử dụng để kết nối với server của bạn thông qua SSH.
 Có một số cách khác nhau để thực hiện việc này từ dòng lệnh. Trước tiên, bạn có thể sử dụng các công cụ iproute2 để lấy địa chỉ IP  của bạn   bằng lệnh :
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//' 
Điều này sẽ cung cấp cho bạn hai hoặc ba dòng trở lại. Chúng đều là địa chỉ chính xác, nhưng máy tính của bạn có thể chỉ sử dụng được một trong số chúng, vì vậy hãy thử từng địa chỉ.
 Một phương pháp thay thế là  sử dụng trình  curl để liên hệ với bên ngoài để cho bạn biết cách họ nhìn thấy  server  của bạn. Điều này được thực hiện bằng cách hỏi một  server  cụ thể địa chỉ IP của bạn là gì:
- sudo apt install curl 
- curl http://icanhazip.com 
Dù phương pháp bạn sử dụng để lấy địa chỉ IP của bạn , hãy nhập nó vào thanh địa chỉ của trình duyệt web để xem trang Apache mặc định.
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 LAMP .
Bước 3 - Cài đặt PHP
PHP là thành phần cài đặt của bạn sẽ xử lý mã để hiển thị nội dung động. Nó có thể chạy các tập lệnh, kết nối với database MariaDB của bạn để lấy thông tin và chuyển giao nội dung đã xử lý cho web server của bạn để hiển thị.
   , hãy tận dụng hệ thống apt để cài đặt PHP. Ngoài ra, bao gồm một số gói trợ giúp sẽ  đảm bảo  mã PHP có thể chạy trong  server  Apache và nói chuyện với database  MariaDB của bạn:
- sudo apt install php libapache2-mod-php php-mysql 
Điều này sẽ cài đặt PHP mà không gặp bất kỳ vấn đề gì. Ta sẽ kiểm tra điều này trong giây lát.
 Trong hầu hết các trường hợp,  bạn cần  sửa đổi cách Apache phân phát file . Hiện tại, nếu  user  yêu cầu một folder  từ  server , Apache trước tiên sẽ tìm kiếm một file  có tên là index.html .  Ta  muốn nói với  web server  thích các file  PHP hơn những file  khác, vì vậy hãy tạo Apache tìm kiếm index.php trước.
 Để thực hiện việc này, hãy nhập lệnh sau để mở file  dir.conf trong editor  với  quyền  root:
- sudo nano /etc/apache2/mods-enabled/dir.conf 
Nó sẽ trông giống thế này:
<IfModule mod_dir.c>     DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm </IfModule> Di chuyển file  index  PHP (được đánh dấu ở trên) đến vị trí đầu tiên sau đặc tả DirectoryIndex , như sau:
<IfModule mod_dir.c>     DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> Khi bạn hoàn tất, hãy  lưu file  . Nếu bạn đang sử dụng nano , bạn có thể thực hiện việc đó bằng cách nhấn CTRL+X , sau đó nhấn Y và ENTER để xác nhận.
Bây giờ reload cấu hình của Apache bằng:
- sudo systemctl reload apache2 
Bạn có thể kiểm tra trạng thái của dịch vụ apache2 với systemctl status :
- sudo systemctl status apache2 
Sample Output● apache2.service - The Apache HTTP Server    Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)    Active: active (running) since Mon 2019-07-08 12:58:31 UTC; 8s ago      Docs: https://httpd.apache.org/docs/2.4/   Process: 11948 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)  Main PID: 11954 (apache2)     Tasks: 6 (limit: 4719)    Memory: 11.5M    CGroup: /system.slice/apache2.service            ├─11954 /usr/sbin/apache2 -k start            ├─11955 /usr/sbin/apache2 -k start            ├─11956 /usr/sbin/apache2 -k start            ├─11957 /usr/sbin/apache2 -k start            ├─11958 /usr/sbin/apache2 -k start            └─11959 /usr/sbin/apache2 -k start Đến đây, LAMP của bạn đã hoạt động hoàn toàn, nhưng trước khi bạn có thể kiểm tra cài đặt của bạn bằng tập lệnh PHP, tốt nhất bạn nên cài đặt Server ảo Apache thích hợp để chứa các file và folder trên trang web . Ta sẽ làm điều đó trong bước tiếp theo.
Bước 4 - Tạo server ảo cho trang web
 Theo mặc định, Apache phục vụ nội dung của nó từ một folder  nằm tại /var/www/html , sử dụng cấu hình có trong /etc/apache2/sites-available/000-default.conf . Thay vì sửa đổi file  cấu hình trang web mặc định,  ta  sẽ tạo một  server  ảo mới để kiểm tra môi trường PHP của bạn.  Server  ảo cho phép  ta  giữ nhiều trang web được lưu trữ trên một  server  Apache duy nhất.
 Sau đó, bạn sẽ tạo cấu trúc folder  trong /var/www cho một trang web mẫu có tên your_domain .
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ở một file  cấu hình mới trong folder  sites-available của Apache bằng trình soạn thảo dòng lệnh  bạn muốn . Ở đây,  ta  sẽ sử dụng nano :
- sudo nano /etc/apache2/sites-available/your_domain.conf 
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:
<VirtualHost *:80>     ServerName your_domain     ServerAlias www.your_domain      ServerAdmin webmaster@localhost     DocumentRoot /var/www/your_domain     ErrorLog ${APACHE_LOG_DIR}/error.log     CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> Với cấu hình VirtualHost này,  ta  yêu cầu Apache phân phát your_domain bằng cách sử dụng /var/www/ your_domain làm folder  root  của web. Nếu bạn muốn kiểm tra Apache mà không có domain , bạn có thể xóa hoặc  comment  các tùy chọn ServerName và ServerAlias bằng cách thêm ký tự # vào đầu mỗi dòng của tùy chọn.
  Đến đây bạn  có thể sử dụng a2ensite để kích hoạt  server  ảo này:
- sudo a2ensite your_domain 
Bạn có thể cần vô hiệu hóa trang web mặc định được cài đặt với Apache. Điều này là bắt buộc nếu bạn không sử dụng domain tùy chỉnh, vì trong trường hợp này, cấu hình mặc định của Apache sẽ overrides Server ảo của bạn. Để tắt trang web mặc định của Apache, hãy nhập:
- sudo a2dissite 000-default 
Để đảm bảo file cấu hình của bạn không có lỗi cú pháp, bạn có thể chạy:
- sudo apache2ctl configtest 
Cuối cùng, reload Apache để những thay đổi này có hiệu lực:
- sudo systemctl reload apache2 
Trang web mới của bạn hiện đã hoạt động, nhưng root  web /var/www/ your_domain vẫn trống. Trong bước tiếp theo,  ta  sẽ tạo một tập lệnh PHP để kiểm tra  cài đặt  mới và  xác nhận  PHP được cài đặt và  cấu hình  chính xác trên  server  của bạn.
Bước 5 - Kiểm tra PHP processor trên Server Web của bạn
Đến đây bạn đã có một vị trí tùy chỉnh để lưu trữ các file và folder trên trang web của bạn , ta sẽ tạo một kịch bản kiểm tra PHP đơn giản để xác nhận Apache có thể xử lý và xử lý các yêu cầu đối với file PHP.
 Tạo một file  mới có tên info.php bên trong folder  root  web tùy chỉnh của bạn:
- nano /var/www/your_domain/info.php 
Thao tác này sẽ mở một file trống. Thêm văn bản sau, là mã PHP hợp lệ, bên trong file :
<?php phpinfo(); Khi bạn hoàn tất, hãy lưu file .
Đến đây bạn có thể kiểm tra xem web server của bạn có thể hiển thị chính xác nội dung được tạo bởi tập lệnh PHP này hay không. Để dùng thử, hãy truy cập trang này trong trình duyệt web . Bạn cần lại địa chỉ IP công cộng của server .
Địa chỉ bạn cần đến thăm là:
http://your_domain/info.php Bạn sẽ thấy một trang tương tự như sau:
Trang này cung cấp một số thông tin cơ bản về server của bạn . Nó rất hữu ích để gỡ lỗi và đảm bảo cài đặt của bạn đang được áp dụng chính xác.
Nếu bạn có thể thấy trang này trong trình duyệt của bạn , thì quá trình cài đặt PHP của bạn đang hoạt động như mong đợi.
 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  để thực hiện :
- sudo rm /var/www/your_domain/info.php 
Bạn luôn có thể tạo lại trang này nếu sau này cần truy cập lại thông tin.
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 
Tập lệnh PHP sau đây kết nối với database  MariaDB và truy vấn nội dung của bảng todo_list , hiển thị kết quả trong danh sách. Nếu có vấn đề với kết nối database , nó sẽ đưa ra một ngoại lệ.
 Sao chép nội dung này vào tập lệnh todo_list.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 cho  trang web , 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, ta đã 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 Apache làm web server và MariaDB làm hệ thống database .
Để 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
Thiết lập server ban đầu với Debian 102019-07-08
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Debian 10
2019-07-08
Cách xây dựng và triển khai server GraphQL với Node.js và MongoDB trên Ubuntu 18.04
2019-04-18
Cách thiết lập thủ công server Prisma trên Ubuntu 18.04
2019-01-11
Kết xuất phía server với Angular Universal
2019-01-10
Cách cài đặt và cấu hình pgAdmin 4 ở Chế độ server
2018-10-19
Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Debian 8
2018-10-18
Cách cài đặt Linux, Nginx, MySQL, PHP ( LEMP) trên Debian 9
2018-09-13
Cách cài đặt, chạy và kết nối với Jupyter Notebook trên server từ xa
2018-09-12
Cách cài đặt và cấu hình Postfix làm server SMTP chỉ gửi trên Debian 9
2018-09-07
 

