0

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

我首先从其中一个盒子 lsit 中安装了一台 vagrant 机器

  vagrant box add ubuntu1 http://goo.gl/KwQSa2

然后我运行这些命令:

      vagrant init ubuntu1
      vagrant up

在我制作这个文件的目录中只有一个 vagranrfile 问题:我需要知道我是否对我的服务器进行了任何更改,例如,安装 php 或 mysql 它将如何保存在设置中,这样如果我只是给这个文件给我的客户,他将能够拥有一台相同的机器来安装所有东西?

我的意思是 vagrantfile 会有任何变化,或者我犯了一些错误,我不得不安装一台带有 puppet 的机器?

提前致谢

4

2 回答 2

2

不,当您在 VM 中安装东西时,vagrant 文件不会更改。

如果您希望您的客户端与您拥有同一台机器,则必须避免通过 VM 的外壳安装软件。您应该只对所有内容使用配置程序,甚至是 mysql 表、apache 虚拟主机等。

并且不要使用vagrant box add ubuntu1 http://goo.gl/KwQSa2,将框的 url 添加到 vagrantfile 中:

config.vm.box_url = "http://goo.gl/KwQSa2"

mysql/php 服务器的 puppet 配置示例:

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

您将需要以下模块:

  • 阿帕奇
  • 连接
  • mysql
  • 标准库

上面的 puppet 配置仅用于示例,我强烈建议您阅读那些做得非常好的文档:http: //docs.puppetlabs.com/learning/introduction.html

老实说,木偶是一个很棒的工具,花点时间学习它。

还有一件事,避免使用 shell 配置程序,每次运行“vagrant provision”时都会执行命令,puppet 只执行更改。(我只将 shell 配置器用于 apt-get update 和 apt-get upgrade)

于 2014-05-31T20:45:07.690 回答
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

请参阅文档以获取config.vm.provision.

我这样做是为了方便,所以所有配置仍然只保存在一个文件中。当然,任何由 Vagrant 直接支持的配置,最好不要使用这个 $bootstrap 脚本。

于 2014-05-31T20:44:12.417 回答