دسته‌ها
ابزارها لینوکس

وایگرانت (Crash Course) قسمت اول

این قسمت اول از یک ارائه دو پستی است که در آن به بررسی و کار کردن با وایگرانت(Vagrant) میپردازیم و چند مثال ساده و کاربردی میزنیم. در قسمت دومش نصبش در کنار لیبویرت رو میگیم و یه مثال جالبه باحال میزنیم.

وایگرانت  به طور کلی یک محیط مجازی شده بهمون میده که به کمکش  میتونیم ماشین های مجازی  بسازیم. این ابزار خیلی کاربردی و در بسیاری از مواقع به سرعت در کارمون کمک می کند.  البته چند نکته رو باید در نظر بگیریم. اول اینکه برای محیط‌های آزمایشی  ازش استفاده می کنیم. این به این معنی نیست که این ابزار برای محیط های پروداکشن یا  عملیاتی کاربرد ندارد بلکه با توجه به استانداردهای خیلی بهتری که موجود هستند از جمله کی‌وی‌ام/کمو  و حتی در مقیاس غیر متن باز وی‌ام‌ویر بسیار مفیدتر و حرفه ای تر هستند. خود من شخصا از وایگرانت برای ایجاد  محیط های تستی که به کمک وایگرانت همین پستهای آموزش رو مدیریت کنم استفاده می کنم. دوم اینکه قاعدتاً برای اسکیل  یا توسعه‌ی   محیط‌های عملیاتی  می‌توانیم از کانتینر ها استفاده کنیم که خیلی بهتر و حرفه ای تر هستند. در مورد کانتینر ها هم به زودی مطالبی رو پوشش می دهیم.

این ابزار توسط شرکت هاشی کراپ  توسعه و بهبود داده شده. با زبان برنامه نویسی روبی  نوشته شده  و از محبوبیت بسیاری توسعه‌دهندگان دنیای دیجیتال برخوردار است. به طور معمولی این  ابزار در کنار مجازی ساز های دیگری مثل کی‌وی‌ام/کمو، وی‌ام‌ویر و یا ویرچوال‌باکس  نصب می شود به صورت دقیق تر از  از ابزارهای یاد شده استفاده می کند به عنوان سرویس دهنده تا محیط مجازی دلخواه ما را ایجاد نماید. در دنیای لینوکس نصب این محصول کار ساده ایست. نسبت به توزیع دلخواه خود کافیست که سورس نرم افزار را دانلود کنید و آن را نصب کنید.  درست در این پست من این ابزار را در یک توزیع دبیانی  نصب خواهم کرد. البته شما می توانید نسبت به سلیقه خودتان بر روی هر توضیح دیگری و یا حتی سیستم عامل از خانواده دیگری مثلا ویندوز و یا مک‌او‌اس آن را نصب کنید. برای شما لینک توضیحات نصب از سایت خود وایگرانت  را قرار می دهم که در صورت نیاز به آن مراجعه کنید

برای اینکه وایگرانت  در محیط ما به درستی کار کند ساده ترین و بهترین روش بهره گیری است پرووایدر ویرچوال‌ باکس است.  در صورتی که این ابزار را بر روی سیستم عامل خود نصب نکرده اید  می‌توانید به آدرس سایت ویرچوال باکس بروید و به روز ترین نسخه این نرم افزارها دانلود و نصب نمایید. به جز این من راهنمای نصب این ابزار را در کنار کی‌وی‌ام/کمو  راهم پوشش خواهم داد. در اینجا لازم است اشاره کنم استفاده از کی‌وی‌ام/کمو  این امکان را فراهم می کند که در یک محیط مجازی محیط مجازی دیگری ایجاد نمایید. با این قابلیت قادر خواهیم بود برای سناریوهای تخصصی در مجازی سازی و کانتینرها  محیط های کاملا آزمایشی فراهم کنیم.

برای نصب وایگرانت کافیست که که آخرین نسخه پکیج آن رادانلود کردهو اینستال کنیم. قطعه کد زیردقترا ملاحظه کنید:

cd /tmp
wget https://releases.hashicorp.com/vagrant/2.2.2/vagrant_2.2.2_x86_64.deb
sudo dpkg -i vagrant_2.2.2_x86_64.deb

زمانی که وایگرانت نصب شد بهترین روش استفاده از آن این است که برای هر پروژه یک دایرکتوری ایجاد کنیم و در آن دایرکتوری فایل وایگرانت بسازیم. برای این کارکافیه که دستور زیر را اجرا کنیم.

$ vagrant init

بعد از اجرای این دستور اگر در این فولدرلیست بگیریم یک فایل برای ما ایجاد شده با اینVagrantfile اسم. وقتی محتویات این فایل را می خوانیم وایگرانت به صورت پیش فرض تنظیمات مربوط به این پروژه را ایجاد کرده.

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

این فایل شامل تنظیمات پیش فرض نرم افزار هست برای ایجاد محیطی که مدنظرمان هست. به عنوان مثال در این فایل  می‌توانیم مشخص کنیم چند ماشین مجازی نیاز داریم سیستم عامل  یا سیستم عامل های مورد نظرمان و اینکه چه مقدار منابع برای هر ماشین مجازی مد نظر داریم. این قابلیت باعث می شود که بتوانیم در کوتاه ترین زمان به آنچه که در نظر گرفته ایم برسیم.

لطفاً توجه کنیم که بعضی از خطوط این فایل بسیار مهم هستند به همین علت نباید آنچه را که نمیدانیم دقیقا چه می کند تغییر دهیم. علی الخصوص قسمت ابتدایی فایل که وایگرانت آن را ترجمه و تحلیل می‌کند در صورتی که خارج از انتظارش تغییراتی در آن وجود داشته باشد ارور خواهد داد.

به پخش فایل خواهیم رسید اما قبل از آن اجازه بدهید بیشتر در مورد دستورات خود وایگرانت و زیر دستور های یا ساب کامندها آن صحبت کنیم. اگر وایگرانت را بدون هیچ زیر دستور یا ساب‌-کامند دیگری  اجرا کنیم خودش لیستی از تمام زیر دستورهای ممکن به ما ارائه می دهد. این دقیقا مثل این است که وایگرانت  را با سوئیچ -h اجرا کنیم.
چرا به این سویچ اشاره کردم،  دلیل اصلی آن این است که این روش برای همه زیر دستور های آنها قابل اجراست. بنابراین زمانی که مشغول کار کردن با وایگرانت  هستید  می توانید با تکیه به این روش، گزینه هایی که به دنبال آن هستید پیدا کنید. به نظرم این نقطه عطفی است برای شروع کار با این ابزار.

بگذارید با همین روش پیش برویم.  مثلاً زمانی که vagrant را بدون هیچ زیر دستوری اجرا کردیم لیستی از زیر دستور های ممکن برای ما چاپ میشود.

در این لیست با زیردستور اینیت(init) که قبلا آشنا شده بودیم. اولین زیر دستور قابل مشاهده باکس(Box) است. در دنیای وایگرانت باکس ها در واقع یک ایمیج از یک سیستم عامل هستند که قبلا  تهیه شده اند و در جایی در ابر یا کلود(cloud) به اشتراک گذارده شده‌اند. با این مفهوم بدیهی است  می‌توانیم باکس دلخواه خود را شخصی سازی کنیم و درکلود  با دیگران به اشتراک بگذاریم. در اینجا لازم است  مخزن باکسهای وایگرانت را بررسی کنیم. اگر به این لینک بروید لیستی از باکس هایی که توسط خود  مخزن شرکت هاشی‌کراپ  ارائه شده را جستجو نمایید. به نظرم به اندازه کافی گویاست که از چه فیلتر هایی  می‌توانیم برای جستجوی باکس مورد نظر خود اقدام کنیم بر اساس سرویس دهنده ویرچوال‌باکس باشد یا لیب‌ویرت(همان کتابخانه‌ای که کی‌وی‌ام/کو استفاده میکند)  و یا سرویس دهنده های دیگری که به دلیل متن باز نبودن  در اینجا از پوشش آنها اجتناب می کنیم. باشد که درس عبرتی باشد  برای آنهایی که طرفدار متن باز نیستند. برگردیم به بحث اصلی خودمان. این مخزن اصلی ترین و مرجع ترین مخزن برای باکس های وایگرانت است ، اما بدیهی است که این امکان وجود دارد که با کس های خودمان را در محل دیگری ذخیره و نگهداری کنیم. وایگرانت  این قابلیت را دارد که هنگام ایجاد یک اینستنت جدید لینک باکس مورد نظر ما را برای دانلود استفاده کند. بنابراین  می‌توانیم با خیال آسوده از این ابزار استفاده کنیم و نگران مسائل سیاسی و غیرفنی از جمله تحریم و فیلترینگ نباشیم.  البته لازم به ذکر است که مخزن اصلی رسمی ترین ورژنهای سیستم عاملها را پوشش می دهد.  مثلاً شرکت کانونیکال که توسعه دهنده سیستم عامل محبوب اوبونتو از خانواده دبیان هاست  و یا فدورا  و هر شرکت بزرگ دیگری که توسعه توزیع لینوکس خود را برعهده دارند به روزترین باکسهای سیستم‌عامل خود را در این مخزن به اشتراک می گذارند. جالب اینجاست که برخی از این شرکت‌ها سیستم‌عامل های شان رایگان نیست مثل اوراکل و یا ردهدت که  همچنان باکسهای خود را در این مخزن به اشتراک می گذارند. بنابراین خیلی لذت بخش است که به کمک این ابزار این نوع سیستم عامل را نیز دانلود  در صورت تمایل بررسی کنیم.


حالا که با مفهوم باکس آشنا شدیم بد نیست که اولین باکس خودرو دانلود و بارگذاری کنیم.  برای شروع از یک   اوبونتو نسخه ۱۸.۴ استفاده می کنیم. برای این کار هنگام اینیت کردن  می‌توانیم از وایگرانت  بخواهیم که در ریپازیتوری خود باکس مورد نظر را برایمان دانلود و بارگذاری کند. برای این کار کافی است همان نامی که در لیست ریپازیتوری  اصلی وجود دارد بعد از زیر دستور اینیت به وایگرانت بدهم.  فراموش نکنید اگر قبلا در دایرکتوری یک فایل وایگرانت وجود داشته باشد  در صورت تلاش برای اینیشیالایز کردن  یک فایل وایگرانت جدید  با ارور مواجه خواهیم شد.  دلیلش این است که وایگرانت  برای بارگذاری محیط مورد نظر ما به دنبال یک فایل می گردد با این اسم Vagranfile و این فایل را تحلیل می‌کند و مراحل را اجرا می کند.  جلوتر خواهیم گفت که چگونه می توانیم از این فایل استفاده کنیم برای درست کردن ایسنتنهای خیلی پیچیده‌تر. ولی صبور باشید از ساده شروع کنیم:

 $ vagrant init ubuntu/xenial64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

دستور بالا را اجرا کردیم در واقع است وایگرانت  خواستیم یک فایل وایگرانت  ایجاد کند و به جای اینکه از باکس پیش فرض استفاده کند آن نسخه از اون تویی که مدنظر ما بود را در فایل بنویسد به همین سادگی.


حالا اگر وایگرانت  راه با زیر دستور اپ اجرا کنیم وایگرانت  از مخزن اصلی خود با کسی که ما خواسته بودیم رو جستجو می کند آن را درپوشهای در این مسیر vagrant.d/boxes./~ ذخیره می کند. سپس از این فایل یک کلون تهیه می‌کند  و در پوشه ای  از دایرکتوری جاری در این مسیر vagrant/machines/default/libvirt.می کند و محیط مورد نظر ما را مطابق فایل وایگرانت  ایجاد می کند. این پروسه بسته به سرعت اینترنت و البته هارد دیسک شما ممکن است بین چند تا چند ده دقیقه طول بکشد.
اگر مثل من به دنبال سادگی و راحتی کار هستید  می‌توانید هنگامه این نیز کردن از سوئیچ m- استفاده کنید که فایل شما به صورت مینیمایز شده ایجاد شود.

همانطور که گفتیم  الان  می‌توانیم اینستنت خودرو روشن کنیم به سادگی:

$ vagrant up

الان اگر از زیر دستور استاتوس استفاده کنیم میبینیم که وایگرانت ماشین رو روشن کرده:

$ vagrant status

بعد اتمام مراحل کار میتواینم بگوییم که حالا که روشن شدی لطفا ssh هم بزن:

$ vagrant ssh

اگر از ویرچوال ماشین خارج بشیم از زیر دستورهای هالت ری استارت و دیستروی هم استفاده.  این دستور ها به ترتیب ماشین مجازی رو خاموش میکنه ، ری استارت می کند ، و از بین میبره. حالا که تا اینجا اومدی بذارید محیط های یه ذره پیچیده تر هم بررسی کنیم.به این منظور اول این اینسنت رو با دستور دیستروی  پاک میکنیم و بعد فایل وایگرانت رو  بررسی می کنیم و همزمان تغییر می دهیم تا با این مقوله بیشتر آشنا بشیم  همچنین ماهیت یه خورده پیچیده تر رو نرو ایجاد کنیم.

$ vagrant destroy
$ rm -rf .vagrant Vagrantfile
$ vagrant init
$ vi Vagrantfile

قبلا هم گفتیم که  این امکان وجود دارد که با استفاده است دستورالعملی که ما فایل وایگرانت  ایجاد می‌کنیم  میتونیم محیط های پیچیده تری تدارک ببینیم. پس بیاییم این فایل رو به صورت پیش فرض از بالا تا پایین بخونیم،  بررسی کنیم،   و هر جایی رو که لازم بود تغییر بدیم تا  سناریو پیش یرود.

همانطوریکه در کامنت ها هم توضیح داده شده اولین چیزی که در فایل وایگرانت قابل تغییر هست اسم باکس مورد نظر است.

پس این اسم پیش فرض رو به باکس مورد نظر تغییر میدیم.  درکیس ما  اوبونتو نسخه ۱۶.۴ . این قست توضیح بیشتری ندارد.
قسمت بعدی مربوط به فوروارد کردن پورت است. پیش روی ما این مسئله کاربرد خواهد داشت. اصولا وایگرانت  به صورت پیش فرض پورت ۲۲ ماشین مهمان رو  به هاست مپ میکنه. ما میتونیم همین کار رو برای راه اندازی یک وب سرور انجام بدیم.  یعنی پورت ۸۰ ماشین میهمان رو بپرد ۸۰۸۰ میزبان مپ کنیم. به این ترتیب میتونیم بررسی کنیم که آیا وب سرور در ماشین میهمان به درستی کار میکنه یا نه. در فایل وایگرانت به صورت پیش فرض این خط کامل شده.  البته برای سناریوهای دیگر می شود از همین مکانیزم بهره گرفت.
اما فرض کنیم که ما می خواهیم فقط از ماشین هاست به  به میهمان ۱ پورت مپ شود. برای این کار  فایل وایگرانت  را میتوان چوری تنظیم کرد که پورت باز شده در سمت هاست یا میزبان فقط از سورس لوکال هاست قابل دسترسی باشد.  اگر به تصویر پایین توجه کنید متوجه میشوید که چطور میتوان این مسئله را تحت کنترل خود قرار دهیم.

قسمت مهم بعدی زمانی است که احتیاج داریم آی پی های ایستا یا همان استاتیک برای ماشین های میهمان در نظر بگیریم.  فایل خودش شامل یک مثال هست که مطابق آن می‌توانیم از آن بهره ببریم. نکته ای که در این خصوص وجود دارد این است که بسته به نوع پرو وایدر این آدرس باید در اسکوپ پیش فرض آن پروایدر تنظیم شود. در مثال تصویر زیر اسکوپ پروایدر ویرچوال باکس از این رنج آی پی استفاده می کند و این در حالتی است که کی‌وی‌ام/کمو از رنج دیگری استفاده میکند. هر دوی اینها قابل تغییرند منتها برای سهولت در به اشتراک گذاری فایل‌های  وای‌گرانت از تغییر این اسکوپ ها صرف نظر میکنیم این امر باعث می شود وایگرانت فایل برای همه قابل خواندن باشد.


در بخش بعدی این فایل قابلیت به اشتراک گذاری یک دایرکتوری از هاست در میزبان صحبت خواهیم کرد. با این قابلیت امکان تبادل دیتا  از هاست به میهمان و برعکس میسر می شود. تصور کنید که از کلاستر های زد‌اف‌اس استفاده کرده اید و می توانید یک مانت‌پوینت را در میهمان مانت کنید.

قسمت بعدی نسبتاً مهم آنجایی است که می توانیم پروایدر و میزان منابع مورد نظر برای میهمان راه بررسی، تغییر و تنظیم کنیم.  به جز این در صورتی که بخواهیم ماشین میهمان رابطه گرافیک ایرا پشتیبانی کند نیز در این قسمت مورد بررسی قرار می گیرد
به تصویر زیر دقت کنید:


این قسمت را جلوتر به تفصیل مرور خواهیم کرد.
و اما مهمترین ، کاربردی ترین و قشنگترین قسمت این فایل این است که می توانیم از وایگرانت  بخواهیم برای پراویژنینگ  اسکریپتهای شل یا پاپت وی چف و امثالهم را اجرا نماید.  بعد از این هنگام  ایجاد اینستنت مورد نظر ما بعد از نهایی شدن مراحل دانلود و کلون گیری از باکس و سپس روشن کردن و مپ کردن پورتهای مورد نظر ما و همچنین مانت کردن فولدر مشترک این اسکریپت یا اسکریپت ها اجرا می شود. به عنوان  ساده ترین مثال می توانیم از وایگرانت بخواهیم که پس از اتمام مراحل ماشین میهمان رو به روز رسانی نمایید و البته مثال های پیچیده و پیچیده تر که من تصمیم دارم یکی از آنها را برای نمونه و آشنایی بهتر شما با این ابزار ارائه کنم.

در این قسمت تقریبا با مقدمات وایگرانت آشنا شدیم. در قسمت دومش از نصبش در کنار ‌کی‌وی‌ام کمو میگم و یه مثال بانمک پیاده میکنیم و کلی کاره دیگه!
فقط تا اینجا منابع رو داشته باشید. و حتما یادش بگیرید که در لحظه دارم رو یه ارائه دیگه از انسیبل کار میکنم و در اون ارائه از وایگرانت به عنوان هاپیروایزم استافده میکنم. یادش بگیرید که بتونید از اون ارائه هم استفاده کنید:

سایت ویرچوال‌باکس یا VirtualBox
سایت وایگرانت و یا Vagrant
نمونه توتریال خارجی! ولی من از رو اون کپی نکردم، قسم میخورم
یک نمونه توتریال از گیست که خیلی خوبه و حتما بخونیدش
و در نهایت سایت محبوب همه ما ویکی‌پدیا با ادای احترام به یک عزیز از دست رفته به اسم آرون شوارتز

Berlin, Germany

پاسخی بگذارید