Vagrant


## パッケージのダウンロード/インストール

[INSTALLING VAGRANT](https://docs.vagrantup.com/v2/installation/index.html)

* [ダウンロードページ](https://www.vagrantup.com/downloads.html)から環境に合ったパッケージをダウンロード。
* ダウンロードしたパッケージをダブルクリックしてインストール。

## Box の追加

[BOXES](https://docs.vagrantup.com/v2/getting-started/boxes.html)

* [このあたり](http://www.vagrantbox.es/)から任意の Box を探して URL をコピーしておく。
* Terminal で以下のコマンドを実行。

```bash
$ vagrant box add --name centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
```

## プロジェクトの作成

[PROJECT SETUP](https://docs.vagrantup.com/v2/getting-started/project_setup.html)

* プロジェクトのルートディレクトリを作成

```bash
$ mkdir -p ~/Developments/vagrant/centos65
```

* Vagrantfile を作成

```bash
$ cd ~/Developments/vagrant/centos65
$ vagrant init centos65
```

## まずやること

* 新規作成した VM にはデフォルトで vagrant ユーザが存在しており、vagrant ssh コマンドによりログイン出来るようになっている。
* また、root ユーザのデフォルトパスワードは 'vagrant' に設定されているので、ログイン後に必要に応じて変更しておく。
* デフォルトでホストOS のプロジェクトルートディレクトリ (ここでは ~/Developments/vagrant/centos65) がゲストOS の /vagrant にマウントされる。

### VM の初回起動

```bash
$ cd ~/Developments/vagrant/centos65
$ vagrant up

(プロンプトが返って来るまでしばらく待つ)

$ vagrant ssh
[vagrant@vagrant-centos65 ~]$ su -
Password:
[root@vagrant-centos65 ~]#
```

### タイムゾーンを JST に変更

```bash
# cp /usr/share/zoneinfo/Japan /etc/localtime
```

### remi リポジトリの追加

```bash
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
```

### パッケージの最新化

```bash
# yum update
```

### 便利パッケージのインストール

```bash
# yum install colordiff wget vim-enhanced
```

### デフォルトログインユーザの変更

vagrant ssh コマンド実行時のログインユーザはデフォルトで vagrant ユーザになっているが、
これを任意のユーザに変更したい場合は以下の手順を実行する。

* 新規ユーザ / 新規グループの作成

```bash
[vagrant@vagrant-centos65 ~]$ sudo groupadd centos
[vagrant@vagrant-centos65 ~]$ sudo useradd -g centos centos
```

* /etc/sudoers の設定

```bash
[vagrant@vagrant-centos65 ~]$ sudo visudo
(最下行に以下を追記)
centos ALL=NOPASSWD: ALL
```

* SSH キーペアの生成 (ホストOS で作業)

```bash
$ cd ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa): vagrant_rsa.key <--- 任意の秘密鍵ファイル名を入力
Enter passphrase (empty for no passphrase): <--- そのまま Enter
Enter same passphrase again: <--- そのまま Enter
Your identification has been saved in vagrant_rsa.key.
Your public key has been saved in vagrant_rsa.key.pub.
The key fingerprint is:
f8:21:d6:40:34:de:4f:a1:17:03:39:a7:af:1d:76:eb xxxxx@xxxxxx
The key's randomart image is:
+--[ RSA 2048]----+
|     .+ .o+      |
|     o oo..+     |
|      o o+o      |
|       +.+       |
|      + S..      |
|     . o .+ .    |
|        .+ o .   |
|        . . .    |
|           .E    |
+-----------------+
$
```

* SSH 公開鍵を共有フォルダにコピー (ホストOS での作業)

```bash
$ cp ~/.ssh/vagrant_rsa.key.pub ~/Developments/vagrant/centos65/
```

* SSH 公開鍵の登録 (ゲストOS での作業)

```bash
[vagrant@vagrant-centos65 ~]$ sudo su - centos
[centos@vagrant-centos65 ~]$ mkdir -m 700 ~/.ssh
[centos@vagrant-centos65 ~]$ cat /vagrant/vagrant_rsa.key.pub >> ~/.ssh/authorized_keys
[centos@vagrant-centos65 ~]$ chmod 644 ~/.ssh/authorized_keys
```

* SSH 秘密鍵の登録 (ホストOS での作業)

```bash
$ vi ~/Developments/vagrant/centos65/Vagrantfile
  config.ssh.username           = "centos"
  config.ssh.private_key_path   = "~/.ssh/vagrant_rsa.key"
```

## プロジェクトのカスタマイズ

[VAGRANTFILE](https://docs.vagrantup.com/v2/vagrantfile/index.html)

vagrant init でプロジェクトのルートディレクトリに作成された Vagrantfile で、以下の設定が可能になる。

#### ポートフォワーディング

* ホストOS の port:8080 をゲストOS の port:80 に転送する場合

```bash
config.vm.network "forwarded_port", guest: 80, host: 8080
```

#### プライベートネットワーク

* ゲストOS に 192.168.33.10 の IP を割り当てる場合

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

#### 共有フォルダ

* ホストOS の ~/data ディレクトリを、ゲストOS の /vagrant_data にマウントする場合

```bash
config.vm.synced_folder "~/data", "/vagrant_data", owner:"centos", group:"centos"
```

#### VM のホスト名

```bash
config.vm.hostname = "vmhost01"
```

#### SSH ログインユーザ

```bash
config.ssh.username = "vmuser"
```

#### SSH 秘密鍵

```bash
config.ssh.private_key_path = "~/.ssh/vmuser_rsa.key"
```

## 基本操作 (とりあえずこれだけあれば困らない程度)

* VM 起動

```bash
$ vagrant up
```

* VM 停止

```bash
$ vagrant halt
```

* VM 再起動

```bash
$ vagrant reload
```

* VM ステータス確認

```bash
$ vagrant status
```

* SSH ログイン

```bash
$ vagrant ssh
```

* Box 追加

```bash
$ vagrant box add --name <box_name> <url>
```

* Box 一覧

```bash
$ vagrant box list
```