اگه توسعهدهنده وب هستید و وباپلیکیشنهاتون دارن بزرگ میشن! یکی از مشکلاتی که حتمن باهاش درگیر شدید یا کمکم درگیر خواهید شد مشکل کانفیگ و نگهداری فضای توسعه (برای مثال لپتاپتون) هست.
مثلن اگه یه وباپلیکیشنی دارید که با python و فریمورک Django توسعهداده شده و پایگاهدادهش Postgre هست و از Redis برای cache بعضی از دادههای پر مصرف استفاده میکنید و از ELK برای ایندکس مجدد و سرچ دقیقتر و مانیتور کردن لاگها استفاده میکنید و برای توسعه و تست کدهاتون همهی اینا رو کنار هم نیاز دارید درگیر این مشکل هستید. یا اگه توی رودمپ پروژهتون یه همچین چیزی میبینید بهزودی باهاش درگیر میشید.
برای کانفیگ و مدیریت محیط توسعهای مثل این سه تا گزینه اصلی داریم که در ادامه این مقاله برتری و ضعفهای هر گزینه رو با هم بررسی میکنیم و آخر دست با هم مقایسه و جمعبندی میکنیم.
این مقاله-ویدئو قسمت اول از یه سری چند قسمتیه و توی قسمتهای بعد هر کدوم از این موارد رو تک به تک بررسی میکنیم و برای پیادهسازیش راهکار میدیم و عملی هم با هم بررسیشون میکنیم. این مقاله و مقالات بعد به همراه ویدئو ارائه میشن که در آخر مقاله لینک شده و توضیح مفصلتر مواردیه که مکتوب شده.
توی این قسمت که قسمت اول از این سری هست سه تا گزینه اصلی که برای کانفیگ و مدیریت محیط توسعه داریم رو بررسی و برتری و ضعفهای هر گزینه رو با هم مرور میکنیم و آخر دست هم جمعبندی و نتیجهگیری میکنیم.
اولین و دمدستیترین گزینه احتمالن نصب کردن همهی این ابزارها روی دسکتاپه و تبدیل کردن دسکتاپ به یه سرور محلی. دردسر نسبتا کمی داره و غیر از نصب ابزارها چیز دیگهای هم نیاز نیست بدونیم.
گزینه دوم استفاده از ماشین مجازیه. اینکه برای پروژهمون با هر وسیلهی مجازیساز متناسب با سیستمعاملمون یه ماشین مجازی راهاندازی کنیم و همه موارد مورد نیاز رو روی اون کانفیگ کنیم و از دسکتاپمون (ماشین میزبان) به عنوان یه کلاینت برای ماشین میهمان استفاده کنیم. با توجه به سیستمعامل ابزارهایی مثل VMWare و VirtualBox و Parallel و غیره میتونن گزینههای مناسبی باشند برای این کار.
گزینه آخر (در واقع گزینه آخر در این مقاله، که آخرین گزینه موجود نیست و روشهای دیگهای هم میتونه باشه که مورد بحث ما نیست)، استفاده از container هست.
تفاوت ماهیتی که بین container و virtual machine وجود داره رو توی ویدئو کامل توضیح دادم که خیلی کمک میکنه به درک این بحث.
یکی از معروفترین و معمولترین راهها برای پیادهسازیش استفاده از Docker و تبدیل کردن سرویسها و بخشهای مختلف اپلیکیشن به containerهای مبتنیبر Docker هست.
این جمعبندی بیشتر بر اساس نظرات و تجربیات شخصیه و ممکنه نظرات و تجربیات متفاوت یا حتی متضادی با این موارد وجود داشته باشه که میتونه وابسته به شرایط توسعه درست باشه و خوشحال میشم باهام در میون بذارید نظراتتون رو در این رابطه. ولی اون چیزی که من تجربه و تحلیل کردم رو در سه پاراگراف زیر اینطوری جمعبندی میکنم.
اگه یه اپلیکیشن جمع و جور دارید که با یه virtual environment پایتون یا یه xampp میشه راهاندازی و مدیریتش کرد و هزار جور ابزار برای نیازهای مختلف نیاز نداره همچنان سرور محلی بهترین گزینهس. مخصوصن اگه تیم خیلی بزرگی هم روش کار نمیکنه.
اگه یه monolith بزرگ یا در حال بزرگشدن دارید که برای توسعه و تستش کلی ابزار باید با هم دیگه کار کنند و تیم توسعهدهندهتون هم نسبتا بزرگ یا رو به رشده، استفاده از ماشینهای مجازی میتونه راه حل خیلی بهتری باشه. که البته دردسرهای کانفیگ و نگهداری و هماهنگیش بین اعضای تیم اجتنابناپذیره، که در ادامه این ویدئو-مقالهها بهش بیشتر میپردازیم و براش راهحلهای تئوری و آموزش عملی ارائه میکنیم.
اگه تیم توسعهتون دانش کار با container و ابزارهای هماهنگسازیش (توی محیط توسعه) رو داره یا میتونه فرا بگیره و ترجیحن توی محیط production هم دارید از container استفاده میکنید و زمان گذاشتن روی ساخت و مدیریت اونها براتون ارزش داره و مهمتر از اون معماری دارید که استفاده از container ها برای گزینهی خوبیه (مثل SOA یا Microservice)، احتمالن استفاده از container براتون بهترین گزینهس.
توی قسمت بعدی این سری مقاله-ویدئو میریم سراغ virtual machine ها و روشهای مجازیسازی کلاسیک با استفاده از Hypervisor ها و Vagrant رو باهم مقایسه میکنیم.
راجع به Vagrant مفصل حرف میزنیم و یه ماشین مجازی باهاش راهاندازی میکنیم و یه مقداری هم راجع به provision کردنش صحبت میکنیم.