0

私は PhP でアプリケーションを開発していますが、クライアントから vagrant マシンをセットアップし、必要なすべての拡張機能とモジュールをインストールするように求められました。これにより、Vagrant up コマンドを 1 回実行するだけで、クライアントは私と同じ環境を持つことができます。

最初に、ボックス lsit の 1 つから vagrant マシンをインストールしました

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

次に、次のコマンドを実行します。

      vagrant init ubuntu1
      vagrant up

このファイルを作成したディレクトリには vagranrfile しかありません 質問: たとえば、php や mysql をインストールしてサーバーに変更を加えるかどうかを知る必要があります。このファイルをクライアントに送信すると、クライアントはすべてがインストールされた同一のマシンをマイニングできるようになりますか?

vagrantfile に何らかの変更が加えられるということですか、それとも何かミスをして、パペットを備えたマシンをインストールしなければならなかったのでしょうか?

前もって感謝します

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

正直なところ、パペットは素晴らしいツールです。時間をかけて習得してください。

もう1つ、シェルプロビジョンナーの使用を避けてください。コマンドは「vagrant provision」を実行するたびに実行され、パペットは変更のみを実行します。(apt-get update と apt-get upgrade にはシェル プロビジョンナーのみを使用します)

于 2014-05-31T20:45:07.690 に答える
1

Vagrantfile は、マシンのセットアップ方法を Vagrant に指示するレシピです。ある意味では、インストールの自動化ツールとして機能します (もちろん、それ以上のこともできます)。作成後にマシンに変更を加えても、Vagrant はそれを認識しません。

私がしていることは、Vagrantfile を作成し、その中で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参照してください。

便宜上、これをインラインで行っているため、すべての構成は 1 つのファイルにのみ保持されます。もちろん、Vagrant によって直接サポートされている構成は、この $bootstrap スクリプトから除外することをお勧めします。

于 2014-05-31T20:44:12.417 に答える