Hướng dẫn deploy website Laravel lên VPS: Đừng để "chạy được trên localhost" trở thành cái bẫy
Có một tình huống tôi gặp khá nhiều khi tư vấn cho khách hàng. Website Laravel được lập trình rất chỉn chu, chạy mượt trên máy lập trình viên. Nhưng đến lúc đưa lên VPS thì lỗi liên tục: trắng trang, lỗi 500, queue không hoạt động, gửi mail thất bại hoặc website chậm bất thường.
Điều thú vị là phần lớn các lỗi đó không đến từ Laravel. Chúng xuất phát từ quy trình triển khai chưa đúng.
Nếu bạn đang chuẩn bị đưa website Laravel vào môi trường thực tế, bài viết này sẽ giúp bạn deploy bài bản hơn, giảm thời gian xử lý sự cố và giúp hệ thống vận hành ổn định ngay từ đầu.
Vì sao nên deploy Laravel lên VPS thay vì hosting thông thường?
Nhiều website Laravel quy mô nhỏ vẫn có thể chạy trên shared hosting. Tuy nhiên, khi bắt đầu cần hiệu năng, khả năng mở rộng và kiểm soát hệ thống tốt hơn thì VPS gần như là lựa chọn hợp lý.
Một số lợi ích dễ thấy:
- Chủ động cấu hình PHP, Nginx hoặc Apache.
- Tự quản lý Redis, Supervisor, Cronjob.
- Dễ tối ưu tốc độ.
- Tăng cường bảo mật.
- Thuận tiện mở rộng tài nguyên khi lượng truy cập tăng.
Đặc biệt với các webapp quản trị nội bộ, CRM, ERP hoặc website có nhiều tác vụ nền, VPS gần như là tiêu chuẩn tối thiểu.
Chuẩn bị trước khi deploy Laravel lên VPS
Trước khi bắt đầu, hãy kiểm tra kỹ những yếu tố sau.
Mã nguồn đã ổn định
Không nên deploy khi code vẫn đang thay đổi liên tục hoặc chưa kiểm tra đầy đủ trên môi trường staging.
Tôi thường khuyên khách hàng hoàn thành các bước:
- Test chức năng chính.
- Kiểm tra đăng nhập.
- Test gửi email.
- Test upload file.
- Test phân quyền.
Làm kỹ trước sẽ tiết kiệm rất nhiều thời gian xử lý sau này.
Chuẩn bị VPS phù hợp
Nếu website mới vận hành:
- 2 CPU.
- RAM từ 2GB.
- SSD từ 40GB.
Với website thương mại điện tử hoặc webapp có nhiều người dùng đồng thời, nên cân nhắc cấu hình cao hơn.
Chuẩn bị domain và SSL
Đây là phần thường bị bỏ quên cho đến phút cuối.
Hãy chuẩn bị:
- Domain đã trỏ về IP VPS.
- SSL miễn phí hoặc SSL thương mại.
- Tài khoản SSH.
Các bước deploy website Laravel lên VPS
Bước 1: Kết nối VPS qua SSH
Sau khi nhận VPS, đăng nhập bằng SSH.
Ví dụ:
ssh root@IP_VPS
Ngay sau khi đăng nhập, nên đổi mật khẩu mạnh hoặc cấu hình SSH Key để tăng bảo mật.
Bước 2: Cài đặt môi trường cần thiết
Thông thường sẽ bao gồm:
- Nginx.
- PHP và các extension Laravel yêu cầu.
- Composer.
- Git.
- MySQL hoặc MariaDB.
- Redis (nếu sử dụng queue hoặc cache).
- Supervisor.
Đừng cài theo kiểu "thiếu gì bổ sung nấy". Việc chuẩn hóa môi trường ngay từ đầu sẽ giúp dễ bảo trì hơn.
Bước 3: Clone source code
Thông thường:
git clone repository
Sau đó di chuyển vào thư mục dự án:
cd ten-du-an
Nếu khách hàng không sử dụng Git, có thể upload source bằng SFTP. Tuy nhiên, về lâu dài Git vẫn là lựa chọn nên áp dụng.
Bước 4: Cài đặt thư viện
Chạy:
composer install --optimize-autoloader --no-dev
Tùy dự án có frontend hay không, có thể cần thêm:
npm install
npm run build
Nhiều người quên bước build frontend dẫn đến giao diện lỗi hoặc không hiển thị CSS.
Bước 5: Cấu hình file .env
Đây là "trái tim" của hệ thống.
Kiểm tra kỹ:
- APP_NAME
- APP_ENV
- APP_DEBUG
- APP_URL
- DB_DATABASE
- DB_USERNAME
- DB_PASSWORD
- MAIL_*
- REDIS_*
Một lưu ý rất quan trọng.
Khi đưa vào production:
APP_DEBUG=false
Việc để APP_DEBUG=true có thể làm lộ thông tin nhạy cảm nếu xảy ra lỗi.
Bước 6: Generate key và migrate database
Chạy lần lượt:
php artisan key:generate
Tiếp theo:
php artisan migrate
Nếu có dữ liệu mẫu:
php artisan db:seed
Trước khi migrate trên website đang hoạt động, hãy sao lưu database.
Đây là thói quen giúp tránh những tình huống "toát mồ hôi" khi deploy phiên bản mới.
Bước 7: Phân quyền thư mục
Laravel yêu cầu quyền ghi vào:
storage
bootstrap/cache
Thiết lập đúng quyền sẽ giúp tránh lỗi ghi log hoặc upload file thất bại.
Bước 8: Cấu hình Nginx
Một lỗi phổ biến là trỏ root sai thư mục.
Laravel cần trỏ đến:
public/
Không phải thư mục gốc dự án.
Nếu cấu hình sai, website có thể lộ mã nguồn hoặc trả về lỗi 403.
Bước 9: Tối ưu Laravel trước khi vận hành
Đây là bước tôi luôn thực hiện trước khi bàn giao.
Chạy:
php artisan config:cache
php artisan route:cache
php artisan view:cache
Những lệnh này giúp giảm thời gian xử lý request.
Sau mỗi lần cập nhật cấu hình, nhớ clear cache nếu cần.
Bước 10: Thiết lập Queue và Cronjob
Nhiều website Laravel gửi email, xử lý thông báo hoặc đồng bộ dữ liệu thông qua queue.
Nếu bỏ qua bước này, hệ thống vẫn chạy nhưng nhiều chức năng sẽ âm thầm ngừng hoạt động.
Cronjob:
* * * * * php /path/to/artisan schedule:run
Supervisor sẽ giúp queue hoạt động liên tục và tự khởi động lại khi có lỗi.
Những lỗi thường gặp khi deploy Laravel lên VPS
Lỗi 500 Internal Server Error
Nguyên nhân thường gặp:
- Sai quyền thư mục.
- Sai cấu hình .env.
- Thiếu extension PHP.
- Cache cũ chưa được xóa.
Website trắng trang
Đôi khi chỉ vì:
- APP_DEBUG=false.
- PHP version không tương thích.
- Thiếu build frontend.
Hãy kiểm tra log trong thư mục storage/logs.
Queue không chạy
Phần lớn đến từ:
- Chưa cài Supervisor.
- Supervisor chưa khởi động.
- Queue driver cấu hình sai.
Không gửi được email
Cần kiểm tra:
- SMTP.
- Port.
- Firewall VPS.
- Thông tin xác thực.
Một vài kinh nghiệm thực tế sau nhiều lần deploy
Đừng deploy trực tiếp trên website đang có lượng truy cập lớn vào giờ cao điểm.
Hãy chọn thời điểm ít người dùng nhất.
Luôn sao lưu database trước khi cập nhật.
Nếu dự án quan trọng, nên có môi trường staging riêng để kiểm thử.
Và nếu deploy bằng tay quá thường xuyên, hãy nghĩ đến CI/CD. Chỉ cần thiết lập đúng một lần, những lần cập nhật sau sẽ nhẹ nhàng hơn rất nhiều.
FAQ
Deploy Laravel lên VPS mất bao lâu?
Nếu môi trường đã chuẩn bị sẵn, thường khoảng 30–60 phút. Với hệ thống phức tạp hơn có thể kéo dài vài giờ.
Nên dùng Nginx hay Apache?
Nginx thường được ưu tiên nhờ hiệu năng tốt và tiêu thụ ít tài nguyên. Tuy nhiên, Apache vẫn phù hợp nếu đội ngũ đã quen vận hành.
VPS bao nhiêu RAM là đủ?
Website giới thiệu doanh nghiệp thường bắt đầu từ 2GB RAM. Webapp nhiều người dùng nên từ 4GB trở lên.
Có cần Redis không?
Không bắt buộc. Tuy nhiên, Redis giúp cache và queue hoạt động hiệu quả hơn, đặc biệt khi lưu lượng tăng.
Có nên tự deploy nếu không rành kỹ thuật?
Nếu website phục vụ hoạt động kinh doanh quan trọng, nên có người có kinh nghiệm hỗ trợ. Một sai sót nhỏ trong cấu hình cũng có thể khiến website gián đoạn.
Lời khuyên dành cho người mới
Deploy website Laravel không khó. Điều khiến nhiều người áp lực là thiếu quy trình.
Khi đã có checklist rõ ràng, bạn sẽ thấy việc đưa một website từ localhost lên VPS chỉ còn là những bước cần làm cẩn thận.
Làm chậm ở lần đầu để hiểu bản chất. Những lần sau sẽ nhanh hơn rất nhiều.
Nếu bạn đang cần tư vấn về triển khai Laravel, tối ưu VPS, xây dựng webapp hoặc chuyển đổi số cho doanh nghiệp, Hải Vũ luôn sẵn sàng chia sẻ kinh nghiệm thực tế để giúp hệ thống của bạn vận hành ổn định và bền vững hơn.