Node.js uygulaması VDS’te nasıl durur?
Node süreci systemd veya PM2 altında yaşar; SSH kapanınca ölmeyecek. Nginx (veya Caddy) 80/443’ü alıp reverse proxy ile 127.0.0.1:3000’e iletir. Node’u root ve 80’de çalıştırmayın. Ortam değişkenleri .env, chmod 600.
Boyut: küçük API 2 vCPU / 2–4 GB. SSR (Next.js) ve build aynı makinede 4–8 GB. Build’i CI’da yapıp imaj/artifact kopyalamak üretim RAM’ini korur. next start yerine node server.js custom server ise PORT’u Nginx ile eşleyin. sharp ve puppeteer sistem kütüphanesi ister (libnss, fonts); apt logs okuyun. CLUSTER_WORKERS=1 ile başlayın. .env.production ve .env.local karışmasın. healthcheck 30 saniyede bir 200 dönmeli; 502’de Nginx upstream’i işaretler. Log’a istek gövdesi (kart, şifre) basmayın.
Node kurulumu ve uygulama ayağa kaldırma
nvm: curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash sonra nvm install --lts. Sistem paketi: NodeSource veya distro nodejs (sürüm eski olabilir). git clone, npm ci --omit=dev, npm run build (varsa).
Doğrudan: node dist/server.js. PM2: pm2 start dist/server.js --name api -i 1 (cluster’ı bellek yeteneğine göre). pm2 save && pm2 startup systemd. Port: PORT=3000. journalctl / pm2 logs. NODE_ENV=production unutulursa Next.js geliştirme bellek yer. native modül (bcrypt, sharp) için apt install -y build-essential python3. PM2 ecosystem.config.cjs içinde env_production ve max_memory_restart: '512M' kaçakları keser. cluster mode (-i max) websocket sticky olmadan oturum dağıtır; sticky veya Redis session kullanın. health endpoint /healthz Nginx health_check veya dış probe için. Uncaught exception için process.on loglayın ama sessizce yutmayın.
Nginx reverse proxy ve SSL
server { listen 443 ssl; server_name api.ornek.com; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } WebSocket için Upgrade başlıkları şarttır.
certbot --nginx -d api.ornek.com. ufw allow OpenSSH && ufw allow 'Nginx Full'. nginx -t && systemctl reload nginx. Uygulama 0.0.0.0 yerine 127.0.0.1 dinlesin ki Node portu dışarı açık kalmasın.
Teşhis ve boyut tablosu
502: Node düşmüş (pm2 status). 504: uzun istek, proxy_read_timeout. EADDRINUSE: eski süreç. native addon: build-essential ve python. UnhandledRejection süreci öldürür; PM2 kaldırır ama kök neden logdadır.
| Uygulama | RAM | Süreç | Not |
|---|---|---|---|
| Küçük Express API | 2 GB | 1 fork | Xeon giriş |
| Next.js SSR | 4–8 GB | 1–2 | build ayrı |
| Queue worker + API | 8 GB | ayrı PM2 app | Redis |
| Çok uygulama | 16 GB | systemd slice | Ryzen |
Emriva ürün eşlemesi
Bu bölüm ürün eşlemesidir. Node üretim Xeon veya paralel işte Ryzen VDS, Ubuntu şablonu. Nginx reverse proxy ve Certbot yazıları tamamlayıcıdır. cPanel Node seçenekleri paylaşımlı pakette sınırlıdır; gerçek süreç VDS’tedir.
Destekte pm2 list, nginx -t ve dinlenen portu yazın; .env içeriğini yazmayın.
