Cài đặt LEMP Stack trên Ubuntu 24.04 từ A–Z cho người mới

Vừa nhận thông tin VPS Ubuntu 24.04 nhưng chưa biết bắt đầu từ đâu để chạy website PHP? Cách cài LEMP Ubuntu đơn giản nhất cho người mới chính là dựng từng thành phần theo đúng thứ tự: Nginx làm web server, MySQL (hoặc MariaDB) làm cơ sở dữ liệu, và PHP-FPM xử lý mã PHP. Với một VPS có kết nối mạng

Cài đặt LEMP Stack trên Ubuntu 24.04 từ A–Z cho người mới

Vừa nhận thông tin VPS Ubuntu 24.04 nhưng chưa biết bắt đầu từ đâu để chạy website PHP? Cách cài LEMP Ubuntu đơn giản nhất cho người mới chính là dựng từng thành phần theo đúng thứ tự: Nginx làm web server, MySQL (hoặc MariaDB) làm cơ sở dữ liệu, và PHP-FPM xử lý mã PHP. Với một VPS có kết nối mạng ổn định, toàn bộ quy trình chỉ mất khoảng 15–20 phút, miễn là bạn đi đúng trình tự và kiểm tra kỹ sau mỗi bước.

Bài viết này hướng dẫn cài đặt LEMP Stack trên Ubuntu 24.04 chi tiết từng lệnh, cách cấu hình server block Nginx để chạy file PHP đầu tiên và các bước bảo mật cơ bản. Mọi lệnh trong bài chạy được với quyền root hoặc người dùng có quyền sudo.

Cài lemp ubuntu: lEMP Stack là gì và gồm những thành phần nào?

LEMP là viết tắt của bốn thành phần phần mềm kết hợp để chạy website và ứng dụng web động: Linux (hệ điều hành), Nginx (phát âm "engine-x", web server), MySQL hoặc MariaDB (hệ quản trị cơ sở dữ liệu), và PHP (ngôn ngữ lập trình phía server). Quy trình xử lý một yêu cầu như sau: Nginx tiếp nhận HTTP request; nếu là file tĩnh (HTML, CSS, JS, hình ảnh) thì Nginx trả về trực tiếp; nếu là file PHP, Nginx chuyển tiếp cho PHP-FPM xử lý qua giao thức FastCGI, PHP-FPM truy vấn MySQL rồi trả kết quả về cho trình duyệt.

Sự khác biệt lớn nhất giữa LEMP và bộ LAMP truyền thống nằm ở web server: Nginx dùng kiến trúc xử lý bất đồng bộ (non-blocking), chịu tải đồng thời tốt hơn và tiêu tốn ít tài nguyên hơn so với Apache, nên đặc biệt phù hợp cho VPS cấu hình vừa và nhỏ.

Thành phần LEMP (Nginx) LAMP (Apache)
Web server Nginx, kiến trúc bất đồng bộ, ít tốn RAM Apache, mô hình process/thread truyền thống
Ngôn ngữ xử lý PHP qua PHP-FPM (FastCGI) PHP qua module mod_php hoặc PHP-FPM
Cơ sở dữ liệu MySQL hoặc MariaDB MySQL hoặc MariaDB
Phù hợp với VPS cấu hình vừa/nhỏ, website đông truy cập Hosting chia sẻ, server cần file .htaccess

Các thành phần của LEMP Stack

Cài lemp ubuntu: chuẩn bị gì trước khi cài đặt LEMP?

Trước khi gõ lệnh đầu tiên, hãy chắc chắn bạn đã có: một VPS chạy Ubuntu 24.04 LTS, tài khoản có quyền root hoặc sudo, và kết nối internet ổn định để tải gói phần mềm. Về cấu hình, RAM tối thiểu 1 GB và ổ cứng khoảng 20 GB là đủ cho một LEMP Stack cơ bản chạy thử nghiệm; nếu định chạy website thật, bạn nên chọn RAM từ 2 GB trở lên để PHP-FPM và MySQL không tranh tài nguyên.

Bước đầu tiên luôn là cập nhật chỉ mục gói và hệ thống, để tránh lỗi "package not found" hoặc phiên bản phụ thuộc không khớp:

sudo apt update
sudo apt upgrade -y

Bạn cũng nên kiểm tra đúng phiên bản Ubuntu bằng cat /etc/os-release trước khi tiếp tục.

Cài lemp ubuntu: bước 1: Cài đặt Nginx và kiểm tra hoạt động

Nginx là thành phần đầu tiên cần cài, vì nó làm "cánh cổng" tiếp nhận mọi request HTTP gửi đến server:

sudo apt install nginx -y

Sau khi cài, kiểm tra dịch vụ đã chạy hay chưa và cho nó tự khởi động cùng hệ thống:

sudo systemctl status nginx
sudo systemctl enable nginx

Nếu dòng trạng thái hiển thị Active: active (running) là bạn đã thành công bước đầu. Tiếp theo, mở trình duyệt truy cập http://địa-chỉ-IP-của-VPS: nếu thấy trang chào mừng mặc định của Nginx, web server đã sẵn sàng. Trường hợp không truy cập được, khả năng cao là tường lửa đang chặn — hãy xử lý ở mục bảo mật bên dưới bằng cách cho phép port 80 và 443 qua ufw trước khi tiếp tục.

Bước 2: Cài đặt PHP-FPM và các extension cần thiết

PHP-FPM (FastCGI Process Manager) là cầu nối giữa Nginx và mã PHP: Nginx không tự thực thi được file .php mà phải gửi request sang cho PHP-FPM xử lý.

sudo apt install php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-bcmath php-intl -y

Trong đó php-mysql giúp PHP kết nối được với MySQL, php-curl dùng cho gọi API ngoài, php-gd xử lý hình ảnh, php-mbstring và php-xml cần cho đa số mã nguồn PHP hiện đại. Sau khi cài, kiểm tra dịch vụ đã chạy bằng sudo systemctl status php8.3-fpm và cho tự khởi động cùng hệ thống bằng sudo systemctl enable php8.3-fpm. Lưu ý tên dịch vụ chứa số phiên bản PHP — cứ chạy php -v để biết chính xác trước khi cấu hình ở bước server block.

Bước 3: Cài đặt MySQL hoặc MariaDB và chạy bảo mật ban đầu

MySQL và MariaDB đều tương thích với LEMP, lựa chọn tùy bạn: MariaDB nhẹ hơn một chút, còn MySQL 8.0 có các tính năng JSON nâng cao hơn. Bài này dùng MySQL làm ví dụ; lệnh cài:

sudo apt install mysql-server -y
sudo systemctl status mysql

Trên các bản Ubuntu mới, MySQL mặc định dùng plugin xác thực auth_socket cho tài khoản root. Để tăng bảo mật ban đầu, hãy chạy công cụ hướng dẫn có sẵn:

sudo mysql_secure_installation

Công cụ này sẽ hỏi một loạt thiết lập: bật chính sách kiểm tra độ mạnh mật khẩu, xóa tài khoản ẩn danh, cấm đăng nhập root từ xa, xóa database test mặc định. Với server mới, bạn nên trả lời yes cho tất cả các mục bảo mật này.

Bước 4: Cấu hình Nginx server block để chạy PHP

Đến đây ba thành phần đã chạy độc lập, nhưng Nginx vẫn chưa biết xử lý file PHP ở đâu và chuyển cho ai. Bạn cần tạo một server block trỏ về thư mục chứa website, với khối location ~ \.php$ chuyển request sang PHP-FPM qua socket:

sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo nano /etc/nginx/sites-available/example.com

Nội dung file cấu hình mẫu:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

Dòng fastcgi_pass là quan trọng nhất: nó trỏ đến socket của PHP-FPM, và bạn phải sửa số phiên bản cho khớp với kết quả php -v trên máy của mình. File snippets/fastcgi-php.conf do Ubuntu cung cấp sẵn chứa các tham số FastCGI chuẩn, bạn không cần tự viết lại. Kích hoạt site và kiểm tra cú pháp:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Lệnh nginx -t phải báo syntax is ok mới được reload — nếu có lỗi cú pháp mà reload luôn, Nginx có thể dừng phục vụ cả site đang chạy. Sau đó tạo file thử nghiệm /var/www/example.com/html/info.php chứa <?php phpinfo(); ?> rồi truy cập http://IP-VPS/info.php: nếu thấy trang thông tin PHP là cầu nối Nginx–PHP-FPM đã thông. Xóa file info.php ngay sau khi kiểm tra xong, vì nó tiết lộ chi tiết phiên bản phần mềm cho bất kỳ ai truy cập.

Cấu hình Nginx server block chạy PHP

Bước 5: Kiểm tra kết nối giữa PHP và MySQL

Stack chỉ hoàn chỉnh khi PHP truy vấn được dữ liệu từ MySQL. Cách kiểm tra chắc chắn nhất là tạo một database thử và một script PHP đọc dữ liệu từ đó. Đăng nhập MySQL và tạo database cùng user riêng (không dùng root cho ứng dụng web):

CREATE DATABASE test_db;
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'MatKhauManh123!';
GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
FLUSH PRIVILEGES;

Sau đó tạo file /var/www/example.com/html/test-db.php kết nối PDO đến database vừa tạo và in ra danh sách bảng. Nếu trang hiển thị đúng, chuỗi Nginx → PHP-FPM → MySQL đã hoạt động trọn vẹn. Nếu báo lỗi kết nối, kiểm tra hai điểm: extension php-mysql đã cài chưa (php -m | grep -i mysql) và thông tin đăng nhập trong script có đúng user vừa tạo hay không.

Bảo mật cơ bản cho LEMP Stack vừa dựng

Một server mới cài xong là một server dễ bị tấn công nhất, vì mọi cấu hình đều ở trạng thái mặc định. Bốn việc nên làm ngay sau khi LEMP chạy ổn định:

  • Bật tường lửa ufw và chỉ mở cổng cần thiết: sudo ufw allow OpenSSH, sudo ufw allow 'Nginx Full' rồi sudo ufw enable. Luôn cho phép SSH trước khi bật ufw, nếu không bạn có thể tự khóa mình khỏi server.
  • Tạo user sudo thay vì dùng root trực tiếp: tạo user mới, thêm vào nhóm sudo, rồi vô hiệu hóa đăng nhập root từ xa trong /etc/ssh/sshd_config (dòng PermitRootLogin no).
  • Cài chứng chỉ SSL miễn phí với Let's Encrypt: khi đã có domain trỏ về IP server, cài Certbot (sudo apt install certbot python3-certbot-nginx) rồi chạy sudo certbot --nginx -d example.com -d www.example.com.
  • Giữ hệ thống được cập nhật: chạy sudo apt update && sudo apt upgrade -y định kỳ (ví dụ mỗi tuần một lần) để vá lỗ hổng bảo mật của Nginx, PHP và MySQL.

5 lỗi thường gặp khi cài LEMP và cách xử lý

  • Truy cập IP không thấy trang Nginx: kiểm tra tường lửa đã mở port 80 chưa (sudo ufw status) và dịch vụ Nginx có đang chạy không (sudo systemctl status nginx).
  • File PHP bị tải về thay vì chạy: Nginx chưa chuyển request sang PHP-FPM — kiểm tra khối location ~ \.php$ và đường dẫn fastcgi_pass có đúng số phiên bản PHP hay không.
  • Lỗi "502 Bad Gateway": PHP-FPM không chạy hoặc đã crash. Chạy sudo systemctl restart php8.3-fpm (đúng số phiên bản) và xem log tại /var/log/php8.3-fpm.log.
  • "Access denied for user" khi kết nối MySQL: sai tên user, sai mật khẩu hoặc user chưa được cấp quyền. Đăng nhập lại bằng root và chạy lại lệnh GRANT cho đúng database.
  • Nginx báo lỗi khi reload: luôn chạy sudo nginx -t trước, đọc kỹ dòng báo lỗi kèm số dòng, sửa xong mới reload. Lỗi phổ biến là thiếu dấu chấm phẩy hoặc ngoặc nhọn không đóng.

Kết luận

Cài đặt LEMP Stack trên Ubuntu 24.04 không khó nếu bạn đi đúng thứ tự: cập nhật hệ thống, cài Nginx, cài PHP-FPM kèm extension, cài MySQL rồi chạy bảo mật ban đầu, cấu hình server block kết nối Nginx với PHP-FPM, và kiểm tra kết nối database. Hai nguyên tắc vàng cho người mới là kiểm tra dịch vụ sau mỗi bước bằng systemctl status và không bao giờ reload Nginx khi nginx -t còn báo lỗi.

Bước tiếp theo sau khi LEMP chạy ổn định: gắn domain thật và cài SSL miễn phí bằng Let's Encrypt, triển khai mã nguồn website lên thư mục web, và thiết lập backup định kỳ cho database. Nếu bạn chưa có VPS hoặc muốn nền tảng ổn định hơn để chạy LEMP lâu dài, hãy cân nhắc thuê Cloud Server hoặc VPS tại nhà cung cấp trong nước — hạ tầng đặt tại datacenter chuẩn Tier III, hỗ trợ kỹ thuật 24/7 sẽ giúp website vận hành yên tâm hơn.

Bạn cần tư vấn chọn cấu hình VPS phù hợp để chạy LEMP Stack? Liên hệ hotline 083 979 3434 hoặc truy cập suncloud.vn để được hỗ trợ chi tiết.

Câu hỏi thường gặp

LEMP và LAMP khác nhau điểm nào, nên chọn bộ nào?

Khác nhau ở web server: LEMP dùng Nginx, LAMP dùng Apache. Nginx xử lý nhiều kết nối đồng thời với ít tài nguyên hơn nhờ kiến trúc bất đồng bộ, nên LEMP thường cho hiệu năng tốt hơn trên VPS cấu hình vừa và nhỏ. LAMP phù hợp hơn nếu ứng dụng của bạn phụ thuộc vào file .htaccess của Apache. Với website PHP mới triển khai năm 2026, LEMP là lựa chọn phổ biến hơn.

Ubuntu 24.04 dùng PHP phiên bản mấy khi cài từ kho chính thức?

Kho chính thức của Ubuntu 24.04 cung cấp PHP 8.3 ở thời điểm các bản cập nhật đầu của LTS này, nhưng phiên bản có thể thay đổi theo các đợt cập nhật của Canonical. Vì vậy sau khi cài bạn nên chạy php -v để xác nhận và dùng đúng số phiên bản đó trong cấu hình fastcgi_pass của Nginx.

Nên dùng MySQL hay MariaDB cho LEMP Stack?

Cả hai đều tương thích tốt với LEMP. MariaDB nhẹ hơn và là fork mã nguồn mở hoàn toàn của MySQL, phù hợp với đa số website vừa và nhỏ. MySQL 8.0 có các tính năng JSON và khả năng mở rộng nâng cao hơn cho hệ thống lớn. Với người mới, quan trọng là chạy mysql_secure_installation và tạo user riêng cho từng ứng dụng thay vì dùng root.

Tại sao file PHP bị trình duyệt tải về thay vì hiển thị?

Đây là dấu hiệu Nginx đang phục vụ file PHP như file tĩnh — khối location ~ \.php$ chưa có hoặc fastcgi_pass trỏ sai socket của PHP-FPM. Hãy mở lại file server block, kiểm tra đúng số phiên bản PHP trong đường dẫn socket, chạy sudo nginx -t rồi reload Nginx.

Có cần mua chứng chỉ SSL khi mới dựng LEMP không?

Không bắt buộc cho giai đoạn thử nghiệm trên IP, nhưng nên có ngay khi website đi vào hoạt động với domain thật. Bạn không cần mua: Let's Encrypt cung cấp chứng chỉ miễn phí, và Certbot tích hợp sẵn với Nginx giúp cài đặt và tự động gia hạn chỉ bằng một lệnh.

VPS cấu hình tối thiểu bao nhiêu để chạy LEMP Stack ổn định?

Để chạy thử nghiệm một website nhỏ, RAM 1 GB và ổ cứng khoảng 20 GB là đủ cho Nginx, PHP-FPM và MySQL cùng lúc. Tuy nhiên với website sản xuất bạn nên bắt đầu từ RAM 2 GB trở lên, vì MySQL khá "ngốn" RAM khi website có lượng truy cập thật.

Tác giả:
author avatar
Tôi là Trường Phạm, hiện đảm nhiệm vai trò CEO của SunCloud. Với kiến ​​thức sâu rộng về mạng lưới hệ thống, điện toán đám mây và an ninh mạng, góp phần định hướng chiến lược phát triển bền vững cho doanh nghiệp. Tôi đã điều hành SunCloud phát triển và vận hành thành công hàng loạt dự án thực tiễn, mang lại giá trị thực tế cho các doanh nghiệp và cơ sở kinh doanh. Bản thân tôi đã đạt được các chứng chỉ quốc tế uy tín như CCNP, LPI, VCP và không ngừng học hỏi để nâng cao năng lực quản lý cũng như chuyên môn mỗi ngày. Đam mê công nghệ và khao khát cống hiến, tôi luôn nỗ lực xây dựng SunCloud trở thành một hệ sinh thái công nghệ đáng tin cậy, đồng thời lan tỏa những giá trị tri thức hữu ích đến cộng đồng.

Tin tức nổi bật
Tin tức khác