date
Dec 1, 2025
slug
ban-huong-dan-trien-khai-production
status
Published
tags
NodeJs
Backend
summary
Cách triển khai trên VPS
type
Post
Bản hướng dẫn triển khai Project production full trên 1 VPS từ trống đến chạy live, bao gồm:
- Cài Node.js, Docker, PM2
- Frontend Next.js PM2 cluster
- Backend NestJS Docker, scale 2 container
- Postgres + Redis internal
- Nginx/Caddy multi-domain + HTTPS auto
- SSH tunnel + GUI DB connection
- Backup snapshot + DB dump
1️⃣ Chuẩn bị VPS
- VPS: 4 vCPU, 8 GB RAM, 75 GB NVMe, Ubuntu 24.04 (hoặc 22.04)
- Login bằng user
deploy(không dùng root trực tiếp)
- SSH key authentication: upload public key vào
/home/deploy/.ssh/authorized_keys
- Cập nhật hệ thống:
- Firewall (mở 22, 80, 443):
2️⃣ Cài Node.js, PM2
- PM2 startup:
3️⃣ Cài Docker + Docker Compose
- Logout → login lại để cập nhật nhóm docker
4️⃣ Setup Backend Docker (NestJS) + Postgres + Redis
- Tạo thư mục:
.envfile:
docker-compose.yml:
- Scale 2 container:
5️⃣ Setup Frontend Next.js + PM2
- Clone project FE:
- Chạy PM2 cluster:
- Project 2: port 4000, PM2 cluster tương tự
6️⃣ Setup Nginx Reverse Proxy + Load Balancing
sudo nano /etc/nginx/sites-available/pingtotalk.com:
- Kích hoạt:
- Project 2: tương tự, port FE 4000, backend 4001/4002
7️⃣ HTTPS với Let’s Encrypt
- HTTPS tự động, redirect HTTP → HTTPS
8️⃣ SSH Tunnel + GUI DB
- SSH tunnel cho DB:
- GUI: TablePlus / DBeaver / pgAdmin → connect
localhost:5432
- DB không public → bảo mật cao
9️⃣ Backup / Snapshot
- Snapshot VPS định kỳ
- Backup Postgres:
10️⃣ Multi-domain / Multi-project
- Nginx / Caddy → server block cho mỗi domain
- FE PM2 + BE Docker → port riêng
- DB + Redis → internal network, schema riêng nếu nhiều project
✅ Hoàn thiện
- FE PM2 cluster → tận dụng 4 CPU
- BE Docker scale 2 container + Nginx LB
- Postgres + Redis → internal, secure
- Multi-domain → Nginx / Caddy
- HTTPS → Let’s Encrypt
- SSH Tunnel → GUI DB an toàn
- Backup → snapshot + DB dump