..

راه انداختن vagrant در سه سوت

بیاین برگردیم به ده سال قبل نه خبری از داکر بود نه معماری پردازنده ها جوری بود که بشه رو مجازی سازی مانور زیادی داد و مجازی سازی تو استفاده از vmware و virtualbox و kvm تعریف میشد تازه اگر kvm رو فاکتور نگیریم که تا مدت ها اون هم مهجور بود . با اینکه هنوز مجازی سازی سنتی low level استفاده زیادی داره ولی سلوشن های کانتینر مثل lxc و lxd و docker خیلی پر طرفدار شده. شاید از خودتون بپرسین من چرا باید از vagrant استفاده کنم درحالی که داکر مدرن تر و کلی اپشن بیشتر میده و معماریش هم میکروسرویس و مدیریت منابع به آسونی انجام میشه ماونت پوینتم میتونه به اشتراک گذاری بشه و آپشن های خفن تر نتورکینگ داره . جواب رو میشه تو سه بخش خلاصه کرد . ۱ -اساسا معماری کانتینر های داکر به دلیل ایزولیشن و انجام یه تسک هستش ( بعضی ها رعایت نمیکنن کلی سرویس میپاشن تو یه کانتینر و کلی لایه اضافه میکنن که حجم کانتینتر به شدت بالا میبره در نتیجه عملا فرق انچنانی با سرویس های سنتی نداره و یه مجازی سازی شبه سنتی که با داکرماشین مدیریت میشه ) . پس اگر میخواین دیتابیس و وب سرویس و کش سرور و ردیس تون رو یه ماشین مجازی باشه و نه چندین کانتینر بهترین راه استفاده از vagrant . 2- داکر هنوز راه زیادی برای پشتیبانی از تمام پلتفرم ها داره . میدونیم که اکثر شرکت ها در بخش اینترپرایز یا از ورژن های قدیمی تر کرنل لیونکس استفاده میکنن یا از freebsd که قاعدتا از داکر پیشتبانی نمیکنند ۳ – قطعا برای سیس ادمین های سنتی تر اداپت شدن با این همه حجم تغییراتی که در چند سال گذشته در زمینه مجازی سازی اتفاق افتاده سخت تره . Vagrant میتونه به سادگی این ترس از تغییر رو از بین ببره ( البته که چیزی جز یه کامندلاین برای مدیریت vm options نیست و ساختار فایل سیستم و مدریت پردازش به کل با داکر فرق میکنه ولی خیلی بهتر از محیط گرافیکی ) ۴- برای توسعه دهنده هایی که مسلط به داکر ریجستری و داکر کامپوز نیستن فرایند دولوپ رو میتونه سریعتر و از شلوغ کاری تو سیستم اصلی رو کمتر بکنه . هیچکی نمیخواد که بعد از پایان پروژه کلی پکیج بلااستفاده رو سیستمش داشته باشه

تا اینجای کار یا vagrant به درد شما میخوره یا نمیخوره پس میریم سراغ تعریف vagrant که چی هستش و اپشن هایی که میده چیه و چه جور تو سه سوت سه تا اینستنس centos 7 به همراه داکرانجین بیاریم بالا بدون درد و خونریزی تو وطن دائم التحریم ایران .

Vagrant چیه ؟ وگرانت ابزاری که برای ساخت ماشین مجازی و محیط توسعه به کار میره و تمرکزش روی اتوماتیک سازی فرایند ها هستش

چه جوری یه ماشین مجازی رو تو سه سوت با وگرانت بالا بیاریم : اول نیاز به نصب وگرانت هستش که به سادگی میتونید از اینجا پکیج مناسب سیستم عامل خودتون رو دانلود کنید . یه دایرکتوری بسازید و واردش بشین تو قدم بعدی نیازهستش که یه باکس از پیش ساخته شده وگرانت به عنوان سیستم عامل خودتون انتخاب کنیدبرای مثال من باکس centos 7 رو دانلود کردم ( این قسمت نیازمند دانلود ایمج سیستم عامل مذکور هستش )

vagrant init centos/7

کامند init یه فایل Vagrantfile میسازه که توی اون تمامی تنظیمات ماشین مجازی ذخیره شده تو قدم بعدی کافی هستش که vagrant up بزنید تا ایمیج سیستم عامل دانلود بشه و سیستم آپ بشه . قدم بعدی vagrant ssh هستش که وارد سیستم بشین و پکیج های مورد علاقتون رو نصب کنید یا سیستم عامل کانفیگ کنید . توجه کنید یوزر vagrant دارای دسترسی sudoers هست در آخر پس از پایان کار vagrant destroy که باعث میشه ایمیج به همراه متعلقاتش به فنا بره برای دیدن اینکه چه ماشین مجازی های روی vagrant در حال اجرا هستن میتونید از کامند vagrant global-status استفاده کنید .

سناریو هایی هم البته وجود داره که بخواین از تنظیمات یا اتومیشن خودتون استفاده کنید ورگنت از پلاگین های مختلف هم پشتیبانی میکنه برای مثال در اکثر پروژه هایی که مورد تحریم واقع شدیم باید از پراکسی برای دور زدن تحریم ها استفاده کنیم که پلاگین vagrant-proxyconf به صورت اتوماتیک تنظیمات پکیج منیجر و اکثر پکیج های پرکاربرد مثل docker رو تغییر ماده تا ترافیک پشت پراکسی منتقل بشه

vagrant plugin install vagrant-proxyconf
#in vagrant file
config.proxy.http     = "http://yourproxy:8080"
config.proxy.https    = "http://yourproxy:8080"
config.proxy.no_proxy = "localhost,127.0.0.1"

مورد دیگه ای که درمورد وگرنت هست این هستش که میتونید به ماشین مجازی خودتون public یا private ایپی بدین . به این صورت که اگر پابلیک باشه تو اینترنت یا شبکه لوکالتون قابل دسترس هستش بسته به ip که میدین . دو مثال برای شبکه پابلیک و پرایوت میزنم

پرایوت : زمانی که میخواین با dhcp به هرکدوم از هاست های vagrant خودتون ایپی بدین که لوکال ماشین مجازی باشه . یا برای تست میخواین تعداد زیادی ماشین مجازی بیارین بالا کافیه چند تا دایرکتوری بسازین تنظیمات رو روی dhcp بزارین توVagrantfile و آپ کنید

Vagrant.configure("2") do |config|
  config.vm.network "private_network", type: "dhcp"
end

پابلیک : فرض میگیریم سابنت شبکه شما 192.168.10.0 هستش برای دیده شدن ماشین مجازیتون تو این شبکه کافیه در تنظیمات یه ایپی دستی ست کنید

Vagrant.configure("2") do |config|
config.vm.network "public_network", ip: "192.168.10.7"

سناریو دیگه اتومیشن هستش تصور کنید حداقل ده تا سرور تستی میخواین راه اندازی کنید که هرکدوم نصب و کانفیگش قطعا زمان بر خواهد بود . چکار میکنید ؟ خوشبختانه vagrant از bash script و کلا قابلیت provision پشتیبانی میکنه پس دستتون برای این دست از فعالیت های اتومیشن باز هستش برای مثال میخواین داکر رو روی وگرانت نصب کنید ( virtualization inside virtualization 😂 😂 ) مثالش اینجور میشه تو تنظیمات Vagrantfile اسکریپت رو معرفی میکنید

 config.vm.provision :shell, path: "../rancher.sh"

بعد تو دایرکتوری parent اسکریپت rancher.sh رو میسازین به این صورت

#! /bin/bash
yum update -y
curl -fsSL https://get.docker.com/ | sh
sudo systemctl enable docker.service
sudo systemctl start docker

بسته به نیاز شما این سناریوها میتونه پیچیده تر باشه. اپشن های دیگه ای برای محدود کردن یا مشخص کردن تعداد هسته های cpu و ram و interface هست که در این مقاله جا نمیشد امیدوارم که این مقاله به شما کمک کنه که به سادگی و در سه سوت ماشین مجازی خودتون رو راه اندازی کنید