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/focal64' 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
Самостоятельная работа
Измените конфиг виртуальной машины Vagrant, чтобы можно было с локальной системы запустить приложение js-fastify-blog с которым мы работали ранее. Проверьте, что в браузере на локальной машине открывается страница по адресу http://localhost:8080
Запушьте результат на Github
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.