Cài đặt LAMP trên Ubuntu 20.04 - Install LAMP on Ubuntu 20.04

Một "ngăn xếp LAMP" là một nhóm phần mềm mã nguồn mở thường được cài đặt cùng nhau để cho phép máy chủ chạy các trang web động và ứng dụng web viết bằng PHP. Thuật ngữ này là một viết tắt đại diện cho hệ điều hành Linux với máy chủ web Apache. Dữ liệu trang web được lưu trữ trong cơ sở dữ liệu MySQL và nội dung động được xử lý bởi PHP. Trong hướng dẫn này, bạn sẽ thiết lập cài đặt LAMP trên Ubuntu 20.04.

Yêu cầu trước khi cài đặt LAMP trên Ubuntu 20.04

Để hoàn thành hướng dẫn cài đặt LAMP trên Ubuntu 20.04, bạn cần có một máy chủ Ubuntu 20.04 với một tài khoản người dùng không phải là root có quyền sudo và một tường lửa 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 ban đầu cho máy chủ Ubuntu 20.04.

Hướng dẫn cài đặt LAMP trên Ubuntu 20.04

Bước 1: Cài đặt Apache và cập nhật tường lửa

Máy chủ web Apache là một trong những máy chủ web phổ biến nhất trên thế giới. Nó được ghi chép đầy đủ, có một cộng đồng người dùng tích cực và đã được sử dụng rộng rãi trong suốt lịch sử của web. Điều này làm cho nó trở thành một sự lựa chọn tuyệt vời để lưu trữ một trang web.

Bắt đầu bằng cách cập nhật bộ lưu trữ quản lý gói. Nếu đây là lần đầu bạn sử dụng sudo trong phiên làm việc này, bạn sẽ được yêu cầu nhập mật khẩu người dùng để xác nhận bạn có đặc quyền cần thiết để quản lý các gói hệ thống bằng apt hay không.

$ sudo apt update

Tiếp theo, cài đặt Apache bằng lệnh:

$ sudo apt install apache2

Bạn sẽ được yêu cầu xác nhận cài đặt Apache bằng cách nhấn Y, sau đó ENTER.

Khi cài đặt hoàn thành, bạn sẽ cần điều chỉnh cài đặt tường lửa để cho phép lưu lượng HTTP. UFW có các hồ sơ ứng dụng khác nhau mà bạn có thể sử dụng để thực hiện điều đó. Để liệt kê tất cả các hồ sơ ứng dụng UFW hiện có, bạn có thể chạy:

$ sudo ufw app list

Bạn sẽ thấy đầu ra tương tự như sau:

Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH

Dưới đây là ý nghĩa của mỗi hồ sơ:

  • Apache: Cấu hình này chỉ mở cổng 80 (lưu lượng web thông thường, không mã hóa).
  • Apache Full: Cấu hình này mở cả hai cổng 80 (lưu lượng web thông thường, không mã hóa) và cổng 443 (lưu lượng được mã hóa TLS/SSL).
  • Apache Secure: Cấu hình này mở chỉ cổng 443 (lưu lượng được mã hóa TLS/SSL).

Hiện tại, tốt nhất là chỉ cho phép kết nối trên cổng 80, vì đây là một cài đặt Apache mới và bạn vẫn chưa có cấu hình chứng chỉ TLS/SSL để cho phép lưu lượng HTTPS trên máy chủ.

Để chỉ cho phép lưu lượng trên cổng 80, sử dụng cấu hình Apache:

$ sudo ufw allow in "Apache"

Bạn có thể xác minh thay đổi bằng cách chạy:

$ sudo ufw status
Output
Status: active

To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Apache ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Apache (v6) ALLOW Anywhere (v6)

Lưu lượng trên cổng 80 bây giờ đã được cho phép qua tường lửa.

Bạn có thể kiểm tra nhanh ngay lập tức để xác minh rằng mọi thứ đã diễn ra theo kế hoạch bằng cách truy cập địa chỉ IP công cộng máy chủ của bạn trong trình duyệt web (xem ghi chú dưới tiêu đề tiếp theo để biết địa chỉ IP công cộng của bạn nếu bạn chưa có thông tin này):

http://your_server_ip

Bạn sẽ thấy trang web mặc định của Apache trên Ubuntu 20.04 được sử dụng cho mục đích thông tin và kiểm tra. Nó sẽ trông giống như sau:

Cài đặt LAMP trên Ubuntu 20.04 - Install LAMP on Ubuntu 20.04

Nếu bạn thấy trang này, tức là máy chủ web của bạn đã được cài đặt đúng cách và có thể truy cập qua tường lửa của bạn.

  • Làm thế nào để tìm địa chỉ IP công cộng của máy chủ ?

Nếu bạn không biết địa chỉ IP công cộng của máy chủ là gì thì có một số cách bạn có thể tìm nó. Thường thì đây là địa chỉ mà bạn sử dụng để kết nối vào máy chủ của bạn thông qua SSH.

Có một số cách khác nhau để làm điều này từ dòng lệnh. Trước hết, bạn có thể sử dụng các công cụ iproute2 để lấy địa chỉ IP của bạn bằng cách nhập lệnh này:

$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Lệnh này sẽ trả về hai hoặc ba dòng. Tất cả đều là địa chỉ đúng nhưng máy tính của bạn có thể chỉ sử dụng một trong số chúng, vì vậy bạn hãy thử từng dòng.

Một phương pháp thay thế là sử dụng tiện ích curl để liên hệ với một bên ngoài để biết cách nó nhìn thấy máy chủ của bạn. Điều này được thực hiện bằng cách hỏi một máy chủ cụ thể địa chỉ IP của bạn là gì:

$ curl http://icanhazip.com

Bất kể phương pháp bạn sử dụng để lấy địa chỉ IP là gì thì sau đó hãy nhập nó vào thanh địa chỉ của trình duyệt web để xem trang web mặc định của Apache.

Bước 2: Cài đặt MySQL

Bây giờ bạn đã có một máy chủ web đang hoạt động, bạn cần cài đặt hệ thống cơ sở dữ liệu để có thể lưu trữ và quản lý dữ liệu cho trang web. MySQL là một hệ thống quản lý cơ sở dữ liệu phổ biến được sử dụng trong môi trường PHP.

Một lần nữa, sử dụng apt để tải xuống và cài đặt phần mềm này:

$ sudo apt install mysql-server

Khi được yêu cầu, xác nhận cài đặt bằng cách nhập Y và sau đó nhấn ENTER.

Khi cài đặt hoàn thành, nên chạy một tập lệnh bảo mật đi kèm với MySQL. Tập lệnh này sẽ loại bỏ một số cài đặt mặc định không an toàn và khóa truy cập vào hệ thống cơ sở dữ liệu của bạn. Bắt đầu tập lệnh tương tác bằng cách chạy:

$ sudo mysql_secure_installation

Lệnh này sẽ hỏi bạn có muốn cấu hình PLUGIN VALIDATE PASSWORD không.

Lưu ý: Bật tính năng này là một quyết định dựa trên sự đánh giá cá nhân. Nếu được kích hoạt, mật khẩu không khớp với các tiêu chí đã chỉ định sẽ bị từ chối bởi MySQL kèm theo lỗi. Việc tắt xác thực là an toàn, nhưng bạn nên luôn sử dụng mật khẩu mạnh và duy nhất cho thông tin đăng nhập vào cơ sở dữ liệu.

Trả lời Y để bật tính năng hoặc bất cứ điều gì khác để tiếp tục mà không bật tính năng này.

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 trả lời "yes", bạn sẽ được hỏi để chọn một cấp độ kiểm tra mật khẩu. Hãy lưu ý rằng nếu bạn nhập 2 cho cấp độ mạnh nhất, bạn sẽ nhận được lỗi khi cố gắng đặt mật khẩu nào đó không chứa số, chữ cái hoa và thường, ký tự đặc biệt hoặc dựa trên các từ điển thông thường.

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

Bất kể bạn đã chọn thiết lập PLUGIN VALIDATE PASSWORD hay không, máy chủ của bạn sẽ tiếp tục yêu cầu bạn chọn và xác nhận một mật khẩu cho người dùng root của MySQL. Điều này không nên bị nhầm lẫn với người dùng root của hệ thống. Người dùng root của cơ sở dữ liệu là người dùng quản trị với đầy đủ quyền truy cập vào hệ thống cơ sở dữ liệu.

Dù phương pháp xác thực mặc định cho người dùng root của MySQL không yêu cầu sử dụng mật khẩu, ngay cả khi bạn đã đặt một mật khẩu, bạn nên xác định một mật khẩu mạnh ở đây như một biện pháp an toàn bổ sung.

Nếu bạn đã bật kiểm tra mật khẩu, bạn sẽ được hiển thị mức độ mạnh của mật khẩu cho người dùng root mà bạn vừa nhập và máy chủ của bạn sẽ hỏi bạn có muốn tiếp tục với mật khẩu đó hay không. Nếu bạn hài lòng với mật khẩu hiện tại của mình, nhập Y để đồng ý tại lời nhắc: "yes".

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Đối với các câu hỏi còn lại, hãy nhấn Y và nhấn phím ENTER tại mỗi lời nhắc. Điều này sẽ loại bỏ một số người dùng ẩn danh và cơ sở dữ liệu kiểm tra, tắt đăng nhập root từ xa và tải lại các quy tắc mới này để MySQL ngay lập tức tuân theo các thay đổi bạn đã thực hiện.

Khi bạn đã hoàn thành, hãy kiểm tra xem bạn có thể đăng nhập vào bảng điều khiển MySQL hay không bằng cách nhập:

$ sudo mysql

Điều này sẽ kết nối vào máy chủ MySQL với tư cách là người dùng cơ sở dữ liệu quản trị root, được suy ra từ việc sử dụng sudo khi chạy lệnh này. Bạn nên thấy đầu ra giống như sau:

Output
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 8.0.19-0ubuntu5 (Ubuntu)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Để thoát khỏi bảng điều khiển MySQL, nhập:

mysql> exit

Lưu ý rằng bạn không cần phải cung cấp mật khẩu để kết nối với người dùng root, ngay cả khi bạn đã định nghĩa một mật khẩu khi chạy tập lệnh mysql_secure_installation. Điều đó xảy ra vì phương pháp xác thực mặc định cho người dùng quản trị MySQL là unix_socket thay vì mật khẩu.

Mặc dù điều này có vẻ như một vấn đề về bảo mật ban đầu nhưng nó làm cho máy chủ cơ sở dữ liệu an toàn hơn vì chỉ các người dùng được phép đăng nhập với tư cách là người dùng root MySQL là những người dùng hệ thống có đặc quyền sudo kết nối từ bảng điều khiển hoặc thông qua ứng dụng chạy với các đặc quyền tương tự.

Trong thực tế, điều đó có nghĩa là bạn sẽ không thể sử dụng người dùng root cơ sở dữ liệu quản trị để kết nối từ ứng dụng PHP. Thiết lập một mật khẩu cho tài khoản root MySQL hoạt động như một biện pháp bảo vệ, trong trường hợp phương pháp xác thực mặc định được thay đổi từ unix_socket sang mật khẩu.

Để tăng cường bảo mật, nên có các tài khoản người dùng riêng biệt với ít đặc quyền hơn được thiết lập cho mỗi cơ sở dữ liệu, đặc biệt là nếu bạn có kế hoạch chứa nhiều cơ sở dữ liệu trên máy chủ của bạn.

Lưu ý: Tại thời điểm viết hướng dẫn này, thư viện PHP MySQL nguyên bản mysqlnd không hỗ trợ caching_sha2_authentication, phương pháp xác thực mặc định cho MySQL 8. Vì vậy, khi tạo người dùng cơ sở dữ liệu cho các ứng dụng PHP trên MySQL 8 bạn cần đảm bảo rằng họ được cấu hình để sử dụng mysql_native_password thay vì mật khẩu. 

Máy chủ MySQL của bạn hiện đã được cài đặt và bảo mật. Tiếp theo, chúng ta sẽ cài đặt PHP và tiến đến bước cuối cùng trong việc cài đặt LAMP trên Ubuntu 20.04.

Bước 3: Cài đặt PHP

Bạn đã cài đặt Apache để phục vụ nội dung và MySQL để lưu trữ, quản lý dữ liệu. PHP là thành phần trong thiết lập của chúng ta sẽ xử lý mã để hiển thị nội dung động cho người dùng cuối. Ngoài gói php, bạn cũng cần php-mysql, một mô-đun PHP cho phép PHP giao tiếp với cơ sở dữ liệu dựa trên MySQL. Bạn cũng cần libapache2-mod-php để kích hoạt Apache xử lý các tệp PHP. Các gói PHP cốt lõi sẽ tự động được cài đặt như các phụ thuộc.

Để cài đặt các gói này, chạy:

$ sudo apt install php libapache2-mod-php php-mysql

Sau khi cài đặt hoàn thành, bạn có thể chạy lệnh sau để xác nhận phiên bản PHP của bạn:

$ php -v
Output
PHP 7.4.3 (cli) (built: Jul 5 2021 15:13:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Tại điểm này, ngăn xếp LAMP của bạn hoàn toàn hoạt động. Nhưng trước khi bạn có thể kiểm tra thiết lập của mình với một tập lệnh PHP nên thiết lập một Virtual Host Apache chính thức để chứa các tệp và thư mục của trang web. Chúng ta sẽ thực hiện điều đó trong bước tiếp theo.

Bước 4: Tạo một Virtual Host cho trang web

Khi sử dụng máy chủ web Apache, bạn có thể tạo ra các máy chủ ảo (tương tự như khối máy chủ trong Nginx) để bao gồm chi tiết cấu hình và chứa nhiều tên miền từ một máy chủ duy nhất. Trong hướng dẫn này, chúng ta sẽ thiết lập một tên miền gọi là your_domain, tuy nhiên bạn nên thay thế nó bằng tên miền riêng của bạn.

Apache trên Ubuntu 20.04 có một khối máy chủ được kích hoạt mặc định được cấu hình để phục vụ tài liệu từ thư mục /var/www/html. Mặc dù điều này hoạt động tốt cho một trang web duy nhất nhưng nếu bạn đang lưu trữ nhiều trang web, điều này có thể trở nên phức tạp.

Thay vì sửa đổi /var/www/html, chúng ta sẽ tạo một cấu trúc thư mục trong /var/www cho trang web your_domain, để lại /var/www/html ở đó như thư mục mặc định sẽ được phục vụ nếu yêu cầu từ máy khách không phù hợp với bất kỳ trang web nào khác.

Tạo thư mục cho your_domain như sau:

$ sudo mkdir /var/www/your_domain

Tiếp theo, gán quyền sở hữu của thư mục bằng biến môi trường $USER, biến này sẽ tham chiếu đến người dùng hệ thống hiện tại của bạn:

$ sudo chown -R $USER:$USER /var/www/your_domain

Tiếp theo, mở một tệp cấu hình mới trong thư mục sites-available của Apache bằng trình soạn thảo dòng lệnh mà bạn ưa thích. Trong ví dụ này, chúng tôi sẽ sử dụng nano:

$ sudo nano /etc/apache2/sites-available/your_domain.conf

Điều này sẽ tạo ra một tệp mới trống. 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>

Lưu và đóng tệp khi bạn hoàn thành. Nếu bạn đang sử dụng nano, bạn có thể làm điều đó bằng cách nhấn CTRL+X, sau đó Y và ENTER.

Với cấu hình VirtualHost này, chúng tôi đang chỉ định cho Apache phục vụ your_domain bằng cách sử dụng /var/www/your_domain làm thư mục gốc của trang web. Nếu bạn muốn kiểm tra Apache mà không có tên miền, bạn có thể loại bỏ hoặc làm chú thích các tùy chọn ServerName và ServerAlias bằng cách thêm ký tự # ở đầu mỗi dòng của tùy chọn.

Bạn có thể sử dụng a2ensite để bật máy chủ ảo mới đã tạo:

$ sudo a2ensite your_domain

Bạn có thể muốn tắt trang web mặc định đi kèm với Apache. Điều này cần thiết nếu bạn không sử dụng tên miền tùy chỉnh, vì trong trường hợp này, cấu hình mặc định của Apache sẽ ghi đè lên máy chủ ảo của bạn. Để tắt trang web mặc định của Apache, nhập:

$ sudo a2dissite 000-default

Để đảm bảo rằng tệp cấu hình của bạn không chứa lỗi cú pháp, chạy lệnh sau:

$ sudo apache2ctl configtest

Cuối cùng, tải lại Apache để các thay đổi này có hiệu lực:

$ sudo systemctl reload apache2

Website mới của bạn hiện đã hoạt động nhưng thư mục gốc /var/www/your_domain vẫn trống rỗng. Tạo một tệp index.html trong vị trí đó để chúng ta có thể kiểm tra xem máy chủ ảo hoạt động như mong đợi:

$ nano /var/www/your_domain/index.html

Thêm nội dung sau vào tệp này:

<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>

<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>

Bây giờ hãy mở trình duyệt và truy cập tên miền hoặc địa chỉ IP của máy chủ một lần nữa:

http://server_domain_or_IP

Bạn sẽ thấy một trang web như thế này:

Cài đặt LAMP trên Ubuntu 20.04 - Install LAMP on Ubuntu 20.04

Nếu bạn thấy trang này, điều đó có nghĩa máy chủ ảo Apache của bạn đang hoạt động như mong đợi.

Bạn có thể để tệp này tại đây như một trang đích tạm thời cho ứng dụng của bạn cho đến khi bạn thiết lập một tệp index.php để thay thế. Khi bạn làm điều đó, hãy nhớ xóa hoặc đổi tên tệp index.html từ thư mục gốc vì nó sẽ được ưu tiên hơn một tệp index.php theo mặc định.

  • Lưu ý về DirectoryIndex trên Apache

Với các cài đặt mặc định của DirectoryIndex trên Apache, một tệp có tên index.html sẽ luôn được ưu tiên hơn một tệp index.php. Điều này hữu ích khi bạn muốn thiết lập các trang bảo trì trong ứng dụng PHP, bằng cách tạo một tệp index.html tạm thời chứa một thông báo thông tin cho người truy cập. Bởi vì trang này sẽ được ưu tiên hơn trang index.php, nó sẽ trở thành trang đích cho ứng dụng. Sau khi bảo trì kết thúc, tệp index.html sẽ được đổi tên hoặc loại bỏ khỏi thư mục gốc, đưa trang ứng dụng bình thường trở lại.

Trong trường hợp bạn muốn thay đổi hành vi này, bạn cần chỉnh sửa tệp /etc/apache2/mods-enabled/dir.conf và sửa đổi thứ tự liệt kê tệp index.php trong DirectoryIndex:

$ sudo nano /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Sau khi lưu và đóng tệp, bạn cần tải lại Apache để các thay đổi có hiệu lực:

$ sudo systemctl reload apache2

Ở bước tiếp theo, chúng ta sẽ tạo một tập lệnh PHP để kiểm tra xem PHP đã được cài đặt và cấu hình đúng cách trên máy chủ của bạn hay chưa.

Bước 5: Kiểm tra xử lý PHP trên máy chủ web

Sau khi đã cài đặt LAMP trên Ubuntu 20.04 thì bạn cần kiểm tra các thành phần xem chúng có hoạt động đúng hay chưa. Bây giờ, khi bạn đã có một vị trí tùy chỉnh để chứa các tệp và thư mục của trang web của mình, chúng ta sẽ tạo một tập lệnh kiểm tra PHP để xác minh rằng Apache có thể xử lý và xử lý các yêu cầu cho các tệp PHP.

Tạo một tệp mới có tên là info.php trong thư mục gốc web tùy chỉnh của bạn:

$ nano /var/www/your_domain/info.php

Điều này sẽ mở một tệp trống. Thêm đoạn văn bản sau đây, đó là mã PHP hợp lệ, vào bên trong tệp:

<?php
phpinfo();

Khi bạn hoàn thành, hãy lưu và đóng tệp lại.

Để kiểm tra tập lệnh này, hãy mở trình duyệt web của bạn và truy cập tên miền máy chủ hoặc địa chỉ IP của máy chủ, sau đó là tên tập lệnh, trong trường hợp này là info.php:

http://server_domain_or_IP/info.php

Bạn sẽ thấy một trang giống như thế này:

Cài đặt LAMP trên Ubuntu 20.04 - Install LAMP on Ubuntu 20.04

Trang này cung cấp thông tin về máy chủ của bạn từ góc nhìn của PHP. Nó hữu ích để gỡ lỗi và đảm bảo rằng các thiết lập của bạn được áp dụng đúng cách.

Nếu bạn có thể thấy trang này trong trình duyệt của mình, thì cài đặt PHP của bạn hoạt động như mong đợi.

Sau khi kiểm tra thông tin liên quan về máy chủ PHP của bạn qua trang này, tốt nhất là bạn nên xóa tệp đã tạo vì nó chứa thông tin nhạy cảm về môi trường PHP và máy chủ Ubuntu. Bạn có thể sử dụng lệnh rm để thực hiện điều này:

$ sudo rm /var/www/your_domain/info.php

Bạn luôn có thể tạo lại trang này nếu bạn cần truy cập thông tin này lại sau này.

Bước 6: Kiểm tra kết nối cơ sở dữ liệu từ PHP (tùy chọn)

Đây là bước cuối cùng trong quá trình cài đặt LAMP trên Ubuntu 20.04, kiểm tra kết nối cơ sở dữ liệu từ PHP. Nếu muốn kiểm tra xem PHP có thể kết nối với MySQL và thực thi các truy vấn cơ sở dữ liệu 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ó từ một tập lệnh PHP.

Trước khi làm điều đó, chúng ta cần tạo một cơ sở dữ liệu kiểm tra và một người dùng MySQL mới được cấu hình đúng để truy cập nó.

Tại thời điểm viết bài này, thư viện MySQL PHP tự nhiên mysqlnd không hỗ trợ caching_sha2_authentication, phương thức xác thực mặc định cho MySQL 8. Chúng ta cần tạo một người dùng mới với phương thức xác thực mysql_native_password để có thể kết nối với cơ sở dữ liệu MySQL từ PHP.

Chúng ta sẽ tạo một cơ sở dữ liệu có tên là example_database và một người dùng có tên là example_user nhưng bạn có thể thay thế những tên này bằng các giá trị khác.

Trước tiên, kết nối vào bảng điều khiển MySQL bằng tài khoản root:

$ sudo mysql

Để tạo một cơ sở dữ liệu mới, chạy lệnh sau từ bảng điều khiển MySQL của bạn:

mysql> CREATE DATABASE example_database;

Bây giờ bạn có thể tạo một người dùng mới và cấp họ đầy đủ quyền truy cập vào cơ sở dữ liệu tùy chỉnh bạn vừa tạo.

Lệnh sau tạo một người dùng mới có tên là example_user, sử dụng mysql_native_password như phương thức xác thực mặc định. Chúng ta đang xác định mật khẩu của người dùng này là password, nhưng bạn nên thay thế giá trị này bằng một mật khẩu an toàn mà bạn tự chọn:

mysql> CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

Bây giờ chúng ta cần cấp quyền cho người dùng này đối với cơ sở dữ liệu example_database:

mysql> GRANT ALL ON example_database.* TO 'example_user'@'%';

Bây giờ bạn đã cấp quyền cho người dùng example_user trên cơ sở dữ liệu example_database và họ sẽ có đầy đủ quyền truy cập vào cơ sở dữ liệu này, đồng thời không thể tạo hoặc sửa đổi các cơ sở dữ liệu khác trên máy chủ của bạn.

Bây giờ bạn có thể thoát khỏi shell MySQL bằng câu lệnh sau:

mysql> exit

Bạn có thể kiểm tra xem người dùng mới có quyền đúng bằng cách đăng nhập vào giao diện dòng lệnh MySQL một lần nữa, lần này sử dụng thông tin đăng nhập của người dùng tùy chỉnh:

$ mysql -u example_user -p

Lưu ý cờ -p trong lệnh này, nó sẽ yêu cầu bạn nhập mật khẩu được sử dụng khi tạo người dùng example_user. Sau khi đăng nhập vào giao diện dòng lệnh MySQL, hãy xác nhận rằng bạn có quyền truy cập vào cơ sở dữ liệu example_database:

mysql> SHOW DATABASES;

Điều này sẽ đưa ra cho bạn kết quả sau đây:

Output
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Tiếp theo, chúng ta sẽ tạo một bảng thử nghiệm có tên là todo_list. Từ MySQL console, hãy chạy lệnh sau:

mysql> CREATE TABLE example_database.todo_list (
mysql> item_id INT AUTO_INCREMENT,
mysql> content VARCHAR(255),
mysql> PRIMARY KEY(item_id)
mysql> );

Chèn một số hàng dữ liệu vào bảng thử nghiệm. Bạn có thể muố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:

mysql> INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Để xác nhận rằng dữ liệu đã được lưu thành công vào bảng của bạn, hãy chạy:

mysql> SELECT * FROM example_database.todo_list;

Bạn sẽ thấy đầu ra 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 mình, bạn có thể thoát khỏi giao diện dòng lệnh của MySQL bằng lệnh sau:

mysql> exit

Bây giờ bạn có thể tạo tệp PHP kết nối với MySQL và truy vấn nội dung của bạn. Tạo một tệp PHP mới trong thư mục gốc web tùy chỉnh bằng trình soạn thảo ưa thích của bạn. Chúng ta sẽ sử dụng nano cho điều đó:

$ nano /var/www/your_domain/todo_list.php

Đoạn mã PHP sau sẽ kết nối đến cơ sở dữ liệu MySQL và truy vấn nội dung của bảng todo_list, sau đó hiển thị kết quả dưới dạng danh sách. Nếu có vấn đề với kết nối cơ sở dữ liệu, nó sẽ gửi ra một ngoại lệ. Hãy sao chép nội dung này vào tệp 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 và đóng tệp khi bạn đã chỉnh sửa xong.

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 tên miền hoặc địa chỉ IP công cộng được cấu hình cho trang web của bạn, sau đó thêm /todo_list.php vào cuối đường dẫn:

http://your_domain_or_IP/todo_list.php

Bạn sẽ thấy một trang giống như thế này, hiển thị nội dung bạn đã chèn vào bảng thử nghiệm:

Cài đặt LAMP trên Ubuntu 20.04 - Install LAMP on Ubuntu 20.04

Điều đó có 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 máy chủ MySQL.

Trong hướng dẫn này, chúng ta đã xây dựng một nền tảng linh hoạt để phục vụ 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 máy chủ web và MySQL làm hệ thống cơ sở dữ liệu.

Như một bước tiếp theo ngay lập tức, bạn nên đảm bảo rằng các kết nối đến máy chủ web được bảo mật bằng cách cung cấp chúng qua HTTPS. Để thực hiện điều đó, bạn có thể sử dụng Let's Encrypt để bảo mật trang web với chứng chỉ TLS/SSL miễn phí. Đó là toàn bộ quá trình cài đặt LAMP trên Ubuntu 20.04.