خودکارسازی deploy برنامههای Node.js
تو وب امروز مثل بقیه عرصهها همه چیز داره به سمت خودکار شدن پیش میره. یکی از جنبههای خودکارسازی deploy کردن برنامهها روی سرور هست. شاید اگه سرور ترافیک زیادی نداشته باشه برای deploy کردن برنامهها فقط کپی کردن اسکرپیتها روی سرور کفایت بکنه؛ اما اگه سرور چند صد درخواست رو در دقیقه جواب میده اونوقت چطور؟ اگه سرور برای چند دقیقه پاسخگو نباشه چند هزار درخواست به مشکل برمیخورن. چندین راه ممکنه پیشنهاد بشه مثلا در ساعتهایی که ترافیک کمی دارن deploy رو انجام بدیم یا اینکه درخواستها رو به یه سرور دیگه بفرستیم تا وقتی که سرور مورد نظرمون قادر به پاسخگویی بشه. تقریبا تمام زبانها و پلتفرمهای معروف وب ابزارهایی برای خودکارسازی deploy دارن؛ Node.js هم با این که زمان زیادی از به وجود اومدنش نمیگذره به سرعت در حال پیشرفته و داره خودشو به صورت یک پلتفرم کامل درمیاره. Node.js ابزارهای زیادی برای این کار داره، اما یکی از ابزارهایی که تمام این عملیات رو به صورت یکپارچه انجام میده ابزار شرکت StrongLoop هست.
آمادهسازی سرور
اگه Node.js روی سرور نصب نیست اون رو از طریق package manager یا سورسش نصب کنید.
بعد با استفاده از دستور زیر میتونید بسته StrongLoop Process Manager رو نصب کنید:
1 |
<span style="font-size: 12pt;">$ npm install -g strong-pm</span> |
سپس سرویس strong-pm رو نصب و اجرا میکنیم:
برای توزیعهایی که از Upstart 1.4 و بالاتر استفاده میکنن مثل Ubuntu 12.04
1 2 |
<span style="font-size: 12pt;">$ sudo sl-pm-install $ sudo /sbin/initctl start strong-pm</span> |
برای توزیعهایی که از Upstart 0.6 – 1.3 استفاده میکنن مثل CentOS 5 – 6 و Ubuntu 10.04
1 2 |
<span style="font-size: 12pt;">$ sudo sl-pm-install --upstart=0.6 $ sudo /sbin/initctl start strong-pm</span> |
و برای توزیعهایی که از Systemd استفاده میکنن مثل CentOS 7 و Fedora و OpenSUSE
1 2 |
<span style="font-size: 12pt;">$ sudo sl-pm-install --systemd $ sudo /usr/bin/systemctl start strong-pm</span> |
اگر در توزیعهای RHEL و CentOS برای نصب sl-pm-install به مشکل برخورد کردید دستور زیر رو اجرا کنید تا باینری اون در path سیستم قرار بگیره
1 |
<span style="font-size: 12pt;">$ sudo env "PATH=$PATH" sl-pm-install</span> |
وقتی همه مراحل با موفقیت انجام شد سرویس strong-pm روی سرور شما نصب شده و با restart سیستم هم اجرا میشه. حالا سرور شما آمادهی دریافت برنامهها برای اجرا هست.
build کردن برنامه و deploy آن
اول باید بسته Strongloop رو نصب کنیم
1 |
<span style="font-size: 12pt;">$ npm install -g strongloop</span> |
سپس وارد پوشه اصلی برنامه میشیم. بهتر هست که برای کنترل ورژن از git استفاده کنید ولی اگر نباشه هم مشکلی پیش نمیاد.
قبل از ایجاد build تمام تغییرات commit نشده را commit میکنیم و پوشه رو clean میکنیم تا فایلهای ناخواسته در build نباشن و بعد هم پروژه رو build میکنیم.
1 2 |
<span style="font-size: 12pt;">$ git clean -x -d $ slc build</span> |
با این کار یه branch جدید به نام deploy به مخزن git اضافه میشه و بسته های npm مورد نیاز دانلود میشن و بعد تغییرات در برنچ deploy کامیت میشن. اگه از گیت استفاده نشده باشه یه فایل با پسوند tgz ساخته میشه.
برای delopy کردن هم کافیه دستور زیر رو اجرا کنیم. با این کار فایلهای برنامه روی سرور آپلود میشن و توسط strong-pm در سرور اجرا میشه.
1 |
<span style="font-size: 12pt;">$ slc deploy http://example.com</span> |
با رفتن به آدرس http://example.com:3001 میتونید برنامهتون رو مشاهده کنید.
استفاده از strong-pm قابلیتهای فراوانی به شما میده مثلا میتونید بدون لوگین در سرور وضعیت برنامه رو چک کنید یا این که تعداد پروسههاش رو تغییر بدید
1 |
<span style="font-size: 12pt;">$ slc ctl status --control http://example.com</span> |
1 |
<span style="font-size: 12pt;">$ slc ctl --control http://example.com set-size example-app 2</span> |
برای deploy نسخه جدید برنامه فقط کافیه همون کارایی که در deploy اول انجام دادید انجام بدید و برنامه رو deploy کنید. strong-pm به طور خودکار یک rolling restart انجام میده برنامه شما بدون هیچ گونه downtime اجرا میشه.
علاوه بر اینها قابلیت مونیتورینگ و استفاده از docker برای deploy برنامهها از ویژگیهایی هست که strong-pm در اختیار شما میذاره تا با توجه نیازهای سمت سرور انعطاف پذیر باشه.
منابع:
http://strong-pm.io
https://strongloop.com/strongblog/node-js-deploy-production-best-practice/