Node.js aplikácia pod systemd
Ako spustiť Node aplikáciu na VDS tak, aby prežila odpojenie SSH aj reštart stroja: systemd unit, premenné prostredia, logy.
Aktualizované 23. augusta 2026
Ručne spustený node index.js zanikne spolu s SSH reláciou. Aby aplikácia bežala natrvalo a naštartovala sa aj po reštarte, spusti ju ako systemd službu — je to vstavaný mechanizmus systému, takže netreba nič inštalovať.
Príprava
Nainštaluj Node z oficiálneho repozitára, nie zo starého systémového balíka:
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt install -y nodejs
node -v
Vytvor vyhradeného používateľa — aplikácia nesmie bežať ako 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 služba
Súbor /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 vráti proces späť do behu po páde. EnvironmentFile je obyčajný súbor KEY=value bez úvodzoviek a bez export; nastav mu práva 600, keďže obsahuje heslá.
Sprístupnenie cez proxy
Aplikácia má počúvať len na 127.0.0.1:3000 a webový server s certifikátom ju obsluhuje navonok:
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;
}
Viac podrobností nájdeš v reverse proxy a Let's Encrypt. Ak aplikácia počúva na 0.0.0.0, je dostupná z internetu s obídením proxy a bez šifrovania.
Logy a aktualizácie
journalctl -u myapp -f
journalctl -u myapp --since "1 hour ago" -p err
systemctl restart myapp
Výstup na stdout ide automaticky do journalu — nemusíš si nastavovať vlastné log súbory ani rotáciu logov.
Časté chyby
| Príznak | Príčina |
|---|---|
status=203/EXEC | Nesprávna cesta k node alebo k súboru v ExecStart — použi absolútne cesty |
| Služba sa reštartuje v slučke | Aplikácia padá pri štarte: skontroluj journalctl -u myapp -n 50 |
EADDRINUSE | Ručne spustený proces stále beží: ss -tulpn | grep 3000 |
| Cez SSH to funguje, ako služba nie | Chýbajú premenné prostredia — systemd ich nemá, nastav ich v EnvironmentFile |
| Buildu na VDS-1 dôjde pamäť | Buildni lokálne a hotový build nahraj na stroj |
Nedávaj pm2 navrch systemd. Dvaja supervízori nad jedným procesom robia zmätok: systemd považuje proces za živý, kým pm2 ho reštartuje.