آموزش نصب Node.js روی سرور مجازی و اجرای دائمی با PM2
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 بهشکل حرفهای در دسترس قرار میگیرد. اگر میخواهید ربات یا اسکریپت پایتون هم اجرا کنید، مقاله اجرای دائمی ربات پایتون روی سرور را ببینید.
اگر هنوز سرور ندارید، میتوانید از صفحه پلنهای سرور مجازی ایران یک سرور با تحویل آنی تهیه کنید؛ سرور بلافاصله پس از پرداخت و در کمتر از یک دقیقه تحویل داده میشود.
سرور مجازی ایران با تحویل آنی میخواهید؟
تحویل خودکار در کمتر از یک دقیقه، دیتاسنتر داخل ایران، دسترسی کامل root و پشتیبانی 24 ساعته.
مشاهده پلنها و قیمتها