Vagrant چیست؟ آشنایی با ابزار مدیریت و پیکربندی ماشینهای مجازی
در این مطلب میخواهیم ببینیم که Vagrant چیست و چرا از آن در محیطهای توسعه استفاده میشود. واگرانت از ابزاریهای منبع باز محسوب میشود که امکان ایجاد، پیکربندی و مدیریت محیطهای توسعه مجازی را فراهم میکند. این کار چه برای شما بهعنوان یک توسعه دهنده مستقل و چه برای افرادی که بهعنوان بخشی از یک تیم کار میکنند، به ایجاد محیطهای مجازی سازگار و بهبودیافته کمک میکند. در ادامه بیشتر درباره این ابزارها توضیح میدهیم.
واگرانت چیست؟
Vagrant چیست؛ واگرانت یک ابزار قدرتمند برای مدیریت محیطهای مجازی است که بهویژه برای کار با ماشینهای مجازی طراحی شده است. این ابزار با ارائه یک کلاینت کامند لاین ساده، به کاربران این امکان را میدهد تا بهراحتی محیطهای مجازی خود را مدیریت کنند. واگرانت همچنین یک مفسر داخلی به نام Vagrantfiles دارد که به کاربران اجازه میدهد تعاریف متنی از محیطهای مجازی خود را ایجاد و مدیریت کنند. این ابزار بهصورت منبع باز و با زبان Ruby نوشته شده است و هر کسی میتواند آن را دانلود کرده، تغییرات مورد نظر خود را اعمال کرده و با دیگران به اشتراک بگذارد.
بسیاری از هایپروایزرهای ماشینهای مجازی، رابط کامند لاین خود را دارند و از نظر فنی، تهیه ماشینهای مجازی از طریق این برنامهها به شکل مستقیم و یا از طریق شل اسکریپتها انجام میشود. واگرانت فرایندهای مدیریت ماشینهای مجازی را ساده میکند و میتواند روی هر محیط مجازی که بر بستر هر سیستمی استفاده میشود، پیادهسازی شود.
در vagrant یک قالب مبتنی بر متن برای کار با ماشین مجازی ارائه میشود که با تعریف محیط بهصورت کد، روند تهیه نسخه پشتیبان، اصلاح، اشتراکگذاری و مدیریت نسخهها را ساده میکند. تنظیمات ماشینهای مجازی که در حالت معمول داخل هر ایمیج ماشینهای مجازی ذخیره میشوند، موجب میگردند که ایمیجها حجمی بسیار بالا و گاه در حد چند گیگابایت داشته باشند. اما به کمک واگرانت هر بار تغییر در پیکربندیها در فایلهای متنی ساده با حجم تنها چند کیلوبایت نگهداری میشوند. حالا که میدانیم Vagrant چیست بیایید جزئیات بیشتری را درباره آن بررسی کنیم.
نگاهی به معماری واگرانت
برای درک عملکرد واگرانت، لازم است بدانیم که ساختار معماری Vagrant چیست و از چه اجزایی تشکیل میشود. بخشهای اصلی واگرانت برای مدیریت محیطهای توسعه را ارائهدهندگان (Providers) و تأمینکنندگان (Provisioners) تشکیل میدهند.
- تأمینکنندهها یا Provider ابزارهایی هستند که امکان سفارشیسازی پیکربندی محیطهای مجازی را فراهم میکنند. در اکوسیستم واگرانت، ابزارهای خودکارسازی فرایند از جمله Chef و Puppet دو نمونه از پرکاربردترین تأمینکنندگان هستند.
- ارائهدهندهها یا Provisioners، سرویسهای واگرانت برای راهاندازی و ایجاد محیطهای مجازی هستند. مجازیسازهای Docker ،Hyper-V و VirtualBox از جمله مواردی هستند که از Vagrant پشتیبانی میکنند. همچنین امکان پشتیبانی از AWS ،OpenStack و VMware از طریق پلاگینها وجود دارد. در نهایت، کاربر نهایی یک دستور تحت عنوان vagrant up# را اجرا خواهد کرد.
ابزار واگرانت با قرار گرفتن روی نرمافزار مجازیسازی، به توسعهدهندگان کمک میکند تا بهراحتی با ارائهدهندگان (Providers) در تعامل باشند. مهمترین ویژگی این نرمافزار، امکان خودکارسازی محیطهای مجازی با استفاده از Chef یا Puppet است که به کاربر کمک میکند تا به هیچ نرمافزار مجازیسازی دیگری نیاز نداشته باشد.
نیازمندیهای ماشینهای مجازی و نیز نیازمندیهای نرمافزاری در یک فایل تحت عنوان Vagrantfile نوشته میشود. هر زمان که نیاز به اجرای مراحل لازم جهت ایجاد باکسِ آماده توسعه باشد، Vagrantfile کاربرد پیدا میکند. اما شاید برایتان سوال باشد که box در واگرانت چیست؟ باکس یک فرمت برای محیطهای واگرانت است که با پسوند box. شناخته میشود. این فایلها در یک ماشین مجازی دیگر کپی میشوند تا محیطی دقیقا مشابه و شبیهسازی شده پیادهسازی شود.
علاوه بر موارد ذکر شده در Vagrantfile، همچنین جزئیاتی درباره پیکربندی ماشین مجازی، تنظیمات شبکه و … در آن قرار دارد. Vagrantfile در عین حال شامل پیکربندیهای چندین ماشین مجازی است که هنگامی به کار میآید که به چندین ماشین مجازی مستقل برای اجرای خدمات مختلف نیاز داریم. واگرانت با خواندن Vagrantfile در دایرکتوری فعلی و سپس اجرای عملیات مجازیسازی، اسکریپتهایی را برای آماده کردن محیط توسعه، اجرا میکند.
ازآنجاییکه همه چیز در ماشینهای مجازی قرار گرفته، پس از اتمام کار میتوانیم با تخریب vagrant# محیط را ببندیم. با این کار، ماشین پایه، از محیطی که با استفاده از vagrant up# ایجاد شده، پاک میشود.
تاریخچه Vagrant
شاید برایتان جذاب باشد که بدانید تاریخچه Vagrant چیست و این ابزار از چه زمانی توسط توسعهدهندگان استفاده میشود. در ژانویه سال ۲۰۱۰، میچل هاشیموتو Vagrant واگرانت را بهعنوان یک پروژه جانبی شخصی ایجاد کرده و سپس در مارس همان سال، اولین نسخه از آن را منتشر کرد. در اکتبر همین سال، شرکت Engine Yard اعلام کرد که میتواند از این پروژه برای توسعه حمایت کند. سرانجام، دو سال بعد و در مارس ۲۰۱۲، اولین نسخه رسمی و پایدار از این ابزار، یعنی Vagrant 1.0 منتشر شد.
هاشیموتو در همان سال 2012 سازمانی تحت عنوان HashiCorp را برای توسعه تمام وقت واگرانت تشکیل داد. اکنون HashiCorp، روی نسخههای تجاری آن کار میکند تا امکانات پشتیبانی حرفهای و نیز آموزش را ارائه دهد.
در ابتدا، Vagrant به VirtualBox پیوند خورده بود، اما در نسخه 1.1 پشتیبانی از نرم افزارهای مجازیساز دیگری مانند KVM و VMware و محیطهای سرور مانند Amazon EC2 نیز به آن اضافه شد. برای نوشتن واگرانت از زبان Ruby استفاده شده است، اما میتوان در پروژههای نوشته شده به زبانهای C# ،Java ،PHP ،JavaScript و Python نیز از آن استفاده کرد. پشتیبانی از کانتینرهای Docker که از نسخه 1.6 به بعد اضافه شد، میتواند جایگزینی برای یک سیستم عامل مجازی باشد. میبینیم که واگرانت یک مسیری بیش از یک دهه را طی کرده تا به جایگاه امروزه خود برسد. اما دلیل محبوبیت واگرانت چیست و چرا باید آن را انتخاب کنیم؟!
کاربردهای Vagrant چیست؟
در بخشهای قبلی توضیح دادیم که vagrant چیست و چه تاریخچهای در پسزمینه توسعه این ابزار قرار دارد. بیایید ببینیم که برای توسعهدهندگان، اپراتورها و … دلیل اهمیت واگرانت چیست و چرا از این ابزار استفاده میکنند.
برای توسعهدهندگان
اگر توسعهدهنده هستید، واگرانت میتواند وابستگیها و پیکربندیهای آنها را در محیطی ثابت و یکبار مصرف، ایزوله کرده و این کار را بدون از دست دادن هیچکدام از ابزارهای موردنیاز شما، مانند مرورگرها، ادیتورها، دیباگرها و … انجام میدهد. با ایجاد یک Vagrantfile هرآنچه که لازم دارید، با اجرای Vagrant up برایتان نصب و پیکربندی میشود. چه روی لینوکس، مک و یا ویندوز کار کنید، همه اعضای تیم از همان پیکربندی برای ایجاد محیطهای توسعه استفاده میکنند. به عبارتی، همه اعضای تیم کد را در یک محیط اجرا مینمایند.
برای اپراتورها
واگرانت برای مهندسان عملیات یا DevOps، یک محیط ایزوله و گردش کار ثابت را جهت توسعه و آزمایش اسکریپتهای مدیریت زیرساخت فراهم میکند. این افراد میتوانند به سرعت مواردی از جمله کوکبوکهای Chef، ماژولهای پاپت، شل اسکریپتها و … را با مجازیسازی محلی مانند VirtualBox یا VMware تست کنند. علاوه بر این امکان تست اسکریپتها روی سرور ابری، با همان پیکربندی و با همان گردش کار فراهم میشود.
برای طراحان
همه آنچه که طراحان برای یک برنامه وب نیاز دارند تا بهترین کار ممکن را انجام دهند، در واگرانت ارائه میشود. زمانی که یک توسعهدهنده، واگرانت را پیکربندی میکند، طراحان نگرانی برای نحوه اجرای مجدد اپ را نخواهند داشت.
همه این موارد نشان میدهد که دلیل محبوبیت واگرانت چیست و چه مزایایی برای توسعهدهندگان، طراحان و … دارد.
ویژگیهای پیشرفته Vagrant و کاربرد آنها
به نظر شما مهمترین ویژگیهای Vagrant چیست که باعث شده این ابزار بهعنوان یکی از بهترین ابزارهای ایجاد محیطهای مجازی شناخته شود؟! در واگرانت برخی ویژگیهای پیشرفته ارائه میشود که توسعهدهندگان از طریق آنها میتوانند گردشهای کاری خود را سادهتر کرده و بهرهوری بهتری داشته باشند. اما این قابلیتهای واگرانت چیست و هریک چه کاربردی دارند؟ این ویژگیها عبارتاند از:
محیطهای چند ماشینی
در واگرانت میتوانید چندین ماشین مجازی را در تنها یک Vagrantlife تعریف و مدیریت کنید. این ویژگی برای شبیهسازی توپولوژیهای پیچیده شبکه یا سیستمهای توزیع شده، مفید است.
نسخهسازی و اشتراکگذاری باکس
واگرانت از نسخهسازی و اشتراکگذاری ایمیجهای پایه پشتیبانی میکند؛ ایمیج هایی که تحت عنوان باکس شناخته میشوند. به لطف این پشتیبانی میتوانید مطمئن باشید که همه اعضای تیم از محیط توسعه و تست یکسان استفاده میکنند.
Vagrant Cloud
در واگرانت بستری تحت عنوان Vagrant Cloud فراهم شده که برای اشتراکگذاری و یافتن باکسهای Vagrant از پیش پیکربندی شده مفید است.
دسترسی به ابزارهای مدیریت پیکربندی
در واگرانت امکان دسترسی به ابزارهای مدیریت پیکربندی محبوب مانند Puppet ،Chef و Ansible را دارید که امکان راهاندازی و پیکربندی خودکار ماشینهای مجازی را فراهم میکند.
یکپارچهسازی و تست مداوم
میتوانید ابزارهای ادغام پیوسته (CI) مانند Jenkins ،Travis CI و CircleCI را در واگرانت ادغام کنید. این ویژگی، امکان اجرای تستهای خودکار را فراهم کرده و با استفاده از ماشینهای مجازی vagrant میتوانید پایپلاین ایجاد کنید.
تمام این ویژگی و قابلیتهای پیشرفته نشان میدهد که علت کاربرد گسترده Vagrant چیست و چرا باید از آن استفاده کنیم.
سخن پایانی
در این مطلب دیدیم که Vagrant چیست و چرا استفاده از آن اهمیت دارد. همچنین بررسی کردیم که مهمترین ویژگیهای واگرانت چیست که باعث شده توسعهدهندگان استفاده از آن را ترجیح دهند. این ابزار، برای ساخت محیطهای مجازی کاربردی طراحی شده و این کار را به خوبی انجام میدهد.