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/EXEC | node కు లేదా ExecStart లోని ఫైల్కు తప్పు పాత్ — absolute పాత్లు వాడండి |
| సర్వీస్ లూప్లో రీస్టార్ట్ అవుతుంది | స్టార్టప్లో అప్లికేషన్ క్రాష్ అవుతుంది: journalctl -u myapp -n 50 చూడండి |
EADDRINUSE | మాన్యువల్గా ప్రారంభించిన ప్రాసెస్ ఇంకా నడుస్తోంది: ss -tulpn | grep 3000 |
| SSH లో పనిచేస్తుంది, కానీ సర్వీస్గా పనిచేయదు | ఎన్విరాన్మెంట్ వేరియబుల్స్ లేవు — systemd కి అవి ఉండవు, వాటిని EnvironmentFile లో సెట్ చేయండి |
| VDS-1 పై బిల్డ్కు మెమరీ సరిపోదు | లోకల్గా బిల్డ్ చేసి, పూర్తయిన బిల్డ్ను మెషీన్కు అప్లోడ్ చేయండి |
systemd పైన pm2 పెట్టకండి. ఒకే ప్రాసెస్పై రెండు సూపర్వైజర్లు గందరగోళం సృష్టిస్తాయి: pm2 దాన్ని రీస్టార్ట్ చేస్తున్నప్పుడు systemd ఆ ప్రాసెస్ బతికే ఉందని భావిస్తుంది.