Vagrant体験入門ハンズオン手順 - 2014/04/24 DevLove関西

Vagrant体験入門ハンズオン手順 - 2014/04/24 DevLove関西

# ハンズオン手順

## 1. 事前準備

### 1-1. USB メモリスティックを差して、以下のディレクトリを自分の PC にコピー、展開しておく

```
20140424_devkan.zip
```

### 1-2. VirtualBox インストール（インストール済なら不要）

https://www.virtualbox.org/


20140424_devkan/ にある VirtualBox-4.3.10-xxx でインストール

### 1-3. Vagrant インストール（インストール済なら不要）

http://www.vagrantup.com/


20140424_devkan/ にある Vagrant-1.5.4.xxx でインストール

### 1-4. vagrant バージョン確認

vagrant コマンドを実行してバージョンを確認

```bash
$ vagrant -v
Vagrant 1.5.4
```

### 1-5. Box の追加

https://github.com/opscode/bento

20140424_devkan/ にある opscode_centos-6.5_chef-provisionerless.box を、vagrant box add コマンドで追加

```bash
$ cd 20140424_devkan
$ vagrant box add opscode-centos65 opscode_centos-6.5_chef-provisionerless.box
```

vagrant box list で、opscode-centos65 が表示されていれば ok

```bash
$ vagrant box list
opscode-centos65         (virtualbox)
```

## 2. Vagrant で仮想マシンを操作

### 2-1. Vagrantfile 作成

vagrant init コマンドで、初期状態の Vagrantfile を作成

```bash
$ vagrant init opscode-centos65
$ ls
Vagrantfile
```

vagrant status コマンドで、仮想マシンの状態を確認

```bash
$ vagrant status
Current machine states:

default                   not created (virtualbox)

```

### 2-2. GUI モードを有効に

Vagrantfile を編集して、GUIモードを有効に

```ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "opscode-centos65"

  # GUIモードを有効にする
  config.vm.provider "virtualbox" do |vb|
     vb.gui = true
   end
end
```

### 2-3. 仮想マシンを起動

vagrant up コマンドで、仮想マシンを起動。VirtualBox ウィンドウが表示されて、CentOS が起動。

```bash
$ vagrant up
```

### 2-4. 仮想マシンにログイン

vagrant ssh コマンドで、仮想マシンにログイン。Windows であれば、VirtualBox ウィンドウから直接ログインしても ok。（ login: vagrant / password: vagrant）

```bash
$ vagrant ssh
[vagrant@localhost ~]$ 

[vagrant@localhost ~]$ cat /etc/redhat-release
CentOS release 6.5 (Final)

[vagrant@localhost ~]$ exit
$ 
```

### 2-5. 仮想マシンを停止

vagrant halt で仮想マシンを停止（電源オフ）

```bash
$ vagrant halt
$ vagrant status
Current machine states:

default                   poweroff (virtualbox)

```

再び起動するなら、vagrant up

### 2-6. 仮想マシンを破棄

vagrant destroy で仮想マシンを破棄する。破棄するか確認されるので、`y`を入力する

```bash
$ vagrant destroy
    default: Are you sure you want to destroy the 'default' VM? [y/N] y

$ vagrant status
Current machine states:

default                   not created (virtualbox)

```

## 3. Vagrant で開発環境を構築

Apache をインストールして、httpd サーバを仮想マシンに構築
ホストで編集したHTMLが、仮想マシンの Apache で表示できるようにする。


### 3-1. Vagrantfileを編集

Vagrantfile を下記のように編集

```ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "opscode-centos65"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.provision "shell", inline: <<-EOT
    #
    # iptables off
    #
    /sbin/iptables -F
    /sbin/service iptables stop
    /sbin/chkconfig iptables off
    #
    # Apache
    #
    yum -y install httpd
    /sbin/service httpd restart
    /sbin/chkconfig httpd on
  EOT
end

```

ポイント
* IPアドレスを付与（192.168.33.10）
* シェルプロビジョナで、プロビジョニング
* iptables を停止（ローカルVMなので、ファイアウォール不要）
* httpd を yum でインストール

### 3-2. 仮想マシンを起動

vagrant up で仮想マシンを起動

```bash
$ vagrant up
```

ブラウザで、http://192.168.33.10/ にアクセスすれば、Apache の welcome ページが表示される。

表示されなければ、プロビジョニングが実行されていないかもしれないので、vagrant provision を実行

```bash
$ vagrant provision
```

### 3-3. HTMLファイルを作成

表示するHTMLを作成

```bash
$ echo "Hello Vagrant!!" > index.html
$ ls
Vagrantfile index.html
```

### 3-4. httpd.conf を変更

DocumentRoot を synced_folder（/vagrant）に変更

仮想マシンにログインして、/etc/httpd/conf/httpd.conf を /vagrant/ にコピー。
/vagrant は、synced_folder なので、ホスト側で httpd.conf が参照できる。

```bash
[vagrant@localhost ~]$ cp -a /etc/httpd/conf/httpd.conf /vagrant/
[vagrant@localhost ~]$ exit
$ ls
Vagrantfile httpd.conf index.html
```

httpd.conf に VirtualHost を追記して、DocumentRoot を /vagrant にする。

```
$ vim httpd.conf
# 以下を追加
<VirtualHost *:80>
    DocumentRoot /vagrant
</VirtualHost>
```

Vagrantfile を編集して、httpd.conf を /etc/httpd/conf/ にコピーするようにする。

```ruby
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "opscode-centos65"

  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end

  config.vm.network "private_network", ip: "192.168.33.10"

  config.vm.provision "shell", inline: <<-EOT
    #
    # iptables off
    #
    /sbin/iptables -F
    /sbin/service iptables stop
    /sbin/chkconfig iptables off
    #
    # Apache
    #
    yum -y install httpd
    cp -a /vagrant/httpd.conf /etc/httpd/conf/  # <---追加
    /sbin/service httpd restart
    /sbin/chkconfig httpd on
  EOT
end
```

### 3-5. プロビジョニング実行

vagrant provision で、プロビジョニング実行。

```bash
$ vagrant provision
```

ブラウザで、http://192.168.33.10/ にアクセスして、index.html の内容が表示されれば ok

index.html を変更すると、ブラウザをリロードすると、内容が変更されていることを確認

### 3-6. Vagrantfile で再構築

仮想マシンを破棄して、再び vagrant up すると、同じ仮想マシンが構築できることを確認

```bash
$ vagrant destroy -f
$ vagrant up
$ open http://192.168.33.10/
```

ブラウザで、http://192.168.33.10/ にアクセス

## Appendix

### VagrantX - GUI クライアント（OSX）

http://shin1x1.github.io/vagrantx/


### vagrant 主なコマンド

* Vagrantfile作成

```bash
$ vagrant init
```

* 仮想サーバ状態表示

```bash
$ vagrant status
```

* 仮想サーバ起動

```bash
$ vagrant up
```

* 仮想サーバへSSHログイン

```bash
$ vagrant ssh
```

* 仮想サーバ停止

```bash
$ vagrant halt
```

* 仮想サーバ停止＋破棄

```bash
$ vagrant destroy
```

* プロビジョニング実行

```bash
$ vagrant provision
```