Cách Cài Đặt Bộ Phần Mềm LAMP (Linux, Apache, MySQL, PHP) Trên Ubuntu

Cách Cài Đặt Bộ Phần Mềm LAMP (Linux, Apache, MySQL, PHP) Trên Ubuntu

Bộ LAMP là một tập hợp phần mềm mã nguồn mở thường được cài đặt cùng nhau nhằm cho phép một server có thể phục vụ các trang web động và các ứng dụng web viết bằng PHP. Tên gọi “LAMP” là chữ viết tắt của Linux – hệ điều hành, Apache – máy chủ web, MySQL – hệ quản trị cơ sở dữ liệu và PHP – ngôn ngữ lập trình kịch bản xử lý nội dung động.

Nếu bạn muốn xây dựng website chuyên nghiệp với LAMP stack trên Ubuntu, việc chọn VPS giá rẻ là giải pháp tiết kiệm chi phí. Khám phá danh mục VPS của chúng tôi để tìm gói phù hợp, đảm bảo hiệu suất cao, giúp bạn triển khai máy chủ web nhanh chóng và ổn định!

Trong hướng dẫn này, bạn sẽ thiết lập bộ LAMP trên một server Ubuntu 22.04. Các bước này cũng áp dụng cho Ubuntu từ phiên bản 18.04 trở lên.

Yêu Cầu Tiên Quyết

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

Để hoàn thành hướng dẫn này, bạn cần có một server đang chạy Ubuntu, kèm theo một tài khoản không phải root có quyền sudo và một Firewall (tường lửa) đang hoạt động. Để biết cách thiết lập những yêu cầu này, hãy chọn bản phân phối của bạn từ danh sách và làm theo Hướng dẫn Thiết lập Server Ban đầu.

Bạn cũng có thể triển khai cơ sở dữ liệu chỉ với một cú click thông qua DataOnline Managed Databases – để DataOnline lo phần mở rộng, bảo trì và nâng cấp cho 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. Tạo Virtual Host cho Website
  5. Kiểm tra xử lý PHP trên máy chủ web
  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 phong phú, cộng đồng người dùng năng động và đã được sử dụng rộng rãi suốt thời gian phát triển của web, khiến nó trở thành lựa chọn tuyệt vời cho việc lưu trữ website.

Bắt đầu bằng cách cập nhật bộ nhớ đệm của trình 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 của người dùng để xác nhận bạn có quyền quản lý các gói hệ thống với apt:

sudo apt update

Sau đó, cài đặt Apache bằng lệnh:

sudo apt install apache2

Bạn sẽ được yêu cầu xác nhận quá trình cài đặt Apache. Nhấn Y, sau đó nhấn ENTER để tiếp tục.

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

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

Ý nghĩa của các hồ sơ này như sau:

Apache: Mở chỉ cổng 80 (lưu lượng web thông thường, không mã hóa).
Apache Full: Mở cả cổng 80 (HTTP) và cổng 443 (lưu lượng mã hóa TLS/SSL).
Apache Secure: Mở chỉ cổng 443 (lưu lượng TLS/SSL).

Hiện tại, bạn chỉ nên cho phép 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 cho HTTPS.

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

sudo ufw allow in "Apache"

Xác minh thay đổi với lệnh:

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 đã đượ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 server trên trình duyệt (lưu ý xem phần “Cách tìm địa chỉ IP công cộng của Server” bên dưới nếu bạn chưa có thông tin này):

http://your_server_ip

Trang mặc định của Apache trên Ubuntu sẽ xuất hiện, cho biết server của bạn đã được cài đặt và truy cập qua Firewall thành công.

Ubuntu 22.04 Apache default web page with an overview of your default configuration settings

Nếu bạn có thể xem trang này, máy chủ web của bạn đã được cài đặt chính xác và có thể truy cập qua Firewall.

Cách Tìm Địa Chỉ IP Công Cộng của Server

Nếu bạn không biết địa chỉ IP công cộng của server, có nhiều cách để tìm ra. Thông thường, đây là địa chỉ bạn dùng để kết nối qua SSH.

Một cách là dùng công cụ iproute2 để lấy địa chỉ IP bằng cách gõ:

curl http://icanhazip.com

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

Một cách khác là sử dụng tiện ích curl để liên hệ với bên ngoài và trả về địa chỉ IP của server:

curl http://icanhazip.com

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

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

Sau khi máy chủ web đã hoạt động, bạn cần cài đặt hệ quản trị cơ sở dữ liệu để lưu trữ và quản lý dữ liệu cho website. MySQL là một hệ quản trị cơ sở dữ liệu phổ biến trong môi trường PHP.

Sử dụng apt để tải và cài đặt MySQL:

sudo apt install mysql-server

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

Sau khi cài đặt hoàn tất, khuyến nghị chạy script bảo mật có sẵn cùng 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 lại quyền truy cập vào hệ thống cơ sở dữ liệu.

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

Trước tháng 7 năm 2022, script sẽ thất bại một cách im lặng sau khi đặt mật khẩu và tiếp tục các bước. Tuy nhiên, hiện nay script sẽ trả về lỗi như 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ẽ khiến script rơi 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.

Do script mysql_secure_installation thực hiện nhiều thao tác hữu ích để bảo mật cài đặt MySQL, nên bạn vẫn nên chạy nó trước khi sử dụng MySQL. Tuy nhiên, để tránh vòng lặp đệ quy, bạn cần điều chỉnh cách xác thực cho tài khoản root MySQL trước.

Đầu tiên, mở MySQL prompt:

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 sử dụng mật khẩu. Ví dụ dưới đây thay đổi phương thức xác thực sang mysql_native_password:

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

Chú ý: Hãy thay thế password bằng mật khẩu an toàn của bạn.

Sau khi thay đổi xong, thoát MySQL prompt:

exit

Bây giờ, bạn có thể chạy script mysql_secure_installation mà không gặp lỗi:

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 kích hoạt tính năng này phụ thuộc vào quyết định của bạn. Nếu bật, các mật khẩu không đạt tiêu chí sẽ bị MySQL từ chối với lỗi. Bạn có thể để tính năng này tắt, nhưng hãy luôn sử dụng mật khẩu mạnh, độc nhất cho các thông tin đăng nhập cơ sở dữ liệu.

Trả lời Y nếu đồng ý bật tính năng hoặc nhấn phím khác để bỏ qua.

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ức độ kiểm tra mật khẩu. Lưu ý rằng nếu chọn mức mạnh nhất (2), bạn sẽ gặp lỗi nếu mật khẩu không chứa số, chữ hoa, chữ thường và ký tự đặc biệt.

Có 3 mức chính sách kiểm tra mật khẩu:

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

Sau đó, server sẽ yêu cầu bạn chọn và xác nhận mật khẩu cho tài khoản root MySQL (không nhầm lẫn với tài khoản root của hệ thống). Mặc dù phương thức xác thực mặc định cho root không sử dụng mật khẩu, nhưng bạn nên đặt mật khẩu mạnh để tăng cường bảo mật.

Nếu bạn đã bật tính năng kiểm tra mật khẩu, server sẽ hiển thị độ mạnh của mật khẩu và hỏi bạn có muốn tiếp tục với mật khẩu đó hay không. Nếu hài lòng, hãy nhập Y.

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 mỗi lần. Quá trình này sẽ xóa bỏ một số người dùng ẩn danh, cơ sở dữ liệu test, vô hiệu hóa đăng nhập root từ xa, và áp dụng các quy tắc mới cho MySQL ngay lập tức.

Khi hoàn tất, hãy kiểm tra xem bạn có thể đăng nhập vào MySQL console không:

sudo mysq

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

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 MySQL console, hãy 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ài khoản root, mặc dù bạn đã định nghĩa 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 người dùng quản trị MySQL là unix_socket thay vì password. Dù điều này có thể khiến một số người lo ngại về bảo mật, nhưng nó lại làm cho máy chủ cơ sở dữ liệu an toàn hơn vì chỉ những người dùng hệ thống có quyền sudo mới được phép đăng nhập với tư cách là root, kết nối từ console hoặc qua một ứng dụng chạy với cùng quyền. Về mặt 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ị cơ sở dữ liệu root để kết nối từ ứng dụng PHP của mình. Việc đặt mật khẩu cho tài khoản root của MySQL hoạt động như một biện pháp phòng ngừa, đề phòng trường hợp phương thức xác thực mặc định bị thay đổi từ unix_socket sang password.

Để tăng cường bảo mật, tốt nhất là nên thiết lập 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 server.

Chú ý: Một số phiên bản PHP cũ không hỗ trợ caching_sha2_password – phương thức xác thực mặc định của MySQL 8. Vì lý do này, khi tạo người dùng cơ sở dữ liệu cho ứng dụng PHP trên MySQL 8, bạn có thể cần cấu hình ứng dụng sử dụng plugin mysql_native_password. Hướng dẫn này sẽ trình bày cách làm ở bước 6.

Server MySQL của bạn đã đượ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

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 chịu trách nhiệm xử lý mã và 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 PHP cho phép giao tiếp với các cơ sở dữ liệu dựa trên MySQL. Bạn cũng cần libapache2-mod-php để Apache xử lý các tập tin PHP. Các gói PHP cốt lõi sẽ được cài đặt tự động 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 xong, kiểm tra phiên bản PHP với:

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 thay đổi cách Apache phục vụ tập tin khi yêu cầu một thư mục. Hiện tại, nếu người dùng yêu cầu một thư mục, Apache sẽ tìm kiếm tập tin có tên index.html đầu tiên. Chúng ta muốn ưu tiên tập tin PHP, để Apache tìm kiếm index.php trước.

Nếu không thay đổi, tập tin index.html trong thư mục gốc sẽ luôn được ưu tiên so với index.php.

Để thay đổi, mở tập tin cấu hình dir.conf bằng trình soạn thảo (ví dụ sử dụng nano):

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

Tập tin 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>

Hãy di chuyển tập tin index.php (được đánh dấu ở trên) lên vị trí đầu tiên sau chỉ thị DirectoryIndex, 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 chỉnh sửa, lưu và đóng tập tin (nhấn CTRL+X, sau đó YENTER).

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 dịch vụ apache2:

sudo systemctl status apache2
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 Extension của 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 tùy chọn module và thư viện PHP có sẵn, hãy chuyển kết quả của lệnh apt search qua less, một công cụ phân trang cho phép bạn cuộn qua kết quả của các lệnh khác.

apt search php- | less

Dùng các phím mũi tên để cuộn lên xuống, nhấn Q để thoát.

Kết quả trả về là danh sách các thành phần tùy chọn kèm theo mô tả ngắn gọn cho mỗi 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ề một module cụ thể, bạn có thể xem mô tả chi tiết bằng lệnh:

apt show package_name

Ví dụ, để xem thông tin về module php-cli:

apt show php-cli

Nếu sau khi nghiên cứu bạn quyết định cài đặt một gói, hãy dùng lệnh apt install như trước. Ví dụ, để cài php-cli:

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 sau khi tìm hiểu, bạn quyết định muốn cài đặt một gói, bạn có thể thực hiện điều đó bằng cách sử dụng lệnh apt install như những phần mềm khác.

Nếu bạn cho rằng php-cli là một thứ cần thiết, bạn có thể gõ:

sudo apt install php-cli

Nếu bạn muốn cài đặt nhiều hơn một module, bạn có thể liệt kê từng module, cách nhau bởi một khoảng trắng, ngay sau lệnh apt install, ví dụ:

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 bất cứ điều gì khác, chúng tôi khuyến nghị bạn thiết lập một Apache virtual host để lưu trữ các chi tiết cấu hình của server.

Hiện tại, bộ LAMP của bạn đã hoạt động đầy đủ, nhưng trước khi thử nghiệm cấu hình bằng một script PHP, tốt nhất bạn nên thiết lập một Apache Virtual Host chính xác để chứa các tập tin và thư mục của website.

Bước 4 — Tạo Virtual Host cho Website của Bạn

Khi sử dụng Apache, bạn có thể tạo các Virtual Host (tương tự như server blocks trong Nginx) để đóng gói các chi tiết cấu hình và phục vụ nhiều tên miền trên cùng một server.

Trong hướng dẫn này, chúng ta sẽ thiết lập một tên miền có tên là your_domain, tuy nhiên bạn nên thay thế bằng tên miền của riêng bạn.

Lưu ý: Nếu bạn đang sử dụng DataOnline làm nhà cung cấp 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ề server của bạn.

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

Tạo thư mục cho your_domain:

sudo mkdir /var/www/your_domain

Sau đó, gán quyền sở hữu cho thư mục này cho người dùng hiện tại (sử dụng biến môi trường $USER):

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

Mở một tập tin cấu hình mới cho Virtual Host trong thư mục sites-available của Apache bằng trình soạn thảo ưa thích (ở đây dùng nano):

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

Thêm nội dung cấu hình cơ bản sau (hãy 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 tập tin (với nano, nhấn CTRL+X, sau đó YENTER).

Cấu hình Virtual Host này báo cho Apache rằng khi nhận yêu cầu cho your_domain, nó sẽ sử dụng thư mục /var/www/your_domain làm gốc website.

Nếu bạn muốn thử Apache mà không sử dụng tên miền, bạn có thể xóa hoặc chú thích các dòng ServerNameServerAlias bằng cách thêm dấu # ở đầu mỗi dòng.

Kích hoạt Virtual Host mới bằng lệnh:

sudo a2ensite your_domain

Nếu bạn không sử dụng tên miền tùy chỉnh, bạn có thể vô hiệu hóa website mặc định của Apache vì cấu hình mặc định có thể ghi đè lên Virtual Host của bạn. Để vô hiệu hóa website mặc định:

sudo a2dissite 000-default

Kiểm tra xem tập tin cấu hình có lỗi cú pháp không bằng lệnh:

sudo apache2ctl configtest

Cuối cùng, reload Apache để áp dụng các thay đổi:

sudo systemctl reload apache2

Website mới của bạn đã được kích hoạt, tuy nhiên thư mục gốc /var/www/your_domain vẫn còn trống. Tạo một tập tin index.html trong thư mục đó để kiểm tra Virtual Host:

nano /var/www/your_domain/index.html

Thêm nội dung sau vào tập tin:

/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 tập tin, sau đó truy cập tên miền hoặc địa chỉ IP của server trong trình duyệt:

http://server_domain_or_IP

Trang web của bạn nên phản ánh nội dung có trong tập tin bạn vừa chỉnh sửa:

Apache virtual host test landing page that reveals your HTML code to the user

Bạn có thể giữ nguyên tập tin này như một trang landing 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 tin index.php để thay thế. Khi đã làm như vậy, hãy nhớ xóa hoặc đổi tên tập tin index.html trong thư mục gốc, vì theo mặc định nó sẽ được ưu tiên hơn tập tin index.php.

Ghi Chú Về DirectoryIndex trên Apache

Với cài đặt DirectoryIndex mặc định của Apache, tập tin index.html sẽ luôn ưu tiên hơn index.php. Điều này hữu ích khi tạo trang bảo trì tạm thời trong các ứng dụng PHP: bạn tạo một tập tin index.html chứa thông báo cho khách truy cập, và do nó được ưu tiên, trang này sẽ trở thành trang landing. Sau khi bảo trì xong, đổi tên hoặc xóa index.html để trang ứng dụng trở lại.

Nếu bạn muốn thay đổi hành vi này, hãy chỉnh sửa tập tin /etc/apache2/mods-enabled/dir.conf và thay đổi thứ tự xuất hiện của index.php trong chỉ thị DirectoryIndex:

sudo nano /etc/apache2/mods-enabled/dir.conf
/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 tin, bạn cần reload 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 xem PHP đã được cài đặt và cấu hình đúng trên server của bạn hay chưa.

Bước 5 — Kiểm tra Xử Lý PHP Trên Máy Chủ Web

Bây giờ, bạn đã có một vị trí riêng để lưu trữ các tập tin website, hãy tạo một script PHP để xác nhận rằng Apache có thể xử lý các tập tin PHP.

Tạo tập tin mới có tên info.php trong thư mục gốc website của bạn:

nano /var/www/your_domain/info.php

Thêm nội dung sau (đây là mã PHP hợp lệ):

<?php
phpinfo();

Khi bạn hoàn tất, hãy lưu lại và đóng tập tin.

Để kiểm tra script này, truy cập tên miền hoặc địa chỉ IP của server kèm theo /info.php, ví dụ:

http://server_domain_or_IP/info.php

Nếu mọi thứ đúng, bạn sẽ thấy trang PHP hiển thị thông tin chi tiết về server từ góc nhìn của PHP – hữu ích để kiểm tra và debug.

Ubuntu 22.04 PHP web page revealing pertinent information about the current PHP version and settings

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

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

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

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

Bạn có thể tạo lại nếu cần truy cập 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)

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 hay không, bạn có thể tạo một bảng test với dữ liệu thử và truy vấn dữ liệu đó từ script PHP.

Trước tiên, tạo một cơ sở dữ liệu và một người dùng MySQL mới có quyền truy cập vào cơ sở dữ liệu đó.

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

Kết nối vào MySQL console bằng tài khoản root:

sudo mysql

Tạo cơ sở dữ liệu:

CREATE DATABASE example_database;

Tiếp theo, tạo người dùng mới và cấp quyền đầy đủ trên cơ sở dữ liệu vừa tạo. Lệnh dưới đây tạo người dùng example_user với phương thức xác thực mặc định (ví dụ, caching_sha2_password) và đặt mật khẩu là password (hãy thay bằng mật khẩu an toàn của bạn):

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

Ghi chú: Lệnh ALTER USER sau đây thiết lập tài khoản root MySQL xác thực với plugin mysql_native_password. Theo tài liệu chính thức của MySQL, caching_sha2_password là plugin xác thực ưu tiên, nhưng một số phiên bản PHP có thể không hoạt động ổn định với nó.

Nếu gặp lỗi khi đăng nhập phpMyAdmin sau này, bạn có thể đặt lại phương thức xác thực cho root:

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

 

Cấp quyền cho người dùng example_user trên cơ sở dữ liệu example_databas:

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

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

Bây giờ, hãy thoát khỏi MySQL shell bằng cách gõ:

exit

Kiểm tra xem người dùng mới có quyền truy cập hay không bằng cách đăng nhập vào MySQL console với người dùng đó:

mysql -u example_user -p

Nhớ rằng tham số -p sẽ nhắc bạn nhập mật khẩu của example_user. Sau khi đăng nhập, kiểm tra các cơ sở dữ liệu với:

SHOW DATABASES;

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

Tạo bảng test tên là todo_list trong cơ sở dữ liệu example_database:

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

Chèn vài dòng dữ liệu vào bảng, ví dụ:

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

Để xác nhận dữ liệu đã được lưu, chạy:


Thoát MySQL console:SELECT * FROM example_database.todo_list;
Dưới đây là kết quả đầu ra:
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 rằng dữ liệu trong bảng kiểm tra của bạn là hợp lệ, hãy thoát khỏi MySQL console:

exit

Bây giờ, tạo script PHP để kết nối với MySQL và truy vấn dữ liệu. Tạo tập tin mới trong thư mục gốc website:

nano /var/www/your_domain/todo_list.php

Script PHP sau đây 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ẽ ném ra một ngoại lệ.

Hãy thêm nội dung này vào tập tin todo_list.php của bạn, nhớ thay thế example_user và password bằng thông tin của riêng 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 tin.

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

http://your_domain_or_IP/todo_list.php

Trang web sẽ hiển thị nội dung dữ liệu từ bảng test cho khách truy cập.

Example PHP todo list web page in the browser

Điều này chứng tỏ môi trường PHP của bạn đã sẵn sàng để kết nối và tương tác với MySQL.

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 để phục vụ các website 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 kết nối đến máy chủ web được bảo mật bằng cách chuyển qua HTTPS. Để thực hiện điều đó, bạn có thể sử dụng Let’s Encrypt trên Ubuntu 22.04 / 20.04 / 18.04 để bảo vệ trang web của mình với chứng chỉ TLS/SSL miễn phí.

Sau khi cài đặt Apache và MySQL, bạn cần một môi trường mạnh mẽ để chạy LAMP stack. Thuê VPS giúp bạn sở hữu máy chủ cấu hình cao, dễ dàng quản lý. Xem ngay danh mục thuê VPS của chúng tôi để chọn gói phù hợp, hỗ trợ website của bạn vận hành trơn tru!

Để 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 *