<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمدامین احمدی</title>
        <link>https://virgool.io/feed/@mmdaminah</link>
        <description>اینجا سعی میکنم چیزایی که جدید یاد میگیرم رو با شما به اشتراک بگذارم :)</description>
        <language>fa</language>
        <pubDate>2026-06-16 06:05:46</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/3516681/avatar/xAT314.jpg?height=120&amp;width=120</url>
            <title>محمدامین احمدی</title>
            <link>https://virgool.io/@mmdaminah</link>
        </image>

                    <item>
                <title>وگرنت | Vagrant برام vm بساز</title>
                <link>https://virgool.io/@mmdaminah/%D9%88%DA%AF%D8%B1%D9%86%D8%AA-vagrant-%D8%A8%D8%B1%D8%A7%D9%85-vm-%D8%A8%D8%B3%D8%A7%D8%B2-hykhhmwgbxel</link>
                <description>HashiCorp Vagrantوگرنت چیه و چرا؟وگرنت چیزی نیست که تو استفاده روزمره بین دولوپرا یا توی پست های لینکدین درباره ش صحبت بشه پس اگه دارین این پست رو میخونین احتمالن بدونین برای چی استفاده میشه. اگرم نمیدونید که بریم سراغ تعریفی که سایتشون از خودشون داره. میگه ما یه ابزار کامند لاینی هستیم برای مدیریت ماشین های مجازی.سوالی که پیش میاد اینه که خوب vmware و virtualbox و ... ابزارهای دیگه برای مجازی سازی هستن چرا باید به خودمون زحمت بدیم و پای یه چیز دیگه رو بکشیم وسط؟باید خدمتتون عرض کنم چیزی که من تا به اینجا بهش پی بردم اینه که میتونیم با استفاده از یه دونه Vagrantfile که توش مشخصات ماشینمون رو مشخص کردیم vm بسازیم. ولی این سودیش کجاس؟به نظر من سودش اینجاست که ما میتونیم مشخصات vm رو توی فایل بنویسیم و اگه تغییراتی هم در طول زمان روش انجام میدیم مثلن با git ثبت کنیم و هر موقع لازممون شد فایل رو برداریم و دوباره ازش استفاده کنیم. مخصوصن برای من که هر چند وقت یه بار یه vm لازمم تا یه سری چیزا رو تست کنم.همچنین به قول خارجیها under the hood می‌تونیم از providerهای مختلف برای مجازی سازی استفاده کنیم که من از virtualbox استفاده میکنم. فقط نکته ای که هست اون باکسی که استفاده میکنم برای پروایدرهای مختلف فرق میکنه.وگرنت رو چجوری راه بنداریم؟به قول خارجیا let&#x27;s get our hands dirty و بریم تو کار ببنیم vagrant چجوری راه میفته.بعد از اینکه وگرنت رو نصب کردید این کامند زیری رو بزنید.vagrant initاین کامند اتومات میاد یه دونه Vagrantfile براتون میسازه که اکثر چیزایی که توش هست کامنت شده. اگه یه نگاه اجمالی که بهش بندازید متوجه میشید که این فایل با یه زبون برنامه نویسی نوشته شده اگه نفهمیدی چیه طوری نیست چون  با Ruby نوشته شده. اما خیلی نگران نباشید که باید برید یه زبان جدید یاد بگیرید اکثر کاری که میخوایم انجام بدیم اینه که چندتا متغیر رو مقدار بدیم.اگه کامنتارو بیخیال بشیم چیزی که واقعن توی فایل وجود داره اینه:Vagrant.configure(&amp;quot2&amp;quot) do |config|
     config.vm.box = &amp;quotbase&amp;quot
endبرای اینکه ماشین با این کانفیگی که مشخص کردیم راه بیفته دستور زیر رو میزنیم.vagrant upالان ماشین اومد بالا ولی برای اینکه بتونیم ازش استفاده کنیم باید بهش ssh بزنیم که با دستور زیر وارد ماشین میشیم.vagrant sshباکس | Box چیه؟چیزی که تو تکه کد بالا مهمه اینه که config.vm.box چیه؟وگرنت داره از یه مفهومی استفاده میکنه به نام box که تقریبن یه چیزی شبیه cd ویندوز خودمونه یا اگه یه خورده حرفه ای تر هستید مثه iso سیستم عامل یا اگه دیگه خیلی کارتون درسته مثه image داکر میمونه. مثلن اگه میخوایم یه vm داشته باشیم که داره از ubuntu استفاده میکنه میتونیم کانفیگمون رو اینجوری بنویسیم‍‍‍‍‍Vagrant.configure(&amp;quot2&amp;quot) do |config|      
       config.vm.box = &amp;quotbento/ubuntu-22.04&amp;quot 
endو یا اینکه وقتی داریم از کامند init استفاده میکنیم میتونیم اسم box رو هم بهش بگیم. vagrant init &amp;quotbento/ubuntu-22.04&amp;quotاگه بخوایم لیست boxهای موجود روی سیستم رو ببنیم از دستور پایین استفاده می‌کنیم.vagrant box listو اگه بخوایم یه باکسی رو دستی اضافه کنیم از دستور پایین استفاده می‌کنیم.vagrant box add &amp;quotbox_name&amp;quotچندماشینی | Multi-Machineبعضی وقتا لازممون میشه چندتا ماشین رو همراه بیاریم بالا. وگرنت برای این هم فکری کرده و توی داکش هم چندتا از usecase هاشو مثال زده. مثلنوقتی که توپولوژی چند سروری داریم یا سرور وب و دیتابیسمون از هم جداست.اگه بخوایم سیستم های توزیع شده رو شیبه سازی کنیم. (احتمالن منظورش اینه کوبری چیزی بخواین بیارین بالا)یکی دو مورد دیگه هم گفته که به درد من نمیخوره.خوب برای این کار اول نمونه کدشو رو ببینیم بعدش راجع بهش توضیح میدم.Vagrant.configure(&amp;quot2&amp;quot) do |config|
  config.vm.provision &amp;quotshell&amp;quot, inline: &amp;quotecho Hello&amp;quot

  config.vm.define &amp;quotweb&amp;quot do |web|
    web.vm.box = &amp;quotapache&amp;quot
  end

  config.vm.define &amp;quotdb&amp;quot do |db|
    db.vm.box = &amp;quotmysql&amp;quot
  end
endخوب این قطعه کدی که بالا گذاشتم همون usecaseی هست که سرور وب و دیتابیس جدا داشتیم. به قول داک وگرنت اومدیم یه کانفیگ دیگه داخل فایل کانفیگ نوشتیم. یعنی اومدیم مثه برنامه نویسی دو تا scope جدید ساختیم. مثلن اینجا اگه نوشتیم web مثه همون config خط اول عمل میکنه.وقتی که چندتا ماشین همراه هم ران میکنیم بعضی دستورا یه خورده عوض میشن مثلن به جای vagrant sshباید اسم ماشینی که میخوایم بهش وصل شیم رو هم بنویسیم که مثلن اینجا برا وب میشهvagrant ssh webوقتی که vagrant up میزنیم همه ماشین ها باهم بالا میان که میتونیم ماشین هارو به صورت تکی هم بالا بیاریم. مثلن بزنیمvagrant up webیا اینکه میتونیم autostart ماشینایی که دلمون میخواد رو غیرفعال کنیم.config.vm.define &amp;quotweb&amp;quot
config.vm.define &amp;quotdb&amp;quot
config.vm.define &amp;quotdb_follower&amp;quot, autostart: falseو اما حرکت دیگه ای که میشه زد اینه که یه تعداد ماشین مثه هم رو با حلقه ایجاد کرد.(1..3).each do |i|
  config.vm.define &amp;quotnode-#{i}&amp;quot do |node|
    node.vm.provision &amp;quotshell&amp;quot,
      inline: &amp;quotecho hello from node #{i}&amp;quot
  end
endشبکه حالا که با قضیه چندماشینی آشنا شدیم میمونه اینکه این ماشین ها چجوری باهم در ارتباط باشن و چجوری با سیستم خودمون یا به عبارتی با host خودمون در ارتباط باشن. ارتباط بین ماشینها سه روش داره.اولیش Port Forwardingدومیش Private Networkو سومیش هم Public Networkروش Port Forwardingساده ترین روش اینه یک یا چند پورت از ماشینی که vagrant برامون ساخته رو forward کنیم روی host. توی کد زیر هم مشخصه پورت سیستم خودمون میشه host و پورت vm میشه guest. یه گزینه دیگه هم هست که میشه فعالش کرد به نام auto_correct که اگه مثلن پورتی که روی host مشخص کردیم مشغول بود یه پورت دیگه رو اختصاص میده بهش.Vagrant.configure(&amp;quot2&amp;quot) do |config|
  config.vm.network &amp;quotforwarded_port&amp;quot, guest: 80, host: 8080
  auto_correct: true
endاستفاده از Private Networkاگه تنظیمات شبکه vm رو بذاریم روی حالت private آیپی که ماشین میگیره میشه از رنج IPهای private. در این مورد دو حالت پیش میاد یکی اینکه مثه کد پایین DHCP رو فعال کنیم که ماشین اتومات IP بگیره.Vagrant.configure(&amp;quot2&amp;quot) do |config|
  config.vm.network &amp;quotprivate_network&amp;quot, type: &amp;quotdhcp&amp;quot
end یا اینکه بهش IP Static بدیم.Vagrant.configure(&amp;quot2&amp;quot) do |config|
  config.vm.network &amp;quotprivate_network&amp;quot, ip: &amp;quot192.168.50.4&amp;quot
endاستفاده از Public Networkهمون قضایای private رو توی قسمت public داریم که به صورت زیر هست.Vagrant.configure(&amp;quot2&amp;quot) do |config|
  config.vm.network &amp;quotpublic_network&amp;quot
endبا این لینک شما می‌توانید پیش‌نویس خود را حتی قبل از انتشار با دوستانتان به اشتراک بگذارید و نظر آن‌ها را در مورد آن بدانید.Vagrant.configure(&amp;quot2&amp;quot) do |config|   
    config.vm.network &amp;quotpublic_network&amp;quot, ip: &amp;quot192.168.50.4&amp;quot 
endقابلیت Synced Folderهمون طور که از اسمش معلومه با استفاده از این قابلیت می‌تونیم یه دایرکتوری رو بین host و vm به اشتراک بگذاریم. آدرس اولی رو که میدیم مربوط به host میشه و نسبت به دایرکتوری پروژه حساب میشه و آدرس دومی باید absolute path باشه.Vagrant.configure(&amp;quot2&amp;quot) do |config|
  # other config here

  config.vm.synced_folder &amp;quotsrc/&amp;quot, &amp;quot/srv/website&amp;quot
endدر پایان هم چندتا دستور دیگه هست که دونستنشون خالی از لطف نیست.vagrant destroy // حذف ماشین

vagrant global-status // وضعیت همه ماشین های ایجاد شده توسط وگرنت

vagrant status // وضعیت ماشین های داخل یه پروژه

vagrant ssh-config // نمایش کانفیگ اتصال به ماشین

vagrant halt // غیرفعال کردن ماشینآدرس ریپوی گیتهابم رو هم میذارم که سه نمونه vagrantfile مختلف توش هست.https://github.com/mmdaminah/vagrantمنابع:https://developer.hashicorp.com/vagranthttps://github.com/AhmadRafiee/DevOps_Certification/tree/main/vagrant</description>
                <category>محمدامین احمدی</category>
                <author>محمدامین احمدی</author>
                <pubDate>Sat, 19 Oct 2024 15:26:59 +0330</pubDate>
            </item>
            </channel>
</rss>