Giới thiệu
Khi bạn sở hữu một VPS mới, câu hỏi đầu tiên thường là: Làm thế nào để cấu hình nó sao cho dễ dàng triển khai nhiều ứng dụng? Trong hướng dẫn này, tôi sẽ hướng dẫn bạn quy trình cài đặt đầy đủ có thể làm việc với Laravel, Node.js, Ruby on Rails hoặc hầu hết mọi stack.
Nội dung sẽ được đề cập
- Hệ điều hành: Ubuntu 22.04 LTS
- Web Server: Nginx
- Quản lý tiến trình: php-fpm (cho PHP), pm2 (cho Node.js)
- Cơ sở dữ liệu: MySQL/MariaDB hoặc PostgreSQL
- SSL: Let’s Encrypt (Certbot)
- Khóa SSH: Để truy cập an toàn
1. Những gì bạn sẽ học
Cuối bài viết này, bạn sẽ biết cách:
- ✅ Thêm quyền truy cập SSH vào VPS của bạn
- ✅ Tổ chức nhiều ứng dụng trên cùng một máy chủ
- ✅ Quản lý nhiều phiên bản PHP và Node.js
- ✅ Thiết lập tên miền và tên miền phụ với Nginx
- ✅ Bảo mật ứng dụng với SSL Let’s Encrypt
- ✅ Triển khai ứng dụng với quy trình Git + build đơn giản
2. Yêu cầu
Trước khi bắt đầu, hãy đảm bảo bạn có:
- Một VPS + một tên miền
- Kiến thức cơ bản về Linux (cd, nano, systemctl, v.v.)
- Khóa SSH được cấu hình để đăng nhập an toàn
- Một số hiểu biết về Nginx
- Ít nhất một dự án (Laravel, Node.js, hoặc Rails) để triển khai
3. Cấu trúc Thư mục
Chúng ta sẽ giữ tất cả các dự án dưới /var/www/ để dễ quản lý. Điều này giúp dễ dàng quản lý nhiều ứng dụng trên cùng một máy chủ.
/var/www/
├── laravel-app1/
│ └── public/ # Thư mục công khai của Laravel
├── laravel-app2/
│ └── public/
├── node-app1/
├── node-app2/
4. Quản lý Phiên bản
Vì các dự án khác nhau thường yêu cầu các phiên bản khác nhau, chúng ta sẽ sử dụng:
php-fpmcho nhiều phiên bản PHPNVMcho nhiều phiên bản Node.js
4.1 PHP
Cài đặt nhiều phiên bản PHP (7.4, 8.1, 8.2, v.v.) bằng php-fpm. Mỗi ứng dụng sẽ chỉ đến socket PHP riêng của nó:
- Laravel App1 → PHP 8.1 → /run/php/php8.1-fpm.sock
- Laravel App2 → PHP 8.2 → /run/php/php8.2-fpm.sock
Nginx sẽ định tuyến từng trang đến đúng phiên bản PHP.
4.2 Node.js
Sử dụng NVM để cài đặt phiên bản Node.js mà dự án của bạn cần. Sử dụng PM2 để giữ cho các ứng dụng chạy trong nền.
Nginx sẽ reverse-proxy đến cổng chính xác:
- node-app1.yourdomain.com → localhost:3001
- node-app2.yourdomain.com → localhost:3002
5. Tên miền & Tên miền phụ
Chỉ định các bản ghi DNS của bạn đến IP VPS:
- app1.yourdomain.com → VPS IP
- app2.yourdomain.com → VPS IP
- node1.yourdomain.com → VPS IP
- node2.yourdomain.com → VPS IP
Trên máy chủ, tạo cấu hình Nginx cho từng ứng dụng:
/etc/nginx/sites-available/
├── laravel-app1.conf
├── laravel-app2.conf
├── node-app1.conf
├── node-app2.conf
Sau đó tạo liên kết đến sites-enabled/:
sudo ln -s /etc/nginx/sites-available/laravel-app1.conf /etc/nginx/sites-enabled/
6. Chứng chỉ SSL
Sử dụng Let’s Encrypt với Certbot:
- SSL miễn phí cho mỗi tên miền/tên miền phụ
- Tự động gia hạn mỗi 90 ngày
- Hoạt động trực tiếp với Nginx
sudo certbot --nginx -d app1.yourdomain.com -d www.app1.yourdomain.com
7. Quy trình Triển khai
Đây là quy trình triển khai đơn giản bạn có thể theo dõi cho mỗi dự án:
- Đẩy mã của bạn lên GitHub.
- SSH vào VPS của bạn.
- Clone hoặc pull dự án từ GitHub.
- Cài đặt các phụ thuộc:
- Laravel →
composer install && npm run build - Node.js →
npm install && pm2 restart
- Laravel →
- Chạy migrations/seeds nếu cần.
Vì Nginx + SSL đã được thiết lập, ứng dụng sẽ trực tuyến ngay lập tức. 🚀
8. Kết luận
Với cấu hình này, VPS của bạn trở thành một máy chủ lưu trữ đa ứng dụng. Các ứng dụng PHP chạy song song với các ứng dụng Node.js. Mỗi dự án có tên miền/tên miền phụ, SSL và trình quản lý tiến trình riêng. Triển khai trở nên đơn giản như git pull && build. Điều này mang lại cho bạn sự linh hoạt của PaaS (như Heroku hoặc Vercel) nhưng với toàn quyền kiểm soát của một VPS.
Câu hỏi thường gặp
1. VPS cần cấu hình gì để chạy nhiều ứng dụng?
Bạn cần cài đặt Nginx, PHP, Node.js và các công cụ quản lý tiến trình như php-fpm và pm2.
2. Có cần phải có kiến thức về Linux không?
Có, bạn cần có kiến thức cơ bản về các lệnh Linux để có thể quản lý VPS của mình.
3. Làm thế nào để bảo mật ứng dụng của tôi?
Sử dụng SSL từ Let’s Encrypt để bảo mật kết nối giữa máy chủ và người dùng.
Thực hành tốt nhất
- Luôn sao lưu dữ liệu trước khi thực hiện bất kỳ thay đổi nào.
- Sử dụng khóa SSH cho truy cập an toàn thay vì mật khẩu.
Những cạm bẫy phổ biến
- Không cấu hình đúng DNS có thể dẫn đến lỗi truy cập ứng dụng.
- Quên gia hạn chứng chỉ SSL có thể khiến ứng dụng không an toàn.
Mẹo tối ưu hiệu suất
- Sử dụng caching với Redis hoặc Memcached để cải thiện tốc độ ứng dụng.
- Tối ưu hóa hình ảnh và tài nguyên để giảm thời gian tải trang.