آنچه در این مقاله میخوانید
چطور یک برنامهی Node.js را برای محیط تولید روی سرور مجازی اوبونتو Ubuntu راهاندازی کنیم؟
۲۷ فروردین ۱۴۰۴
Node.js یک محیط اجرای جاوا اسکریپت متنباز است که برای ساخت برنامههای سمت سرور و اپلیکیشنهای تحت شبکه استفاده میشود. این پلتفرم روی سیستمعاملهای FreeBSD, macOS, Linux, Windows قابل اجرا است. اگرچه میتوان برنامههای Node.js را از طریق خط فرمان نیز اجرا کرد، اما در این مقاله تمرکز بر اجرای آنها به عنوان یک سرویس است. این یعنی برنامهها در صورت ریاستارت سرور یا بروز خطا مجددا راهاندازی شده و برای استفاده در محیط تولید (Production) ایمن خواهد بود.
در این آموزش، یک محیط آماده برای اجرای Node.js در سرور Ubuntu 22.04 راهاندازی میکنید. این سرور، یک برنامه Node.js را اجرا میکند که با استفاده از ابزار PM2 مدیریت میشود و دسترسی ایمن کاربران به برنامه از طریق یک Reverse Proxy با Nginx فراهم خواهد شد. سرور Nginx نیز با استفاده از گواهی رایگان Let’s Encrypt، امکان دسترسی به برنامه از طریق HTTPS را ارائه میدهد.
در ادامه خواهید خواند:
- پیش نیاز
- ساخت یک برنامهی Node.js
- نصب PM2
- راهاندازی Nginx بهعنوان یک Reverse Proxy
- جمع بندی
پیش نیاز
این مقاله با این فرض نوشته شده است که موارد زیر را در اختیار دارید.
- یک سرور Ubuntu 22.04 که مطابق با راهنمای تنظیمات اولیه سرور برای Ubuntu 22.04 آماده سازی شده باشد. شما باید یک کاربر غیر ریشه (non-root) با دسترسی sudo و یک فایروال فعال داشته باشید.
- یک نام دامنه که به IP عمومی سرور شما متصل شده باشد. در این آموزش، از دامنه example.com استفاده خواهد شد.
- Nginx نصب شده، مطابق با آموزش نحوه نصب Nginx در سرور مجازی اوبونتو Ubuntu.
- Nginx پیکربندی شده با SSL و استفاده از گواهیهای Let’s Encrypt. مقاله نحوه دریافت SSL در Nginx در سرور مجازی اوبونتو Ubuntu با Let’s Encrypt شما را در این فرآیند راهنمایی میکند.
- Node.js روی سرور شما نصب شده باشد. مقاله نحوه نصب Node.js روی سرور مجازی اوبونتو Ubuntu را دنبال کنید.
پس از انجام پیشنیازها، سرور شما صفحه پیشفرض دامنه را در آدرس https://example.com/
ارائه خواهد داد.

ساخت یک برنامهی Node.js
بیایید یک برنامه Hello World ایجاد کنیم که در پاسخ به هر درخواست HTTP عبارت “Hello World” را برگرداند. این برنامه نمونه به شما کمک میکند تا کار با Node.js را شروع کنید. شما میتوانید این برنامه را با برنامه خودتان جایگزین کنید؛ فقط مطمئن شوید که برنامهی شما برای شنود روی آدرس IP و پورتهای مناسب تنظیم شده باشد.
ابتدا با استفاده از ویرایشگر nano
یا هر ویرایشگر متن دلخواه خود، یک برنامه نمونه با نام hello.js
ایجاد کنید.
nano hello.js
کد زیر را داخل فایل قرار دهید.
const http = require('http');
const hostname = 'localhost';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World!\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
فایل را ذخیره کرده و از ویرایشگر خارج شوید. اگر از nano
استفاده میکنید، کلیدهای Ctrl+X
را بزنید. سپس زمانی که از شما پرسیده شد، Y
را فشار داده و Enter را بزنید.
این برنامه Node.js روی آدرس مشخص شده (localhost
) و پورت (3000
) گوش میدهد و عبارت “Hello World” را با کد موفقیت HTTP 200
باز میگرداند. از آنجایی که برنامه روی localhost
شنود میکند، کاربران راه دور قادر به اتصال به برنامه نخواهند بود.
برای تست برنامه، دستور زیر را وارد کنید.
node hello.js
خروجی زیر را دریافت خواهید کرد.
Output
Server running at http://localhost:3000/
نکته: اجرای برنامه Node.js به این روش باعث میشود تا سایر دستورات تا زمان متوقف کردن برنامه (با فشردن Ctrl+C
) مسدود شوند.
برای تست برنامه، یک نشست ترمینال دیگر روی سرور خود باز کنید و با استفاده از curl به localhost متصل شوید.
curl http://localhost:3000
اگر خروجی زیر را دریافت کردید، برنامه به درستی کار میکند و روی آدرس و پورت صحیح شنود میکند.
OutputHello World!
اگر خروجی مورد انتظار را دریافت نکردید، مطمئن شوید که برنامه Node.js شما در حال اجرا بوده و برای شنود روی آدرس و پورت صحیح پیکربندی شده باشد.
پس از اطمینان از عملکرد برنامه، برنامه را (اگر هنوز متوقف نشده است) با فشردن Ctrl+C
متوقف کنید.
با هاست ابری Node.js لیارا، برنامههای خود را با سرعت بالا و مقیاسپذیری بینظیر اجرا کنید!
✅ استقرار سریع و آسان✅ عملکرد بهینه✅ مقیاسپذیری خودکار✅ امنیت پیشرفته
خرید و راه اندازی هاست Node.js لیارا
نصب PM2
در ادامه بیایید PM2 را نصب کنیم؛ یک ابزار مدیریت پردازش برای برنامههای Node.js. PM2 این امکان را فراهم میکند تا برنامهها به صورت daemon اجرا شوند؛ به این معنی که به عنوان یک سرویس در پسزمینه اجرا خواهد شد.
برای نصب آخرین نسخه PM2 روی سرور از nmp
استفاده کنید.
sudo npm install pm2@latest -g
گزینه -g
به nmp
اعلام میکند که این ماژول را به صورت سراسری نصب کند تا در کل سیستم در دسترس باشد.
حالا با استفاده از دستور pm2 start
، برنامهی خود یعنی hello.js
را در پس زمینه اجرا کنیم.
pm2 start hello.js
این دستور همچنین برنامهی شما را به لیست پردازشهای PM2 اضافه میکند که هر بار با اجرای یک برنامه، خروجی آن نمایش داده میشود.
Output
...
[PM2] Spawning PM2 daemon with pm2_home=/home/sammy/.pm2
[PM2] PM2 Successfully daemonized
[PM2] Starting /home/sammy/hello.js in fork_mode (1 instance)
[PM2] Done.
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name │ mode │ ↺ │ status │ cpu │ memory │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0 │ hello │ fork │ 0 │ online │ 0% │ 25.2mb │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
همانطور که در بالا مشخص است، PM2 به صورت خودکار یک نام برای برنامه (بر اساس نام فایل و بدون پسوند .js
) و یک شناسه (ID
) اختصاص میدهد. PM2 همچنین اطلاعات دیگری مانند PID
پردازش، وضعیت فعلی و میزان مصرف حافظه را نیز نگهداری میکند.
برنامههایی که تحت مدیریت PM2 اجرا میشوند، در صورت بروز خطا یا قطع شدن، به صورت خودکار دوباره راهاندازی خواهند شد. اما میتوانیم یک مرحله اضافی انجام دهیم تا برنامه هنگام بوت شدن سیستم نیز اجرا شود. برای این کار از زیر فرمان startup
استفاده میکنیم. این زیر فرمان یک اسکریپت راهانداز تولید و پیکربندی میکند تا PM2 و پردازشهای تحت مدیریت آن هنگام بوت سرور اجرا شوند.
pm2 startup systemd
آخرین خط خروجی این دستور شامل یک دستور است که باید با دسترسی superuser اجرا شود تا PM2 برای اجرا هنگام بوت تنظیم شود.
Output
[PM2] Init System found: systemd
sammy
[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
دستور ارائه شده در خروجی را با نام کاربری خود اجرا کنید.
sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u sammy --hp /home/sammy
به عنوان یک گام اضافی، میتوانیم لیست پردازشهای PM2 و محیط مربوط به آنها را ذخیره کنیم.
pm2 save
اکنون یک واحد systemd ایجاد کردهاید که PM2 را برای کاربر شما هنگام بوت اجرا میکند. این instance از PM2 نیز برنامهی hello.js
را اجرا خواهد کرد.
سرویس را با systemctl
شروع کنید.
sudo systemctl start pm2-sammy
وضعیت واحد systemd را بررسی کنید.
systemctl status pm2-sammy
علاوه بر مواردی که بررسی کردیم، PM2 زیر فرمانهای متعددی دارد که به شما این امکان مدیریت یا مشاهده اطلاعات مربوط به برنامههایتان را میدهد.
برای توقف، یک برنامه از دستور زیر استفاده کنید (نام برنامه یا شناسه PM2 را مشخص کنید).
pm2 stop app_name_or_id
برای راهاندازی مجدد یک برنامه دستور زیر را اجرا کنید.
pm2 restart app_name_or_id
برای مشاهده لیست برنامه هایی که توسط PM2 مدیریت میشوند.
pm2 list
برای دریافت اطلاعات دربارهی یک برنامه خاص با استفاده از نام آن دستور زیر را اجرا کنید.
pm2 info app_name
مانیتور پردازشهای PM2 را میتوانید با زیر فرمان monit
مشاهده کنید. این مانیتور وضعیت برنامه، وضعیت مصرف CPU و حافظه را نمایش میدهد.
pm2 monit
توجه داشته باشید که اجرای pm2
بدون هیج آرگومانی نیز یک صفحه راهنما همراه با مثالهایی از نحوه استفاده را نمایش میدهد.
اکنون که برنامه Node.js شما در حال اجرا است و توسط PM2 مدیریت میشود، بیایید پیکربندی Reverse Proxy را انجام دهیم.
با سرور مجازی ابری لیارا، بدون دردسر سرور خود را سریع و امن راهاندازی کنید!
✅ منابع اختصاصی و قابل تنظیم✅ مقیاسپذیری آسان✅ امنیت پیشرفته✅ قیمت مقرونبهصرفه
خرید و راهاندازی سریع سرور مجازی ابری لیارا
راهاندازی Nginx بهعنوان یک Reverse Proxy
برنامه شما در حال اجرا است و در localhost
اجرا میشود، اما برای دسترسی کاربران به آن، نیاز به راهاندازی یک روش داریم. ما از سرور وب Nginx به عنوان Reverse Proxy استفاده خواهیم کرد.
در قسمت پیشنیاز، شما پیکربندی Nginx را در فایل /etc/nginx/sites-available/example.com
تنظیم کردهاید.
sudo nano /etc/nginx/sites-available/example.com
درون بلوک server
، شما باید یک بلوک localhost /
موجود داشته باشید. محتوای این بلوک را با پیکربندی زیر جایگزین کنید. اگر برنامهی شما روی پورت دیگری گوش میدهد، قسمتهای برجسته شده را به شماره پورت صحیح تغییر دهید.
server {
...
location / {
proxy_pass http://localhost: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;
}
...
}
این پیکربندی سرور را به صورتی تنظیم کنید که به درخواست ها در ریشه (root) پاسخ دهد. به این معنی که فرض کنید سرور ما با آدرس example.com
در دسترس است، با دسترسی https://example.com/
از طریق مرورگر وب، درخواست به برنامه hello.js
ارسال میشود که در پورت 3000
روی localhost
گوش میدهد.
شما میتوانید بلوکهای location
اضافی را به همین سرور اضافه کنید تا دسترسی به برنامههای دیگر روی همان سرور را فراهم کنید. به عنوان مثال، اگر یک برنامه دیگر Node.js را روی پورت 3001
اجرا میکنید، میتوانید این بلوک location را اضافه کنید تا به آن از طریق https://example.com/app2
دسترسی پیدا کنید.
server {
...
location /app2 {
proxy_pass http://localhost:3001;
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;
}
...
}
پس از اتمام افزودن بلوکهای location برای برنامههای خود، فایل را ذخیره کرده و از ویرایشگر خارج شوید. برای اطمینان از عدم وجود خطاهای نگارشی، دستور زیر را تایپ کنید.
sudo nginx -t
سپس Nginx را راه اندازی مجدد کنید.
sudo systemctl restart nginx
با فرض اینکه برنامه Node.js شما در حال اجرا باشد و پیکربندیهای شما صحیح باشند، اکنون باید قادر باشید که از طریق Reverse Proxy Nginx به برنامه خود دسترسی پیدا کنید. برای تست، آدرس URL سرور خود را (آدرس IP عمومی یا نام دامنه) در مرورگر وارد کنید.
با سرور ابونتو لیارا، سرور خود را با بالاترین کیفیت، سرعت و امنیت راهاندازی کنید!
✅ نصب و پیکربندی سریع✅ پشتیبانی 24/7✅ امنیت پیشرفته✅ مدیریت آسان و بدون پیچیدگی
خرید و راهاندازی سرورمجازی ابونتو ساعتی لیارا
جمع بندی
حالا شما برنامهی Node.js خود را پشت سرور Reverse Proxy Nginx روی سرور Ubuntu 22.04 راهاندازی کردهاید. این پیکربندی Reverse Proxy به شما این امکان را میدهد که به راحتی به کاربران خود دسترسی به دیگر برنامهها یا محتوای وب استاتیک که میخواهید به اشتراک بگذارید، فراهم کنید.
این تنظیمات انعطافپذیر است و میتوانید با افزودن بلوکهای جدید، دسترسی به چندین اپلیکیشن دیگر یا منابع مختلف را به راحتی مدیریت کنید. با این روش، عملکرد بهینه و مقیاسپذیری سرور شما به طرز چشمگیری افزایش پیدا میکند و میتوانید برنامههای بیشتری را به صورت همزمان میزبانی کنید.