Hướng Dẫn Cài Đặt LAMP Stack Trên VPS Ubuntu (2026)

Tóm tắt nhanh: Hướng dẫn cài đặt LAMP stack trên VPS Ubuntu thực hiện theo 4 bước tuần tự: cài máy chủ web Apache (kèm cấu hình UFW firewall), cài hệ quản trị cơ sở dữ liệu MySQL, cài PHP cùng các module kết nối, và xác minh toàn bộ stack hoạt động đúng. LAMP (Linux, Apache, MySQL, PHP) là bộ nền tảng mã nguồn mở phổ biến nhất để chạy ứng dụng web động. Quy trình này áp dụng chuẩn cho Ubuntu 20.04, 22.04 và 24.04 — yêu cầu duy nhất là quyền truy cập SSH với tài khoản root hoặc user có quyền sudo.

  • Tương thích với Ubuntu 20.04, 22.04 và 24.04 — lệnh không thay đổi giữa các phiên bản, chỉ phiên bản PHP được cài sẽ khác nhau.
  • Yêu cầu quyền root hoặc user có quyền sudo trước khi bắt đầu bất kỳ bước nào.
  • Chạy mysql_secure_installation ngay sau khi cài MySQL — đây là bước bảo mật bắt buộc, không phải tùy chọn.
  • Cảnh báo UFW: Phải cho phép OpenSSH qua tường lửa trước khi bật UFW — bỏ qua bước này đồng nghĩa với việc tự khóa mình ra khỏi VPS.
  • Stack sau khi cài sẵn sàng tích hợp Let’s Encrypt SSL, phpMyAdmin, và Virtual Host mà không cần cấu hình lại từ đầu.

Mở terminal, kết nối SSH vào VPS Ubuntu lần đầu — màn hình đen trống, cursor nhấp nháy. Bạn cần dựng website WordPress hoặc một ứng dụng PHP, nhưng chưa rõ bắt đầu từ lệnh nào, theo thứ tự ra sao. Cài từng package riêng lẻ không theo thứ tự đúng rất dễ gây xung đột phiên bản; tệ hơn là cấu hình UFW sai thứ tự khiến bạn bị khóa hoàn toàn khỏi server, không SSH được, phải mở ticket hỗ trợ khẩn. Bài viết này cung cấp các lệnh cài đặt LAMP stack trên Ubuntu theo đúng trình tự, kèm giải thích ngắn tại sao mỗi bước lại quan trọng — để bạn hiểu mình đang làm gì với VPS, không chỉ copy-paste mù quáng.

Điều Kiện Chuẩn Bị Trước Khi Cài Đặt LAMP

Để thực hiện toàn bộ hướng dẫn này, bạn cần SSH vào VPS bằng tài khoản root hoặc một user thông thường được gán quyền sudo. Nếu vừa thuê VPS tại InterData, thông tin SSH sẽ được gửi về email ngay sau khi hệ thống kích hoạt — bao gồm địa chỉ IP, username và mật khẩu.

Việc đầu tiên sau khi đăng nhập: cập nhật danh sách package. Bước này không phải thủ tục hình thức — nếu bỏ qua, apt có thể kéo về phiên bản Apache hoặc PHP cũ hơn mức tương thích với bản Ubuntu bạn đang dùng, dẫn đến lỗi xung đột rất khó debug sau này.

sudo apt update && sudo apt upgrade -y

Lệnh trên cập nhật danh sách gói (apt update) và nâng cấp toàn bộ các gói đã cài lên phiên bản mới nhất (apt upgrade -y). Cờ -y tự động xác nhận để không phải gõ “Yes” từng bước. Thời gian chạy tùy tốc độ mạng, thường dưới 2 phút với VPS chuẩn.

Cập nhật danh sách package mới nhất
Cập nhật danh sách package mới nhất

4 Bước Cài Đặt LAMP Stack Trên VPS Ubuntu (Chi Tiết)

Bước 1: Cài đặt và cấu hình tường lửa cho Apache Web Server

Apache2 là web server — thành phần nhận và xử lý mọi request HTTP đến từ trình duyệt người dùng. Cài đặt chỉ cần một lệnh:

sudo apt install apache2 -y

Sau khi apt chạy xong, Apache tự khởi động. Nhưng đừng vội mở trình duyệt kiểm tra — cần cấu hình UFW firewall trước.

UFW (Uncomplicated Firewall) là tường lửa mặc định của Ubuntu. Mặc định nó ở trạng thái tắt, nhưng một số VPS provider đã bật sẵn. Nguyên tắc không thể bỏ qua: luôn cho phép OpenSSH qua UFW trước khi bật tường lửa. Thứ tự ba lệnh dưới đây không phải ngẫu nhiên:

sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enable

Lệnh ufw allow OpenSSH mở port 22 — cổng SSH. Nếu bạn chạy ufw enable mà chưa cho phép OpenSSH, kết nối SSH hiện tại bị ngắt ngay lập tức và không thể kết nối lại từ xa. Apache Full mở đồng thời port 80 (HTTP) và port 443 (HTTPS) — cần cả hai để sau này cài SSL không phải quay lại chỉnh UFW.

Xác minh trạng thái tường lửa:

sudo ufw status

Output chuẩn phải hiển thị OpenSSHApache Full đều ở trạng thái ALLOW. Giờ mở trình duyệt, nhập địa chỉ IP của VPS vào thanh địa chỉ — bạn sẽ thấy trang Apache2 Ubuntu Default Page nền trắng. Đây là xác nhận Apache đang chạy và lắng nghe đúng port.

Giao diện test máy chủ Apache trên Ubuntu thành công
Giao diện test máy chủ Apache trên Ubuntu thành công

Bước 2: Cài đặt hệ quản trị cơ sở dữ liệu MySQL

MySQL là thành phần lưu trữ dữ liệu của stack — toàn bộ bài viết, tài khoản người dùng, đơn hàng của WordPress hay bất kỳ ứng dụng PHP nào đều nằm ở đây. Không có MySQL, PHP chạy được nhưng không có chỗ lưu dữ liệu.

sudo apt install mysql-server -y
Kết quả sau khi dùng lệnh sudo apt install mysql-server -y
Kết quả sau khi dùng lệnh sudo apt install mysql-server -y

Ngay sau khi cài xong, bắt buộc phải chạy script bảo mật đi kèm:

sudo mysql_secure_installation

Script hỏi một loạt câu hỏi Yes/No. Khuyến nghị thực tế:

  • Validate Password Plugin: Có thể bỏ qua (N) nếu bạn tự quản lý mật khẩu mạnh.
  • Remove anonymous users: Y — xóa user ẩn danh mặc định, không có lý do để giữ lại.
  • Disallow root login remotely: Y — root không được đăng nhập từ xa, chỉ từ localhost.
  • Remove test database: Y — xóa database “test” không cần thiết, thường là mục tiêu đầu tiên của script tấn công tự động.
  • Reload privilege tables: Y — áp dụng toàn bộ thay đổi ngay lập tức.

Server có IP public là server đang bị scan liên tục — không kể môi trường dev hay production. Bỏ qua bước này vì “đang thử nghiệm” là sai lầm phổ biến nhất.

Kết quả chạy script MySQL Secure
Kết quả chạy script MySQL Secure

Bước 3: Cài đặt ngôn ngữ PHP và các module kết nối

PHP một mình không đủ để hoạt động trong LAMP stack. Cần thêm hai module: libapache2-mod-php là module để Apache “hiểu” và thực thi file .php thay vì gửi nguyên file về trình duyệt dưới dạng text thô; php-mysql cho phép PHP kết nối và truy vấn MySQL. Thiếu php-mysql là lý do phổ biến nhất khiến WordPress báo lỗi “Error establishing a database connection” dù MySQL đang chạy bình thường.

sudo apt install php libapache2-mod-php php-mysql -y

Phiên bản PHP được cài phụ thuộc vào Ubuntu: Ubuntu 24.04 cài PHP 8.3, Ubuntu 22.04 cài PHP 8.1. Kiểm tra version:

php -v

Sau đó, restart Apache để web server tải module PHP mới vào bộ nhớ:

sudo systemctl restart apache2

Bước restart này hay bị bỏ qua — Apache vẫn chạy nhưng chưa nhận module PHP, khiến file .php bị trả về trình duyệt dưới dạng text thô thay vì được xử lý. Lỗi này thường mất thêm 30 phút debug không cần thiết trước khi phát hiện ra nguyên nhân.

Cài đặt ngôn ngữ PHP và các module
Cài đặt ngôn ngữ PHP và các module

Bước 4: Kiểm tra mức độ tương thích của toàn bộ Stack

Ba thành phần đã cài xong, nhưng làm sao biết Apache có thực sự đang xử lý PHP và PHP có kết nối được MySQL không? Tạo một file test nhanh:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Mở trình duyệt, truy cập http://[IP_VPS_CỦA_BẠN]/info.php. Nếu mọi thứ đúng, bạn thấy trang màu tím quen thuộc của PHP với đầy đủ thông số hệ thống: phiên bản PHP, danh sách module đang tải, thông số Apache, cấu hình kết nối MySQL.

Kết quả kiểm tra PHP đã hoạt động
Kết quả kiểm tra PHP đã hoạt động

Xóa file này ngay sau khi xác nhận xong — không để lại dù một phút:

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

File info.php phơi bày toàn bộ cấu hình server ra Internet: đường dẫn thư mục, phiên bản phần mềm, biến môi trường, cấu hình PHP. Đây là thông tin mà scanner tự động thu thập đầu tiên khi tìm lỗ hổng. Không có lý do nào để giữ file này sau khi test xong.

Tối Ưu Nâng Cao Sau Khi Có Hệ Thống LAMP

Stack cơ bản đã chạy. Hai tính năng dưới đây không bắt buộc để website hoạt động ngay, nhưng sẽ tiết kiệm đáng kể thời gian vận hành về sau — đặc biệt nếu bạn quản lý nhiều hơn một website.

Cài đặt phpMyAdmin quản lý Database trực quan

Làm việc với MySQL qua terminal ổn với người quen gõ lệnh SQL. Với những ai cần xem, sửa, export/import database nhanh mà không muốn mở terminal mỗi lần, phpMyAdmin là giao diện web trực quan làm được tất cả điều đó bằng chuột. Hữu ích nhất khi cần migrate dữ liệu giữa các server, restore backup, hoặc debug dữ liệu lạ mà không muốn ngồi gõ câu SELECT dài dòng.

Quy trình cài phpMyAdmin có thêm bước cấu hình xác thực Apache riêng — xem chi tiết tại: hướng dẫn cài đặt phpMyAdmin trên Ubuntu.

Thiết lập Virtual Host (Chạy nhiều web trên một VPS)

Mặc định, Apache chỉ phục vụ một website từ thư mục /var/www/html/. Nếu bạn có VPS cấu hình cao — ví dụ 4 vCPU, 8GB RAM — và muốn chạy 3–5 domain khác nhau trên cùng một IP, Virtual Host giải quyết đúng bài toán đó. Mỗi domain được ánh xạ đến một thư mục riêng và một file cấu hình Apache riêng, hoàn toàn độc lập nhau. Website A và Website B dùng chung IP nhưng không ảnh hưởng lẫn nhau.

Chi tiết cách cấu hình từng bước: hướng dẫn sử dụng VPS từ A đến Z cho người mới.

💡
VPS Giá Rẻ InterData — Hỗ Trợ Đa Dạng Các Phiên Bản Ubuntu Miễn Phí

Cần VPS Ubuntu sạch để bắt đầu cài LAMP stack ngay? InterData cung cấp VPS hỗ trợ đa dạng các phiên bản Ubuntu với ổ SSD NVMe tốc độ cao, hỗ trợ kỹ thuật tiếng Việt 24/7 và datacenter đặt tại Hà Nội & TP. HCM.

Cài sẵn Ubuntu 20.04 / 22.04 / 24.04 miễn phí
SSD NVMe U.2  — I/O ổn định, không chia sẻ tài nguyên
Hỗ trợ kỹ thuật 24/7, phản hồi nhanh chóng

Thuê VPS Giá Rẻ →

FAQs – Câu Hỏi Thường Gặp Khi Setup LAMP Trên Ubuntu

Lỗi vòng lặp mật khẩu khi chạy mysql_secure_installation trên Ubuntu 22.04/24.04?

Lỗi này xảy ra do MySQL trên Ubuntu 22.04 và 24.04 mặc định dùng plugin xác thực auth_socket thay vì mật khẩu thông thường. Script mysql_secure_installation yêu cầu nhập mật khẩu nhưng MySQL không dùng cơ chế đó — kết quả là vòng lặp không thoát được.

Fix: Vào MySQL bằng sudo (không cần mật khẩu ở bước này):

sudo mysql

Đổi plugin xác thực của root sang mysql_native_password:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MatKhauManhCuaBan';
FLUSH PRIVILEGES;
EXIT;

Chạy lại sudo mysql_secure_installation — lần này script hoạt động bình thường. Thay MatKhauManhCuaBan bằng mật khẩu thực của bạn, tối thiểu 12 ký tự kết hợp chữ hoa, số và ký tự đặc biệt.

Lỗi “Apache is functioning normally” nhưng web không hiện là do đâu?

Hai nguyên nhân phổ biến. Thứ nhất: UFW chưa thực sự mở port 80 và 443 — kiểm tra bằng sudo ufw status, đảm bảo dòng Apache Full hiển thị trạng thái ALLOW. Thứ hai: chưa cấu hình Virtual Host trỏ Document Root đúng thư mục chứa file index.php hoặc index.html của website — Apache không tự suy luận được thư mục nếu cấu hình Virtual Host chưa đúng.

Quên mật khẩu Root của MySQL sau khi chạy secure_installation phải làm sao?

Dừng dịch vụ MySQL:

sudo systemctl stop mysql

Khởi động MySQL ở chế độ bỏ qua xác thực:

sudo mysqld_safe --skip-grant-tables &

Vào MySQL không cần mật khẩu, dùng lệnh ALTER USER để đặt lại mật khẩu mới, sau đó FLUSH PRIVILEGES và thoát. Restart MySQL bình thường sau khi xong. Lưu ý: chế độ skip-grant-tables tắt hoàn toàn xác thực — không để server chạy ở chế độ này lâu hơn vài phút cần thiết.

Cài xong LAMP thì VPS tốn bao nhiêu RAM?

Một LAMP stack cơ bản ở trạng thái không có traffic (idle) tiêu thụ khoảng 300–500MB RAM. Apache dùng mô hình multi-process nên tốn RAM hơn Nginx một chút, nhưng hoàn toàn phù hợp với VPS 1GB RAM khi tải nhẹ. Khi có traffic thực, mức tiêu thụ tăng theo số request đồng thời — WordPress đơn giản với vài chục lượt truy cập đồng thời cần ít nhất 1–2GB để chạy ổn định, không bị swap.

Lời Kết

Đến đây, VPS Ubuntu trống của bạn đã trở thành một web server hoàn chỉnh: Apache nhận request từ trình duyệt, MySQL lưu dữ liệu, PHP xử lý logic ứng dụng. Ba thành phần này đủ để chạy WordPress, Laravel, hoặc bất kỳ ứng dụng PHP nào từ nhỏ đến trung bình.

Bước tiếp theo tùy mục tiêu: cần nhiều domain thì cấu hình Virtual Host; cần HTTPS thì cài Let’s Encrypt SSL cho Apache bằng Certbot; cần quản lý database bằng giao diện thì thêm phpMyAdmin. Mỗi thứ có hướng dẫn riêng, không cần cài lại LAMP từ đầu. Nếu muốn hiểu rõ hơn vai trò của từng thành phần trong hạ tầng web trước khi đi sâu hơn, đọc thêm bài web server là gì và cách hoạt động.

Gặp lỗi ở bước nào trong quá trình cài đặt? Comment bên dưới — đội ngũ kỹ thuật InterData sẽ hỗ trợ trực tiếp.