Hướng Dẫn Cài Đặt LEMP Stack (Nginx, MariaDB, PHP 8.5) Trên Ubuntu: Tối Ưu Hiệu Suất Web

LEMP Stack là nền tảng vững chắc cho các website hiện đại, bao gồm Linux, Engine-X (Nginx), MariaDB và PHP. Bài viết này sẽ hướng dẫn bạn từng bước xây dựng một máy chủ web mạnh mẽ, sử dụng phiên bản PHP 8.5 mới nhất để tối ưu hóa tốc độ xử lý.

1. Tại sao nên chọn PHP 8.5 và Nginx?

Trước khi đi vào cài đặt, bạn cần hiểu sức mạnh của combo này:

  • Nginx: Khả năng chịu tải (load balancing) và phục vụ file tĩnh (static files) nhanh gấp nhiều lần Apache.
  • PHP 8.5: Phiên bản mới với trình biên dịch JIT (Just-In-Time) cải tiến, giúp website xử lý tác vụ nhanh hơn và bảo mật hơn các bản cũ (7.4 hay 8.0).

1. Cài đặt máy chủ web nginx

7b9c92cb 42d1 4000 ada0 0a236c7f5a15

Nginx là một máy chủ web hiệu suất cao, chịu tải tốt và tiêu tốn ít tài nguyên hơn so với Apache.

Mở Terminal và chạy các lệnh sau để cập nhật hệ thống và cài đặt Nginx:

sudo apt update

Tiếp theo, chạy lệnh apt install để cài đặt Nginx:

sudo apt install nginx

Kiểm tra xem Nginx có đang hoạt động hay không:

sudo systemctl status nginx

Khởi động Nginx.

sudo systemctl start nginx

Khởi động lại Nginx để áp dụng các thay đổi:

sudo systemctl reload nginx

Cho phép Nginx khởi động cùng hệ thống.

sudo systemctl enable nginx

2. Cài đặt Hệ quản trị Cơ sở dữ liệu (MariaDB)

mariadb la gi
mariadb la gi

Chúng ta sử dụng MariaDB thay vì MySQL truyền thống vì tốc độ truy vấn nhanh hơn và cộng đồng mã nguồn mở hỗ trợ mạnh mẽ.

Cài đặt MariaDB Server:

sudo apt install mariadb-server -y

Xem phiên bản MariaDB đã được cài đặt trên máy chủ của bạn.

mariadb --version

Kích hoạt dịch vụ hệ thống MariaDB để khởi chạy cùng hệ thống.

sudo systemctl enable mariadb

Khởi động MariaDB trên máy chủ của bạn.

sudo systemctl start mariadb

Kiểm tra trạng thái dịch vụ MariaDB để xác minh rằng nó đang chạy trên máy chủ của bạn.

sudo systemctl status mariadb

Bảo mật máy chủ MariaDB

Chạy lệnh sau để khởi động tập lệnh bảo mật MariaDB

sudo mysql_secure_installation
  • Nhấn Enter để chọn none mật khẩu này làm mật khẩu root hiện tại.

Enter current password for root (enter for none):

  • Nhấn N rồi nhấn Enter để sử dụng MariaDB mà không cần unix_socket xác thực.

Switch to unix_socket authentication [Y/N]

  • Nhấn Y rồi nhấn Enter để thay đổi mật khẩu mặc định của người dùng root.

Change the root password? [Y/N]

  • Nhập mật khẩu mạnh mới cho người dùng root.

New password:

  • Nhập lại mật khẩu người dùng root mới và nhấn Enter để lưu thay đổi.

Re-enter new password:

  • Nhấn Y rồi nhấn Enter xóa người dùng ẩn danh trên máy chủ MariaDB.

Remove anonymous users? [Y/N]

  • Nhấn Y rồi nhấn Enter để vô hiệu hóa quyền truy cập từ xa vào máy chủ cơ sở dữ liệu với người dùng root.

Disallow root login remotely? [Y/N]

  • Nhấn Y rồi nhấn Enter để xóa cơ sở dữ liệu thử nghiệm.

Remove test database and access to it? [Y/N]

  • Nhấn Y rồi nhấn Enter để làm mới bảng quyền MariaDB và áp dụng các thay đổi cấu hình mới của bạn.

Reload privilege tables now? [Y/N]

3. Cài đặt PHP 8.5 và Các Extensions

# Add the ondrej/php repository.
sudo apt update
sudo apt install -y software-properties-common
sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php -y
sudo apt update

# Install PHP.
sudo apt install -y php8.5

Lệnh cài đặt combo các extension phổ biến nhất:

sudo apt-get install -y php8.5-fpm php8.5-mysql php8.5-curl php8.5-gd php8.5-mbstring php8.5-xml php8.5-zip php8.5-intl php8.5-bcmath php8.5-soap php8.5-imagick

Giải thích công dụng từng gói (Tại sao bạn cần nó?):

  1. php8.5-fpm: Rất quan trọng cho Nginx. Vì bạn dùng LEMP stack, Nginx không tự xử lý PHP mà cần chuyển qua FastCGI Process Manager (FPM).
  2. php8.5-mysql: Để PHP giao tiếp với cơ sở dữ liệu MySQL/MariaDB (bắt buộc cho WordPress).
  3. php8.5-mbstring: Xử lý chuỗi ký tự đa byte (cực kỳ quan trọng để hiển thị đúng Tiếng Việt và các ký tự đặc biệt).
  4. php8.5-gd hoặc php8.5-imagick: Thư viện xử lý ảnh (cắt, resize ảnh thumbail khi upload lên web). imagick thường cho chất lượng ảnh tốt hơn gd.
  5. php8.5-xml & php8.5-curl: Cần thiết cho các tính năng như sitemap, kết nối API bên thứ 3 (ví dụ: API thanh toán, API lấy dữ liệu từ social).
  6. php8.5-zip: Hỗ trợ giải nén file (cần khi bạn cài plugin/theme từ file zip hoặc update WordPress).
  7. php8.5-intl: Hỗ trợ quốc tế hóa (định dạng ngày tháng, tiền tệ theo khu vực).

Sau khi cài đặt xong:

Vì bạn dùng Nginx (LEMP), sau khi cài extension, bạn bắt buộc phải khởi động lại dịch vụ PHP-FPM để các thay đổi có hiệu lực:

sudo service php8.5-fpm restart
# Hoặc
sudo systemctl restart php8.5-fpm

Để kiểm tra xem các module đã được nạp thành công chưa, bạn dùng lệnh:

php -m

4. Cấu hình Nginx xử lý PHP (Kết nối các thành phần)

Tạo thư mục dự án mới

sudo mkdir /var/www/example

Tạo file index.php

sudo touch /var/www/example/index.php

Mở file index.php và dán nội dung này vào

# Mở file index.php
sudo nano /var/www/example/index.php
# Dán nội dung này vào
<?php phpinfo(); ?>

Gỡ bỏ liên kết đến tệp cấu hình mặc định khỏi thư mục /sites-enabled/

sudo unlink /etc/nginx/sites-enabled/default

Tạo file cấu hình mới:

# Thay 'example.conf' bằng tên miền của bạn
sudo nano /etc/nginx/conf.d/example.conf

Dán nội dung cấu hình sau:

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

    access_log /var/www/example/access.log;
    error_log /var/www/example/error.log;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        include fastcgi_params;
        fastcgi_intercept_errors on;
        #The following parameter can be also included in fastcgi_params file
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass unix:/run/php/php8.5-fpm.sock;
    }

    #enable gzip compression
    gzip on;
    gzip_vary on;
    gzip_min_length 1000;
    gzip_comp_level 5;
    gzip_types application/json text/css application/x-javascript application/javascript image/svg+xml;
    gzip_proxied any;

    # A long browser cache lifetime can speed up repeat visits to your page
    location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
        log_not_found     off;
        expires           max;
    }

    # disable access to hidden files
    location ~ /\.ht {
        access_log off;
        log_not_found off;
        deny all;
    }
}

 

Kiểm tra cú pháp (phải báo successful)

sudo nginx -t

Mở file hosts và tạo ip

# Mở file hosts
sudo nano /etc/hosts
# Thêm địa chỉ IP
127.0.0.1 example.local

Khởi động lại Nginx

sudo systemctl reload nginx

Mở trình duyệt vào địa chỉ http://example.local nếu thấy kết quả hiện ra là thành công

cau hinh nginx xu ly php thanh cong