Я хочу настроить конфигурацию Vagrant для создания и запуска гостевой виртуальной машины Ubuntu, которая запустит supervisord
сервис внутри ВМ после Vagrant up
. Я бы хотел, чтобы это работало на хостах Windows, Mac и Linux.
у меня есть supervisord.conf
файл, который я копирую на виртуальную машину во время подготовки (сначала копируя в пространство пользователя, а затем копируя в /etc/supervisor/
как в этот ответ). Этот файл конфигурации включает следующие строки для обслуживания графического интерфейса пользователя на порту 9001 (этот порт перенаправляется на хост):
[inet_http_server]
port=9001
Однако, если я введу команду в сценарии подготовки Vagrant, например service supervisor start
то эта конфигурация не правильно подобрана. Я могу подключиться к виртуальной машине с помощью ssh и убедиться, что служба супервизора работает, но графический интерфейс недоступен на порту 9001. Если я перезапущу службу с помощью ssh, графический интерфейс станет доступным после перезапуска.
Этот перезапуск службы приводит к тому, что она забирает мою конфигурацию, заставляет меня думать, что конфигурация каким-то образом была недоступна при первом запуске службы.
Этот ответ похоже, решает аналогичную проблему. Итак, я попытался также скопировать файл в /etc/init/supervisor.conf
:
# start supervisord on vagrant mounted
start on vagrant-mounted
exec service supervisor restart
Это приведет к тому, что выскочка перезапустит службу, когда получит vagrant-mounted
мероприятие. Однако даже при наличии этого супервизор, похоже, не запустился правильно.
Я протестировал этот сценарий выскочки, выполнив sudo initctl emit vagrant-mounted
, и наблюдал перезапуск службы супервизора, и графический интерфейс стал доступен на 9001.
Это заставляет меня думать, что vagrant-mounted
событие, вероятно, произошло до запуска сценария подготовки.
Кто-нибудь знает, есть ли другое событие, на которое я мог бы предсказать свои сценарии выскочки? Что-то, что испускается, когда бродячая подготовка завершена?
Кроме того, есть ли лучший или канонический способ запуска службы на бродячей виртуальной машине? Все это похоже на то, что я попал в кроличью нору и пропустил что-то действительно очевидное.
Ладно, эта почта дайте мне знать, что я могу создать любое событие-выскочку, которое захочу, в качестве последнего шага в моем Vagrantfile:
Vagrant.configure(2) do |config|
config.vm.provision :file do |file|
file.source = "./conf/vagrant-ready.conf"
file.destination = "vagrant-ready.conf"
end
config.vm.provision :shell, path: "provision.sh"
config.vm.provision :shell, :inline => "sudo initctl emit vagrant-ready"
end
И я мог бы инициировать перезапуск службы супервизора с vagrant-ready
мероприятие:
# start supervisord on vagrant mounted
start on vagrant-ready
exec service supervisor restart
И мой сценарий подготовки:
#!/bin/bash
apt-get update
apt-get install -y supervisor
mv /home/vagrant/supervisord.conf /etc/supervisor/
mv /home/vagrant/vagrant-ready.conf /etc/init/
Эта настройка гарантирует, что служба супервизора перезапустится после того, как файл supervisord.conf
на месте. Таким образом, моя конфигурация загружается правильно.