سامانه فعالآپتایم 99.9%دیتاسنتر: ایران / مبین‌وانتحویل آنی و خودکار
← بلاگ

آموزش نصب Node.js روی سرور مجازی و اجرای دائمی با PM2

2 مرداد 1405

Node.js یکی از پرکاربردترین محیط‌های اجرای برنامه روی سرور است؛ از API و سایت گرفته تا ربات و ابزارهای اتوماسیون. در این راهنما Node.js را روی سرور مجازی اوبونتو نصب می‌کنیم، برنامه را با PM2 دائمی می‌کنیم و در نهایت آن را با دامنه و HTTPS در دسترس قرار می‌دهیم.

قدم ۱: نصب Node.js نسخه به‌روز

نسخه‌ای که در مخزن پیش‌فرض اوبونتو است معمولاً قدیمی است. بهتر است از مخزن رسمی NodeSource استفاده کنید:

apt update
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs

بررسی نصب:

node -v
npm -v

اگر نسخه ۲۰ نمایش داده شد، نصب موفق بوده است. برای پروژه‌هایی که به چند نسخه نیاز دارند، می‌توانید از nvm استفاده کنید.

قدم ۲: ساخت یک برنامه نمونه

برای تست، یک سرور ساده بسازید:

mkdir -p /var/www/myapp && cd /var/www/myapp
npm init -y
npm install express

فایل index.js:

const express = require('express');
const app = express();
app.get('/', (req, res) => res.send('سلام! برنامه Node در حال اجراست.'));
app.listen(3000, '127.0.0.1', () => console.log('running on 3000'));

توجه کنید که روی 127.0.0.1 گوش می‌دهیم نه 0.0.0.0؛ یعنی برنامه مستقیماً از اینترنت در دسترس نیست و فقط Nginx به آن دسترسی دارد. این کار امنیت را بالا می‌برد.

تست کنید:

node index.js

قدم ۳: اجرای دائمی با PM2

اگر برنامه را با node index.js اجرا کنید، با بستن ترمینال متوقف می‌شود. PM2 این مشکل را حل می‌کند:

npm install -g pm2
pm2 start index.js --name myapp
pm2 status

برای اینکه بعد از ری‌استارت سرور هم خودکار اجرا شود:

pm2 startup
pm2 save

دستورهای پرکاربرد PM2:

pm2 logs myapp        # دیدن لاگ زنده
pm2 restart myapp     # ری‌استارت
pm2 stop myapp        # توقف
pm2 delete myapp      # حذف از لیست
pm2 monit             # نمایش مصرف منابع

قدم ۴: قرار دادن پشت Nginx

حالا Nginx را طوری تنظیم می‌کنیم که درخواست‌های دامنه را به برنامه Node بفرستد:

apt install nginx -y
nano /etc/nginx/sites-available/myapp
server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

فعال‌سازی و ری‌لود:

ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

هدرهای Upgrade و Connection برای WebSocket لازم‌اند؛ اگر برنامه شما از Socket.io استفاده می‌کند، بدون آن‌ها کار نمی‌کند.

قدم ۵: فعال کردن HTTPS

apt install certbot python3-certbot-nginx -y
certbot --nginx -d example.com -d www.example.com

Certbot گواهی را می‌گیرد، کانفیگ Nginx را به‌روز می‌کند و تمدید خودکار را تنظیم می‌کند.

نکات مهم برای محیط واقعی

  • متغیرهای محیطی: مقادیر حساس را در فایل .env بگذارید و آن را در گیت قرار ندهید.
  • حالت production: با NODE_ENV=production اجرا کنید تا سرعت بیشتر شود.
  • استفاده از چند هسته: اگر سرور چند هسته دارد، با pm2 start index.js -i max از همه هسته‌ها استفاده کنید.
  • محدودیت رم: برای جلوگیری از نشت حافظه: pm2 start index.js --max-memory-restart 300M
  • فایروال: فقط پورت‌های ۸۰، ۴۴۳ و SSH را باز بگذارید؛ پورت ۳۰۰۰ نباید از بیرون باز باشد.

حداقل منابع مورد نیاز

یک برنامه ساده Node با یک هسته پردازنده و ۱ گیگابایت رم به‌خوبی اجرا می‌شود. اگر برنامه شما دیتابیس هم روی همان سرور دارد، ۲ گیگابایت رم توصیه می‌شود.

جمع‌بندی

با PM2 برنامه شما دائمی می‌شود و با Nginx و SSL به‌شکل حرفه‌ای در دسترس قرار می‌گیرد. اگر می‌خواهید ربات یا اسکریپت پایتون هم اجرا کنید، مقاله اجرای دائمی ربات پایتون روی سرور را ببینید.

اگر هنوز سرور ندارید، می‌توانید از صفحه پلن‌های سرور مجازی ایران یک سرور با تحویل آنی تهیه کنید؛ سرور بلافاصله پس از پرداخت و در کمتر از یک دقیقه تحویل داده می‌شود.

Node.jsآموزشسرور مجازیبرنامه‌نویسی

سرور مجازی ایران با تحویل آنی می‌خواهید؟

تحویل خودکار در کمتر از یک دقیقه، دیتاسنتر داخل ایران، دسترسی کامل root و پشتیبانی 24 ساعته.

مشاهده پلن‌ها و قیمت‌ها