我正在使用PhP开发一个应用程序,客户端要求我设置一个流浪汉机器并安装所有需要的扩展和模块,这样只需一个Vagrant up命令,客户端将拥有与我相同的环境,
我首先从其中一个盒子lsit
安装了一个流浪汉机器 vagrant box add ubuntu1 http://goo.gl/KwQSa2
然后我运行这些命令:
vagrant init ubuntu1
vagrant up
在我创建此文件的目录中只有一个vagranrfile 问题: 我需要知道我是否对我的服务器进行了任何更改,例如,安装php或mysql将如何保存在设置中,这样如果我只是将此文件提供给我的客户端,他将能够拥有一台相同的机器来我的一切都安装好了吗?
我的意思是对vagrantfile会有任何改变,或者我犯了一些错误,我不得不安装一个带木偶的机器?
提前致谢
答案 0 :(得分:2)
不,当你在VM中安装东西时,vagrant文件不会改变。
如果您希望客户端拥有与您相同的计算机,则必须避免通过VM的shell安装软件。您应该只使用配置程序,用于所有内容,甚至是mysql表,apache虚拟主机等。
并且不要使用vagrant box add ubuntu1 http://goo.gl/KwQSa2
,将框的url添加到vagrantfile:
config.vm.box_url = "http://goo.gl/KwQSa2"
mysql / php服务器的木偶配置示例:
group { 'puppet':
ensure => 'present',
}
#
# Apache configuration
#
class { 'apache' :
default_mods => false,
default_confd_files => false,
mpm_module => 'prefork',
default_vhost => false,
sendfile => 'Off'
}
class { 'apache::mod::php' : } # mod_php
class { 'apache::mod::rewrite' : } # mod_rewrite
# VHost configuration
apache::vhost { 'dev.XXX.fr' :
port => '80',
docroot => '/var/sites/myXXX/web',
access_log => true,
access_log_file => 'XXX_access.log',
error_log => true,
error_log_file => 'XXX_error.log',
aliases => [{alias => '/myXXX', path => '/var/sites/toto/web'}],
directories => [{path => '/var/sites/myXXX/web', 'allow_override' => ['FileInfo', 'Indexes']}, {path => '/var/sites/toto/web', 'allow_override' => ['FileInfo', 'Indexes']}]
}
#
# Mysql configuration
#
class { '::mysql::server' :
root_password => 'XXX',
databases => {
'XXX' => {
ensure => 'present',
charset => 'utf8'
}
},
users => {
'XXX@localhost' => {
ensure => 'present',
password_hash => 'XXX' # XXXmdp
}
},
grants => {
'XXX@localhost/XXX' => {
ensure => 'present',
options => ['GRANT'],
privileges => ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'CREATE'],
table => 'XXX.*',
user => 'XXX@localhost'
}
}
}
class { '::mysql::client' : }
package { 'php5-mysql' :
require => [Class['apache::mod::php'], Class['::mysql::server']],
ensure => 'present'
}
您需要以下模块:
上面的木偶配置仅用于示例,我强烈建议您阅读那些做得非常好的文档:http://docs.puppetlabs.com/learning/introduction.html
老实说,傀儡是一个很好的工具,花时间学习它。
还有一件事,避免使用shell配置程序,每次运行“vagrant provision”时都会执行命令,puppet只执行更改。 (我只使用shell配置器进行apt-get update和apt-get升级)
答案 1 :(得分:1)
Vagrantfile是一个告诉Vagrant如何设置机器的配方。在某种程度上,它可以作为安装自动化工具(当然也可以做得更多)。如果您在创建机器后对机器进行任何更改,Vagrant就不会知道。
我做的是创建Vagrantfile并在其中创建 我指定一个shell脚本,Vagrant只会在第一次机器启动后执行一次。
VAGRANTFILE_API_VERSION = "2"
$bootstrap = <<SCRIPT
# Installing all dependencies and other required software.
# Add "-y" switch to make sure installation is fully automatic.
apt-get install -y python-software-properties
# Any other stuff I might want to do (like edit conf files)
...
SCRIPT
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "precise64"
config.vm.provision "shell", inline: $bootstrap
end
请参阅the doc for config.vm.provision
。
我内联这是为了方便,所以所有配置仍然只保存在一个文件中。 当然,任何由Vagrant直接支持的配置都可以更好地保留在这个$ bootstrap脚本之外。