اگر پروژۀ Node.js شما آمادۀ اجراست و میخواهید آن را از محیط توسعه به یک سرور واقعی منتقل کنید، باید Node.js را روی VPS نصب کنید، پروژه را به سرور ببرید و اجرای آن را برای محیط Production تنظیم کنید. در این راهنما از اتصال به سرور و نصب Node.js و npm شروع میکنیم، سپس پروژه را اجرا میکنیم، با PM2 آن را همیشه فعال نگه میداریم و در پایان سراغ Nginx، دامنه، SSL و تنظیمات امنیتی پایه میرویم.
Node.js چیست؟
Node.js یک محیط اجرای JavaScript است که امکان اجرای کد جاوااسکریپت را خارج از مرورگر فراهم میکند. این پلتفرم بر پایۀ موتور V8 گوگل ساخته شده و برای توسعۀ API، سرویسهای Backend، وباپلیکیشنها و برنامههای Real-Time کاربرد زیادی دارد.
یکی از ویژگیهای مهم Node.js مدل اجرای غیرهمزمان آن است. این مدل کمک میکند برنامه بتواند تعداد زیادی درخواست را بدون متوقف کردن فرایند اصلی مدیریت کند. به همین دلیل Node.js در پروژههایی که با درخواستهای همزمان زیادی سروکار دارند، انتخاب رایجی است.
npm هم بخش مهمی از اکوسیستم Node.js است. با استفاده از آن میتوانید پکیجها و وابستگیهای پروژه را مدیریت کنید و به مجموعۀ بزرگی از ابزارها و کتابخانههای آماده دسترسی داشته باشید.
در ادامه فرض میکنیم قرار است پروژه Node.js را روی یک VPS لینوکسی، مانند Ubuntu، راهاندازی کنید.
چرا Node.js را روی سرور مجازی اجرا کنیم؟
اجرای پروژه روی VPS یعنی برنامۀ شما به کامپیوتر شخصی وابسته نیست و سرور میتواند بهصورت دائمی روشن بماند و در عین حال کنترل بیشتری روی منابع، سیستمعامل و تنظیمات در اختیارتان قرار دهد. در ادامه، به دلایل نصب Node.js روی سرور مجازی اشاره میکنیم:
- اجرای دائمی پروژه بدون نیاز به روشن ماندن کامپیوتر شخصی؛
- دسترسی به منابع اختصاصیافته به VPS؛
- امکان نصب نسخۀ Node.js و پکیجهای موردنیاز هر پروژه؛
- کنترل بیشتر روی سیستمعامل و تنظیمات سرور؛
- امکان اتصال پروژه به دامنه و SSL؛
- اجرای چند پروژه Node.js روی یک سرور، در صورت کافی بودن منابع؛
- مدیریت و مانیتورینگ پردازشها با ابزارهایی مانند PM2.
این ترکیب از کنترل و دسترسی دائمی، VPS را به گزینهای مناسب برای میزبانی APIها، وباپلیکیشنها و سرویسهای Node.js تبدیل میکند.
پیشنیازهای نصب Node.js روی VPS
پیش از شروع، یک VPS با سیستمعامل لینوکسی مانند Ubuntu نیاز دارید. اطلاعات و دسترسیهای زیر را هم آماده داشته باشید:
- IP سرور
- نام کاربری و رمز عبور یا کلید SSH
- دسترسی SSH به سرور
- یک نسخه پشتیبانیشده از Ubuntu یا توزیع لینوکسی مناسب
- دامنه، اگر میخواهید پروژه از طریق نام دامنه در دسترس باشد
برای اتصال به VPS لینوکسی از SSH استفاده کنید:
ssh root@SERVER_IP
بعد از ورود به سرور، بهتر است ابتدا فهرست پکیجها و خود سیستم را بهروزرسانی کنید:
sudo apt update && sudo apt upgrade -y
اگر نسخۀ Ubuntu نصبشده روی سرور را نمیدانید، این دستور اطلاعات آن را نمایش میدهد:
lsb_release -a
برای اجرای خود برنامه بهتر است از یک کاربر معمولی استفاده کنید و دسترسی root را به کارهایی محدود کنید که واقعاً به سطح دسترسی مدیریتی نیاز دارند. در این حالت میتوانید برای فرمانهای مدیریتی از sudo استفاده کنید.
آموزش نصب Node.js روی سرور Ubuntu
در این بخش قصد داریم آموزش نصب Node.js در لینوکس را گامبهگام با یکدیگر پیش ببریم. برای نصب Node.js روی سرویس مجازی لینوکس چند روش وجود دارد. در این راهنما از مخزن NodeSource استفاده میکنیم؛ روشی ساده و رایج برای نصب نسخههای موردنیاز Node.js روی Ubuntu.
ابتدا curl را نصب کنید:
sudo apt install curl -y
سپس مخزن نسخۀ موردنظر Node.js را اضافه کنید. برای نصب نسخۀ LTS میتوانید از این دستور استفاده کنید:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
حالا Node.js را نصب کنید:
sudo apt install nodejs -y
بعد از پایان نصب، نسخۀ Node.js را بررسی کنید:
node -v
برای اطمینان از نصب npm هم این دستور را اجرا کنید:
npm -v
اگر هر دو دستور شماره نسخه را برگردانند، Node.js و npm روی سرور نصب شدهاند و میتوانید سراغ اجرای پروژه بروید.
مدیریت چند نسخۀ Node.js با NVM
اگر چند پروژه روی سرور دارید و هرکدام به نسخۀ متفاوتی از Node.js وابستهاند، NVM انتخاب منعطفتری است. با NVM میتوانید چند نسخۀ Node.js را کنار هم نصب کنید و بدون حذف نسخههای قبلی، نسخۀ فعال را تغییر دهید.
پس از نصب NVM، برای نصب نسخۀ LTS میتوانید این دستور را اجرا کنید:
nvm install --lts
سپس نسخۀ فعال را بررسی کنید:
node -v
اینکه Node.js را با NodeSource نصب کنید یا NVM، به ساختار پروژه و شیوۀ مدیریت سرور بستگی دارد. برای سروری که چند پروژه با نسخههای متفاوت دارد، NVM معمولاً مدیریت نسخهها را سادهتر میکند.
آموزش اجرای پروژه Node.js روی VPS
بعد از نصب Node.js، باید کد پروژه را به سرور منتقل کنید. اگر پروژه در یک مخزن Git قرار دارد، ابتدا Git را نصب کنید:
sudo apt install git -y
سپس مخزن پروژه را روی سرور کلون کنید:
git clone https://github.com/USERNAME/PROJECT.git
وارد پوشه پروژه شوید:
cd PROJECT
برای نصب وابستگیها، دستور زیر را اجرا کنید:
npm install
اگر پروژه برای محیط Production آماده شده است، میتوانید بهجای آن از دستور زیر استفاده کنید:
npm ci --omit=dev
حالا نوبت اجرای برنامه است. دستور دقیق به اسکریپتهای تعریفشده در فایل package.json بستگی دارد، اما در بسیاری از پروژهها این دستور کافی است:
npm start
اگر برنامه روی پورت 3000 اجرا میشود، برای یک تست اولیه میتوانید IP سرور را همراه با همان پورت در مرورگر باز کنید:
http://SERVER_IP:3000
اگر برنامه از این آدرس در دسترس بود، اجرای اولیه درست انجام شده است. در مرحلۀ بعد بهتر است پردازش را طوری مدیریت کنید که با قطع اتصال SSH یا راهاندازی مجدد سرور متوقف نشود.
اجرای دائمی Node.js با PM2
اجرای مستقیم برنامه با npm start برای تست مناسب است، اما برای استفادۀ دائمی روی سرور کافی نیست و اگر نشست SSH بسته شود یا پردازش از کار بیفتد، برنامه هم متوقف میشود. PM2 برای مدیریت همین وضعیت استفاده میشود و کنترل پردازشهای Node.js را سادهتر میکند. برای اجرای دائمی Node.js با PM2 این مراحل را انجام دهید:
PM2 را بهصورت سراسری نصب کنید:
sudo npm install -g pm2
سپس از داخل پوشه پروژه، برنامه را با PM2 اجرا کنید:
pm2 start app.js --name my-node-app
اگر نقطۀ ورود پروژه از طریق اسکریپت start در package.json تعریف شده است، میتوانید این روش را استفاده کنید:
pm2 start npm --name my-node-app -- start
برای دیدن فهرست برنامههای تحت مدیریت PM2 این دستور را اجرا کنید:
pm2 list
برای مشاهدۀ لاگهای برنامه:
pm2 logs my-node-app
برای راهاندازی مجدد، توقف یا حذف برنامه از PM2 میتوانید از این دستورها استفاده کنید:
pm2 restart my-node-app pm2 stop my-node-app pm2 delete my-node-app
برای اینکه برنامه بعد از Restart سرور هم بهصورت خودکار اجرا شود، ابتدا این دستور را وارد کنید:
pm2 startup
PM2 در خروجی یک دستور متناسب با سیستم شما نمایش میدهد. همان دستور را اجرا کنید و بعد وضعیت فعلی پردازشها را ذخیره کنید:
pm2 save
از اینجا به بعد PM2 اجرای برنامه را مدیریت میکند و تنظیمات ذخیرهشده میتوانند پس از راهاندازی مجدد سرور دوباره بازیابی شوند.
اتصال Node.js به دامنه و Nginx
در محیط Production معمولاً بهتر است کاربر مستقیماً به پورت برنامه Node.js، مثلاً 3000، متصل نشود. راه رایج این است که Nginx بهعنوان Reverse Proxy جلوی برنامه قرار بگیرد و درخواستهای وب را به پورت داخلی Node.js منتقل کند. اگر با نقش وبسرور آشنا نیستید، مقالۀ «Nginx چیست» میتواند مقدمۀ مناسبی برای این بخش باشد.
برای اتصال Node.js به دامنه و Nginx مراحل زیر را گامبهگام انجام دهید.
ابتدا Nginx را نصب کنید:
sudo apt install nginx -y
سپس یک فایل تنظیمات برای دامنه بسازید:
sudo nano /etc/nginx/sites-available/my-node-app
نمونۀ تنظیمات میتواند به این شکل باشد:
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_cache_bypass $http_upgrade;
}
}
بعد از ذخیرۀ فایل، آن را فعال کنید:
sudo ln -s /etc/nginx/sites-available/my-node-app /etc/nginx/sites-enabled/
پیش از Reload کردن Nginx، صحت تنظیمات را بررسی کنید:
sudo nginx -t
اگر خطایی گزارش نشد، Nginx را Reload کنید:
sudo systemctl reload nginx
حالا رکورد DNS دامنه را به IP سرور متصل کنید. پس از انتشار تغییرات DNS، درخواستهای کاربران ابتدا به Nginx میرسند و Nginx آنها را به برنامۀ Node.js روی پورت داخلی 3000 هدایت میکند.
برای فعالسازی HTTPS میتوانید از Certbot و گواهی رایگان Let’s Encrypt استفاده کنید:
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d example.com -d www.example.com
Certbot گواهی SSL را دریافت میکند و تنظیمات Nginx را برای استفاده از HTTPS بهروزرسانی میکند.
امنیت Node.js روی VPS
بعد از راهاندازی برنامه، امنیت سرور را نباید به مرحلۀ بعد موکول کنید. چند تنظیم پایه به شکل زیر میتواند سطح دسترسیهای غیرضروری را کم کند و نگهداری سرور را قابلکنترلتر نگه دارد. این تنظیمات عبارتاند از:
- اجرای برنامه با کاربری غیر از root
- استفاده از SSH Key بهجای رمز عبور، در صورت امکان
- فعال کردن فایروال و باز گذاشتن فقط پورتهای موردنیاز
- بهروزرسانی منظم سیستمعامل و پکیجها
- استفاده از پکیجهای معتبر و بررسی وابستگیهای پروژه
- نگهداری اطلاعات حساس در Environment Variables
- قرار ندادن رمز دیتابیس و API Key داخل کد
- فعالسازی HTTPS برای دامنه
- بررسی دورهای لاگهای Node.js و Nginx
برای فعالسازی فایروال با UFW میتوانید این دستورها را اجرا کنید:
sudo ufw allow OpenSSH sudo ufw allow 'Nginx Full' sudo ufw enable
با این تنظیمات، دسترسی SSH و ترافیک وب روی پورتهای 80 و 443 مجاز میماند و سایر پورتها بهصورت پیشفرض در دسترس عمومی نخواهند بود. اگر میخواهید تنظیمات امنیتی سرور را کاملتر کنید، راهنمای امنیت سرور لینوکس میتواند ادامۀ مناسبی برای این بخش باشد.
جمعبندی
راهاندازی Node.js روی VPS فقط به نصب خود Node.js ختم نمیشود. بعد از نصب Node.js و npm باید پروژه را به سرور منتقل کنید، وابستگیها را نصب و برنامه را اجرا کنید. برای اجرای دائمی، PM2 مدیریت پردازش را بر عهده میگیرد و Nginx میتواند درخواستهای دامنه را به برنامه هدایت کند.
در یک محیط Production، تنظیم دامنه و SSL در کنار فایروال و چند اصل امنیتی پایه هم بخشی از فرایند راهاندازی است. با انجام این مراحل، سرور برای میزبانی پایدار پروژه Node.js آماده میشود.
سؤالات متداول
برای نصب Node.js روی VPS چه سیستمعاملی مناسب است؟
Ubuntu یکی از گزینههای رایج برای اجرای Node.js است و ابزارها و منابع آموزشی زیادی برای آن وجود دارد. با این حال، انتخاب سیستمعامل بهتر است با نیازهای پروژه و سرویسهای دیگری که روی سرور اجرا میکنید هماهنگ باشد.
آیا برای اجرای Node.js روی VPS به npm نیاز داریم؟
در بیشتر پروژهها بله. npm برای نصب و مدیریت پکیجها و وابستگیهای Node.js استفاده میشود و معمولاً همراه Node.js نصب میشود.
آیا Node.js بدون PM2 هم روی VPS اجرا میشود؟
بله. میتوانید برنامه را مستقیماً با node یا npm start اجرا کنید. PM2 زمانی کاربرد بیشتری دارد که بخواهید پردازش را دائمی نگه دارید، آن را مدیریت کنید و اجرای خودکار بعد از Restart سرور را تنظیم کنید.
آیا میتوان چند پروژه Node.js را روی یک VPS اجرا کرد؟
بله، به شرطی که منابع سرور برای Workload پروژهها کافی باشد و هر برنامه روی پورت مناسب اجرا شود. Nginx هم میتواند درخواستهای دامنههای مختلف را به پروژه مربوط به هر دامنه هدایت کند.
چرا بهتر است Node.js را پشت Nginx اجرا کنیم؟
Nginx میتواند بهعنوان Reverse Proxy بین کاربر و برنامه Node.js قرار بگیرد. در این حالت مدیریت دامنه، HTTPS و درخواستهای ورودی سادهتر میشود و لازم نیست پورت داخلی برنامه Node.js مستقیماً در دسترس کاربران باشد.






