Giới thiệu về LAMP Stack
LAMP Stack là nhóm phần mềm mã nguồn mở thường được cài đặt cùng nhau để máy chủ có thể lưu trữ website và ứng dụng web động viết bằng PHP. Tên gọi này là viết tắt của Linux, máy chủ web Apache, cơ sở dữ liệu MySQL và ngôn ngữ xử lý phía máy chủ PHP.
Nếu là người mới và muốn triển khai máy chủ nhanh, bạn có thể dùng dịch vụ cài đặt một lần của nhà cung cấp VPS. Tuy nhiên, tự cài đặt sẽ giúp bạn hiểu rõ cấu hình hệ thống và chủ động hơn khi vận hành.
Trong hướng dẫn này, bạn sẽ thiết lập LAMP Stack trên máy chủ Ubuntu 22.04. Các lệnh cài đặt Apache, MySQL và PHP sử dụng kho phần mềm của Ubuntu, vì vậy phiên bản thực tế có thể thay đổi theo bản Ubuntu, kho cập nhật và thời điểm chạy lệnh. Tài liệu Ubuntu hiện được duy trì cho bản LTS mới nhất nhưng vẫn ghi chú khác biệt với các bản LTS cũ khi cần (theo tài liệu Ubuntu Server).
Điều kiện cần thiết
Để hoàn thành hướng dẫn, bạn cần một máy chủ Ubuntu 22.04 với tài khoản người dùng không phải root nhưng có quyền sudo, cùng tường lửa cơ bản. Bạn có thể tham khảo hướng dẫn thiết lập Ubuntu Server ban đầu.
Hãy đăng nhập SSH bằng tài khoản có quyền sudo và cập nhật danh sách gói trước khi bắt đầu:
sudo apt update
sudo apt upgrade
Bước 1 — Cài đặt Apache và cập nhật tường lửa
Apache là máy chủ web phổ biến trên Linux. Ubuntu cung cấp gói apache2 trong kho phần mềm chính thức (theo tài liệu cài đặt Apache2 của Ubuntu).
Cài đặt Apache bằng APT:
sudo apt install apache2
Khi được hỏi xác nhận, nhập Y rồi nhấn ENTER. Sau đó, kiểm tra trạng thái dịch vụ:
sudo systemctl status apache2
Nếu đang dùng UFW, hãy liệt kê các cấu hình ứng dụng hiện có:
sudo ufw app list
Output
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Ý nghĩa các cấu hình UFW
- Apache: chỉ mở cổng
80cho HTTP. - Apache Full: mở cổng
80và443cho HTTP và HTTPS. - Apache Secure: chỉ mở cổng
443cho HTTPS.
Nếu chưa cấu hình chứng chỉ TLS, bạn có thể chỉ cho phép HTTP để kiểm tra ban đầu:
sudo ufw allow in "Apache"
sudo ufw status
Khi website đã có chứng chỉ TLS và cần phục vụ HTTPS, hãy sử dụng cấu hình Apache Full hoặc mở cổng HTTPS theo đúng thiết kế mạng. Không nên bật thêm dịch vụ nếu chưa cần thiết.
Mở địa chỉ IP công khai của máy chủ trong trình duyệt:
http://your_server_ip
Nếu thấy trang mặc định của Apache, máy chủ web đã được cài đặt và có thể truy cập qua tường lửa.

Cách tìm địa chỉ IP công khai của máy chủ
Thông thường, đây là địa chỉ được dùng để kết nối SSH. Bạn có thể kiểm tra các địa chỉ mạng cục bộ bằng:
ip addr
Để xem địa chỉ công khai mà một dịch vụ bên ngoài nhận diện, có thể dùng:
curl https://icanhazip.com
Nếu máy chủ nằm sau NAT hoặc dùng mạng đám mây, hãy kiểm tra thêm địa chỉ Public IP trong bảng điều khiển của nhà cung cấp. Không phải mọi địa chỉ xuất hiện trong ip addr đều có thể truy cập trực tiếp từ Internet.
Bước 2 — Cài đặt MySQL
MySQL đảm nhiệm việc lưu trữ và quản lý dữ liệu cho website. Cài đặt máy chủ MySQL bằng lệnh:
sudo apt install mysql-server
Dịch vụ thường được khởi động tự động sau khi cài đặt. Kiểm tra trạng thái bằng:
sudo systemctl status mysql
Nếu dịch vụ chưa chạy, khởi động bằng:
sudo systemctl start mysql
Trên Ubuntu, tài khoản MySQL root cục bộ thường xác thực qua auth_socket. Vì vậy, bạn có thể truy cập MySQL bằng:
sudo mysql -u root
Không nên dùng tài khoản root cho ứng dụng. Ubuntu hướng dẫn tạo tài khoản riêng với quyền phù hợp cho từng cơ sở dữ liệu (theo tài liệu cấu hình MySQL của Ubuntu). Hãy thoát khỏi giao diện MySQL:
exit;
Trên một số bản Ubuntu hoặc gói MySQL, bạn có thể chạy thêm trình kiểm tra bảo mật tương tác:
sudo mysql_secure_installation
Các câu hỏi và tùy chọn có thể khác nhau tùy phiên bản. Hãy đọc kỹ từng lời nhắc; thông thường nên xóa tài khoản ẩn danh, hạn chế đăng nhập root từ xa và xóa cơ sở dữ liệu thử nghiệm nếu hệ thống đưa ra các lựa chọn này. Không nên áp dụng máy móc câu trả lời của các phiên bản cũ.
Tạo cơ sở dữ liệu và tài khoản MySQL riêng
Ví dụ dưới đây tạo một cơ sở dữ liệu và người dùng riêng cho ứng dụng. Hãy thay các giá trị mẫu bằng tên và mật khẩu mạnh của bạn:
sudo mysql -u root
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'ThayBangMatKhauManh';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
EXIT;
Ví dụ trên dùng cơ chế xác thực caching_sha2_password được tài liệu Ubuntu đề cập. Chỉ chọn cơ chế khác khi ứng dụng thực sự yêu cầu và bạn đã kiểm tra khả năng tương thích (theo tài liệu tài khoản MySQL của Ubuntu).
Máy chủ MySQL hiện đã được cài đặt và cấu hình cơ bản. Tiếp theo là cài PHP.
Bước 3 — Cài đặt PHP
Apache dùng để phân phối nội dung, MySQL dùng để lưu dữ liệu, còn PHP xử lý mã nguồn động. Để Apache có thể chạy PHP và PHP kết nối MySQL, hãy cài các gói cần thiết:
sudo apt install php libapache2-mod-php php-mysql
Ubuntu cung cấp các gói php, mô-đun PHP cho Apache và php-mysql trong kho phần mềm. Sau khi cài đặt, kiểm tra phiên bản PHP thực tế bằng:
php -v
Không nên ghi cứng một phiên bản cụ thể trong bài hướng dẫn, vì phiên bản phụ thuộc vào bản Ubuntu, kho cập nhật và thời điểm cài đặt. Tại thời điểm cập nhật bài viết ngày 2 tháng 9 năm 2026, PHP 8.5 và PHP 8.4 vẫn nằm trong các nhánh được hỗ trợ; PHP 8.3 chỉ còn nhận bản vá bảo mật đến ngày 31 tháng 12 năm 2027, còn PHP 8.2 đến ngày 31 tháng 12 năm 2026 (theo PHP.net). Hãy ưu tiên phiên bản mà kho Ubuntu cung cấp và kiểm tra tính tương thích của ứng dụng.
Khởi động lại Apache để bảo đảm mô-đun và cấu hình mới được nạp:
sudo systemctl restart apache2
Bước 4 — Tạo Virtual Host cho website
Apache cho phép tạo nhiều Virtual Host để lưu trữ nhiều tên miền trên cùng một máy chủ. Trong ví dụ này, hãy thay your_domain bằng tên miền thật của bạn và bảo đảm bản ghi DNS đã trỏ về địa chỉ IP máy chủ.
Bạn cũng có thể xem hướng dẫn trỏ tên miền về máy chủ.
Thay vì dùng trực tiếp thư mục mặc định /var/www/html, hãy tạo thư mục riêng cho website:
sudo mkdir -p /var/www/your_domain
sudo chown -R "$USER":"$USER" /var/www/your_domain
Tạo tệp cấu hình Virtual Host:
sudo nano /etc/apache2/sites-available/your_domain.conf
Thêm cấu hình cơ bản sau:
<VirtualHost *:80>
ServerName your_domain
ServerAlias www.your_domain
ServerAdmin webmaster@localhost
DocumentRoot /var/www/your_domain
<Directory /var/www/your_domain>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/your_domain_error.log
CustomLog ${APACHE_LOG_DIR}/your_domain_access.log combined
</VirtualHost>
Lưu tệp rồi thoát nano bằng CTRL+X, nhấn Y và ENTER. Chỉ bật AllowOverride All nếu bạn cần dùng tệp .htaccess; nếu không, nên dùng cấu hình hạn chế hơn.
Kích hoạt Virtual Host, kiểm tra cú pháp và tải lại Apache:
sudo a2ensite your_domain.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
Nếu không cần trang mặc định của Apache, bạn có thể vô hiệu hóa site mặc định:
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
Nếu chưa có tên miền, hãy giữ site mặc định hoặc tạo một cấu hình kiểm thử riêng. Khi dùng tên miền thật, hãy kiểm tra DNS và mở đúng cổng trên tường lửa trước khi truy cập.
Bước 5 — Kiểm tra PHP với Apache
Tạo tệp kiểm tra PHP trong thư mục website:
nano /var/www/your_domain/info.php
<?php
phpinfo();
Mở http://your_domain/info.php trong trình duyệt. Nếu trang thông tin PHP xuất hiện, Apache đã xử lý được tệp PHP.
Sau khi kiểm tra, hãy xóa tệp này vì nó hiển thị nhiều thông tin cấu hình có thể hỗ trợ kẻ tấn công:
rm /var/www/your_domain/info.php
Bước 6 — Các bước tiếp theo
- Cấu hình HTTPS bằng chứng chỉ TLS hợp lệ trước khi đưa website vào sử dụng thực tế.
- Chỉ mở các cổng cần thiết trên UFW và không cho phép MySQL truy cập từ Internet nếu ứng dụng không yêu cầu.
- Sử dụng tài khoản MySQL riêng cho từng ứng dụng, với quyền tối thiểu cần thiết.
- Thiết lập sao lưu cơ sở dữ liệu và kiểm tra khả năng khôi phục định kỳ.
- Cập nhật Ubuntu, Apache, MySQL và PHP theo quy trình bảo trì của bạn.
Bạn đã hoàn tất các thành phần cơ bản của LAMP Stack trên Ubuntu: Apache phân phối website, MySQL quản lý dữ liệu và PHP xử lý nội dung động.

