خودکارسازی deploy برنامه‌های Node.js

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

آماده‌سازی سرور
اگه Node.js روی سرور نصب نیست اون رو از طریق package manager یا سورسش نصب کنید.
بعد با استفاده از دستور زیر می‌تونید بسته StrongLoop Process Manager رو نصب کنید:

سپس سرویس strong-pm رو نصب و اجرا میکنیم:
برای توزیع‌هایی که از Upstart 1.4 و بالاتر استفاده می‌کنن مثل Ubuntu 12.04

برای توزیع‌هایی که از Upstart 0.6 – 1.3 استفاده می‌کنن مثل CentOS 5 – 6 و ‌Ubuntu 10.04

و برای توزیع‌هایی که از Systemd استفاده می‌کنن مثل CentOS 7 و Fedora و OpenSUSE

اگر در توزیع‌های RHEL و CentOS برای نصب sl-pm-install به مشکل برخورد کردید دستور زیر رو اجرا کنید تا باینری اون در path سیستم قرار بگیره

وقتی همه مراحل با موفقیت انجام شد سرویس strong-pm روی سرور شما نصب شده و با restart سیستم هم اجرا میشه. حالا سرور شما آماده‌ی دریافت برنامه‌ها برای اجرا هست.

build کردن برنامه و deploy آن
اول باید بسته Strongloop رو نصب کنیم

سپس وارد پوشه اصلی برنامه میشیم. بهتر هست که برای کنترل ورژن از git استفاده کنید ولی اگر نباشه هم مشکلی پیش نمیاد.
قبل از ایجاد build تمام تغییرات commit نشده را commit می‌کنیم و پوشه رو clean می‌کنیم تا فایل‌های ناخواسته در build نباشن و بعد هم پروژه رو build می‌کنیم.

با این کار یه branch جدید به نام deploy به مخزن git اضافه میشه و بسته های npm مورد نیاز دانلود میشن و بعد تغییرات در برنچ deploy کامیت میشن. اگه از گیت استفاده نشده باشه یه فایل با پسوند tgz ساخته میشه.
برای delopy کردن هم کافیه دستور زیر رو اجرا کنیم. با این کار فایل‌های برنامه روی سرور آپلود میشن و توسط strong-pm در سرور اجرا میشه.

با رفتن به آدرس http://example.com:3001 می‌تونید برنامه‌تون رو مشاهده کنید.

استفاده از strong-pm قابلیت‌های فراوانی به شما میده مثلا می‌تونید بدون لوگین در سرور وضعیت برنامه رو چک کنید یا این که تعداد پروسه‌هاش رو تغییر بدید

برای 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/