Vagrant в Windows 10 с VirtualBox

ОСНОВНЫЕ ПЛАНЫ / ИНСТРУМЕНТЫ:

Хост:
Windows 10 Pro => Базовая ОС хоста (вы можете использовать Windows Server 2016
VirtualBox => Настройка платформы VM  (Отключите платформы виртуализации, отличные от VirtualBox. В Windows отключите Hyper-V, если он запущен.) Для настройки Hyper-V платформы Vagrant в Windows 10 с Hyper-V.

Оркестровка и настройка:
Vagrant => Устанавливает debian9 Linux ‘VM’ (виртуальная машина)
следующие плагины:

Дополнительно:
Chef Development Kit.
Docker => Экземпляр приложения «Контейнер» для приложения на виртуальной машине
Ansible => Настроить виртуальные машины и контейнеры с помощью «Playbooks»

УСТАНОВКИ

1. Chef Development Kit: choco install chefdk

-Установить VirtualBox

Можно Установить с помошю Chocolatey
choco install virtualbox
Также установлен Oracle VM VirtualBox Extension Pack,

-Устанавливать Vagrant

(В это время я использую Vagrant 2.2.3, текущий последний). Можно Установить с помошю Chocolatey
choco install vagrant
(перезагрузка после)

PS C:\WINDOWS\system32> vagrant version
Installed Version: 2.2.3
Latest Version: 2.2.3

-Установить распространяемый пакет Microsoft Visual C ++ 2010 SP1 (x86)
-Setup Hyper-V Switch (Exstrenalal Virtual Switch) Подробнее

  • Необязательно — добавьте переменную окружения VAGRANT_NETWORK_BRIDGE со значением имени виртуального коммутатора, который вы создали, чтобы не допустить, чтобы Vagrant запрашивал его каждый раз.
    $Env:VAGRANT_NETWORK_BRIDGE = "Exstrenal Virtual Switch"
  • При желании, если вы планируете использовать VirtualBox по умолчанию, добавьте переменную окружения VAGRANT_DEFAULT_PROVIDER со значением VirtualBox, чтобы предотвратить указание ее каждый раз при загрузке машины. $Env:VAGRANT_DEFAULT_PROVIDER = "virtualbox"
  • При необходимости добавьте переменную окружения VAGRANT_LINKED_CLONE, чтобы сэкономить дисковое пространство.
  • При желании добавьте переменные окружения VAGRANT_SMB_USERNAME и VAGRANT_SMB_PASSWORD с вашими учетными данными на хост, чтобы не допустить, чтобы Vagrant запрашивал его каждый раз, когда машина загружается.

Измените каталог, в котором Vagrant хранит свои boxes?
Есть некоторые ситуации, когда мы можем захотеть изменить каталог, в котором Vagrant хранит свои boxesв других каталогах, например, для резервного копирования boxes, уменьшения дискового пространства на основном разделе и т. Д. В этом случае мы можем изменить переменную VAGRANT_HOME на наше желаемое местоположение.
setx VAGRANT_HOME "D:\Vagrant"

Ограниченная сеть Public Networks.

Создание первой рабочей станции

Создать свой проект Vagrant

Теперь, когда вы все настроите, вы можете начать свой первый проект Vagrant, создав папку проекта, в которой будут размещаться различные конфигурации для каждой вашей виртуальной машины. Вы будете использовать командную строку для запуска команд Vagrant из этих папок.
Создайте папку проекта, я использовал D:\Vagrant\debian-test.
Использование Vagrant

Первичные команды для начала — это Vagrant init и Vagrant up.

Открыть PowerShell с правами администратора и смените каталоги в папку тестового проекта

PS C:\WINDOWS\system32> cd D:\Vagrant\debian-test

Запустите vagrant init и будет создан новый файл в текущем каталоге под названием «Vagrantfile» (без расширения), который содержит базовую конфигурацию.

PS D:\Vagrant\debian-test> vagrant init generic/debian9

Откройте Vagrantfile в текстовом редакторе, таком как Notepad ++ или Visual Studio Code, и посмотрите, изучите комментарии перед каждым значением конфигурации. Вы можете установить общие папки между гостем и хостом, включить перенаправление портов, задать имя хоста и многое другое. Vagrant имеет конфигурацию по умолчанию, которую можно использовать, даже без каких-либо изменений здесь.

Vagrant Boxes

Этот Vagrantfile указывает на generic/debian9 base box.

Найти другие «base box» для использования можно просмотреть в облако Vagrant для base box. В этом примере мы будем использовать «generic/debian9». Чтобы Vagrant автоматически использовал этот образ, введите vagrant box add generic/debian9 --provider virtualbox
Эти образы находятся в папке % userprofile% /. Vagrant.d / boxes. Вы можете перечислить все установленные образы, набрав PS D:\vagrant\one> vagrant box list. Вы можете удалить образы vagrant box remove box/name.

Теперь, когда у вас есть Vagrantfile с установленным базовым образом, вы можете развернуть виртуальную машину с помощью этой команды:

PS D:\Vagrant\debian-test> vagrant up

-вы должны увидеть:

PS C:\Vagrant\debian-test> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'generic/debian9'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'generic/debian9' version '1.8.52' is up to date...
==> default: A newer version of the box 'generic/debian9' for provider 'virtualbox' is
==> default: available! You currently have version '1.8.52'. The latest is version
==> default: '1.9.2'. Run `vagrant box update` to update.
==> default: Setting the name of the VM: debian-test_default_1550988506282_83285
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> 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: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.1.38
    default: VirtualBox Version: 6.0

— использовать vagrant ssh (Login: vagrant Pass:vagrant)
-Наконец, удалить среду

PS D:\Vagrant\debian-test> vagrant ssh
vagrant@debian9:~$ exit
logout
Connection to 127.0.0.1 closed.
PS D:\Vagrant\debian-test> vagrant halt
==> default: Attempting graceful shutdown of VM...
PS D:\Vagrant\debian-test> vagrant destroy --force
==> default: Destroying VM and associated drives...

Настраивать новый Vagrantfile

Если все настроено правильно, вам действительно не нужно изменять свой Vagrantfile.
Тем не менее, было бы неплохо ппосмотреть, есть ли что-нибудь для настройки. В документах Vagrant есть информация о настройке вашего Vagrantfile для взаимодействия с поставщиком VirtualBox.

Настройки Vagrantfile

Имя хоста, которое должно иметь ВМ. По умолчанию ноль. Если ноль, Vagrant не будет управлять именем хоста. Если задана строка, имя хоста будет установлено при загрузке. Если установлено, Vagrant обновит / etc / hosts на гостевой ВМ с настроенным именем хоста.

config.vm.hostname = "debian9-test"

Вы можете настроить имя, отображаемое в графическом интерфейсе VirtualBox, установив свойство name. По умолчанию Vagrant устанавливает его в папку, содержащую Vagrantfile, плюс отметку времени, когда машина была создана. Установив другое имя, вашу ВМ можно будет легче идентифицировать.

config.vm.provider "virtualbox" do |v|
    v.name = "debian9-test"
    v.memory = 2048
    v.cpus = 4
  end

Создайте частную сеть, которая разрешает доступ к машине только с хоста с использованием определенного IP-адреса.

config.vm.network "private_network", ip: "192.168.33.10"

Поделитесь дополнительной папкой с гостевой виртуальной машиной. Первый аргумент это путь на хост к фактической папке. Второй аргумент — это путь гостя для монтирования папки. А необязательный третий аргумент — это набор необязательных параметров.

config.vm.synced_folder ".", "/home/vagrant/mySyncFolder"

Если использовать config.vm.synced_folder «.», «/home/vagrant», то vagrant ssh требует password.

Создайте общедоступную сеть, которая обычно соответствует мостовой сети (bridged network). ВМ Vagrant по умолчанию и по своей конструкции небезопасны и содержат общедоступные пароли, небезопасные пары ключей для доступа по SSH и, возможно, разрешают корневой доступ по SSH. С этими известными учетными данными, ваш ВМ легко доступен любому в вашей сети. Перед настройкой Vagrant для использования общедоступной сети рассмотрите все потенциальные последствия для безопасности и просмотрите конфигурацию «base box» а для выявления потенциальных угроз безопасности.

config.vm.network "public_network", ip: "192.168.0.18"

В зависимости от настроек, вы можете переопределить конфигурацию маршрутизатора по умолчанию вручную. Это необходимо, если вам нужен доступ к Vagrant из других сетей через общедоступную сеть. Для этого вы можете использовать скрипт оболочки:

PS D:\Vagrant\debian-test> vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'generic/debian9'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'generic/debian9' version '1.8.52' is up to date...
==> default: Setting the name of the VM: debian-test_default_1550993382528_35560
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
    default: Adapter 3: bridged
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> 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: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.1.38
    default: VirtualBox Version: 6.0
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /home/vagrant/mySyncFolder => C:/Vagrant/debian-test
PS D:\Vagrant\debian-test> vagrant ssh
vagrant@debian9:~$ exit
logout
Connection to 127.0.0.1 closed.
PS D:\Vagrant\debian-test> vagrant destroy --force

Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  
  config.vm.box = "generic/debian9"

  config.vm.hostname = "debian9-test"
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.network "public_network", ip: "192.168.0.18"
  config.vm.synced_folder ".", "/home/vagrant/mySyncFolder"
  
  config.vm.provider "virtualbox" do |v|
    v.name = "debian9-test"
    v.memory = 2048
    v.cpus = 4
  end
end

Vagrant Provisioning

Provisioners in Vagrant позволяют автоматически устанавливать программное обеспечение, изменять конфигурацию и многое другое на машине в рамках процесса vagrant up.

Vagrant дает вам несколько вариантов для конфигурации VM, от простых сценариев shell до более сложных, стандартных систем управления конфигурацией nполный список встроенных средств конфигурации vagrant Provisioning.

Ansible Local Provisioner

Vagrant Ansible Local Provision позволяет вам изменять конфигурацию VM используя Ansible playbooks, выполнив команду непосредственно на гостевой машине.
Основным преимуществом Ansible Local Proviser по сравнению с Ansible (удаленным) является то, что он не требует дополнительного программного обеспечения на вашем Vagrant хосте.
С другой стороны, Ansible, очевидно, должен быть установлен на ваших гостевых машинах.
Примечание. По умолчанию Vagrant попытается автоматически установить Ansible, если он еще не присутствует на гостевой машине.
Применение Ansible Local Provisioner
Ansible Local Provision требует, чтобы все файлы Ansible Playbook были доступны на гостевой машине в местоположении, указанном параметром Provision_path. Обычно эти файлы изначально присутствуют на главной машине (как часть вашего проекта Vagrant), и довольно легко доступны на гостевой машине с Vagrant Synced Folder.
Простейшая конфигурация

Для запуска Ansible базовая конфигурация Vagrantfile выглядит так:

 # Run Ansible from the Vagrant VM
  config.vm.provision "ansible_local" do |ansible|
    ansible.provisioning_path = "/home/vagrant/mySyncFolder/provisioning"
    ansible.playbook = "playbook-ansible-example.yml"
  end

Требования:

Файл playbook-ansible-example.yml хранится в provisioning каталоге в домашнем каталоге проекта Vagrant. Общий доступ к каталогу включен ( config.vm.synced_folder «.», «/home/vagrant/mySyncFolder»).
Чтобы повторно запустить playbook на существующей виртуальной машине, просто запустите:
PS D:\Vagrant\debian-test> vagrant provision или provision --provision-with shell,docker_compose
или vagrant provision —provision-with ansible_local

Файл playbook-ansible-example.yml создает файл с именем «/tmp/testfile.txt» с содержанием «hello world»

---
- name: This is a hello-world example
  hosts: all
  tasks:
  - name: Create a file called '/tmp/testfile.txt' with the content 'hello world'.
    copy: 
      content: "hello world\n" 
      dest: /tmp/testfile.txt


Ansible Local Provisioner и ansible-galaxy

Для запуска Ansible c ansible-galaxy базовая конфигурация Vagrantfile выглядит так:

config.vm.provision "ansible_local" do |ansible|
    ansible.provisioning_path = "/home/vagrant/mySyncFolder/provisioning"
    ansible.playbook = "playbook-geerlingguy-git.yml"
    #ansible.inventory_path = "provisioning"
    #ansible.verbose = true
    #ansible.install = true
    #ansible.become = true
    #ansible.limit = "all"  # or only «nodes» group, etc.
    #ansible.compatibility_mode = "1.8"

    ansible.galaxy_role_file = "requirements.yml"
    ansible.galaxy_roles_path = "/etc/ansible/roles"
    ansible.galaxy_command = "sudo ansible-galaxy install --role-file=%{role_file} --roles-path=%{roles_path} --force"
  end


Требования: Файл playbook-geerlingguy-git.yml и requirements.yml хранятся в provisioning каталоге в домашнем каталоге проекта Vagrant. Общий доступ к каталогу включен ( config.vm.synced_folder «.», «/home/vagrant/mySyncFolder»). Файл playbook-geerlingguy-git.yml устанавливает git.

---
- name: Converge
  hosts: all
  become: true

  pre_tasks:
    - name: Update apt cache.
      apt: update_cache=true cache_valid_time=600
      when: ansible_os_family == 'Debian'
      changed_when: false

  roles:
    - role: geerlingguy.git
#requirements.yml
---
- src: geerlingguy.git
PS D:\Vagrant\debian-test> vagrant provision --provision-with ansible_local
==> default: Running provisioner: ansible_local...
Vagrant has automatically selected the compatibility mode '2.0'
according to the Ansible version installed (2.2.1.0).

Alternatively, the compatibility mode can be specified in your Vagrantfile:
https://www.vagrantup.com/docs/provisioning/ansible_common.html#compatibility_mode
    default: Running ansible-galaxy...
 [WARNING]: Ansible is in a world writable directory (/home/vagrant/mySyncFolder/provisioning), ignoring it as an ansible.cfg source.
- downloading role 'git', owned by geerlingguy
- downloading role from https://github.com/geerlingguy/ansible-role-git/archive/2.0.4.tar.gz
- extracting geerlingguy.git to /etc/ansible/roles/geerlingguy.git
- geerlingguy.git was installed successfully
    default: Running ansible-playbook...
 [WARNING]: Ansible is in a world writable directory (/home/vagrant/mySyncFolder/provisioning), ignoring it as an ansible.cfg source.
ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.

The error appears to have been in '/etc/ansible/roles/geerlingguy.git/tasks/main.yml': line 23, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- import_tasks: install-from-source.yml
  ^ here
The error appears to have been in '/etc/ansible/roles/geerlingguy.git/tasks/main.yml': line 23, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- import_tasks: install-from-source.yml
  ^ here
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.

Ansible failed to complete successfully.

Дополнительную информацию вы можете найти по следующим ссылкам:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *