我正在考虑使用Vagrant开发Django应用程序,但我有点困惑,我不确定我想做什么甚至可能。
我成功安装了lucid32盒并创建了一个新的“vagrant”实例,包括Vagrantfile,一些共享目录和转发端口。
第一个问题是,在团队中工作时,这似乎不是我的最佳选择。我们如何(例如我和其他10位开发人员)共享这个盒子,以便共享它的每个变化?例如,如果在6个月内我们需要postgresql,我需要让它工作而不必安装postgresql 11次。
另外,如何在启动框时启动(例如:postgresql,django,this-service等)?我不认为我必须ssh它,并且每次都需要手动启动n
次我需要的所有n
项内容。
最后:如果木偶和厨师之类的东西完全取代手工安装(例如通过pip或apt-get),我不太清楚。是这样吗?
谢谢。
我很抱歉英语不好。 : - )子>
答案 0 :(得分:13)
我想说你选择的Vagrant已经是你正在寻找的一个良好的开端,但现在你需要深入挖掘Chef或Puppet,以进一步自动化你的配置过程。
我想你们场景中的一个很好的选择就是首先将Vagrantfile和相应的Puppet清单作为项目的一部分置于版本控制之下。此外,有关此计算机的所有配置也应放入版本控制和/或通过某种工件存储库提供。
其次,如果团队中的规则发生变化(至少应该存在更长时间的那些),那么如果他们被认为已经为其他团队成员做好准备,则需要签入该规则。
关于你的第二个问题并回到我的开场白:Puppet(我喜欢)或者厨师是你的首选工具,将来可以为你和你的同事节省很多工作。我会坚持Puppet,因为我不太了解Chef。
使用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”,如果不安装它安装它。通过'require'属性,第二个指令将在第一个指令之后执行(并且只有在它工作的情况下执行),将MySQL配置更改为您已签入和/或发布到可以到达的地方(也可能是放入与Vagrantfile相同的文件夹中,然后在/ vagrant下的框中可用。最后一步,只有在配置更改工作时才会执行,将确保“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
除了对这样的环境进行“尝试填充”之外的所有更改,所有团队成员都可以保证轻松地使用相同的设置,并且只需触手可及就可以重现。
我个人喜欢手动尝试这些东西,当我找到正确的设置和配置时,将其翻译成Puppet清单,以备日后使用并与团队成员共享。
由于Puppet(和Chef也可以)管理几乎所有你需要的东西(用户,cron作业,包,服务,文件......),对于这些问题来说它是一个很好的选择,你甚至可以受益如果您愿意,以后可以使用这些配置来配置登台或测试环境。对于Puppet来说,它们是更多的选择,阅读the language guide应该会让你更好地了解它可以用它做什么。
希望我能提供帮助:)