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.
Mục lục nội dung
ToggleYê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
- Cài đặt Apache & Cập nhật Firewall
- Cài đặt Cơ Sở Dữ Liệu MySQL
- Cài đặt PHP
- Tạo Virtual Host cho Website
- Kiểm tra xử lý PHP trên máy chủ web
- 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.
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 mysqlSau đó, 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:
exitBâ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 pluginmysql_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
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 đó Y
và ENTER
).
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 instal
l 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 đó Y
và ENTER
).
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 ServerName
và ServerAlias
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:
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.
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;
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.
Đ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!