اگر با node.js پروژه ای رو پیاده سازی کرده باشید ، حتما با پکیج nodemon آشنایی دارید ، nodemon پروژه شما رو اجرا میکنه و منتظر می مونه تا تغییراتی رو در کد ها اعمال کنید و nodemon پروژه رو restart میکنه و شما تغییرات جدید رو میتونید در پروژه تون ببینید.
ولی این راه و روش برای محیط development هست ، توی محیط production باید از پکیج های دیگه ای استفاده کنید تا پروژه تون رو run کنید.
دو تا از معروف ترین پکیج های production ready برای اجرای پروژه PM2 و Forever هستن ، توی تجربه ای که با این دو تا پکیج داشتم ، PM2 و forever هر کدوم مزایای خودشون رو داشتن و توی پروژه های مختلف به فراخور نیاز از هر کدوم استفاده کردم.
برای اجرای پروژه با PM2 چند قدم خیلی ساده رو باید انجام بدیم :
1 - نصب پکیج PM2 :
npm install -g pm2
2 - اجرای پروژه با PM2
// Start and Daemonize application pm2 start app.js --name my_app_name // to switch can be used to automatically restart process on every change in project // --watch // --ignore-watch="node_modules"
برای اجرای پروژه روی چند تا از core های CPU میتونید از سوئیچ i استفاده کنید :
// Load Balance 4 instances of api.js pm2 start api.js -i 4 pm2 start api.js -i max
3 - ذخیره تنظیمات که بعد از Restart شدن سرور ، پروژه مجددا به طور اتوماتیک اجرا بشه
// Make pm2 auto-boot at server restart: pm2 startup // freeze to automatic re spawn pm2 save
برای مانیتور کردن پروژه میتونید از دستور های زیر استفاده کنید که هر کدوم به نحوی میتونه توی مانیتور کردن پروژه تون مفید باشه :
// Monitor in production: pm2 monitor pm2 monit pm2 imonit pm2 logs pm2 logs <id> pm2 show <id>
برای مشاهده لیست پروژه های اجرا شده توسط pm2 از این دستور استفاده کنید :
pm2 list
و برای stop و start کردن پروژه از این دستور استفاده کنید :
// to stop : pm2 stop <id> pm2 stop <name> // to start pm2 start <id> // to restart pm2 restart <id>
برای حذف پروژه از لیست pm2 از دستور زیر استفاده کنید :
pm2 stop <id> pm2 delete <id>
از pm2 میتونید به عنوان یه وب سرور برای فایل های استاتیک هم استفاده کنید ، لازم هم نیست اصلا پروژه node.js داشته باشید ، بلکه میتونید یه directory رو مثل یک وب سرور روی هر port که خواستید میزبانی کنید :
pm2 serve <or> expose <options> <path> <port>
یه تجربه شخصی رو هم با شما در میون بذارم ، توی پروژه هایی که request per second خیلی زیادی داره forever خیلی خیلی stable تر از pm2 هست.