VPS — server sozlash, PM2, deploy qilish
Muammodan boshlaylik
Ilova tayyor. Endi uni real servega chiqarish kerak. Birinchi marta VPS ga tegayotgan bo'lsangiz — qaerdan boshlash kerakligi noaniq ko'rinadi.
Bu darsda sifirdan: VPS sozlash, NestJS ilova deploy qilish, va PM2 bilan ishlatishni ko'ramiz.
VPS nima?
VPS (Virtual Private Server) — internetdagi o'zingizning virtual kompyuteringiz. 24/7 ishlaydi, o'z IP manzili bor.
O'zbekistonda mashhur provayderlar: Contabo, Hetzner, DigitalOcean.
Minimal tavsiya: Ubuntu 22.04, 2GB RAM, 2 CPU.
1. Serverga ulanish
# Lokal mashinadan
ssh root@YOUR_SERVER_IP
2. Yangilash va asosiy paketlar
apt update && apt upgrade -y
apt install -y git curl ufw
3. Firewall sozlash
ufw allow OpenSSH # SSH ni yopib qo'ymaslik uchun
ufw allow 80 # HTTP
ufw allow 443 # HTTPS
ufw enable
4. Node.js o'rnatish
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
node -v # → v20.x.x
5. PM2 o'rnatish
PM2 — Node.js ilovalar uchun process manager.
Hayotiy o'xshatma: xodimlarni boshqaruvchi menejer.
Menejer har bir xodimni kuzatib turadi. Xodim ish joyini tark etsa — darhol yangi xodim yollaydi. Ish ertaga ham davom etsin uchun ketma-ketlik ta'minlanadi.
PM2 ham shunday: ilova crash bo'lsa — avtomatik qayta ishga tushiradi.
npm install -g pm2
6. Kodni serverga ko'chirish
# Serverdа
mkdir -p /var/www/myapp
cd /var/www/myapp
git clone https://github.com/yourusername/myapp.git .
7. Environment va build
# .env faylni yaratish
nano .env
# → Barcha environment variable larni yozing
# Paketlarni o'rnatish
npm ci --only=production
# Build
npm run build
8. PM2 bilan ishga tushirish
# Ishga tushirish
pm2 start dist/main.js --name myapp
# Holat ko'rish
pm2 status
# Log ko'rish
pm2 logs myapp
# Qayta ishga tushirish
pm2 restart myapp
# Zero-downtime restart (connection uzilmaydi)
pm2 reload myapp
9. PM2 ni autostart sozlash
Server reboot bo'lganda PM2 avtomatik ishga tushsin:
pm2 startup
# → Chiqadigan buyruqni nusxa olib ishga tushiring
pm2 save
# → Hozirgi holatni saqlab qo'yadi
10. Nginx sozlash
apt install -y nginx
# Konfiguratsiya
nano /etc/nginx/sites-available/myapp
server {
listen 80;
server_name yoursite.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
11. SSL — Let's Encrypt
apt install -y certbot python3-certbot-nginx
certbot --nginx -d yoursite.com
12. Yangilanishlarni deploy qilish
Har safar yangi kod chiqarilganda:
cd /var/www/myapp
git pull origin main
npm ci --only=production
npm run build
pm2 reload myapp
Yoki script yozib qo'ying:
# deploy.sh
#!/bin/bash
cd /var/www/myapp
git pull origin main
npm ci --only=production
npm run build
pm2 reload myapp
echo "Deploy muvaffaqiyatli!"
chmod +x deploy.sh
./deploy.sh
PM2 asosiy buyruqlar
pm2 list # barcha processlar
pm2 status # qisqa holat
pm2 logs # barcha loglar
pm2 logs myapp # faqat myapp logi
pm2 logs myapp --lines 100 # oxirgi 100 qator
pm2 restart myapp # restart (brief downtime)
pm2 reload myapp # zero-downtime restart
pm2 stop myapp # to'xtatish
pm2 delete myapp # PM2 dan o'chirish
pm2 monit # real-time monitoring
Tez-tez uchraydigan xatolar
1. 502 Bad Gateway
Sababi: PM2 da app ishlamayapti.
Yechim: pm2 logs bilan xatoni ko'ring.
2. App crash bo'lib qayta ishga tushib turibdi
pm2 status → "errored" yoki restart soni ko'p
Yechim: pm2 logs myapp — xato nima ekanini aniqlang.
3. Environment variable topilmayapti
Sababi: .env fayl yo'q yoki PM2 uni ko'rmayapti.
Yechim: pm2 start dist/main.js --env production yoki ecosystem fayldan foydalaning.
Xulosa
Eslab qoling:
- VPS sozlash tartibi: Node → PM2 → Nginx → SSL
- PM2 — crash bo'lsa qayta ishga tushiradi, server reboot da ham ishlaydi
pm2 reload— zero-downtime restart (production da muhim)pm2 logs— birinchi navbatda xatolarni shu yerdan izlang- Barcha maxfiy ma'lumotlar
.envda, git ga kirmaydi
Tabriklaymiz! NestJS kursi tugadi.
Siz NestJS ning asoslaridan to production deploymentgacha bo'lgan barcha mavzularni o'rgandingiz: Controllers, Providers, Modules, Guards, Interceptors, TypeORM, Prisma, JWT, WebSockets, Microservices, Testing, Docker, va Deploy.