Skip to content
VDS · ویب سائٹس اور ویب سرورز

systemd کے تحت Node.js ایپلیکیشن

VDS پر Node ایپلیکیشن کیسے چلائیں کہ SSH منقطع ہونے اور مشین ری بوٹ ہونے پر بھی قائم رہے: systemd یونٹ، ماحولیاتی متغیرات، لاگز۔

اپ ڈیٹ 23 اگست، 2026

SSH سیشن کے ساتھ دستی طور پر شروع کیا گیا node index.js ختم ہو جاتا ہے۔ ایپلیکیشن کو مستقل طور پر چلتے رکھنے اور ری بوٹ کے بعد دوبارہ شروع ہونے کے لیے، اسے systemd سروس کے طور پر چلائیں — یہ سسٹم کا بلٹ اِن میکانزم ہے، لہٰذا کچھ انسٹال کرنے کی ضرورت نہیں۔

تیاری

Node کو سرکاری ریپوزٹری سے انسٹال کریں، پرانے سسٹم پیکج سے نہیں:

curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
node -v

ایک مخصوص صارف بنائیں — ایپلیکیشن کو root کے طور پر نہیں چلنا چاہیے:

useradd -r -m -d /srv/app -s /usr/sbin/nologin appuser
chown -R appuser:appuser /srv/app
sudo -u appuser npm ci --omit=dev --prefix /srv/app

systemd سروس

/etc/systemd/system/myapp.service فائل:

[Unit]
Description=My Node app
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/srv/app
EnvironmentFile=/srv/app/.env
ExecStart=/usr/bin/node /srv/app/index.js
Restart=always
RestartSec=5
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now myapp
systemctl status myapp

Restart=always کریش کے بعد پروسیس کو دوبارہ شروع کرتا ہے۔ EnvironmentFile ایک سادہ KEY=value فائل ہے جس میں نہ کوٹس ہوتے ہیں اور نہ export؛ اس کی اجازتیں 600 پر سیٹ کریں، کیونکہ اس میں پاس ورڈز محفوظ ہوتے ہیں۔

پراکسی کے ذریعے ظاہر کرنا

ایپلیکیشن کو صرف 127.0.0.1:3000 پر سننا چاہیے، اور سرٹیفکیٹ والا ویب سرور اسے باہر تک پہنچاتا ہے:

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

مزید تفصیلات کے لیے، reverse proxy اور Let's Encrypt دیکھیں۔ اگر ایپلیکیشن 0.0.0.0 پر سنتی ہے، تو یہ پراکسی کو بائی پاس کرتے ہوئے اور بغیر انکرپشن کے انٹرنیٹ سے قابل رسائی ہوتی ہے۔

لاگز اور اپڈیٹس

journalctl -u myapp -f
journalctl -u myapp --since "1 hour ago" -p err
systemctl restart myapp

stdout پر آؤٹ پٹ خود بخود جرنل میں جاتا ہے — آپ کو اپنی لاگ فائلیں یا لاگ روٹیشن سیٹ اپ کرنے کی ضرورت نہیں۔

عام غلطیاں

علامتوجہ
status=203/EXECExecStart میں node یا فائل کا غلط پاتھ — مطلق پاتھ استعمال کریں
سروس لوپ میں ری اسٹارٹ ہوتی ہےایپلیکیشن اسٹارٹ اپ پر کریش ہوتی ہے: journalctl -u myapp -n 50 چیک کریں
EADDRINUSEدستی طور پر شروع کیا گیا پروسیس اب بھی چل رہا ہے: ss -tulpn | grep 3000
SSH پر کام کرتا ہے، مگر سروس کے طور پر نہیںانوائرنمنٹ ویری ایبلز غائب ہیں — systemd کے پاس وہ نہیں ہوتے، انہیں EnvironmentFile میں سیٹ کریں
VDS-1 پر بلڈ میموری سے باہر ہو جاتا ہےلوکل طور پر بلڈ کریں اور تیار بلڈ مشین پر اپلوڈ کریں

systemd کے اوپر pm2 نہ رکھیں۔ ایک پروسیس پر دو سپروائزرز الجھن پیدا کرتے ہیں: systemd پروسیس کو زندہ سمجھتا ہے جبکہ pm2 اسے ری اسٹارٹ کر رہا ہوتا ہے۔