VPS cho nodejs là một trong những quyết định hạ tầng quan trọng đầu tiên khi bạn nhận ra môi trường Shared Hosting truyền thống không cho phép chạy các tiến trình ngầm liên tục. Để một ứng dụng hoặc API viết bằng NodeJS hoạt động mượt mà, bạn cần toàn quyền quản trị (root access) để cài đặt môi trường, mở port và cấu hình service tự động khởi động lại khi gặp sự cố. Bài viết này sẽ hướng dẫn bạn từ cách chọn cấu hình, cài đặt môi trường đến việc thiết lập PM2 và Nginx để ứng dụng chạy 24/7 một cách ổn định nhất.
NỘI DUNG BÀI VIẾT
- 1. Tại sao Shared Hosting không phù hợp mà phải dùng VPS cho NodeJS?
- 2. Tiêu chí chọn cấu hình VPS Node JS giá rẻ chuẩn xác
- 3. Cấu hình VPS NodeJS bao nhiêu là đủ cho API vừa và nhỏ
- 4. Chuẩn bị trước khi deploy NodeJS lên VPS
- 5. Hướng dẫn cài NodeJS trên VPS Linux chi tiết bằng NVM
- 6. Cấu hình PM2 NodeJS VPS: Chạy App NodeJS 24/7 và Auto Restart
- 7. Cài đặt Nginx làm Reverse Proxy cho NodeJS API
- 8. Xử lý lỗi thiếu RAM (OOM) khi deploy trên VPS giá rẻ bằng Swap Space
- 9. Các lỗi thường gặp khi deploy API NodeJS
- 10. Câu hỏi thường gặp (FAQ)
1. Tại sao Shared Hosting không phù hợp mà phải dùng VPS cho NodeJS?
Bản chất của NodeJS là một môi trường runtime hoạt động dựa trên một tiến trình (process) chạy liên tục để lắng nghe các request. Điều này hoàn toàn đi ngược lại cơ chế của Shared Hosting truyền thống vốn được thiết kế cho PHP (chỉ thực thi khi có request và tắt đi ngay sau đó).
Khi bạn tìm kiếm các dịch vụ hosting nodejs, thực chất đó thường là môi trường cPanel được cài thêm plugin hỗ trợ, đi kèm rất nhiều hạn chế về quyền can thiệp hệ thống.

Việc sử dụng một VPS chạy NodeJS mang lại những khác biệt cốt lõi về mặt kỹ thuật:
- Quyền Root (Administrator): Bạn được phép cài đặt bất kỳ phiên bản Node nào, sử dụng NVM (Node Version Manager) để switch version giữa các project khác nhau. Trên hosting, bạn thường bị khóa chết ở một vài phiên bản cố định.
- Quản lý tiến trình ngầm: Bạn có thể sử dụng PM2 để chạy app nodejs 24/7. PM2 sẽ giám sát mức tiêu thụ RAM, CPU và tự động khởi động lại ứng dụng nếu xảy ra lỗi crash code.
- Kiểm soát Port mạng: NodeJS thường khởi chạy ở các port như 3000, 4000, 8080. Với VPS, bạn toàn quyền thiết lập tường lửa (UFW/iptables), quyết định cách mở port trên vps và dùng Nginx để map các port này ra port 80 (HTTP) hoặc 443 (HTTPS) tiêu chuẩn.
- Không bị giới hạn Execution Time: Nếu bạn đang viết một API là gì đó cần crawl dữ liệu, xử lý file nặng hoặc chạy cronjob liên tục, hosting sẽ tự động “kill” process của bạn sau 30-60 giây. VPS thì không.
2. Tiêu chí chọn cấu hình VPS Node JS giá rẻ chuẩn xác
Khi lần đầu tìm một server cho NodeJS, nhiều lập trình viên thường phân vân không biết cần bao nhiêu RAM và CPU là đủ. Chọn cấu hình quá thấp sẽ khiến ứng dụng văng lỗi OOM (Out of Memory) ngay lúc chạy lệnh `npm install`, nhưng mua cấu hình quá cao khi chưa có traffic lại gây lãng phí ngân sách.
Dưới đây là bảng phân loại nhu cầu và cấu hình vps nodejs tương ứng mang tính thực chiến:
| Mục đích triển khai | RAM Đề xuất | Ghi chú kỹ thuật |
|---|---|---|
| Học tập, Bot Telegram/Discord, Cronjob nhỏ | 1GB – 2GB | Đủ chạy 1-2 app nhỏ. Bắt buộc tạo thêm Swap file để tránh lỗi thiếu RAM khi cài thư viện. |
| Deploy API NodeJS vừa (Express/NestJS) kèm Database | 2GB – 4GB | Phù hợp để host chung backend Node và MongoDB/MySQL trên cùng một server. |
| Next.js, Nuxt.js (SSR) hoặc Project dùng Docker | Từ 4GB trở lên | Các framework SSR hoặc Docker là gì thường ngốn rất nhiều RAM trong quá trình build (npm run build). |
Ngoài RAM, ổ cứng SSD là bắt buộc. Môi trường Node tạo ra thư mục `node_modules` chứa hàng chục ngàn file nhỏ lẻ. Nếu dùng ổ cứng HDD cơ học cũ, quá trình đọc/ghi file sẽ cực kỳ chậm, dẫn đến tình trạng I/O Wait cao làm treo server. Tại Việt Nam, bạn nên ưu tiên các dòng VPS sử dụng ổ SSD NVMe để tối ưu tốc độ đọc ghi.
3. Cấu hình VPS NodeJS bao nhiêu là đủ cho API vừa và nhỏ
NodeJS là ngôn ngữ single-threaded, ưu tiên xử lý I/O không đồng bộ. Vì vậy, nó không tiêu thụ CPU quá mạnh trừ khi bạn chạy các tác vụ tính toán phức tạp (xử lý ảnh, mã hóa video). RAM mới là yếu tố quyết định số lượng request cùng lúc mà server cho nodejs có thể xử lý trước khi bị tràn bộ nhớ.
| Quy mô ứng dụng | CPU | RAM | Ghi chú thực tế |
|---|---|---|---|
| API test, học tập, bot đơn giản | 1 – 2 core | 0.5 – 1 GB | Chạy được 1 process Node, không nên chạy kèm database nặng trên cùng VPS này |
| Web/blog nhỏ, API phục vụ vài chục user | 1 – 2 core | 1 – 2 GB | Chạy được Node + Nginx + MySQL/PostgreSQL nhẹ. Nên bật thêm swap 1GB |
| API production, nhiều endpoint, traffic trung bình | 2 core | 2 – 4 GB | Dùng PM2 cluster mode chạy nhiều instance, chịu tải tốt hơn |
4. Chuẩn bị trước khi deploy NodeJS lên VPS
Để quá trình deploy nodejs lên vps diễn ra suôn sẻ, bạn cần chuẩn bị sẵn sàng các công cụ và thông tin sau:
- Hệ điều hành: Bài viết này lấy ví dụ trên Ubuntu 22.04 LTS hoặc 24.04 LTS. Đây là hệ điều hành phổ biến nhất và được cộng đồng NodeJS hỗ trợ tốt nhất.
- Phần mềm SSH: Bạn cần một Terminal (trên macOS/Linux) hoặc phần mềm như PuTTY, MobaXterm, PowerShell (trên Windows) để điều khiển VPS.
- Source Code: Đã được đẩy lên Github, Gitlab hoặc nén thành file zip. Khuyên dùng Git để kéo code về VPS một cách chuyên nghiệp.
- Tên miền (Domain): Nếu bạn muốn người dùng truy cập qua tên miền (ví dụ api.domain.com) thay vì địa chỉ IP trần, hãy trỏ bản ghi A của tên miền về IP của VPS.
5. Hướng dẫn cài NodeJS trên VPS Linux chi tiết bằng NVM
Có nhiều cách để cài nodejs trên vps, chẳng hạn như dùng apt-get. Tuy nhiên, cách đó thường cài đặt bản Node quá cũ hoặc gây ra lỗi phân quyền (permission denied) khi cài các package global (như PM2, nodemon). Giới vps cho lập trình viên luôn ưu tiên sử dụng NVM (Node Version Manager).
Bước 1: Cài đặt cURL và NVM
Truy cập vào VPS thông qua SSH, sau đó chạy lệnh sau để tải script cài đặt NVM:
Sau khi chạy xong, hãy nạp lại cấu hình môi trường bằng lệnh:
Bước 2: Chọn và cài đặt phiên bản NodeJS
Kiểm tra danh sách các bản Node có sẵn và cài đặt bản LTS (Long Term Support – Khuyên dùng cho môi trường production):
nvm use –lts
Kiểm tra lại xem Node và NPM đã được cài thành công chưa:
npm -v
6. Cấu hình PM2 NodeJS VPS: Chạy App NodeJS 24/7 và Auto Restart
Khi bạn chạy code bằng lệnh thông thường như node index.js, ứng dụng sẽ hoạt động. Nhưng ngay khi bạn đóng cửa sổ SSH, tiến trình này sẽ bị hệ điều hành tắt theo. Đó là lý do chúng ta cần đến PM2 – một Process Manager mạnh mẽ dành riêng cho NodeJS (thậm chí vps chạy python cũng có thể dùng PM2 để quản lý script).
Bước 1: Cài đặt PM2 Global
Bước 2: Khởi chạy dự án bằng PM2
Di chuyển vào thư mục chứa source code của bạn (ví dụ cd /var/www/my-api), sau đó chạy lệnh:
Lúc này, PM2 sẽ đưa app của bạn xuống chạy ngầm. Bạn có thể xem danh sách các ứng dụng đang chạy bằng lệnh pm2 list hoặc xem log realtime bằng lệnh pm2 logs.
Bước 3: Thiết lập tự động khởi chạy cùng hệ điều hành (Startup Script)
Để đảm bảo mỗi khi VPS bị khởi động lại (reboot), các API của bạn cũng tự động bật lên mà không cần bạn phải vào gõ lệnh thủ công, hãy tạo startup script:
PM2 sẽ in ra một đoạn mã trên màn hình. Hãy copy toàn bộ đoạn mã đó và dán lại vào Terminal, rồi nhấn Enter. Cuối cùng, lưu lại danh sách ứng dụng hiện tại:
7. Cài đặt Nginx làm Reverse Proxy cho NodeJS API
Bạn có tự hỏi web server là gì và tại sao lại cần nó khi Node đã tự tạo được server? Trong thực tế, các ứng dụng Node thường chạy ở port cục bộ như 3000 hoặc 5000. Bạn không thể bắt người dùng gõ http://domain.com:3000 vào trình duyệt. Hơn nữa, việc để hở port Node ra trực tiếp internet là một rủi ro bảo mật.
Giải pháp chuẩn mực là dùng Nginx đứng trước làm “cổng bảo vệ” (Reverse Proxy). Nginx lắng nghe ở port 80 (HTTP) và 443 (HTTPS), sau đó chuyển tiếp (forward) các request này vào bên trong port 3000 của NodeJS một cách âm thầm.
Cài đặt và cấu hình cơ bản:
sudo apt install nginx -y
Tạo một file cấu hình mới cho domain của bạn:
Dán cấu hình Reverse Proxy vào file (thay đổi server_name và port 3000 cho đúng với app của bạn):
listen 80;
server_name api.domain.com;location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Kích hoạt cấu hình và khởi động lại Nginx:
sudo nginx -t
sudo systemctl restart nginx
Từ thời điểm này, API của bạn đã có thể truy cập qua HTTP tiêu chuẩn mà không cần gõ kèm Port.
8. Xử lý lỗi thiếu RAM (OOM) khi deploy trên VPS giá rẻ bằng Swap Space
Một trong những vấn đề đau đầu nhất với các bạn sinh viên hoặc người mới dùng vps node js giá rẻ (cấu hình 1GB – 2GB RAM) là tiến trình bị “Killed” giữa chừng khi gõ lệnh npm install hoặc npm run build. Nguyên nhân do server cạn kiệt bộ nhớ vật lý. Thủ thuật ở đây là tạo một tệp tin Swap trên ổ cứng SSD để làm RAM ảo tạm thời.
Chạy lần lượt các lệnh sau để tạo 2GB Swap:
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo ‘/swapfile none swap sw 0 0’ | sudo tee -a /etc/fstab
Sau khi bật Swap, bạn sẽ thấy tiến trình cài đặt thư viện mượt mà hơn hẳn, loại bỏ hoàn toàn lỗi crash do tràn RAM trên các dòng máy chủ nhỏ.
8. Các lỗi thường gặp khi deploy API NodeJS
Trong quá trình vận hành server cho nodejs, bạn có thể gặp một số lỗi kỹ thuật. Dưới đây là cách bắt bệnh và xử lý:
- Lỗi EADDRINUSE: Port is already in use: Lỗi này xảy ra do có một tiến trình Node khác đang chiếm dụng port (ví dụ port 3000) mà bạn không biết. Dùng lệnh
lsof -i :3000để tìm PID của tiến trình đó, sau đó dùng lệnhkill -9 [PID]để tắt nó đi trước khi chạy lại pm2. - Lỗi rò rỉ bộ nhớ (Memory Leak) làm treo VPS: Nếu code của bạn có bug khiến RAM tăng liên tục, hãy cấu hình giới hạn RAM cho PM2. Sử dụng tham số
--max-memory-restart 500M. PM2 sẽ tự động reload app ngầm nếu mức tiêu thụ RAM vượt quá 500MB, giữ cho VPS không bị sập hoàn toàn. - Downtime trong lúc cập nhật code (Zero-downtime deploy): Thay vì dùng
pm2 restart app(sẽ gây gián đoạn vài giây để Node khởi động lại), hãy sử dụng lệnhpm2 reload app. Reload cho phép PM2 khởi động một tiến trình mới hoàn toàn song song, nhận request vào tiến trình mới rồi mới tắt tiến trình cũ đi.
10. Câu hỏi thường gặp (FAQ)
VPS 512MB RAM có chạy được NodeJS không?
Về mặt lý thuyết là có, bạn có thể chạy một API ExpressJS đơn giản. Tuy nhiên, nó sẽ rất dễ bị crash khi thực hiện lệnh tải package qua npm. Nếu ngân sách hạn hẹp, bạn bắt buộc phải tạo ít nhất 1GB Swap file. Dù vậy, mức đề xuất tối thiểu cho trải nghiệm ổn định nên từ 1GB – 2GB RAM.
Có nên cài Web Panel (aaPanel, CyberPanel) để quản lý NodeJS không?
Đối với người mới hoàn toàn, dùng Panel có tích hợp module Node sẽ dễ dàng hơn vì có giao diện. Nhưng Panel tiêu tốn khá nhiều RAM (thường ăn mất 400-600MB). Nếu bạn dùng VPS cấu hình thấp, việc quản trị qua giao diện dòng lệnh (CLI) bằng PM2 là cách tối ưu nhất để tiết kiệm tài nguyên.
PM2 khác gì so với dùng Docker để deploy?
PM2 tập trung vào việc quản lý tiến trình (process) ngay trên máy chủ thật, rất dễ tiếp cận và nhẹ. Docker tạo ra các container biệt lập chứa toàn bộ môi trường chạy, giúp code “chạy ở mọi nơi đều giống nhau”. Docker chuyên nghiệp hơn cho việc mở rộng quy mô, nhưng PM2 lại thân thiện và tốn ít RAM hơn cho người mới.
Hệ điều hành Windows Server có chạy được NodeJS không?
Có, NodeJS hỗ trợ đầy đủ nền tảng Windows và bạn vẫn có thể dùng PM2. Tuy nhiên, Windows Server tốn rất nhiều RAM (riêng hệ điều hành đã cần khoảng 2GB) và tài liệu cộng đồng deploy Node trên Windows rất ít. Linux (đặc biệt là Ubuntu) luôn là tiêu chuẩn công nghiệp cho vấn đề này.
Tệp ecosystem.config.js của PM2 dùng để làm gì?
Thay vì gõ chuỗi lệnh dài trên Terminal, bạn định nghĩa các tham số như tên app, số lượng bản sao (cluster mode), và đặc biệt là các biến môi trường (Environment Variables) phân biệt giữa môi trường Dev và Production vào file này. Nó giúp việc deploy bài bản và bảo mật key/token hơn.
Lời kết
Triển khai một dự án lên môi trường thực tế luôn mang đến nhiều thử thách hơn việc chạy code trên localhost. Việc trang bị một vps cho nodejs là bước đi căn bản để bạn làm chủ toàn bộ vòng đời của ứng dụng, từ thiết lập môi trường, quản lý RAM/CPU, sử dụng PM2 duy trì tiến trình đến việc cấu hình Nginx Reverse Proxy phân luồng traffic. Dù bạn chạy API nhẹ nhàng hay một website hoàn chỉnh, mấu chốt nằm ở việc hiểu rõ luồng hoạt động thay vì phụ thuộc vào các công cụ tự động bị giới hạn quyền năng.
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận, ổ cứng SSD NVMe tốc độ cao và khả năng quản trị riêng biệt cho mọi dự án của bạn.
Lưu ý kỹ thuật: Nội dung hướng dẫn trên mang tính tham khảo và được kiểm chứng trên nền tảng Ubuntu 22.04/24.04. Các tập lệnh, đường dẫn cài đặt và cấu hình có thể thay đổi tùy thuộc vào hệ điều hành, phiên bản phần mềm hoặc can thiệp cá nhân vào môi trường thực tế. Hãy luôn chủ động sao lưu (backup) dữ liệu, kiểm thử trên môi trường staging và đánh giá rủi ro an toàn thông tin trước khi áp dụng cấu hình cho máy chủ production.
