Cách cài LAMP Stack trên Ubuntu VPS từ A đến Z
Hướng dẫn cài Apache, MySQL và PHP trên Ubuntu VPS, cấu hình website mẫu, kiểm tra hoạt động và áp dụng các bước bảo mật cơ bản trước khi triển khai.
- 8 phút đọc
- 0 lượt xem

CÔNG TY TNHH CÔNG NGHỆ INUX
Hướng dẫn cài Apache, MySQL và PHP trên Ubuntu VPS, cấu hình website mẫu, kiểm tra hoạt động và áp dụng các bước bảo mật cơ bản trước khi triển khai.

Hướng dẫn benchmark VPS bằng các công cụ phổ biến để kiểm tra CPU, RAM và ổ đĩa. Bạn sẽ biết cách chạy lệnh, đọc kết quả và tránh những sai lệch thường gặp.
Khởi tạo tự động ngay sau khi thanh toán, chuyển khoản bằng mã QR, bật tắt và cài lại máy chủ trong trang quản lý.
LAMP Stack là môi trường phổ biến để chạy website và ứng dụng web trên máy chủ Linux. Bộ thành phần này gồm Linux, Apache, MySQL và PHP: Ubuntu đảm nhiệm hệ điều hành, Apache tiếp nhận yêu cầu từ trình duyệt, MySQL lưu trữ dữ liệu còn PHP xử lý nội dung động. Trong bài viết này, bạn sẽ đi qua các bước cài LAMP trên Ubuntu VPS, tạo cơ sở dữ liệu, cấu hình tên miền và kiểm tra website mẫu.
Trước khi bắt đầu, bạn cần một VPS đã cài Ubuntu và tài khoản có quyền sudo. Hãy kết nối SSH bằng địa chỉ IP và thông tin đăng nhập do nhà cung cấp VPS cung cấp. Trên máy Linux hoặc macOS, mở Terminal; trên Windows, bạn có thể dùng PowerShell hoặc một ứng dụng SSH.
ssh ten_tai_khoan@DIA_CHI_IPThay ten_tai_khoan và DIA_CHI_IP bằng thông tin VPS thực tế. Sau khi đăng nhập, cập nhật danh sách gói và cài các bản cập nhật hiện có:
sudo apt update
sudo apt upgrade -yNếu hệ thống yêu cầu khởi động lại sau khi cập nhật, hãy lưu công việc và thực hiện theo thông báo. Trong quá trình cài đặt, nên giữ phiên SSH hiện tại cho đến khi xác nhận có thể kết nối lại bình thường.

Apache là web server tiếp nhận yêu cầu HTTP và trả nội dung website đến trình duyệt. Cài gói Apache bằng APT:
sudo apt install apache2 -yKiểm tra dịch vụ đã chạy chưa:
sudo systemctl status apache2Nếu màn hình trạng thái hiển thị active (running), Apache đang hoạt động. Nhấn q để thoát. Bạn cũng có thể bật dịch vụ tự khởi động cùng hệ thống và kiểm tra cấu hình trước khi áp dụng thay đổi:
sudo systemctl enable apache2
sudo apache2ctl configtestKhi kết quả cấu hình là Syntax OK, có thể nạp lại Apache bằng sudo systemctl reload apache2. Tiếp theo, mở trình duyệt và truy cập http://DIA_CHI_IP. Nếu trang mặc định của Apache xuất hiện, web server đã sẵn sàng. Trường hợp không truy cập được, hãy kiểm tra tường lửa ở VPS và trong hệ điều hành, cũng như địa chỉ IP đang sử dụng.
MySQL là hệ quản trị cơ sở dữ liệu quan hệ, thường dùng để lưu tài khoản, bài viết, đơn hàng và dữ liệu của ứng dụng. Cài máy chủ MySQL:
sudo apt install mysql-server -yKiểm tra dịch vụ:
sudo systemctl status mysqlNếu dịch vụ chưa chạy, khởi động và bật tự chạy khi VPS khởi động:
sudo systemctl start mysql
sudo systemctl enable mysqlTiếp theo, chạy tiện ích bảo mật đi kèm MySQL:
sudo mysql_secure_installationTiện ích có thể hỏi bạn về các tùy chọn bảo vệ tài khoản và dữ liệu. Đọc kỹ từng lời nhắc, chọn phương án phù hợp với cách quản trị VPS của bạn. Nội dung câu hỏi có thể khác nhau tùy phiên bản MySQL và cấu hình Ubuntu.
Tạo một cơ sở dữ liệu riêng cùng tài khoản dành cho website. Trên Ubuntu, bạn có thể mở trình khách MySQL bằng quyền quản trị:
sudo mysqlTại dấu nhắc MySQL, nhập các lệnh dưới đây. Thay website_db, website_user và MAT_KHAU_MẠNH bằng tên cùng mật khẩu riêng của bạn:
CREATE DATABASE website_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'website_user'@'localhost' IDENTIFIED BY 'MAT_KHAU_MẠNH';
GRANT ALL PRIVILEGES ON website_db.* TO 'website_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;Dùng mật khẩu dài, khó đoán và không tái sử dụng mật khẩu quản trị VPS. Tài khoản giới hạn ở localhost phù hợp với ứng dụng chạy cùng máy chủ, đồng thời tránh mở quyền kết nối cơ sở dữ liệu từ mọi địa chỉ. Không nên công khai cổng MySQL nếu ứng dụng không có nhu cầu kết nối từ xa.

PHP xử lý mã phía máy chủ, còn mô-đun libapache2-mod-php giúp Apache chuyển các tệp PHP đến bộ xử lý phù hợp. Cài PHP, mô-đun Apache và phần mở rộng kết nối MySQL:
sudo apt install php libapache2-mod-php php-mysql -yMột số ứng dụng cần thêm phần mở rộng như xử lý ảnh, dữ liệu JSON hoặc kết nối cURL. Có thể cài các gói thường gặp khi ứng dụng yêu cầu:
sudo apt install php-curl php-gd php-mbstring php-xml php-zip -yKhông nhất thiết cài tất cả mô-đun nếu dự án không sử dụng chúng. Kiểm tra phiên bản PHP và các mô-đun hiện có:
php -v
php -mSau khi cài PHP hoặc thay đổi mô-đun, nạp lại Apache:
sudo systemctl reload apache2Virtual Host cho phép Apache phục vụ một website theo tên miền và lưu nội dung trong thư mục riêng. Trước tiên, tạo thư mục gốc cho tên miền mẫu example.com:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.comTạo trang PHP đơn giản:
nano /var/www/example.com/public_html/index.phpThêm nội dung sau, sau đó lưu tệp và thoát trình soạn thảo:
<?php
echo 'LAMP Stack đã sẵn sàng';
?>Tạo tệp cấu hình Apache cho website:
sudo nano /etc/apache2/sites-available/example.com.confThêm cấu hình, thay example.com bằng tên miền của bạn:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
<Directory /var/www/example.com/public_html>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined
</VirtualHost>Lưu tệp, bật website và kiểm tra cú pháp trước khi nạp lại Apache:
sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo apache2ctl configtest
sudo systemctl reload apache2Chỉ tắt cấu hình mặc định nếu bạn đã chuẩn bị cấu hình thay thế phù hợp. Trước khi kiểm tra bằng tên miền, hãy trỏ bản ghi DNS của tên miền về địa chỉ IP VPS. Quá trình cập nhật DNS có thể cần thời gian để có hiệu lực.

Khi DNS đã trỏ đúng, truy cập http://example.com để xem trang kiểm tra. Nếu bạn chưa có tên miền, có thể thử bằng cách gửi yêu cầu tới địa chỉ IP, nhưng cấu hình Virtual Host theo tên miền cần nhận đúng tên máy chủ để hiển thị website tương ứng.
Có thể kiểm tra kết nối PHP với MySQL bằng cách tạo tệp riêng:
nano /var/www/example.com/public_html/db-test.phpThêm đoạn mã sau và thay thông tin bằng tài khoản cơ sở dữ liệu đã tạo:
<?php
$connection = new mysqli('localhost', 'website_user', 'MAT_KHAU_MẠNH', 'website_db');
if ($connection->connect_error) {
die('Kết nối thất bại');
}
echo 'Kết nối MySQL thành công';
$connection->close();
?>Truy cập http://example.com/db-test.php. Nếu nhận được thông báo kết nối thành công, Apache, PHP và MySQL có thể phối hợp với nhau. Xóa tệp kiểm tra ngay sau khi hoàn tất vì nó chứa thông tin đăng nhập cơ sở dữ liệu:
sudo rm /var/www/example.com/public_html/db-test.phpNếu trang báo lỗi, xem nhật ký Apache để tìm nguyên nhân:
sudo tail -n 50 /var/log/apache2/example.com-error.logNgoài ra, xác nhận tên cơ sở dữ liệu, tên người dùng, mật khẩu và máy chủ kết nối trong cấu hình ứng dụng đều khớp với thông tin đã tạo.
Nếu dùng UFW, kiểm tra trạng thái trước khi thay đổi quy tắc:
sudo ufw statusTrước khi bật tường lửa, hãy cho phép SSH để tránh tự chặn kết nối quản trị. Sau đó mở lưu lượng web và bật UFW nếu phù hợp với cấu hình VPS:
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enableApache Full cho phép lưu lượng HTTP và HTTPS. Nếu nhà cung cấp VPS có tường lửa ở lớp mạng, bạn cũng cần kiểm tra quy tắc tại đó. Không mở cổng cơ sở dữ liệu ra Internet nếu không thực sự cần thiết.
Một số nguyên tắc nên áp dụng trước khi đưa website vào sử dụng:
777 cho thư mục website. Chỉ cấp quyền ghi cho những thư mục ứng dụng thực sự cần.Không mở được trang Apache: kiểm tra systemctl status apache2, địa chỉ IP, quy tắc UFW và tường lửa ở lớp mạng. Nếu vừa sửa cấu hình, chạy sudo apache2ctl configtest để phát hiện lỗi cú pháp.
Trình duyệt tải tệp PHP thay vì chạy: xác nhận đã cài libapache2-mod-php, sau đó nạp lại Apache. Tránh để tệp kiểm tra chứa thông tin hệ thống tồn tại lâu trên website.
Ứng dụng không kết nối được MySQL: kiểm tra dịch vụ MySQL, thông tin đăng nhập, tên cơ sở dữ liệu và quyền của tài khoản. Với cơ sở dữ liệu cùng VPS, dùng localhost thường phù hợp hơn việc mở kết nối từ bên ngoài.
Tên miền hiển thị sai website: kiểm tra bản ghi DNS, ServerName, ServerAlias và Virtual Host đã bật hay chưa. Bạn cũng có thể xem danh sách cấu hình đang hoạt động bằng sudo apache2ctl -S.
Sau khi hoàn thành các bước trên, VPS Ubuntu đã có nền tảng LAMP Stack gồm Apache, MySQL và PHP để tiếp tục triển khai website hoặc ứng dụng. Trước khi đưa dự án lên môi trường thật, hãy hoàn tất cấu hình tên miền, HTTPS, sao lưu và bảo mật phù hợp với nhu cầu sử dụng. Nếu cần một máy chủ để tự triển khai và quản trị LAMP, bạn có thể tham khảo VPS AMD EPYC Gen 3 của VibeVPS với các gói từ 81.000đ/tháng; hãy chọn tài nguyên dựa trên quy mô ứng dụng và mức sử dụng dự kiến.
Hướng dẫn chuẩn bị VPS, cài Minecraft server Java Edition, mở cổng kết nối và thiết lập bảo mật để bạn cùng nhóm có thể chơi chung ổn định.
Tìm hiểu Docker là gì, cách container giúp đóng gói ứng dụng và các bước cài Docker trên VPS. Bài viết hướng dẫn tạo image, chạy ứng dụng bằng Docker Compose và một số lưu ý vận hành.