Sunday, January 19, 2025

[Vagrant] Sử dụng Vagrant trong MacOS

-

Vagrant là một công cụ quản lý môi trường phát triển để giúp việc xây dựng, chia sẻ và quản lý các môi trường phát triển đồng nhất trên các máy tính khác nhau. Khi bạn muốn sử dụng Vagrant để quản lý môi trường phát triển của mình, bạn phải định cấu hình một môi trường Vagrant đầu tiên bằng cách tạo một file Vagrantfile.

1. Cài đặt Vagrant.

Vagrant hỗ trợ sử dụng VMware Fusion làm nhà cung cấp ảo hóa. Để sử dụng Vagrant với VMware Fusion, bạn cần cài đặt các plugin VMware cho Vagrant.

Bạn có thể cài đặt Vagrant trên macOS bằng cách thực hiện các bước sau:

Bước 1: Tải xuống gói cài đặt Vagrant từ trang web chính thức của Vagrant:

Bước 2: Tải xuống gói cài đặt Vagrant từ trang web chính thức của Vagrant: https://www.vagrantup.com/downloads.

Bước 3: Sau khi tải xuống, mở file cài đặt Vagrant và thực hiện theo hướng dẫn để cài đặt, ví dụ theo như hướng dẫn thì đối với MacOS sử dụng lệnh brew install hashicorp/tap/hashicorp-vagrant để cài đặt.

Lệnh chạy sẽ trông giống như vậy.

$ brew install hashicorp/tap/hashicorp-vagrant
Running `brew update --auto-update`...
==> Downloading https://formulae.brew.sh/api/formula.json
######################################################################## 100.0%
==> Downloading https://formulae.brew.sh/api/cask.json
######################################################################## 100.0%
==> Tapping hashicorp/tap
Cloning into '/usr/local/Homebrew/Library/Taps/hashicorp/homebrew-tap'...
remote: Enumerating objects: 2892, done.
remote: Counting objects: 100% (387/387), done.
remote: Compressing objects: 100% (168/168), done.
remote: Total 2892 (delta 263), reused 329 (delta 219), pack-reused 2505
Receiving objects: 100% (2892/2892), 536.39 KiB | 2.51 MiB/s, done.
Resolving deltas: 100% (1800/1800), done.
Tapped 2 casks and 24 formulae (59 files, 733.6KB).
==> Downloading https://releases.hashicorp.com/vagrant/2.3.4/vagrant_2.3.4_darwin_amd64.dmg
######################################################################## 100.0%
==> Installing Cask hashicorp-vagrant
==> Running installer for hashicorp-vagrant; your password may be necessary.
Package installers may write to any location; options such as `--appdir` are ignored.
Password:
installer: Package name is Vagrant
installer: Installing at base path /
installer: The install was successful.
🍺  hashicorp-vagrant was successfully installed!

Bước 4: Kiểm tra xem Vagrant đã được cài đặt chưa bằng cách mở Terminal và nhập lệnh “vagrant”. Nếu Vagrant được cài đặt thành công, hệ thống sẽ hiển thị danh sách các lệnh Vagrant có sẵn.

Nếu sau khi cài đặt Vagrant gặp lỗi “command not found: vagrant”, bạn có thể thử thực hiện một số hành động sau:

  • Khởi động lại Terminal hoặc mở một cửa sổ Terminal mới để đảm bảo rằng các thay đổi cài đặt đã được áp dụng.
  • Kiểm tra xem đường dẫn tới thư mục chứa file thực thi Vagrant đã được thêm vào biến PATH của hệ thống chưa. Để kiểm tra, bạn có thể nhập lệnh “echo $PATH” trong Terminal và kiểm tra xem đường dẫn “/usr/local/bin” đã được thêm vào biến PATH chưa.
  • Nếu đường dẫn “/usr/local/bin” chưa được thêm vào biến PATH, bạn có thể thêm nó bằng cách sửa file cấu hình shell của bạn. Ví dụ, nếu bạn đang sử dụng shell bash, bạn có thể sửa file ~/.bash_profile hoặc ~/.bashrc bằng cách thêm dòng sau vào cuối file:
export PATH="/usr/local/bin:$PATH"

Sau khi lưu lại thay đổi, bạn cần khởi động lại Terminal hoặc nhập lệnh “source ~/.bash_profile” hoặc “source ~/.bashrc” để đảm bảo rằng các thay đổi đã được áp dụng.

2. Cài đặt plugin VMware.

Để cài đặt plugin VMware, bạn có thể sử dụng lệnh vagrant plugin install vagrant-vmware-desktop trong Terminal:

$ vagrant plugin install vagrant-vmware-desktop                                                                                                                                                                                                                          9m4s
Installing the 'vagrant-vmware-desktop' plugin. This can take a few minutes...
Fetching vagrant-vmware-desktop-3.0.1.gem
Installed the plugin 'vagrant-vmware-desktop (3.0.1)'!

3. Cài đặt vmware-utility.

VMware-utility là một tiện ích của Vagrant để hỗ trợ tích hợp VMware với Vagrant. Khi sử dụng Vagrant với VMware, VMware-utility được cài đặt trên máy chủ VMware để cung cấp các tính năng như đồng bộ hóa thời gian giữa máy chủ VMware và máy ảo Vagrant, điều khiển hệ thống tập tin và thực hiện một số thao tác khác liên quan đến máy chủ VMware và máy ảo Vagrant.

Nếu bạn muốn sử dụng Vagrant với VMware, bạn cần cài đặt VMware-utility trên máy chủ VMware của mình. VMware-utility được cung cấp bởi HashiCorp, nhà phát hành Vagrant. Bạn có thể tìm hiểu thêm về cách cài đặt VMware-utility trên trang web của HashiCorp.

Đầu tiên hãy vào https://developer.hashicorp.com/vagrant/vmware/downloads chọn Vagrant.

Chọn install.

Sau khi chọn install, Hashicorp sẽ đưa bạn đến trang cài đặt Vagrant, bạn hãy kéo xuống dưới.

Kéo xuống dưới bạn sẽ gặp VMware Utility, bấm vào Download.

Mình sử dụng MacOS nêm mình sẽ chọn Version là MacOS, bấm Download.

Sau khi tải về mình sẽ được 1 file tên vagrant-vmware-utility_1.0.21_x86_64.dmg, hãy mở nó ra và bạn sẽ thấy 1 file VagrantVMwareUtility.pkg hãy chạy nó.

Bấm Continue.

Bấm Continue.

Chọn Agree.

Bấm Install.

Nhập Username và Password máy của bạn và bấm Install Software.

Quá trình cài đặt bắt đầu, sau khi cài đặt xong bấm Close để đóng hộp thoại.

4. Khởi chạy máy ảo.

Sau khi cài đặt xong, bạn có thể sử dụng lệnh “vagrant up” để tạo một máy ảo trong VMware Fusion, tương tự như khi sử dụng VirtualBox. Ví dụ, để tạo một máy ảo Ubuntu 20.04 trong VMware Fusion, bạn có thể tạo một file Vagrantfile với nội dung sau:

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-20.04"
  config.vm.provider "vmware_desktop" do |vmware|
    vmware.gui = true
  end
end

Sau khi soạn xong file Vagrantfile, bạn hãy sử dụng lệnh vagrant up để khởi chạy máy ảo.

$ vagrant up                                                                                                                                                                                                                                                      987ms
Bringing machine 'default' up with 'vmware_desktop' provider...
==> default: Box 'bento/ubuntu-20.04' could not be found. Attempting to find and install...
    default: Box Provider: vmware_desktop, vmware_fusion, vmware_workstation
    default: Box Version: >= 0
==> default: Loading metadata for box 'bento/ubuntu-20.04'
    default: URL: https://vagrantcloud.com/bento/ubuntu-20.04
==> default: Adding box 'bento/ubuntu-20.04' (v202112.19.0) for provider: vmware_desktop
    default: Downloading: https://vagrantcloud.com/bento/boxes/ubuntu-20.04/versions/202112.19.0/providers/vmware_desktop.box
==> default: Successfully added box 'bento/ubuntu-20.04' (v202112.19.0) for 'vmware_desktop'!
==> default: Cloning VMware VM: 'bento/ubuntu-20.04'. This can take some time...
==> default: Checking if box 'bento/ubuntu-20.04' version '202112.19.0' is up to date...
==> default: Verifying vmnet devices are healthy...
==> default: Preparing network adapters...
==> default: Starting the VMware VM...
==> default: Waiting for the VM to receive an address...
==> default: Forwarding ports...
    default: -- 22 => 2222
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Configuring network adapters within the VM...
==> default: Waiting for HGFS to become available...
==> default: Enabling and configuring shared folders...
    default: -- /Users/hoanghd/Desktop: /vagrant

Và đây là kết quả sau khi khởi tạo máy ảo thành công.

Lưu ý rằng để sử dụng VMware Fusion với Vagrant, bạn cần một bản cấp phép VMware Fusion Pro hoặc VMware Fusion Pro + VMware Workstation Pro.

Tạo 1 máy ảo yêu cầu phức tạp hơn, ví dụ như sau:

Bạn có thể sử dụng nội dung Vagrantfile sau để tạo máy ảo Ubuntu 18.04 với Docker và Docker Compose được cài đặt sẵn, có 2 interface với interface 1 có địa chỉ IP là 192.168.13.186/23, gateway là 192.168.12.5 và DNS là 8.8.8.8 và interface 2 có địa chỉ IP là 172.16.1.1/24 và không có gateway và DNS, có 3 ổ đĩa, ổ đĩa chạy OS là 200GB, 2 ổ đĩa còn lại mỗi ổ 50GB:

Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-18.04"

  config.vm.network "private_network", ip: "192.168.13.186", :netmask => "255.255.254.0", :gateway => "192.168.12.5"
  config.vm.network "private_network", ip: "172.16.1.1", :netmask => "255.255.255.0"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
    vb.cpus = "2"

    vb.customize ['createhd', '--filename', 'disk1.vdi', '--size', '200000']
    vb.customize ['createhd', '--filename', 'disk2.vdi', '--size', '50000']
    vb.customize ['createhd', '--filename', 'disk3.vdi', '--size', '50000']

    vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 0, '--device', 0, '--type', 'hdd', '--medium', 'disk1.vdi']
    vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', 'disk2.vdi']
    vb.customize ['storageattach', :id, '--storagectl', 'SATA Controller', '--port', 2, '--device', 0, '--type', 'hdd', '--medium', 'disk3.vdi']
  end

  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
    apt-get install -y docker.io docker-compose
  SHELL
end

Trong đó:

  • config.vm.box: Định nghĩa image sử dụng cho máy ảo, ở đây là Ubuntu 18.04.
  • config.vm.network: Cấu hình 2 interface cho máy ảo với interface 1 có địa chỉ IP là 192.168.13.186/23, gateway là 192.168.12.5 và DNS là 8.8.8.8, interface 2 có địa chỉ IP là 172.16.1.1/24 và không có gateway và DNS.
  • config.vm.provider "virtualbox": Định nghĩa cấu hình của provider, ở đây là VirtualBox.
  • vb.memoryvb.cpus: Cấu hình bộ nhớ và số lõi CPU cho máy ảo.
  • Phần tiếp theo của Vagrantfile sẽ định nghĩa các cấu hình cho 3 ổ đĩa với ổ đĩa đầu tiên là ổ đĩa chứa hệ điều hành Ubuntu 18.04, có kích thước là 200GB. 2 ổ đĩa tiếp theo là các ổ đĩa dữ liệu, mỗi ổ đĩa có kích thước là 50GB.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories