Cách cài đặt LAMP (Linux, Apache, MySQL, PHP) trên Ubuntu

Cài đặt LAMP

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

Yêu cầu tiên quyết trước khi cài đặt LAMP

Nếu bạn đang sử dụng Ubuntu phiên bản 16.04 hoặc thấp hơn, chúng tôi khuyến nghị nâng cấp lên phiên bản mới hơn vì Ubuntu không còn hỗ trợ các phiên bản này. Bộ sưu tập hướng dẫn này sẽ giúp bạn nâng cấp phiên bản Ubuntu.

Để hoàn thành bài hướng dẫn này, bạn cần có một máy chủ chạy Ubuntu, kèm theo một người dùng không phải root có quyền sudo và một firewall đang hoạt động. Để biết cách thiết lập các điều này, hãy chọn bản phân phối của bạn từ danh sách có sẵn và làm theo Hướng dẫn Cài Đặt Máy Chủ Ban Đầu.

Ngoài ra, bạn có thể triển khai cơ sở dữ liệu chỉ với 1 cú nhấp sử dụng Managed Databases của DataOnline. Hãy để DataOnline tập trung vào việc mở rộng, bảo trì và nâng cấp cơ sở dữ liệu của bạn.

Thiết lập bộ LAMP trên Ubuntu

  1. Cài đặt Apache & Cập nhật Firewall
  2. Cài đặt Cơ sở dữ liệu MySQL
  3. Cài đặt PHP
  4. Thiết lập Virtual Host
  5. Kiểm tra xử lý PHP
  6. Kiểm tra kết nối cơ sở dữ liệu từ PHP

Bước 1 – Cài đặt Apache và cập nhật Firewall

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 tài liệu hóa đầy đủ, có cộng đồng người dùng năng động và đã được sử dụng rộng rãi trong suốt lịch sử của web, điều này khiến nó trở thành 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ộ nhớ cache của trình quản lý gói. Nếu đây là lần đầu tiên bạn sử dụng sudo trong phiên làm việc này, bạn sẽ được nhắc nhập mật khẩu của người dùng để xác nhận quyền quản lý các gói hệ thống với apt:

sudo apt update

Tiếp theo, cài đặt Apache với:

sudo apt install apache2

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

Sau khi cài đặt hoàn tất, bạn cần điều chỉnh cài đặt firewall để cho phép lưu lượng HTTP. Công cụ cấu hình firewall mặc định của Ubuntu được gọi là Uncomplicated Firewall (UFW). Nó có các hồ sơ ứng dụng khác nhau mà bạn có thể sử dụng. Để liệt kê tất cả các hồ sơ ứng dụng UFW hiện có, hãy thực thi lệnh sau:

sudo ufw app list
Output
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

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

Apache: Hồ sơ này chỉ mở cổng 80 (lưu lượng web không mã hóa, bình thường).
Apache Full: Hồ sơ này mở cả cổng 80 (lưu lượng web không mã hóa) và cổng 443 (lưu lượng được mã hóa TLS/SSL).
Apache Secure: Hồ sơ này chỉ mở 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 các kết nối qua cổng 80, vì đây là cài đặt Apache mới và bạn chưa cấu hình chứng chỉ TLS/SSL để phục vụ lưu lượng HTTPS trên máy chủ.

Để chỉ cho phép lưu lượng qua cổng 80, sử dụng hồ sơ Apache:

sudo ufw status

Xác minh sự thay đổi với:

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 qua cổng 80 hiện đã được phép qua firewall.

Bạn có thể kiểm tra ngay bằng cách truy cập địa chỉ IP công cộng của máy chủ trong trình duyệt (tham khảo lưu ý dưới tiêu đề “Cách Tìm Địa Chỉ IP Công Cộng của Máy Chủ” nếu bạn chưa biết địa chỉ IP của mình):

http://your_server_ip

Trang web mặc định của Apache trên Ubuntu được thiết lập cho mục đích thông tin và kiểm tra. Dưới đây là ví dụ về trang mặc định của Apache trên Ubuntu 22.04

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

LAMP install

Cách 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ủ, có một số cách để tìm nó.

Thông thường, đây là địa chỉ bạn dùng để kết nối đến máy chủ qua SSH.

Có vài cách khác nhau để thực hiện điều này từ dòng lệnh. Đầu tiên, bạn có thể sử dụng các công cụ iproute2 để lấy địa chỉ IP bằng cách gõ lệnh sau:

ip addr show ens3 | 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ỉ hợp lệ, 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 cách.

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

curl http://icanhazip.com

Dù bạn chọn phương pháp nào, hãy nhập địa chỉ IP của bạn vào trình duyệt để xác nhận rằng máy chủ đang chạy.

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

Bây giờ khi bạn đã có máy chủ web hoạt động, bạn cần cài đặt hệ thống cơ sở dữ liệu để lưu trữ và quản lý dữ liệu cho trang web. MySQL là hệ quản trị 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 và cài đặt phần mềm này:

sudo apt install mysql-server

Khi được nhắc, hãy xác nhận cài đặt bằng cách nhập Y và nhấn ENTER.

Khi cài đặt hoàn tất, khuyến nghị bạn chạy script bảo mật đi kèm với MySQL. Script 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.

Cảnh báo: Tính từ tháng 7 năm 2022, sẽ xảy ra lỗi khi bạn chạy script mysql_secure_installation nếu không có cấu hình bổ sung. Lý do là script này sẽ cố gắng đặt mật khẩu cho tài khoản MySQL root, nhưng theo mặc định trên Ubuntu, tài khoản này không được cấu hình để kết nối bằng mật khẩu.

Trước tháng 7 năm 2022, script này sẽ thất bại im lặng sau khi cố gắng đặt mật khẩu cho tài khoản root và tiếp tục với các bước tiếp theo. Tuy nhiên, tính đến thời điểm hiện tại, script sẽ trả về lỗi sau khi bạn nhập và xác nhận mật khẩu:

Output
 ... Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the MySQL server. Please consider using ALTER USER instead if you want to change authentication parameters.

New password:

Điều này sẽ dẫn script vào vòng lặp đệ quy mà bạn chỉ có thể thoát ra bằng cách đóng cửa sổ terminal.

Vì script mysql_secure_installation thực hiện nhiều thao tác hữu ích để bảo mật cài đặt MySQL, vẫn được khuyến nghị chạy nó trước khi bạn bắt đầu sử dụng MySQL để quản lý dữ liệu. Tuy nhiên, để tránh bước vào vòng lặp đệ quy này, bạn cần điều chỉnh cách xác thực của tài khoản MySQL root trước.

Đầu tiên, mở giao diện dòng lệnh MySQL:

sudo mysql

Sau đó, chạy lệnh ALTER USER sau để thay đổi phương thức xác thực của tài khoản root sang phương thức sử dụng mật khẩu. Ví dụ sau thay đổi phương thức xác thực thành mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Sau khi thực hiện thay đổi này, thoát khỏi giao diện MySQL:

exit

Sau đó, bạn có thể chạy script mysql_secure_installation mà không gặp vấn đề gì.

Bắt đầu script tương tác bằng cách chạy:

sudo mysql_secure_installation

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

Lưu ý: Việc bật tính năng này phụ thuộc vào đánh giá của bạn. Nếu bật, các mật khẩu không đáp ứng tiêu chí sẽ bị MySQL từ chối với thông báo 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 cơ sở dữ liệu.

Nhập Y cho đồng ý, hoặc phím khác để tiếp tục mà không bật tính năng.

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:

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

Khi bạn hoàn tất, kiểm tra xem bạn có thể đăng nhập vào giao diện MySQL bằng cách gõ:

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

Cho dù bạn có chọn bật VALIDATE PASSWORD PLUGIN hay không, máy chủ của bạn sẽ tiếp theo yêu cầu bạn chọn và xác nhận một mật khẩu cho tài khoản MySQL root. Lưu ý rằng đây không phải là tài khoản root của hệ thống. Tài khoản root của cơ sở dữ liệu là người dùng quản trị với đầy đủ quyền hạn trên hệ thống cơ sở dữ liệu. Mặc dù phương thức xác thực mặc định cho tài khoản MySQL root không yêu cầu sử dụng mật khẩu (ngay cả khi đã được đặt), bạn vẫn nên xác định một mật khẩu mạnh 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, máy chủ sẽ hiển thị độ mạnh của mật khẩu root mà bạn vừa nhập và hỏi xem bạn có muốn tiếp tục sử dụng mật khẩu đó không. Nếu bạn hài lòng với mật khẩu hiện tại, hãy nhập Y cho “có” tại lời nhắc:

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

Với các câu hỏi còn lại, hãy nhấn Y và nhấn 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 test, vô hiệu hóa đăng nhập root từ xa, và áp dụng ngay các quy tắc mới để MySQL thực thi các thay đổi mà bạn đã thực hiện.

Khi bạn đã hoàn tất, hãy kiểm tra xem bạn có thể đăng nhập vào giao diện MySQL bằng cách gõ:

sudo mysql

Lệnh này sẽ kết nối đến máy chủ MySQL với tư cách người dùng quản trị root, được suy ra từ việc sử dụng sudo. Dưới đây là ví dụ về output:

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

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

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 giao diện MySQL, gõ:

exit

Lưu ý rằng bạn không cần cung cấp mật khẩu để kết nối với tư cách root, mặc dù bạn đã đặt mật khẩu khi chạy script mysql_secure_installation. Điều này là do phương thức xác thực mặc định cho tài khoản root MySQL là unix_socket thay vì password. Dù điều này có vẻ là một vấn đề bảo mật, nhưng nó giúp máy chủ cơ sở dữ liệu an toàn hơn vì chỉ có các người dùng hệ thống với quyền sudo mới được phép đăng nhập dưới tư cách root từ console hoặc qua ứng dụng chạy với cùng quyền. Thực tế, điều này có nghĩa là bạn sẽ không thể sử dụng tài khoản quản trị root để kết nối từ ứng dụng PHP của bạn. Việc đặt mật khẩu cho tài khoản root hoạt động như một biện pháp bảo vệ, phòng trường hợp phương thức xác thực mặc định được thay đổi từ unix_socket sang password.

Để tăng cường bảo mật, tốt nhất là tạo các tài khoản người dùng riêng với quyền hạn hạn chế cho mỗi cơ sở dữ liệu, đặc biệt nếu bạn dự định lưu trữ nhiều cơ sở dữ liệu trên máy chủ của mình.

Lưu ý: Một số phiên bản cũ của PHP không hỗ trợ caching_sha2_password – phương thức 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ó thể cần cấu hình ứng dụng sử dụng plug-in mysql_native_password thay thế. Hướng dẫn này sẽ trình bày cách làm điều đó ở Bước 6.

Máy chủ MySQL của bạn bây giờ đã được cài đặt và bảo mật. Tiếp theo, bạn sẽ cài đặt PHP – thành phần cuối cùng trong bộ LAMP.

Bước 3 – Cài đặt PHP | Các bước cài đặt LAMP

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 xử lý mã để hiển thị nội dung động cho người dùng cuối. Bên cạnh gói php, bạn cần cài đặt php-mysql – module cho phép PHP giao tiếp với các cơ sở dữ liệu MySQL. Bạn cũng cần cài đặt libapache2-mod-php để Apache có thể xử lý các file PHP. Các gói PHP cốt lõi sẽ tự động được cài đặt như phụ thuộc.

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

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

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

php -v
Output
PHP 8.1.2 (cli) (built: Mar  4 2022 18:13:46) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2, Copyright (c), by Zend Technologies

Thay đổi Directory Index của Apache (Tùy chọn)

Trong một số trường hợp, bạn có thể muốn điều chỉnh cách Apache phục vụ file khi một thư mục được yêu cầu. Hiện tại, nếu người dùng yêu cầu một thư mục, Apache sẽ tìm file có tên index.html trước. Chúng ta muốn máy chủ ưu tiên file PHP, để tìm file index.php trước. Nếu không làm vậy, file index.html trong thư mục gốc sẽ luôn được ưu tiên hơn index.php.

Để thay đổi, mở file cấu hình dir.conf trong trình soạn thảo mà bạn ưa thích. Ở đây, chúng ta dùng nano:

sudo nano /etc/apache2/mods-enabled/dir.conf

File sẽ hiển thị như sau:

/etc/apache2/mods-enabled/dir.conf
<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 làm nổi bật) lên vị trí đầu tiên sau chỉ thị DirectoryIndex, như sau:

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Khi hoàn tất, lưu và đóng file bằng cách nhấn CTRL+X, sau đó nhập Y và nhấn ENTER để xác nhận vị trí lưu.

Sau đó, khởi động lại Apache để các thay đổi có hiệu lực:

sudo systemctl restart apache2

Bạn cũng có thể kiểm tra trạng thái của dịch vụ apache2 bằng:

sudo systemctl status apache2

Output mẫu:

Sample Output
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago
 Main PID: 3719 (apache2)
    Tasks: 55 (limit: 2361)
   CGroup: /system.slice/apache2.service
           ├─3719 /usr/sbin/apache2 -k start
           ├─3721 /usr/sbin/apache2 -k start
           └─3722 /usr/sbin/apache2 -k start

Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di
Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Nhấn Q để thoát khỏi trạng thái hiển thị.

Cài đặt các phần mở rộng PHP (Tùy chọn)

Để mở rộng chức năng của PHP, bạn có thể cài đặt thêm một số module bổ sung. Để xem các module và thư viện PHP có sẵn, chuyển kết quả của lệnh apt search sang chương trình phân trang less để bạn cuộn qua output:

apt search php- | less

Sử dụng các phím mũi tên để cuộn lên xuống, và nhấn Q để thoát.

Kết quả liệt kê các thành phần tùy chọn mà bạn có thể cài đặt, kèm theo mô tả ngắn cho từng module:

bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
  Tracks usage of TCP/IP and builds html files with graphs

bluefish/bionic 2.2.10-1 amd64
  advanced Gtk+ text editor for web and software development

cacti/bionic 1.1.38+ds1-1 all
  web interface for graphing of monitoring systems

ganglia-webfrontend/bionic 3.6.1-3 all
  cluster monitoring toolkit - web front-end

golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
  PHP-like Compression and Archive Extensions in Go

haserl/bionic 0.9.35-2 amd64
  CGI scripting program for embedded environments

kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php

kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 all
  transitional package for kdevelop-php-l10n
…
:

Để tìm hiểu thêm về chức năng của từng module, bạn có thể tìm kiếm trên Internet hoặc xem mô tả chi tiết của gói bằng cách:

apt show package_name

Ví dụ, để tìm hiểu module php-cli làm gì, gõ:

apt show php-cli

Bạn sẽ nhận được output như sau:

Output
…
Description: command-line interpreter for the PHP scripting language (default)
 This package provides the /usr/bin/php command interpreter, useful for
 testing PHP scripts from a shell or performing general shell scripting tasks.
 .
 PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
 open source general-purpose scripting language that is especially suited
 for web development and can be embedded into HTML.
 .
 This package is a dependency package, which depends on Ubuntu's default
 PHP version (currently 7.2).
…

Nếu bạn quyết định cài đặt gói, sử dụng lệnh apt install như các phần mềm khác. Ví dụ, nếu bạn cần php-cli, gõ:

sudo apt install php-cli

Nếu bạn muốn cài đặt nhiều module cùng lúc, liệt kê các module cách nhau bằng khoảng trắng sau lệnh:

sudo apt install package1 package2 ...

Tại thời điểm này, bộ LAMP của bạn đã được cài đặt và cấu hình. Trước khi làm thêm bất cứ điều gì khác, chúng tôi khuyến nghị bạn thiết lập một Virtual Host của Apache để chứa các chi tiết cấu hình của máy chủ.

Bước 4 – Tạo Virtual Host cho trang Web của bạn

Khi sử dụng máy chủ web Apache, bạn có thể tạo các virtual host (tương tự như server blocks trong Nginx) để gói gọn các chi tiết cấu hình và lưu trữ nhiều tên miền trên 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 có tên your_domain – bạn nên thay thế bằng tên miền của riêng bạn.

Lưu ý: Nếu bạn sử dụng DataOnline làm nhà cung cấp dịch vụ DNS, hãy tham khảo tài liệu sản phẩm của chúng tôi để biết hướng dẫn chi tiết về cách thiết lập tên miền mới và trỏ nó về máy chủ của bạn.

Apache trên Ubuntu có sẵn một virtual host được kích hoạt mặc định, được cấu hình để phục vụ các 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 đơn, nhưng nếu bạn lưu trữ nhiều trang, việc này có thể gây bất tiện. Thay vì chỉnh sửa /var/www/html, chúng ta sẽ tạo một cấu trúc thư mục trong /var/www cho trang your_domain, giữ lại /var/www/html như thư mục mặc định được phục vụ nếu yêu cầu của khách không khớp với trang nào khác.

Tạo thư mục cho your_domain:

sudo mkdir /var/www/your_domain

Tiếp theo, gán quyền sở hữu cho thư mục với biến môi trường $USER, đại diện cho người dùng 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 thư mục sites-available của Apache bằng trình soạn thảo dòng lệnh ưa thích (ở đây ta sử dụng nano):

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

File này sẽ được tạo ra dưới dạng file trống. Thêm vào nội dung cấu hình cơ bản sau, nhớ thay thế your_domain bằng tên miền của bạn:

/etc/apache2/sites-available/your_domain.conf
<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 file khi hoàn tất (nếu dùng nano, nhấn CTRL+X, sau đó nhập Y và nhấn ENTER).

Với cấu hình VirtualHost này, bạn đang chỉ định cho Apache phục vụ your_domain sử dụng thư mục /var/www/your_domain làm thư mục gốc (web root). Nếu bạn muốn thử nghiệm Apache mà không có tên miền, bạn có thể xóa hoặc chú thích các tùy chọn ServerNameServerAlias bằng cách thêm dấu thăng (#) vào đầu mỗi dòng.

Bây giờ, kích hoạt virtual host mới bằng cách sử dụng lệnh a2ensite:

sudo a2ensite your_domain

Bạn có thể muốn vô hiệu hóa 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 đè virtual host của bạn. Để vô hiệu hóa trang mặc định, gõ:

sudo a2dissite 000-default

Để đảm bảo file cấu hình không có lỗi cú pháp, chạy lệnh sau:

sudo apache2ctl configtest

Cuối cùng, tải lại Apache để áp dụng các thay đổi:

sudo systemctl reload apache2

Trang web mới của bạn bây giờ đã được kích hoạt, nhưng thư mục gốc /var/www/your_domain vẫn còn trống. Tạo một file index.html trong thư mục đó để kiểm tra xem virtual host hoạt động như mong đợi hay không:

nano /var/www/your_domain/index.html

Chèn nội dung sau vào file:

/var/www/your_domain/index.html
<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>

Lưu và đóng file, sau đó mở trình duyệt và truy cập tên miền hoặc địa chỉ IP của máy chủ:

http://server_domain_or_IP

Trang web của bạn sẽ hiển thị nội dung như đã được chỉnh sửa trong file.

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

Lưu ý về DirectoryIndex trên Apache

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

Nếu bạn muốn thay đổi hành vi này, bạn cần chỉnh sửa file /etc/apache2/mods-enabled/dir.conf và thay đổi thứ tự của file index.php trong chỉ thị DirectoryIndex. Ví dụ:

sudo nano /etc/apache2/mods-enabled/dir.conf

File sẽ trông như sau:

/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 file, tải lại Apache để các thay đổi có hiệu lực:

sudo systemctl reload apache2

Trong bước tiếp theo, chúng ta sẽ tạo một script PHP để kiểm tra rằng PHP đã được cài đặt và cấu hình chính xác trên máy chủ của bạn.

Bước 5 – Kiểm tra xử lý PHP trên máy chủ Web của bạn

Bây giờ, khi bạn đã có vị trí tùy chỉnh để lưu trữ các file và thư mục trang web, hãy tạo một script PHP để xác nhận rằng Apache có thể xử lý và thực thi các file PHP.

Tạo file mới có tên info.php trong thư mục gốc của trang web:

nano /var/www/your_domain/info.php

Lệnh này sẽ mở file trống. Thêm đoạn mã PHP hợp lệ sau vào file:

<?php
phpinfo();

Khi hoàn tất, lưu và đóng file.

Để kiểm tra script này, mở trình duyệt và truy cập tên miền hoặc địa chỉ IP của máy chủ, theo sau là tên file info.php:

http://server_domain_or_IP/info.php

Dưới đây là ví dụ về trang web PHP mặc định:

Cài Đặt LAMP

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

Nếu bạn thấy trang này, nghĩa là cài đặt PHP của bạn đang hoạt động như mong đợi.

Sau khi kiểm tra thông tin quan trọng về máy chủ PHP, tốt nhất là xóa file info.php vì nó chứa thông tin nhạy cảm về môi trường PHP và máy chủ Ubuntu của bạn. Sử dụng lệnh sau:

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

Bạn luôn có thể tạo lại file này nếu cần kiểm tra thông tin sau này.

Bước 6 – Kiểm tra kết nối cơ sở dữ liệu từ PHP (Tùy chọn) – Cài đặt LAMP

Nếu bạn muốn kiểm tra xem PHP có thể kết nối với MySQL và thực thi truy vấn cơ sở dữ liệu hay không, bạn có thể tạo bảng thử nghiệm với dữ liệu mẫu và truy vấn nội dung từ một script PHP. Trước tiên, bạn cần tạo cơ sở dữ liệu thử nghiệm và một người dùng MySQL mới được cấu hình đúng để truy cập.

Tạo cơ sở dữ liệu có tên example_database và người dùng example_user. Bạn có thể thay đổi các tên này.

Đầu tiên, kết nối giao diện MySQL bằng tài khoản root:

sudo mysql

Để tạo cơ sở dữ liệu mới, chạy lệnh sau trong giao diện MySQL:

CREATE DATABASE example_database;

Bây giờ, tạo người dùng mới và cấp cho họ đầy đủ quyền trên cơ sở dữ liệu bạn vừa tạo.

Lệnh sau tạo người dùng example_user xác thực bằng phương thức caching_sha2_password. Chúng ta đặt mật khẩu cho người dùng này là password, nhưng bạn nên thay thế bằng mật khẩu an toàn của riêng bạn:

CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

Lưu ý: Lệnh ALTER USER trước đó đặt tài khoản root MySQL xác thực bằng plugin caching_sha2_password. Theo tài liệu của MySQL, đây là plugin ưu tiên vì nó cung cấp mã hóa mật khẩu an toàn hơn so với mysql_native_password cũ. Tuy nhiên, một số phiên bản PHP không hoạt động ổn định với caching_sha2_password. Nếu bạn gặp lỗi khi đăng nhập vào phpMyAdmin, hãy chuyển root sang xác thực bằng mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Sau đó, cấp quyền cho người dùng trên cơ sở dữ liệu example_database:

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

Lệnh này sẽ cấp cho example_user toàn quyền trên cơ sở dữ liệu example_database, đồng thời ngăn họ tạo hoặc chỉnh sửa các cơ sở dữ liệu khác trên máy chủ.

Thoát khỏi giao diện MySQL:

exit

Kiểm tra quyền của người dùng mới bằng cách đăng nhập lại giao diện MySQL, lần này sử dụng thông tin của người dùng:

mysql -u example_user -p

Chú ý cờ -p sẽ yêu cầu bạn nhập mật khẩu đã đặt cho example_user. Sau khi đăng nhập, xác nhận quyền truy cập vào cơ sở dữ liệu bằng lệnh:

SHOW DATABASES;

Lệnh này sẽ trả về output như sau:

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

Tiếp theo, tạo bảng thử nghiệm có tên todo_list. Từ giao diện MySQL, chạy lệnh sau:

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

Chèn một vài dòng dữ liệu vào bảng thử nghiệm. Lặp lại lệnh sau vài lần với 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, chạy:

SELECT * FROM example_database.todo_list;

Output:

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 dữ liệu, thoát khỏi giao diện MySQL:

exit

Bây giờ, tạo script PHP để kết nối đến MySQL và truy vấn nội dung.

Tạo file PHP mới trong thư mục gốc của trang web bằng trình soạn thảo ưa thích:

nano /var/www/your_domain/todo_list.php

Script PHP dưới đây sẽ kết nối đến cơ sở dữ liệu MySQL và truy vấn nội dung bảng todo_list, hiển thị kết quả dưới dạng danh sách. Nếu có lỗi kết nối, script sẽ ném ra ngoại lệ.

Thêm nội dung sau vào file todo_list.php (nhớ thay thế example_userpassword bằng thông tin 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 file khi hoàn tất chỉnh sửa.

Bây giờ, bạn có thể truy cập trang này trên trình duyệt bằng cách vào tên miền hoặc địa chỉ IP của máy chủ, theo sau là /todo_list.php:

http://your_domain_or_IP/todo_list.php

Trang web sẽ hiển thị nội dung bạn đã chèn vào bảng thử nghiệm.

Điều này 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.

Kết luận

Bây giờ, bạn đã xây dựng 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, sử dụng Apache làm máy chủ web và MySQL làm hệ thống cơ sở dữ liệu.

Bước tiếp theo, bạn nên đảm bảo các kết nối đến máy chủ web được bảo mật bằng cách phục vụ qua HTTPS. Để làm được điều đó, bạn có thể sử dụng Let’s Encrypt trên Ubuntu 22.04 / 20.04 / 18.04 để bảo mật trang web của mình với chứng chỉ TLS/SSL miễn phí.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *