Общий и автоматизированный бродячий ящик
-
27-10-2019 - |
Вопрос
Я думаю об использовании Vagrant для разработки приложений Django, но я немного запутался, и я не уверен, возможно ли то, что я хотел бы сделать.
Я успешно установил коробку Lucid32 и создал новый «экземпляр» Vagrant, с Vagrantfile, некоторыми общими каталогами и перенаправленными портами.
Первая проблема заключается в том, что это не кажется мне лучшим выбором при работе в команде. Как мы (например, я и другие 10 разработчиков) можем поделиться коробкой, чтобы каждое изменение в ней было разделено? Например, если через 6 месяцев нам нужен PostgreSQL, мне нужно, чтобы он работал без необходимости установить PostgreSQL 11 раз.
Кроме того, как я могу сделать вещи (например: PostgreSQL, Django, этот сервис и т. Д.), Чтобы начать, когда ящик начался? Я не думаю, что мне нужно сделать это и начать вручную
n
раз всеn
Вещи, которые мне нужны каждый раз.И, наконец, я не очень хорошо понимаю, должны ли такие вещи, как Puppet и Chef, предназначены для полной замены ручной установки (например, через PIP или APT-GET). Это так?
Спасибо.
И мне жаль плохой английский. :-)
Решение
Я бы сказал, что ваш выбор бродяги уже был хорошим началом того, что вы ищете, но теперь вам нужно немного углубиться в шеф -повара или марионеток, чтобы дополнительно автоматизировать процесс обеспечения.
Я полагаю, что хороший выбор в вашем сценарии - сначала поместить и то, что Vagrantfile и соответствующий марионеток проявляется под управлением версий в рамках вашего проекта. Кроме того, все конфигурации, касающиеся этой машины, также должны быть помещены в управление версиями и/или быть доступными через какой -то репозиторий артефакта.
Во -вторых, установите правило в команде, которое изменяется (по крайней мере, те, которые должны жить дольше) в окружающую среду, необходимо проверить, если они считаются готовыми для других членов команды.
Что касается вашего второго вопроса и возвращения к моему открытию: Puppet (что мне нравится) или шеф -повар - это ваши инструменты и могут спасти вас и ваших коллег в будущем. Я буду придерживаться кукол здесь, так как я не знаю шеф -повара слишком хорошо.
Благодаря Puppet вы можете управлять всем, что вам нужно, установкой пакетов, изменением конфигураций и обеспечением выполнения определенных услуг или в целом, что в системе есть состояние, которым вы хотите. Более того, если вы или другой командный член сделал несколько злонамеренных почетных положений в его/ее коробке, вы можете просто сбросить изменения в своем манифесте VagrantFile/Puppet, введите
vagrant destroy && vagrant up
И коробка легко доставит обратно в последнее состояние версии.
Например, возьмите следующий манифестный файл:
package { "mysql-server-5.1":
ensure => present
}
file { "/etc/mysql/my.cnf":
owner => "root",
content => "http://myrepository.local/myProject/configurations/mysql/my.cnf",
require => Package["mysql-server-5.1"]
}
service { "mysql":
ensure => running,
subscribe => File["/etc/mysql/my.cnf"],
require => File["/etc/mysql/my.cnf"]
}
Что это делает, это, прежде всего, проверяет механизм пакета ОС в вашем поле (имена в примере предполагают недавнюю Ubuntu), если пакет "mysql-server-5.1" установлен Это. Через атрибут «потребовать» вторая директива будет выполнена после первой (и только в случае, если он сработал), изменяя конфигурацию MySQL на той, которую вы также зарегистрировали и/или опубликовано где -то, что вы можете достичь (что также может быть Поместите в ту же папку, что и Vagrantfile, и затем будет доступен в поле под /бродяги). Последний шаг, который снова будет выполнен, только в том случае, если изменение сработавшей конфигурации обеспечит, чтобы служба «MySQL» работает или запускается или перезапускается, если она уже работает при изменении конфигурации.
Теперь вы можете подключить этот манифест в своем Vagrantfile:
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
config.vm.define "node1" do |cfg|
cfg.vm.network "10.23.5.11"
cfg.vm.provision :puppet do |puppet|
puppet.manifests_path = "manifests"
puppet.manifest_file = "node1.pp"
end
end
end
Со всеми изменениями, помимо «испытающих ударов», сделанных в такой среде, как эта, все команды мебель гарантируют одну и ту же настройку легко и воспроизводимым прямо у их кончиков пальцев.
Лично мне нравится пробовать что -то в руке в руке, и когда я нашел правильную настройку и конфигурацию, перевести их в марионеточный манифест, чтобы иметь, если он будет готов к последующему использованию и обмену членами команды.
Поскольку марионет Конфигурации для предоставления постановки или средств тестирования позже, если вы решите. Это гораздо больше вариантов с куклой и прочитание через Руководство по языку должен дать вам хорошее представление о том, что еще вы можете сделать с этим.
Надеюсь, я смогу помочь :)