Skip to content
VDS · వెబ్‌సైట్‌లు మరియు వెబ్ సర్వర్‌లు

systemd కింద Node.js అప్లికేషన్

SSH డిస్కనెక్ట్ మరియు మెషీన్ రీబూట్ను తట్టుకునేలా VDSపై Node అప్లికేషన్ను ఎలా నడపాలి: 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 అనేది కోట్స్ లేకుండా, export లేకుండా ఉండే సాధారణ KEY=value ఫైల్; అందులో పాస్‌వర్డ్‌లు ఉంటాయి కాబట్టి దాని పర్మిషన్లను 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;
}

మరిన్ని వివరాలకు రివర్స్ ప్రాక్సీ మరియు Let's Encrypt చూడండి. అప్లికేషన్ 0.0.0.0 పైన వినిపిస్తే, అది ప్రాక్సీని దాటి, ఎన్‌క్రిప్షన్ లేకుండా ఇంటర్నెట్ నుండి అందుబాటులో ఉంటుంది.

లాగ్‌లు మరియు అప్‌డేట్‌లు

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

stdout కు వెళ్లే అవుట్‌పుట్ ఆటోమేటిక్‌గా journal కు చేరుతుంది — మీరు స్వంత లాగ్ ఫైల్‌లు లేదా లాగ్ రొటేషన్ సెట్ చేసుకోవాల్సిన అవసరం లేదు.

సాధారణ ఎర్రర్లు

లక్షణంకారణం
status=203/EXECnode కు లేదా ExecStart లోని ఫైల్‌కు తప్పు పాత్ — absolute పాత్‌లు వాడండి
సర్వీస్ లూప్‌లో రీస్టార్ట్ అవుతుందిస్టార్టప్‌లో అప్లికేషన్ క్రాష్ అవుతుంది: journalctl -u myapp -n 50 చూడండి
EADDRINUSEమాన్యువల్‌గా ప్రారంభించిన ప్రాసెస్ ఇంకా నడుస్తోంది: ss -tulpn | grep 3000
SSH లో పనిచేస్తుంది, కానీ సర్వీస్‌గా పనిచేయదుఎన్విరాన్‌మెంట్ వేరియబుల్స్ లేవు — systemd కి అవి ఉండవు, వాటిని EnvironmentFile లో సెట్ చేయండి
VDS-1 పై బిల్డ్‌కు మెమరీ సరిపోదులోకల్‌గా బిల్డ్ చేసి, పూర్తయిన బిల్డ్‌ను మెషీన్‌కు అప్‌లోడ్ చేయండి

systemd పైన pm2 పెట్టకండి. ఒకే ప్రాసెస్‌పై రెండు సూపర్‌వైజర్లు గందరగోళం సృష్టిస్తాయి: pm2 దాన్ని రీస్టార్ట్ చేస్తున్నప్పుడు systemd ఆ ప్రాసెస్ బతికే ఉందని భావిస్తుంది.