Vagrantの使い方を覚えるために、操作に必要なことをまとめておくことにした。
Requirements
インストール手順
これは毎回やるわけじゃないので、割愛。
BOXを準備する
Discover Vagrant Boxes - Vagrant Cloud
vagrant box list
でBOXの一覧を見る。
vagrant box remove {BOXのtitle}
で削除。
vagrant init {BOXのtitle}
で初期化。Vagrantfile作成。
Vagrant.configure(2) do |config| config.vm.box = "centos67test" # config.vm.network "private_network", ip: "192.168.33.10" end
仮想マシン関連のコマンド
立ち上げる
cd {ディレクトリ}
で移動して、vagrant up
で立ち上げる。
状態を見る
vagrant status
一時停止する
vagrant suspend
vagrant resume
で復帰。
再起動
vagrant reload
終了
vagrant halt
初期化
vagrant destroy
仮想マシンに接続する
vagrant ssh
rootユーザーになる
仮想マシンにログインしたら$ sudo su -
でrootをとる。
Vagrantfileの設定
ネットワーク設定
vim Vagrantfile
でVagrantfileを開き、# config.vm.network :private_network, ip: "192.168.33.10"
のコメントを外す。
vagrant reload
すると、仮想マシンに192.168.33.10
でアクセスできるようになる。IPアドレスは好きなものに変更して良い。
プロビジョニング
起動した時や、vagrant provision
を実行した時にchefやansibleなどの構成管理ツール、Shellのスクリプトなどを実行させる。。
1. プロビジョニング Vagrantには chef や ansible のようなサーバーの初期設定をするしくみが備わっています。 大きく分けて、Vagrantfile に直接記述する inlineの方法と、外部ファイル(shell script)に記述する方法があります。
inline方式のプロビジョニング
Vagrantfileの中で記載する。iunline:
に続けて記述。
Vagrant.configure("2") do |config| config.vm.provision "shell", inline: <<-SHELL sudo yum update sudo yum install -y git screen tree wget SHELL end
外部ファイル方式のプロビジョニング
shell scriptをpath:
に記述する。
Vagrant.configure("2") do |config| config.vm.provision "shell", path: "script.sh" //script.sh はホストマシン側に置く end
The Vagrant Shell provisioner allows you to upload and execute a script within the guest machine.
ホストマシンにあるscriptを仮想マシンにアップロードして実行する、ということか。
各種インストールするprovisioning
Macにサーバと同じ環境を構築する 〜Vagrant編〜 - Qiitaより拝借。
config.vm.provision "shell", inline: <<-SHELL yum -y update service iptables stop chkconfig iptables off # Apache yum -y install httpd service httpd start chkconfig httpd on # MySQL yum -y install mysql mysql-server mysql-devel service mysqld start chkconfig mysqld on # PHP yum -y install php php-opcache php-devel php-mbstring php-mcrypt php-mysqlnd php-phpunit-PHPUnit php-pecl-xdebug php-pecl-xhprof cp /etc/php.ini /etc/php.ini_org sed -i -e "s|expose_php = On|expose_php = Off|" /etc/php.ini sed -i -e "s|;date.timezone =|date.timezone = Asia/Tokyo|" /etc/php.ini sed -i -e "s|display_errors = Off|display_errors = On|" /etc/php.ini sed -i -e "s|;mbstring.language = Japanese|mbstring.language = Japanese|" /etc/php.ini service httpd restart # Git yum install -y git SHELL
共有ディレクトリ
config.vm.synced_folder "./", "/var/www" config.vm.synced_folder "./", "/bar" config.vm.synced_folder "./src", "/srv/website", owner: "vagrant",#所有者の設定 group: "www-data",#グループの設定 mount_options: ["dmode=775,fmode=664"]#アクセス権限の設定 config.vm.synced_folder "./src", "/srv/website", type: "rsync", rsync__exclude: [".git/", ".idea/"]#rsyncを使う場合
デフォルトでVagrantファイルのある場所がゲストOSの/vagrant
として共有されている。
sendfileを無効化する
SharedFolder上で、CSSなどの静的なファイルを更新する場合の注意。
VagrantでCSSの更新が反映されない場合の対処法 - Qiita
httpd.conf
を修正する。
EnableSendfile off //apache sendfile off; //nginx
その後サーバー再起動。