پرش به محتوا

اجرای برنامه‌ی Node.js به‌صورت سرویس systemd

یک برنامه‌ی Node.js را با کاربر اختصاصی، ری‌استارت خودکار، محدودیت‌های امنیتی systemd و پشت Nginx اجرا کنید؛ بدون نیاز به pm2.

Ubuntu 24.04 LTSسطح: متوسطبرای: Ubuntu 24.04 LTS، Ubuntu 26.04 LTS، Ubuntu 22.04 LTSبه‌روزرسانی: ۱۶ آبان ۱۴۰۵

۱. نصب Node.js

نسخه‌ی مخزن Ubuntu برای بسیاری از برنامه‌ها کافی است:

bash
sudo apt update
sudo apt install -y nodejs npm
node --version

اگر نسخه‌ی جدیدتری لازم دارید، فایل باینری رسمی را از nodejs.org دانلود و در /opt باز کنید.

۲. کاربر و پوشه‌ی برنامه

bash
sudo useradd -r -m -d /opt/api -s /usr/sbin/nologin api
sudo -u api git clone https://git.example.ir/team/api.git /opt/api/app
cd /opt/api/app && sudo -u api npm ci --omit=dev

۳. فایل سرویس

bash
sudo nano /etc/systemd/system/api.service
ini
[Unit]
Description=Company API (Node.js)
After=network-online.target
Wants=network-online.target

[Service]
User=api
WorkingDirectory=/opt/api/app
Environment=NODE_ENV=production
Environment=PORT=4000
EnvironmentFile=-/etc/api.env
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=3

# محدودیت‌های امنیتی
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/opt/api/app/uploads

[Install]
WantedBy=multi-user.target

رمزها و کلیدها را در /etc/api.env بگذارید، با مجوز 600 و مالکیت root.

۴. اجرا و لاگ

bash
sudo systemctl daemon-reload
sudo systemctl enable --now api
systemctl status api --no-pager
journalctl -u api -f

۵. پشت Nginx

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

برنامه را فقط روی 127.0.0.1 گوش‌به‌زنگ کنید تا مستقیم از بیرون در دسترس نباشد.

۶. انتشار نسخه‌ی جدید

bash
cd /opt/api/app
sudo -u api git pull
sudo -u api npm ci --omit=dev
sudo systemctl restart api