vagrantfile如何在vagrant机器中存储更改?

时间:2014-05-31 20:39:41

标签: vagrant vagrantfile

我正在使用PhP开发一个应用程序,客户端要求我设置一个流浪汉机器并安装所有需要的扩展和模块,这样只需一个Vagrant up命令,客户端将拥有与我相同的环境,

我首先从其中一个盒子lsit

安装了一个流浪汉机器
  vagrant box add ubuntu1 http://goo.gl/KwQSa2

然后我运行这些命令:

      vagrant init ubuntu1
      vagrant up

在我创建此文件的目录中只有一个vagranrfile 问题: 我需要知道我是否对我的服务器进行了任何更改,例如,安装php或mysql将如何保存在设置中,这样如果我只是将此文件提供给我的客户端,他将能够拥有一台相同的机器来我的一切都安装好了吗?

我的意思是对vagrantfile会有任何改变,或者我犯了一些错误,我不得不安装一个带木偶的机器?

提前致谢

2 个答案:

答案 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'
}

您需要以下模块:

  • 阿帕奇
  • 的concat
  • MySQL的
  • STDLIB

上面的木偶配置仅用于示例,我强烈建议您阅读那些做得非常好的文档: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脚本之外。