BÀI 3: QUẢN TRỊ WEB HOSTING VỚI CONTROL PANEL CHUYÊN NGHIỆP

3.1. Tổng quan về Web Hosting Control Panel

  • Khái niệm: Control Panel (Bảng điều khiển) là một phần mềm giao diện nền Web (Web-based GUI) được cài lên máy chủ. Nó giúp người quản trị thực hiện các tác vụ phức tạp (cài Web Server, tạo Database, phân quyền…) chỉ bằng vài cú click chuột thay vì gõ hàng chục dòng lệnh Linux.

  • Phân loại phổ biến:

    • Trả phí cao (Chuẩn công nghiệp): cPanel (đứng số 1 thế giới), DirectAdmin (nhẹ, rẻ hơn), Plesk (hỗ trợ cả Windows/Linux).

    • Miễn phí / Mã nguồn mở: aaPanel, CyberPanel, FastPanel. (rất được ưa chuộng cho cá nhân và doanh nghiệp nhỏ dùng VPS).

  • Phân cấp quản trị (3 cấp độ):

    1. Admin (Root): Quản lý toàn bộ máy chủ, cài đặt phần mềm lõi.

    2. Reseller (Đại lý): Mua không gian lớn từ Admin, chia nhỏ thành các gói (Packages) bán cho User.

    3. User (Người dùng cuối): Chỉ quản trị website, thư mục và database của riêng mình.

3.2. THỰC HÀNH 1: Cài đặt Control Panel (Thao tác trên MÁY ẢO)

Tình huống: Bắt đầu với một máy ảo Ubuntu hoàn toàn mới (chưa cài Nginx hay MariaDB). Học sinh sẽ cài đặt aaPanel để tự động hóa toàn bộ hệ thống.

Bước 1: Lấy IP và chuẩn bị máy ảo (Linux)

    1. Khởi động máy ảo Ubuntu. Đăng nhập bằng tài khoản root.

    2. Dùng lệnh ip a để lấy địa chỉ IP (Ví dụ: 192.168.100.30).

Bước 2: Chạy lệnh cài đặt tự động (One-click Script)

    1. Gõ dòng lệnh sau (hệ thống sẽ tự động tải file cài đặt về và chạy):

      Bash
       
      wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && sudo bash install.sh aapanel
      
    2. Khi hệ thống hỏi Do you want to install aaPanel to the /www directory now? (y/n), gõ y và nhấn Enter.

    3. Quá trình cài đặt sẽ mất khoảng 5-10 phút. Không tắt máy.

Bước 3: Lưu thông tin quản trị

    1. Sau khi cài xong, màn hình Terminal sẽ hiện ra bảng thông tin cực kỳ quan trọng. Học sinh phải ghi chép lại các thông số này:

      • aaPanel Internet Address: http://192.168.100.30:7800/xxxx

      • username: tên_đăng_nhập_mặc_định

      • password: mật_khẩu_mặc_định

Bước 4: Mở Port 7800 trên Firewall (Nếu cần)

    • Gõ lệnh: sudo ufw allow 7800/tcpsudo ufw reload.

3.3. THỰC HÀNH 2: Thiết lập Máy chủ (Thao tác trên MÁY THẬT)

Từ bước này trở đi, hãy thu nhỏ máy ảo lại, làm việc hoàn toàn trên giao diện Web của Máy thật (Windows).

  • Bước 1: Đăng nhập Bảng điều khiển (Control Panel)

    1. Trên Máy thật, mở Google Chrome.

    2. Gõ đường dẫn aaPanel Internet Address đã ghi chép ở trên vào thanh địa chỉ.

    3. Đăng nhập bằng username và password đã được cấp.

  • Bước 2: Cài đặt môi trường LNMP qua giao diện

    1. Ngay lần đăng nhập đầu tiên, aaPanel sẽ hiện bảng yêu cầu cài đặt App.

    2. Khung bên trái (LNMP – Linux, Nginx, MySQL, PHP), chọn:

      • Nginx (1.21)

      • MySQL (10.4)

      • PHP (8.1)

      • phpMyAdmin (5.0)

    3. Bấm One-click Install. Hệ thống sẽ tự động compile và cài đặt (mất khoảng 10-15 phút). Học sinh có thể theo dõi tiến trình (Message Box) ở góc trái màn hình.

3.4. THỰC HÀNH 3: Đóng vai Khách hàng tạo Website và Database

Tình huống: Khách hàng mua hosting, muốn tự thêm tên miền banhang.local, tự tạo Database và upload source code bằng File Manager.

Bước 1: Thêm Tên miền (Add Website)

    1. Cột menu bên trái, chọn Website -> Bấm nút Add site màu xanh.

    2. Domain name:banhang.local

    3. Description: Web ban hang

    4. Database: Sổ xuống chọn MySQL. Hệ thống sẽ tự động sinh ra Tên Database và Mật khẩu (Hãy copy mật khẩu này ra Notepad).

    5. PHP Version: Chọn PHP-81.

    6. Bấm Submit. (Vậy là web đã được tạo kèm theo Database, cực kỳ nhanh so với việc gõ lệnh ở Bài 2!).

Bước 2: Sử dụng File Manager (Tương đương FTP)

    1. Vẫn ở mục Website, nhìn vào dòng banhang.local, bấm vào đường dẫn ở cột Document Root (Ví dụ: /www/wwwroot/banhang.local).

    2. Giao diện quản lý file hiện ra. Xóa các file mặc định (như index.html, 404.html).

    3. Bấm nút Upload. Chọn file nén .zip của mã nguồn WordPress tải từ máy thật lên.

    4. Click chuột phải vào file .zip vừa tải lên -> Chọn Unzip (Giải nén).

Bước 3: Quản lý Database với phpMyAdmin

    1. Ở menu bên trái, chọn Databases.

    2. Bạn sẽ thấy database của web banhang.local nằm ở đây. Bấm vào nút phpMyAdmin.

    3. Một tab mới hiện ra, đây là giao diện đồ họa cho phép khách hàng toàn quyền quản trị, thêm/sửa/xóa các bảng (Tables) trong MySQL một cách trực quan.

Bước 4: Trải nghiệm thành quả

    1. Mở Notepad trên Máy thật bằng quyền Admin, vào sửa file hosts (C:\Windows\System32\drivers\etc\hosts).

    2. Thêm dòng: 192.168.100.30 banhang.local (IP máy ảo).

    3. Mở Chrome gõ http://banhang.local và tiến hành cài đặt WordPress với Database đã lấy ở Bước 1.

Bài tập thực hành tổng hợp

Đây là Module dự án giả lập doanh nghiệp. Lớp chia thành các nhóm 2 người.

Dự án: “Công ty cung cấp dịch vụ Lưu trữ Web”

  1. Yêu cầu 1 (Hạ tầng): Nhóm tự cài đặt mới một máy ảo Ubuntu và cài đặt thành công Control Panel aaPanel (hoặc CyberPanel).

  2. Yêu cầu 2 (Dịch vụ):

    • Sử dụng chức năng Cron (Scheduled Tasks) trong Control Panel để viết một lệnh tự động giải phóng RAM (Free Memory) vào lúc 2:00 sáng mỗi ngày.

  3. Yêu cầu 3 (Kinh doanh): Tạo 3 Website độc lập trên cùng 1 máy chủ thông qua Panel:

    • congty.local (Chạy code HTML tĩnh, đóng vai trò trang chủ giới thiệu dịch vụ).

    • khachhang1.local (Cài WordPress, đóng vai trò khách mua hosting làm blog).

    • khachhang2.local (Cài một mã nguồn mở khác như OpenCart hoặc Joomla).

  4. Yêu cầu 4 (Báo cáo): Sửa file hosts trên máy thật để truy cập được cả 3 tên miền trên. Chụp ảnh màn hình quản trị của aaPanel và giao diện 3 website lưu vào file Word báo cáo.

Câu hỏi ôn tập

  1. Hỏi: Trình bày 3 lợi ích lớn nhất của việc sử dụng Control Panel so với việc quản trị máy chủ bằng dòng lệnh (CLI)?

    • Gợi ý đáp án: Dễ sử dụng (giao diện đồ họa), tiết kiệm thời gian (tự động hóa tạo Web, DB, phân quyền), dễ dàng phân cấp quản lý (Admin, Reseller, User) để bán dịch vụ (Hosting).

  2. Hỏi: Trong môi trường Control Panel, công cụ quản lý File Manager trên nền web có thể thay thế hoàn toàn cho giao thức truyền tải file nào đã học ở Bài 2?

    • Gợi ý đáp án: Thay thế cho FTP/SFTP và các phần mềm Client như FileZilla.

  3. Hỏi: Công cụ phpMyAdmin được tích hợp trong hầu hết các Control Panel dùng để làm gì?

    • Gợi ý đáp án: Dùng để quản trị cơ sở dữ liệu MySQL/MariaDB bằng giao diện đồ họa trực quan nền web (thay vì gõ lệnh SQL đen trắng).

  4. Hỏi: Tại sao sau khi tạo Website trên Control Panel xong, chúng ta vẫn không thể truy cập ngay bằng tên miền trên trình duyệt (trong môi trường Lab phòng máy)?

    • Gợi ý đáp án: Vì tên miền đó là giả định, chưa được mua và khai báo trên hệ thống máy chủ phân giải tên miền (DNS) toàn cầu. Phải can thiệp vào file hosts trên máy khách để “ép” máy tính hiểu tên miền đó trỏ về IP nào.

Hướng dẫn đưa trang Quản lý xe máy lên hosting

BƯỚC 1: ĐĂNG KÝ TÀI KHOẢN INFINITYFREE

1.1 Truy cập website

1.2 Đăng ký tài khoản

text
Email: [email của bạn]
Password: [mật khẩu mạnh]
Confirm Password: [nhập lại mật khẩu]
  • Đồng ý với điều khoản sử dụng

  • Nhấn “Sign Up”

  • Kiểm tra email để xác nhận tài khoản

BƯỚC 2: TẠO WEBSITE TRÊN INFINITYFREE

2.1 Đăng nhập vào Control Panel

2.2 Tạo website mới

  • Trong dashboard, nhấn “Create Website” hoặc “Add New Site”

2.3 Thiết lập thông tin website

text
Domain Name: quanly_xemay.epizy.com
Site Name: Quan ly xe may (tùy chọn)
  • Chọn “Use my own domain” (nếu có) hoặc “Get a free subdomain”

  • Chọn epizy.com từ danh sách

  • Nhập tên miền: quanly_xemay

  • Kết quả: quanly_xemay.epizy.com

2.4 Thiết lập PHP và MySQL

  • Chọn “PHP” làm công nghệ

  • Chọn phiên bản PHP: PHP 7.4 hoặc PHP 8.0 (khuyến nghị 7.4)

  • Chọn “MySQL Database” để tạo cơ sở dữ liệu

2.5 Hoàn tất tạo website

  • Nhấn “Create” và đợi hệ thống xử lý (khoảng 1-2 phút)

  • Ghi lại thông tin quan trọng:

    text
    FTP Username: [tên_đăng_nhập]
    FTP Host: ftp.epizy.com
    FTP Port: 21

BƯỚC 3: TẠO CƠ SỞ DỮ LIỆU MYSQL

3.1 Truy cập MySQL Database

3.2 Tạo cơ sở dữ liệu mới

text
Database Name: [tự động tạo, thường là id_username_databasename]
Username: [tự động tạo]
Password: [đặt mật khẩu mạnh]
  • Ghi lại thông tin:

    text
    Database Host: sql123.epizy.com (số sẽ thay đổi)
    Database Name: epiz_12345678_quanly_xemay
    Database Username: epiz_12345678
    Database Password: [mật khẩu bạn đặt]

3.3 Nhập dữ liệu vào phpMyAdmin

  • Trong phần MySQL Database, nhấn “phpMyAdmin” để truy cập

  • Chọn database vừa tạo

  • Nhấn “Import” (Nhập)

  • Chọn file SQL đã tạo trước đó

  • Nhấn “Go” để thực thi

BƯỚC 4: CHUẨN BỊ FILE PHP ĐỂ UPLOAD

4.1 Sửa file cấu hình kết nối

Trong file config/db_connect.php, cập nhật thông tin kết nối:

php
<?php
// File: config/db_connect.php
// Cập nhật với thông tin của InfinityFree

$servername = "sql123.epizy.com"; // Thay bằng host của bạn
$username = "epiz_12345678";      // Thay bằng username của bạn
$password = "your_password";      // Thay bằng mật khẩu của bạn
$dbname = "epiz_12345678_quanly_xemay"; // Thay bằng tên database của bạn

// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $dbname);

// Kiểm tra kết nối
if ($conn->connect_error) {
    die("Kết nối thất bại: " . $conn->connect_error);
}

// Set charset UTF-8
$conn->set_charset("utf8mb4");

// Các hàm xử lý dữ liệu (giữ nguyên như cũ)
// ... (các hàm đã viết trước đó)

?>

4.2 Kiểm tra và sửa lỗi tiềm ẩn

Lưu ý quan trọng cho InfinityFree:

  • Không sử dụng session_start() ở đầu file nếu đã có output

  • Đường dẫn file phải chính xác

  • Các file PHP phải có encoding UTF-8 không BOM

4.3 Tạo file .htaccess để bảo mật

apache
# File: .htaccess
# Đặt trong thư mục gốc

# Bảo vệ thư mục config
<Files "db_connect.php">
    Order Allow,Deny
    Deny from all
</Files>

# Tắt hiển thị lỗi trên production
php_flag display_errors off
php_value error_reporting 0

# Bảo vệ khỏi truy cập trực tiếp file cấu hình
<FilesMatch "\.(sql|log|ini)$">
    Order allow,deny
    Deny from all
</FilesMatch>

# Thiết lập trang index mặc định
DirectoryIndex index.php

# Gzip compression
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/css text/javascript application/javascript application/json
</IfModule>

BƯỚC 5: UPLOAD FILE LÊN HOSTING

5.1 Cài đặt FileZilla (hoặc FTP Client)

Tải FileZillahttps://filezilla-project.org/download.php

Cấu hình kết nối:

text
Host: ftp.epizy.com
Username: [FTP Username từ bước 2.5]
Password: [mật khẩu đăng nhập InfinityFree]
Port: 21

5.2 Kết nối và upload file

  1. Mở FileZilla, nhập thông tin trên và nhấn “Quickconnect”

  2. Thư mục đíchhtdocs (hoặc public_html)

  3. Upload các file và thư mục:

    • Kéo thả toàn bộ thư mục dự án vào thư mục htdocs

    • Đảm bảo cấu trúc thư mục đúng:

text
htdocs/
├── index.php
├── xe.php
├── add_xe.php
├── edit_xe.php
├── delete_xe.php
├── detail_xe.php
├── chu_so_huu.php
├── add_chu_so_huu.php
├── edit_chu_so_huu.php
├── delete_chu_so_huu.php
├── baoduong.php
├── add_baoduong.php
├── vipham.php
├── add_vipham.php
├── baohiem.php
├── add_baohiem.php
├── chuyennhuong.php
├── add_chuyennhuong.php
├── logout.php
├── .htaccess
├── config/
│   └── db_connect.php
├── includes/
│   ├── header.php
│   ├── menu.php
│   └── footer.php
└── css/
    └── style.css

BƯỚC 6: KIỂM TRA VÀ XỬ LÝ LỖI

6.1 Kiểm tra kết nối cơ sở dữ liệu

Tạo file test_connection.php để kiểm tra:

php
<?php
// File: test_connection.php
require_once 'config/db_connect.php';

echo "<h2>Kiểm tra kết nối cơ sở dữ liệu</h2>";
echo "Kết nối thành công!<br>";
echo "Server: " . $conn->server_info . "<br>";

// Kiểm tra truy vấn
$result = $conn->query("SHOW TABLES");
echo "<h3>Danh sách bảng:</h3>";
while($row = $result->fetch_array()) {
    echo "- " . $row[0] . "<br>";
}

// Xóa file sau khi kiểm tra (quan trọng vì bảo mật)
// unlink(__FILE__);
?>

Sau khi kiểm tra, xóa file này ngay để bảo mật.

6.2 Sửa lỗi thường gặp

Lỗi 1: “Access denied for user”

  • Kiểm tra lại username và password trong db_connect.php

  • Đảm bảo database host chính xác (thường là sqlXXX.epizy.com)

Lỗi 2: “No such file or directory”

  • Kiểm tra đường dẫn include và require

  • Trên hosting, sử dụng đường dẫn tương đối: require_once 'config/db_connect.php';

Lỗi 3: Lỗi encoding UTF-8

  • Đảm bảo file được lưu với encoding UTF-8 không BOM

  • Trong Notepad++, vào Encoding > Convert to UTF-8 without BOM