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