VPS — server sozlash, PM2, deploy qilish

~20 daq · NestJS · Deployment

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 .env da, 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.