برنامه نویسی

استفاده از pm2 برای مدیریت برنامه های Node.js

Summarize this content to 400 words in Persian Lang

مشکل

وقتی برای اولین بار با Node.js روبرو شدم و همچنین نحوه استفاده از لینوکس را یاد گرفتم، nodemon کتابخانه ای بود که اغلب برای توسعه برنامه ها از آن استفاده می کردم، زیرا پس از ذخیره کردن، بدون نیاز به “کشیدن” و راه اندازی مجدد برنامه به طور خودکار کد جدید را “بازبارگیری” می کرد. ، ویژگی که اکنون معمولاً به عنوان “بارگذاری مجدد داغ” شناخته می شود.

پس از توسعه، استقرار می آید. در حین تمرین اجرای برنامه روی سرور، به سختی متوجه شدم که چگونه آن را اجرا کنم. اگر از روش معمولی تایپ “node index.js” یا حتی از nodemon استفاده می کردم، هر زمان که از ترمینال خارج می شدم یا از سرور جدا می شدم، برنامه نیز “ناپدید می شد.” متوجه شدم که اگر اتصال به سرور قطع شود، برنامه خارج می شود. خوب چه کار کنیم؟

بعداً متوجه شدم که برای اجرای مداوم برنامه به یک ابزار مدیریت فرآیند نیاز داریم. این نه تنها برای Node بلکه برای اکثر زبان های دیگر نیز ضروری است. برای Node، نامی که بیش از همه ذکر شده احتمالا pm2 است.

از زمانی که pm2 را کشف کردم، توانستم به راحتی برنامه های خود را مستقر کنم. با این حال، با گذشت زمان، همانطور که روی بسیاری از پروژه ها کار کردم و با فناوری های دیگری مانند Docker، Kubernetes و غیره مواجه شدم، pm2 به تدریج کمتر ضروری شد، زیرا آن ابزارها قبلاً قابلیت های مدیریتی را یکپارچه کرده بودند.

اخیراً، در حالی که چندین پروژه را نگهداری می‌کردم، که اکثر آنها از pm2 استفاده می‌کردند، مجبور شدم زمانی را صرف بررسی مجدد اسناد در مورد نحوه استفاده از آن کنم، زیرا از آخرین باری که از آن استفاده کردم مدتی می‌گذشت. در آن زمان ناگهان متوجه شدم که در آن دوره تغییرات زیادی رخ داده است. بسیاری از ویژگی های جدید اضافه شده بود، یا ویژگی هایی وجود داشت که من از آنها بی اطلاع بودم.

اما باید صادقانه بگویم که pm2 هنوز یک ابزار بسیار قدرتمند مدیریت برنامه Node.js است. هر کسی که با Node کار می کند باید برای یادگیری در مورد آن وقت بگذارد. بنابراین، در مقاله امروز، برخی از ویژگی های اصلی این ابزار را برجسته می کنم.

PM2 چیست؟

pm2 یک مدیر فرآیند شبح است که به شما کمک می کند برنامه های خود را همیشه آنلاین نگه دارید.

نصب pm2 بسیار ساده است، از طریق npm که با Node یکپارچه شده است.

$ npm install pm2@latest -g

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آن، می توانید برنامه Node خود را راه اندازی کنید:

$ pm2 start app.js

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه در پس زمینه اجرا می شود و برای دیدن همه برنامه های در حال اجرا:

$ pm2 list

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مفیدترین ویژگی pm2 این است که برنامه را در پس زمینه در حال اجرا نگه می دارد، به این معنی که حتی اگر از سرور خارج شوید، برنامه شما همچنان اجرا می شود.

اکثر مردم می دانند که هنگام اجرای یک برنامه Node، فقط روی یک هسته از CPU اجرا می شود. اگر رایانه چند هسته ای باشد، حالت Cluster به توزیع تمام فرآیندها در هسته های باقی مانده کمک می کند. به عنوان مثال، اگر CPU دارای 4 هسته است و شما می خواهید روی هر 4 هسته اجرا شود، بسیار ساده است.

$ pm2 start app.js -i max

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

max نشان می دهد که همه هسته ها شرکت خواهند کرد. اگر شماره خاصی می خواهید، جایگزین کنید max با یک عدد

pm2 دارای مکانیزم ثبت گزارش است که لاگ ها را برای بازیابی بعدی در فایل ها می نویسد. این اطلاعات شامل دستورات چاپ شده در کنسول مانند console.log. برای مشاهده گزارش ها:

$ pm2 logs 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایی که 0 شناسه فرآیند است، یا می توانید آن را با نام فرآیند جایگزین کنید.

برای توقف یک فرآیند:

$ pm2 stop 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای راه اندازی مجدد پس از توقف:

$ pm2 start 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا برای راه اندازی مجدد:

$ pm2 restart 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا برای حذف کامل برنامه، اطمینان از اینکه از قبل متوقف شده است:

$ pm2 delete 0

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را pm2 start دستورات گسسته و مفرد هستند. تصور کنید به جای یک، چندین پردازش Node وجود داشته باشد که باید همزمان شروع شود؟ آن وقت است که اکوسیستم مفید می شود. اکوسیستم مکانیزمی است که همه برنامه‌ها را در یک فایل پیکربندی گروه‌بندی می‌کند و با یک فرمان شروع می‌کند.

برای ایجاد یک فایل پیکربندی، از دستور استفاده کنید pm2 ecosystem، که یک فایل تولید می کند ecosystem.config.js مانند موارد زیر:

module.exports = {
apps : [{
name: “app”,
script: “./app.js”,
env: {
NODE_ENV: “development”,
},
env_production: {
NODE_ENV: “production”,
}
}, {
name: ‘worker’,
script: ‘worker.js’
}] }

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیکربندی را متناسب با پروژه خود تنظیم کنید و آن را با استفاده از:

$ pm2 start ecosystem.config.js

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در صورت راه اندازی مجدد سرور، pm2 به طور خودکار شروع نمی شود و باعث می شود همه برنامه ها غیرفعال شوند. برای رفع این مشکل از دستور زیر استفاده کنید:

$ pm2 startup

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اما قبل از آن، باید فرآیندهایی را که در هنگام راه‌اندازی شروع می‌شوند با دستور زیر «متعهد» کنید:

$ pm2 save

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

pm2 save یک “عکس فوری” از فرآیندهای در حال اجرا ایجاد می کند تا بعداً آنها را بازیابی کند.

PM2 پیشرفته

Pm2 دارای برخی ویژگی های پیشرفته نسبتا مفید در موارد خاص است.

تابع RPC با اجرای یک تابع از طریق خط فرمان کار می کند. به عنوان مثال، یک تابع وجود دارد countActive که تعداد افرادی که در حال حاضر آنلاین هستند را نشان می دهد.

ابتدا یک فایل ایجاد کنید rpc.js با مطالب:

const tx2 = require(‘tx2’);

tx2.action(‘countActive’, (reply) => {
const num = UserModel.count();
reply({ num: num });
})

setInterval(function() {
// Keep application online
}, 100);

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن را اجرا کنید:

$ pm2 start rpc.js

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس، اگر شما می خواهید به ماشه countActive تابع، به سادگی استفاده کنید:

$ pm2 trigger rpc countActive

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Pm2 همچنین یک API برای مدیریت pm2 از طریق RESTFul API ارائه می دهد. به عبارت ساده، این بدان معناست که شما می توانید سروری برای افزودن/ویرایش/حذف برنامه های دیگر با استفاده از pm2 ایجاد کنید که از طریق فراخوانی API انجام می شود. می توانید جزئیات بیشتر را در PM2 API بخوانید.

و همچنین چند ویژگی پیشرفته دیگر.

اخیراً pm2 سرویس pm2 plus را نیز راه اندازی کرده است که امکان نظارت همه جانبه بر برنامه هایی مانند رابط نظارت لحظه ای، گزارش گیری، لاگ و نوتیفیکیشن ها را فراهم می کند… مشاهده می شود که کاملاً شبیه به APM (Application Performance Monitoring) است. برنامه های کاربردی. با این حال، از آنجایی که بسته رایگان وجود ندارد، من فرصت تجربه این سرویس را نداشتم. اگر دارید یا از آن استفاده می کنید، لطفاً نظر خود را در انتهای مقاله بگذارید!

مشکل

وقتی برای اولین بار با Node.js روبرو شدم و همچنین نحوه استفاده از لینوکس را یاد گرفتم، nodemon کتابخانه ای بود که اغلب برای توسعه برنامه ها از آن استفاده می کردم، زیرا پس از ذخیره کردن، بدون نیاز به “کشیدن” و راه اندازی مجدد برنامه به طور خودکار کد جدید را “بازبارگیری” می کرد. ، ویژگی که اکنون معمولاً به عنوان “بارگذاری مجدد داغ” شناخته می شود.

پس از توسعه، استقرار می آید. در حین تمرین اجرای برنامه روی سرور، به سختی متوجه شدم که چگونه آن را اجرا کنم. اگر از روش معمولی تایپ “node index.js” یا حتی از nodemon استفاده می کردم، هر زمان که از ترمینال خارج می شدم یا از سرور جدا می شدم، برنامه نیز “ناپدید می شد.” متوجه شدم که اگر اتصال به سرور قطع شود، برنامه خارج می شود. خوب چه کار کنیم؟

بعداً متوجه شدم که برای اجرای مداوم برنامه به یک ابزار مدیریت فرآیند نیاز داریم. این نه تنها برای Node بلکه برای اکثر زبان های دیگر نیز ضروری است. برای Node، نامی که بیش از همه ذکر شده احتمالا pm2 است.

از زمانی که pm2 را کشف کردم، توانستم به راحتی برنامه های خود را مستقر کنم. با این حال، با گذشت زمان، همانطور که روی بسیاری از پروژه ها کار کردم و با فناوری های دیگری مانند Docker، Kubernetes و غیره مواجه شدم، pm2 به تدریج کمتر ضروری شد، زیرا آن ابزارها قبلاً قابلیت های مدیریتی را یکپارچه کرده بودند.

اخیراً، در حالی که چندین پروژه را نگهداری می‌کردم، که اکثر آنها از pm2 استفاده می‌کردند، مجبور شدم زمانی را صرف بررسی مجدد اسناد در مورد نحوه استفاده از آن کنم، زیرا از آخرین باری که از آن استفاده کردم مدتی می‌گذشت. در آن زمان ناگهان متوجه شدم که در آن دوره تغییرات زیادی رخ داده است. بسیاری از ویژگی های جدید اضافه شده بود، یا ویژگی هایی وجود داشت که من از آنها بی اطلاع بودم.

اما باید صادقانه بگویم که pm2 هنوز یک ابزار بسیار قدرتمند مدیریت برنامه Node.js است. هر کسی که با Node کار می کند باید برای یادگیری در مورد آن وقت بگذارد. بنابراین، در مقاله امروز، برخی از ویژگی های اصلی این ابزار را برجسته می کنم.

PM2 چیست؟

pm2 یک مدیر فرآیند شبح است که به شما کمک می کند برنامه های خود را همیشه آنلاین نگه دارید.

نصب pm2 بسیار ساده است، از طریق npm که با Node یکپارچه شده است.

$ npm install pm2@latest -g
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از آن، می توانید برنامه Node خود را راه اندازی کنید:

$ pm2 start app.js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برنامه در پس زمینه اجرا می شود و برای دیدن همه برنامه های در حال اجرا:

$ pm2 list
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مفیدترین ویژگی pm2 این است که برنامه را در پس زمینه در حال اجرا نگه می دارد، به این معنی که حتی اگر از سرور خارج شوید، برنامه شما همچنان اجرا می شود.

اکثر مردم می دانند که هنگام اجرای یک برنامه Node، فقط روی یک هسته از CPU اجرا می شود. اگر رایانه چند هسته ای باشد، حالت Cluster به توزیع تمام فرآیندها در هسته های باقی مانده کمک می کند. به عنوان مثال، اگر CPU دارای 4 هسته است و شما می خواهید روی هر 4 هسته اجرا شود، بسیار ساده است.

$ pm2 start app.js -i max
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

max نشان می دهد که همه هسته ها شرکت خواهند کرد. اگر شماره خاصی می خواهید، جایگزین کنید max با یک عدد

pm2 دارای مکانیزم ثبت گزارش است که لاگ ها را برای بازیابی بعدی در فایل ها می نویسد. این اطلاعات شامل دستورات چاپ شده در کنسول مانند console.log. برای مشاهده گزارش ها:

$ pm2 logs 0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جایی که 0 شناسه فرآیند است، یا می توانید آن را با نام فرآیند جایگزین کنید.

برای توقف یک فرآیند:

$ pm2 stop 0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای راه اندازی مجدد پس از توقف:

$ pm2 start 0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا برای راه اندازی مجدد:

$ pm2 restart 0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یا برای حذف کامل برنامه، اطمینان از اینکه از قبل متوقف شده است:

$ pm2 delete 0
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را pm2 start دستورات گسسته و مفرد هستند. تصور کنید به جای یک، چندین پردازش Node وجود داشته باشد که باید همزمان شروع شود؟ آن وقت است که اکوسیستم مفید می شود. اکوسیستم مکانیزمی است که همه برنامه‌ها را در یک فایل پیکربندی گروه‌بندی می‌کند و با یک فرمان شروع می‌کند.

برای ایجاد یک فایل پیکربندی، از دستور استفاده کنید pm2 ecosystem، که یک فایل تولید می کند ecosystem.config.js مانند موارد زیر:

module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }, {
     name: 'worker',
     script: 'worker.js'
  }]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیکربندی را متناسب با پروژه خود تنظیم کنید و آن را با استفاده از:

$ pm2 start ecosystem.config.js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در صورت راه اندازی مجدد سرور، pm2 به طور خودکار شروع نمی شود و باعث می شود همه برنامه ها غیرفعال شوند. برای رفع این مشکل از دستور زیر استفاده کنید:

$ pm2 startup
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اما قبل از آن، باید فرآیندهایی را که در هنگام راه‌اندازی شروع می‌شوند با دستور زیر «متعهد» کنید:

$ pm2 save
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

pm2 save یک “عکس فوری” از فرآیندهای در حال اجرا ایجاد می کند تا بعداً آنها را بازیابی کند.

PM2 پیشرفته

Pm2 دارای برخی ویژگی های پیشرفته نسبتا مفید در موارد خاص است.

تابع RPC با اجرای یک تابع از طریق خط فرمان کار می کند. به عنوان مثال، یک تابع وجود دارد countActive که تعداد افرادی که در حال حاضر آنلاین هستند را نشان می دهد.

ابتدا یک فایل ایجاد کنید rpc.js با مطالب:

const tx2 = require('tx2');

tx2.action('countActive', (reply) => {
  const num = UserModel.count();
  reply({ num: num });
})

setInterval(function() {
  // Keep application online
}, 100);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آن را اجرا کنید:

$ pm2 start rpc.js
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس، اگر شما می خواهید به ماشه countActive تابع، به سادگی استفاده کنید:

$ pm2 trigger rpc countActive
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Pm2 همچنین یک API برای مدیریت pm2 از طریق RESTFul API ارائه می دهد. به عبارت ساده، این بدان معناست که شما می توانید سروری برای افزودن/ویرایش/حذف برنامه های دیگر با استفاده از pm2 ایجاد کنید که از طریق فراخوانی API انجام می شود. می توانید جزئیات بیشتر را در PM2 API بخوانید.

و همچنین چند ویژگی پیشرفته دیگر.

اخیراً pm2 سرویس pm2 plus را نیز راه اندازی کرده است که امکان نظارت همه جانبه بر برنامه هایی مانند رابط نظارت لحظه ای، گزارش گیری، لاگ و نوتیفیکیشن ها را فراهم می کند… مشاهده می شود که کاملاً شبیه به APM (Application Performance Monitoring) است. برنامه های کاربردی. با این حال، از آنجایی که بسته رایگان وجود ندارد، من فرصت تجربه این سرویس را نداشتم. اگر دارید یا از آن استفاده می کنید، لطفاً نظر خود را در انتهای مقاله بگذارید!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا