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.
Công Nghệ
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.
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.
-
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 -
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 -
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