Web Application October 25, 2026

Hướng Dẫn Deploy Laravel Lên VPS Ubuntu Từ A–Z

Hướng dẫn chi tiết cách deploy dự án Laravel lên VPS Ubuntu từ A–Z: cài đặt PHP và các extension cần thiết, Composer, MySQL, Nginx, cấu hình môi trường, phân quyền thư mục, chạy migration, thiết lập SSL và tối ưu ứng dụng cho môi trường production.

Hướng Dẫn Deploy Laravel Lên VPS Ubuntu Từ A–Z

Công Nghệ

PHP Laravel Ubuntu Nginx MySQL Composer Git PHP-FPM Certbot Supervisor

Hướng Dẫn Deploy Laravel Lên VPS Ubuntu Từ A–Z

1. Giới thiệu

Laravel là một trong những PHP Framework phổ biến nhất hiện nay, được sử dụng để xây dựng website, RESTful API và các hệ thống quản trị.

Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai một dự án Laravel lên VPS Ubuntu, từ việc chuẩn bị môi trường máy chủ đến cấu hình ứng dụng chạy ổn định trong môi trường production.

Nội dung hướng dẫn bao gồm:

  • Chuẩn bị VPS Ubuntu và kết nối SSH.
  • Cài đặt PHP cùng các extension cần thiết.
  • Cài đặt Composer và MySQL.
  • Cài đặt và cấu hình Nginx.
  • Upload source code Laravel lên server.
  • Cấu hình file .env và kết nối database.
  • Chạy migration và tối ưu Laravel.
  • Cấu hình phân quyền thư mục.
  • Cài đặt SSL miễn phí với Let's Encrypt.
  • Thiết lập Queue Worker và Cron Job.

2. Yêu cầu hệ thống

Trước khi bắt đầu, cần chuẩn bị:

  • VPS sử dụng Ubuntu 22.04 hoặc 24.04.
  • PHP 8.2 trở lên (tương thích với phiên bản Laravel đang sử dụng).
  • Composer 2.x.
  • MySQL 8.0 hoặc phiên bản tương thích.
  • Nginx Web Server.
  • Git để quản lý và tải source code.
  • Domain đã trỏ về địa chỉ IP của VPS.

Lưu ý: Các ví dụ bên dưới sử dụng PHP 8.3. Nếu dự án sử dụng phiên bản PHP khác, hãy điều chỉnh cấu hình cho phù hợp.

3. Cập nhật hệ thống

Sau khi kết nối SSH vào VPS, cập nhật danh sách package và nâng cấp hệ thống:

sudo apt update sudo apt upgrade -y

Cài đặt các công cụ cần thiết:

sudo apt install -y curl unzip git software-properties-common

4. Cài đặt PHP và các Extension

Cài đặt PHP 8.3 cùng những extension Laravel thường sử dụng:

sudo apt install -y php8.3 php8.3-cli php8.3-fpm \ php8.3-mysql php8.3-mbstring php8.3-xml \ php8.3-curl php8.3-zip php8.3-bcmath \ php8.3-intl php8.3-gd

Kiểm tra phiên bản PHP:

php -v

Kiểm tra các extension đã cài đặt:

php -m

5. Cài đặt Composer

Composer được sử dụng để quản lý các thư viện và dependency của Laravel.

Tải Composer và xác minh bộ cài theo hướng dẫn chính thức tại https://getcomposer.org/download/.

Sau khi cài đặt, kiểm tra:

composer --version

6. Cài đặt và cấu hình MySQL

Cài đặt MySQL Server:

sudo apt install mysql-server -y

Truy cập MySQL:

sudo mysql

Tạo database và tài khoản riêng cho dự án:

CREATE DATABASE laravel_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'your_secure_password'; GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';

Thay mật khẩu ví dụ bằng mật khẩu mạnh và bảo mật thông tin đăng nhập.

7. Cài đặt Nginx

sudo apt install nginx -y

Khởi động và kích hoạt Nginx:

sudo systemctl enable --now nginx

Kiểm tra trạng thái:

sudo systemctl status nginx

8. Deploy Source Code Laravel

Di chuyển đến thư mục chứa website:

cd /var/www

Clone dự án từ Git:

sudo git clone https://github.com/username/project.git laravel-app

Di chuyển vào thư mục dự án:

cd /var/www/laravel-app

Cài đặt dependency cho môi trường production:

composer install --no-dev --optimize-autoloader

Nên chạy Composer bằng tài khoản triển khai không phải root và có quyền phù hợp với thư mục dự án.

9. Cấu hình Environment

Tạo file môi trường:

cp .env.example .env

Cập nhật các thông tin:

APP_NAME="Laravel Application" APP_ENV=production APP_DEBUG=false APP_URL=https://example.com DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_db DB_USERNAME=laravel_user DB_PASSWORD=your_secure_password

Tạo application key đối với dự án cài đặt mới:

php artisan key:generate

Quan trọng: Nếu triển khai lại ứng dụng đã có dữ liệu mã hóa, phải giữ nguyên APP_KEY cũ.

10. Phân quyền thư mục

Đảm bảo tài khoản chạy PHP-FPM có quyền ghi vào các thư mục cần thiết:

sudo chgrp -R www-data storage bootstrap/cache sudo chmod -R ug+rwX storage bootstrap/cache

Đồng thời cần bảo đảm quyền sở hữu và quyền truy cập thư mục phù hợp với tài khoản deploy và web server.

Không sử dụng chmod -R 777 vì có thể gây ra rủi ro bảo mật.

11. Cấu hình Nginx cho Laravel

Tạo file cấu hình:

sudo nano /etc/nginx/sites-available/laravel-app

Nội dung tham khảo:

server {    listen 80;    server_name example.com;    root /var/www/laravel-app/public;    index index.php;    location / {        try_files $uri $uri/ /index.php?$query_string;    }    location ~ ^/index\.php(/|$) {        fastcgi_pass unix:/run/php/php8.3-fpm.sock;        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;        include fastcgi_params;        fastcgi_hide_header X-Powered-By;    }    location ~ /\. {        deny all;    } }

Kích hoạt website:

sudo ln -s /etc/nginx/sites-available/laravel-app \ /etc/nginx/sites-enabled/

Kiểm tra cấu hình và reload:

sudo nginx -t sudo systemctl reload nginx

12. Migration và tối ưu ứng dụng

Chạy migration:

php artisan migrate --force

Tạo symbolic link cho storage nếu dự án cần phục vụ file upload công khai:

php artisan storage:link

Tối ưu ứng dụng:

php artisan optimize

Nếu dự án sử dụng Vite, cần cài đặt Node.js phù hợp, build frontend bằng npm ci và npm run build trước khi đưa ứng dụng vào hoạt động.

13. Cài đặt SSL HTTPS

Cài đặt Certbot:

sudo apt install certbot python3-certbot-nginx -y

Cấp chứng chỉ SSL:

sudo certbot --nginx -d example.com

Kiểm tra tự động gia hạn:

sudo certbot renew --dry-run

14. Thiết lập Queue và Scheduler

Nếu ứng dụng sử dụng Queue, nên cấu hình Supervisor để duy trì tiến trình:

sudo apt install supervisor -y

Tạo cấu hình worker phù hợp với queue connection và đường dẫn dự án, sau đó kích hoạt bằng Supervisor.

Đối với Laravel Scheduler, thêm Cron Job:

* * * * * cd /var/www/laravel-app && php artisan schedule:run >> /dev/null 2>&1

Cron Job cần chạy bằng tài khoản có quyền phù hợp với ứng dụng.

15. Kiểm tra sau khi Deploy

Sau khi hoàn tất, cần kiểm tra:

  • Website hoạt động bình thường qua HTTPS.
  • Kết nối database thành công.
  • Các chức năng đăng nhập, đăng ký và API hoạt động.
  • Quyền ghi file trong storage và bootstrap/cache.
  • Queue Worker và Scheduler hoạt động đúng.
  • File .env không thể truy cập công khai.
  • APP_DEBUG=false trên production.

Có thể kiểm tra log khi xảy ra lỗi:

tail -f storage/logs/laravel.log

16. Kết luận

Qua hướng dẫn này, chúng ta đã tìm hiểu toàn bộ quy trình deploy một ứng dụng Laravel lên VPS Ubuntu, từ cài đặt môi trường PHP, MySQL và Nginx đến cấu hình bảo mật, HTTPS và tối ưu production.

Việc nắm vững quy trình triển khai giúp lập trình viên chủ động quản lý hệ thống, xử lý lỗi và xây dựng nền tảng cho các quy trình CI/CD tự động trong tương lai.

Hướng dẫn thực hiện

Làm theo từng bước

Sao chép từng khối mã hoặc lệnh và thực hiện theo hướng dẫn bên dưới.

  1. 1Deploy Source Code Laravel

    Sau khi chuẩn bị môi trường máy chủ, chúng ta sẽ đưa source code Laravel lên VPS để tiến hành triển khai. Trong hướng dẫn này, source code được lưu trữ trên GitHub và được tải về VPS thông qua Git. **Các bước thực hiện:** 1. Truy cập thư mục `/var/www`. 2. Clone repository Laravel từ GitHub. 3. Di chuyển vào thư mục dự án. 4. Cấu hình quyền sở hữu thư mục cho tài khoản deploy. 5. Cài đặt các thư viện PHP bằng Composer. Khi cài đặt dependency trong môi trường production, sử dụng `--no-dev` và `--optimize-autoloader` để tối ưu ứng dụng. Thay `username`, đường dẫn repository và tài khoản deploy bằng thông tin thực tế của dự án.

    BASH
    # Di chuyển đến thư mục website
    cd /var/www
    
    # Clone source code
    sudo git clone \
    https://github.com/username/laravel-project.git \
    laravel-app
    
    # Cấp quyền sở hữu cho tài khoản deploy hiện tại
    sudo chown -R "$USER":www-data /var/www/laravel-app
    
    # Di chuyển vào dự án
    cd /var/www/laravel-app
    
    # Cài đặt dependency production
    composer install --no-dev --optimize-autoloader
    
    # Kiểm tra cấu trúc dự án
    ls -la

  2. 2Cấu hình Laravel Environment

    File `.env` chứa các thông tin cấu hình quan trọng của Laravel như tên ứng dụng, môi trường hoạt động, URL website, kết nối database và các dịch vụ bên ngoài. **Các bước thực hiện:** 1. Tạo file `.env` từ `.env.example`. 2. Cấu hình môi trường production. 3. Thiết lập kết nối MySQL. 4. Tạo Application Key nếu đây là ứng dụng mới. 5. Cấp quyền ghi cho các thư mục `storage` và `bootstrap/cache`. **Lưu ý bảo mật:** - Luôn đặt `APP_DEBUG=false` trên production. - Không commit file `.env` lên GitHub. - Không sử dụng `chmod 777`. - Không thay đổi APP_KEY của ứng dụng đã có dữ liệu được mã hóa.

    BASH
    # Di chuyển vào dự án
    cd /var/www/laravel-app
    
    # Tạo file môi trường
    cp .env.example .env
    
    # Chỉnh sửa cấu hình
    nano .env
    
    # Tạo APP_KEY (chỉ khi cài đặt ứng dụng mới)
    php artisan key:generate
    
    # Cấp quyền cho thư mục Laravel
    sudo chgrp -R www-data storage bootstrap/cache
    sudo chmod -R ug+rwX storage bootstrap/cache
    
    # Kiểm tra trạng thái ứng dụng
    php artisan about

  3. 3Migration và tối ưu Laravel

    Sau khi cấu hình kết nối database và Web Server, cần khởi tạo cấu trúc cơ sở dữ liệu và tối ưu hiệu suất ứng dụng. **Các bước thực hiện:** 1. Chạy migration để tạo hoặc cập nhật bảng dữ liệu. 2. Tạo symbolic link cho thư mục lưu trữ file công khai. 3. Cache cấu hình ứng dụng. 4. Cache route và view để cải thiện hiệu suất. 5. Kiểm tra các route của ứng dụng. Nếu dự án sử dụng Vite để quản lý CSS và JavaScript, cần cài đặt Node.js tương thích và chạy lệnh build frontend. Trước khi chạy migration trên hệ thống đang hoạt động, nên sao lưu database và kiểm tra các thay đổi schema.

    BASH
    # Di chuyển vào dự án
    cd /var/www/laravel-app
    
    # Chạy migration
    php artisan migrate --force
    
    # Tạo storage link nếu cần
    php artisan storage:link
    
    # Tối ưu Laravel
    php artisan optimize
    
    # Kiểm tra route
    php artisan route:list
    
    # Nếu dự án dùng Vite và đã cài Node.js
    npm ci
    npm run build