تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

چطور یک برنامه‌ی 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
  • جمع بندی

پیش نیاز

این مقاله با این فرض نوشته شده است که موارد زیر را در اختیار دارید.

پس از انجام پیش‌نیازها، سرور شما صفحه پیش‌فرض دامنه را در آدرس https://example.com/ ارائه خواهد داد.

اجرای برنامه Node.js بر روی سرور مجازی اوبونتو Ubuntu

ساخت یک برنامه‌ی 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 به شما این امکان را می‌دهد که به راحتی به کاربران خود دسترسی به دیگر برنامه‌ها یا محتوای وب استاتیک که می‌خواهید به اشتراک بگذارید، فراهم کنید.

این تنظیمات انعطاف‌پذیر است و می‌توانید با افزودن بلوک‌های جدید، دسترسی به چندین اپلیکیشن دیگر یا منابع مختلف را به راحتی مدیریت کنید. با این روش، عملکرد بهینه و مقیاس‌پذیری سرور شما به طرز چشمگیری افزایش پیدا می‌کند و می‌توانید برنامه‌های بیشتری را به صورت همزمان میزبانی کنید.

به اشتراک بگذارید