Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Работа с сетью Vagrant: Основы

Vagrant подходит для разработки абсолютно любых приложений, но так получилось, что в основном все разрабатывают веб-проекты. Главная их особенность – наличие веб-сервера, который нужно запустить для работы с проектом. Без Vagrant мы бы просто так и сделали, но с Vagrant все немного сложнее из-за виртуализации. Виртуальное окружение изолировано от хост-машины, сюда входит и сеть.

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

Vagrant.configure("2") do |config|
  # ...
  config.vm.network "forwarded_port", guest: 8080, host: 8080
end

Чтобы изменения вступили в силу, нужно перезагрузить машину:

vagrant reload
==> default: Attempting graceful shutdown of VM...
==> default: Checking if box 'ubuntu/impish64' version '20211211.0.0' is up to date...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 8080 (guest) => 8080 (host) (adapter 1)
    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: 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: 6.0.0 r127566
    default: VirtualBox Version: 6.1
==> default: Mounting shared folders...
    default: /vagrant => /home/hexlet/hexlet-vagrant
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

Что мы сделали? Мы указали Vagrant, что port 8080 с хост-машины (host), должен вести на порт 8080 гостевой машины (guest). Теперь когда мы хотим посмотреть на наш проект, то достаточно зайти внутрь Vagrant, запустить веб-сервер на 8080 порту и открыть его снаружи в браузере:

vagrant ssh
cd /vagrant
# запускаем простой веб-сервер на python
python3 -m http.server 8080 --directory /vagrant
# открываем бразуер по адресу localhost:8080
# вы должны увидеть содержимое директории с проектом

Порты можно пробрасывать в любом количестве. Для этого просто добавьте еще одну строчку в Vagrantfile:

Vagrant.configure("2") do |config|
  # ...
  config.vm.network "forwarded_port", guest: 8080, host: 8080
  # Для примера показаны разные порты
  config.vm.network "forwarded_port", guest: 3000, host: 5000
end

Домашнее задание

Загрузите домашнее задание с помощью команды:

hexlet program download devops-for-programmers vagrant

Самостоятельная работа

  1. Измените конфиг виртуальной машины Vagrant, чтобы можно было с локальной системы запустить приложение js-fastify-blog с которым мы работали ранее. Проверьте, что в браузере на локальной машине открывается страница по адресу http://localhost:8080

  2. Запушьте результат на Github


Дополнительные материалы

  1. Настройка сети в Vagrant

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу