Vagrant を使い始めるメモ（Windows7）

いまさらもう誰も話もしてない Vagrant の Windows7 64bit 版で開発環境を作るために、
主にドットインストールを見ながら、てんてこまいしたときのメモです。
メモというわりには長くなってしまいました。

# いろいろインストールしよう

## VirtualBox を入れる

仮想化した環境を立ち上げて別のOSを準備できるフリーソフト。
全部デフォルトでインストール。
https://www.virtualbox.org/
途中「このデバイスソフトウェアをインストールしますか？」というウィンドウが 名前：Oracle Corporation で4回出てくるので全部「インストール」をクリック。

今のところは CentOS や FreeBSD といった OS を使ったサーバーとしての環境を、ひとつのボックスというディスクイメージにまとめてくれている、という理解（間違っているかもしれない）。

## Vagrant を入れる（ベイグラントと読む）

仮想化した環境を作るのに便利なツール。環境構築・設定・破棄が簡単にできる。
全部デフォルトでインストール。
https://www.vagrantup.com/


# ローカルサーバーを構築しよう

## 仮想サーバーを作る

* ターミナルで `pwd` して今の場所を確認してみる
* フォルダ「centos6.5」を作って移動。`mkdir centos6.5` → `cd centos6.5`
* `vagrant init chef/centos-6.5-i386` でテンプレとなるBoxを取得する準備
* その他の OS はここから見れる https://atlas.hashicorp.com/boxes/search
* Vagrantfile というファイルができるので `open Vagrantfile`
* `config.vm.network "private_network", ip: "192.168.33.10"` と書いてある行の先頭の # を削除して保存
* `vagrant up` で今の状態でcentosを立ち上げてくれる
* とりあえず待つ。Boxのダウンロード→起動までしてくれているらしい。ダウンロードはこのへん（`C:\Users\username\.vagrant.d\boxes`）にしてくれているらしい。ちょっと時間がかかるけどいろいろ聞かれてもOK OK で OK
* `Warning: Connection timeout. Retrying...` が何度も出るようなら下記を参考にVagrantfile を編集。でもこれしなくてもとりあえず起動はできているらしい。
* http://kiririmode.hatenablog.jp/entry/20140331/p1
* `vagrant box list` で今ある Box の一覧を表示
* `vagrant box remove xxx` でxxx の Box を削除 でもフォルダは残るみたい
* `vagrant halt` で電源OFF `vagrant up` で電源ON
* `vagrant suspend` で一時停止 `vagrant resume` で復帰
* `vagrant reload` で再起動
* `vagrant destroy` で設定した環境を破棄。

## サーバーにログインして環境設定する

* `vagrant ssh` で仮想サーバーにログイン。パスワードナシで入れる。ルートフォルダが `[vagrant@localhost ~]$` になっていればよい。
* `sudo yum -y install git` で Git をインストール。
* `sudo yum -y install httpd` で httpd をインストール。
* `sudo service httpd start` で httpd を起動。
* `sudo service httpd status` で起動されてるのを確認。Running..となってればよい。
* `sudo chkconfig httpd on` で 再起動後も httpd を起動できる。
* `exit` でログアウト

## 設定した仮想サーバーをBoxにしておく

* 設定が終わったフォルダの下で `vagrant package` としてやると、Boxを作ってくれる。サーバーが立ち上がっている場合はシャットダウンする。結構時間がかかる。
* `ls` するとちゃんと package.box というファイルができているのがわかる。
* これを `C:\Users\username\.vagrant.d\boxes` に追加して Box として使えるようにするには `vagrant box add xxxxxx package.box` とすればよい
* `ls ~/.vagrant.d/boxes` するとちゃんとできてるのがわかる。
* package.box は削除してOK。`rm package.box`
* `vagrant init xxxxxx` で使えるようになっている。
* これやると次に up したときエラーがでるんだけど `sudo /etc/init.d/vboxadd setup` でエラーがでたものを `yum install kernel-devel-2.6.32-504.8.1.el6.i686` とかインストールして再起動したらエラーが出なくなった。ググっていろんな人のページをみてとりあえずなおったけど、なんでなおったか仕組みがよくわからない。box にしておくまで問題なかったのに、その後なんでエラーが出るようになったのかもわからない。

## Hello World してみる

* `cd /var/www/html/` `sudo vi index.html` で `i` で編集モードに入り、Hello World と書いて Esc キーを押して編集モードから脱出して `:wq` で保存。するとおぉ、192.168.33.10で見れた見れた。ハローワールド。
* でも普段はターミナル上で編集しなくても `sudo rm -rf /var/www/html` をして `sudo ln -fs /vagrant /var/www/html` とやってあげれば、フォルダ「centos6.5」の直下とホームディレクトリが共有されます！なのでそこに index.html とか置いてあげればOK！ドットインストールで「あら不思議」って言っていて、ほんとにそう思いました。vagrant を入れてからずっと、「仮想って、ほんとの意味で仮想・・なのね・・？てことは、毎回 WinSCP 立ち上げてそこで作業とかターミナル上とかで作業しないといけないの・・？みんなそんなふうに開発してるの・・？いやそんなわけないっしょ、ローカルにフォルダ作れるはずでしょ、でもどーやってーっ？実際にファイル置くディレクトリどこなんだよぉぉぉ」という疑問が抜けずに一生懸命「vagrant ディレクトリ」とか「vagrant ホーム」とか「vagrant www」とか「vagrant 実際にファイルを置く」とか「vagrant フォルダ」とか検索していて、まさか「共有フォルダ」とかいう概念がここで出てくるなんてわからずに、全部素通りしていました。検索時にやたらと「共有フォルダ」という言葉が出てくるのはこのことだったのね・・と、ほんとうに感激しました・・ため息。素人はいらん検索などせずに、はよドットインストールを進めろ。といいたい。
* C:\Windows\System32\drivers\etc\host を管理者権限で編集するとIPアドレスじゃなくても見れる。`192.168.33.10 dev.example.com` とかするとみやすい。
* ここまでのは、基本のき、って感じで、ほんとうは php を入れたり mysql を入れたり OS を実際のサーバーと同じのを入れたりしないと使えない。まだまだ道は遠い。。

# 参考文献
http://dotinstall.com/lessons/basic_localdev_win
http://dotinstall.com/lessons/basic_vagrant
http://theneutrals.io/defwd/defwd-sample.pdf