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 xây dựng server GraphQL trong Node.js bằng GraphQL-yoga và MongoDB
2019-12-12
Cách thiết lập server GraphQL trong Node.js với server Apollo và Sequelize
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