Vagrant Как на хостовой Ubuntu с ядром 6.8 автоматически в VirtualBox создать виртуальную машину и развернуть в ней микросервис
Primary tabs
Forums:
Предварительная установка окружения
1. Установка Vagrant версии 2.4.7
Лучше установить вручную — это гарантирует установку именно версии 2.4.7:
wget -O /tmp/vagrant_2.4.7-1_amd64.deb https://releases.hashicorp.com/vagrant/2.4.7/vagrant_2.4.7-1_amd64.deb sudo apt install /tmp/vagrant_2.4.7-1_amd64.deb
Проверим установленную версию:
vagrant --version
ожидаемый вывод: "Vagrant 2.4.7"
2. Установка VirtualBox версии 7.1
Сначала скачать дистрибутив, потом установить: https://fkn.ktu10.com/?q=node/16210
Либо можно всё сделать командами через терминал:
Добавим ключи репозитория:
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add - wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
Добавим официальный репозиторий VirtualBox (замените "jammy" на свою версию Ubuntu, например, focal, bionic):
echo "deb [arch=amd64] https://download.virtualbox.org/virtualbox/debian jammy contrib" | sudo tee /etc/apt/sources.list.d/virtualbox.list
Обновим список пакетов:
sudo apt update
Собственно установим VirtualBox:
sudo apt install virtualbox-7.1
Проверим установленную версию:
VBoxManage --version
ожидаемый вывод: "7.1.10r169112"
3. Установка подходящего компилятора
Проверим текущий компилятор в текущей системе:
gcc --version
например: gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Проверим, каким компилятором собрано ядро:
cat /proc/version
например: x86_64-linux-gnu-gcc-12
Если их версии совпадают, этот шаг пропустить.
Иначе установим компилятор gcc-12:
sudo apt install gcc-12
Зарегистрируем альтернативы:
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 110 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 120
Выберем нужную версию:
sudo update-alternatives --config gcc
Проверим результат:
gcc --version
ожидаемый вывод: "gcc (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0"
4. После выполним пересборку и установку ядренных модулей VirtualBox
sudo /sbin/vboxconfig
5. Если уже был установлен плагин vagrant-vbguest — лучше его удалить
В последних версиях VirtualBox и Vagrant плагин всё чаще не справляется — особенно с Ubuntu 22.04+ и VirtualBox 7+. При его наличии могут возникать конфликты или ошибки при запуске проекта. Рекомендуется ставить Guest Additions вручную или через shell-скрипт внутри ВМ.
vagrant plugin uninstall vagrant-vbguest
Создание с помощью Vagrant виртуальной машины с микросервисом (например, ktu-auth) внутри
1. Создание Vagrant-проекта
mkdir ~/my-vagrant cd ~/my-vagrant vagrant init
Таким образом, в домашней директории пользователя создаётся директория проекта "my-vagrant", а команда "vagrant init" создаст в ней дефолтный файл Vagrantfile.
2. Создание локальной копии удалённого репозитория
Перед запуском виртуальной машины микросервис ktu-auth, указанный в Vagrantfile, должен уже находиться в папке проекта my-vagrant. Поэтому, из данной папки выполним команду:
git clone <АдресРепозитория>
Вместо <АдресРепозитория> подставьте URL вашего репозитория!
3. Монтаж образа Гостевых дополнений
Скачаем ISO отсюда: https://download.virtualbox.org/virtualbox/7.1.10/VBoxGuestAdditions_7.1.10.iso
и поместим его в папку проекта "my-vagrant" (путь к этой папке пропишем в нашем Vagrantfile)
Или можно из папки проекта скачать командой:
wget https://download.virtualbox.org/virtualbox/7.1.10/VBoxGuestAdditions_7.1.10.iso
4. Автоматизация управления над Virtualbox
Отредактируем Vagrantfile в любом текстовом редакторе — замените содержимое файла на следующее:
# -*- mode: ruby -*-
Vagrant.configure("2") do |config|
# Используем официальную Ubuntu 22.04 LTS (Jammy)
config.vm.box = "ubuntu/jammy64"
# Настройка провайдера VirtualBox
config.vm.provider "virtualbox" do |vb|
vb.name = "ubuntu2204-vbox" # имя виртуальной машины в VirtualBox
vb.memory = 2048 # выделяем 2 ГБ оперативки
vb.cpus = 2 # 2 CPU
vb.gui = false # без GUI, если нужна — true
vb.customize [
"storageattach", :id,
"--storagectl", "IDE", # ← вот контроллер, имя узнать можно так: "VBoxManage showvminfo ubuntu2204-vbox | grep -i controller"
"--port", "1",
"--device", "0",
"--type", "dvddrive",
"--medium", "/home/<your-name>/my-vagrant/VBoxGuestAdditions_7.1.10.iso" # вместо <your-name> подставьте ваше имя пользователя!
]
end
# Синхронизация папок (тип "virtualbox" по умолчанию для Linux-хостов)
config.vm.synced_folder "./ktu-auth", "/var/www/ktu-auth", type: "virtualbox"
# Настройка приватной сети с IP
config.vm.network "private_network", ip: "192.168.56.10"
# Установка необходимых пакетов
config.vm.provision "shell", inline: <<-SHELL
# Не взаимодействовать с пользователем при установке (для предотвращения зависаний)
export DEBIAN_FRONTEND=noninteractive
# Прерывать выполнение скрипта при любой ошибке команды
set -e
echo "Проверка и восстановление dpkg, если был прерван..."
dpkg --configure -a || true
echo "Обновление списка пакетов..."
apt-get update -y
echo "Установка Make и необходимых утилит..."
apt-get install -y make ca-certificates curl gnupg lsb-release dkms build-essential linux-headers-$(uname -r)
echo "Установка GPG ключа Docker (если ещё нет)..."
if [ ! -f /etc/apt/keyrings/docker.gpg ]; then
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
fi
echo "Добавление репозитория Docker (если не добавлен)..."
if [ ! -f /etc/apt/sources.list.d/docker.list ]; then
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
fi
echo "Повторное обновление кэша пакетов..."
apt-get update -y
echo "Установка Docker и Compose Plugin..."
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "Очистка кэша пакетов..."
apt-get autoremove -y
echo "Добавление пользователя vagrant в группу docker..."
if getent group docker > /dev/null; then
usermod -aG docker vagrant
fi
echo "Проверка, входит ли пользователь vagrant в группу docker..."
if id vagrant | grep -q '\\bdocker\\b'; then
echo 'Пользователь vagrant уже в группе docker.'
else
echo 'ВНИМАНИЕ: Пользователь vagrant ещё не в группе docker.'
echo 'Для применения групп выполните команду: "vagrant reload" или "vagrant destroy && vagrant up" чтобы применить изменения.'
fi
echo "✅ Установка завершена."
SHELL
end
Вместо <your-name> (строка 18) подставьте ваше имя пользователя в Ubuntu!
5. Запуск виртуальной машины
VirtualBox может быть не запущен. Из папки проекта выполним команду:
vagrant up
В этом шаге Vagrant:
- скачает образ Ubuntu (если его нет)
- создаст и запустит ВМ
- настроит сеть
- установит окружение
- запустит сервер
Запуск проекта в созданной гостевой системе
В нормальной работе с Vagrant не стоит входить в ОС через VirtualBox вручную (но если очень нужно, то вот стандартные учётные данные для всех Vagrant-образов Ubuntu: логин: vagrant пароль: vagrant).
1. Войдём в гостевую VM из основной системы
Если находитесь не в папке проекта, можно перейти в неё так:
cd ~/my-vagrant
Из папки проекта на основной системе выполним команду:
vagrant ssh
таким образом зашли в гостевую систему через терминал хостовой системы:
vagrant@ubuntu-jammy:~$
2. Соберём и запустим контейнеры микросервиса ktu-auth
Перейдём в папку проекта уже внутри гостевой VM, над которым нужно работать:
cd /var/www/ktu-auth
Стартанём контейнеры:
make docker.start.all
3. Вероятно, при первом запуске возникнет такая ошибка
network nginx_dev_local_network declared as external, but could not be found make: *** [Makefile:41: docker.start.all] Error 1
Тогда добавим сеть вручную:
docker network create nginx_dev_local_network
и затем повторно выполним:
make docker.start.all
Если на это раз всё ОК, должны увидеть что-то вроде:
... Локальное приложение KTU-auth: http://localhost:9731 Описание API KTU-auth Swagger: http://localhost:19736
4. Далее подтягиваем зависимости
make composer.install
Если всё прошло успешно, из браузера из хостовой системы должны открываться страницы:
Локальное приложение KTU-auth: http://192.168.56.10:9731
Описание API KTU-auth Swagger: http://192.168.56.10:19736
5. Выйдем из виртуалки
exit
Если что-то пошло не так
Больше информации здесь: https://fkn.ktu10.com/?q=node/17432
- Log in to post comments
- 326 reads