Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

Vagrant 備忘録

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

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

共有ディレクト

Vagrant入門から実践まで - Qiitaより。

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

その後サーバー再起動。

参考記事