PHPをやってみたいので、環境構築からはじめてみる

##はじめに
だいぶオジサンになってしまったのですがPHPを勉強しようと思い、
まずは手始めに開発環境の構築からやってみたいと思います。

**VirtualBox**と**Vagrant**をつかって構築してみたいと思います。

限りなく透明に近い素人なので、間違ってたらコメントください。

##VirtualBoxとは
>VirtualBox は、使用している PC 上に仮想的な PC を作成し、別の OS をインストール・実行できるフリーの PC 仮想化ソフトです。

>例えば使用中のパソコンが Windows 7 だったとしましょう。PC 仮想化ソフトを使うと、その Windows 7 上で Windows 8 や LinuxOS を動作させることができます。


##Vagrantとは
>仮想マシン作成やその環境設定などを自動化するツール。
仮想環境の作成からセットアップ、そして破棄までを、簡単なコマンドを実行するだけで行える。

##virtualboxをインストール

#####①.下記リンクからvirtualboxのインストーラーをダウンロードします。
https://www.virtualbox.org/wiki/Downloads

<img width="500" alt="_Volumes_VirtualBox.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/c564c77c-2b61-758f-9c07-8a28a8ba0506.png">
<br>

#####②.ダウンロードが完了したら、ファイルを開き下記アイコンをダブルクリックします。

<img width="500" alt="_Volumes_VirtualBox.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/42cc4101-0587-f53d-83e3-41c68f6c39a6.png">
<br>

#####③.あとは画面の指示にしたがって進み、インストールを完了させます。
<img width="500" alt="Oracle_VM_VirtualBox_のインストール.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/c8be79bf-3b92-56f6-e998-08443e12b351.png">

##Vagrantをインストール

#####①.下記リンクからVagrantページを表示し、Downloadボタンを押してダウンロード画面を表示します。
https://www.vagrantup.com/

<img width="500" alt="Vagrant_by_HashiCorp.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/cec3e26b-5318-2c55-fd31-07722d4b385b.png">
<br>


#####②.下記からVagrantのインストーラーをダウンロードします。

<img width="500" alt="Download_-_Vagrant_by_HashiCorp.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/3964f0e7-41d4-6db1-5cbe-8c6a3d44f40a.png">
<br>

#####③.ダウンロードが完了したら、下記アイコンをクリックしてVagrantをインストールします。

<img width="500" alt="_Volumes_Vagrant.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/04ede49c-0c9e-1003-171d-9fa3bebe5806.png">
<br>

#####④.あとは画面の指示にしたがって進み、インストールを完了させます。
<img width="500" alt="Vagrant_のインストール.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/ef9d8a7b-fac6-075f-4e8c-b42b45264a38.png">
<br>

##VagrantでCentOSを立ち上げる
ディレクトリ構成は下記のような形

```
.
└── vagrantDir
    └── centosDir
```

##centosにログイン
#####①.centosDirに移動後、Vagrantfileを作成する。

Vagrantでは、「Vagrantfile」というファイルに作成する仮想マシンの設定情報を記述する。
下記コマンドでこのファイルのひな形を生成することができる。

```
vagrant init bento/centos-6.7
```

Vagrantfileが作成される。


```
.
└── MyVagrant
    └── mycentos
        └── Vagrantfile
```

#####補足

普通は下記の手順なのかも

######centosをvagrantに追加
```
vagrant box add CentOS7_x64 https://github.com/tommy-muehle/puppet-vagrant-boxes/releases/download/1.1.0/centos-7.0-x86_64.box
```

追加されたboxは下記で確認できる

```
vagrant box list
```

※Vagrantでいう「box」とは仮想マシンのテンプレート。

ちなみに、追加したboxはホームフォルダ内の``.vagrant.d/boxex/``に入っています。


######仮想マシンの作成する
```
vagrant init CentOS7_x64
```



#####②作成されたVagrantfileを編集する。

viエディタを立ち上げてVagrantfileを編集します。

```
vi Vagrantfile
```
下記コメント部分のコメントアウトを外します。

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

#####③下記コマンドを実行するとcentosが立ち上がります。

```
vagrant up
```

<img width="500" alt="Vagrant_のインストール.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/caf8da0d-39d3-5cc9-f865-2907641706e1.png">


#####④下記コマンドでvagrantを使ってcentosにログインする

```
vagrant ssh
```
ログインできると[vagrant@localhost ~]が表示される。

<img width="500" alt="Vagrant_のインストール.png" src="https://qiita-image-store.s3.amazonaws.com/0/11290/9e59dcfc-e3ed-f557-6f1c-903a9e3cb0b4.png">

#####⑤ログイン後PHPとApacheをインストール
PHPとApacheをインストールします。

```
sudo yum install php
sudo yum install httpd
```

#####⑥index.htmlファイルを作成

centosにログインすると下記のようなディレクトリ構成になる。

私はVagrantfile以下のディレクトリ構成がそのまま、仮想環境のディレクトリ構成なのかと思っていた。。。

```
├── bin
├── boot
├── dev
├── etc
├── home
├── lib
├── lib64
├── lost+found
├── media
├── mnt
├── opt
├── proc
├── root
├── sbin
├── selinux
├── srv
├── sys
├── tmp
├── usr
├── vagrant
└── var
```

Apacheは``/var/www/html``ディレクトリを見るため、htmlフォルダ配下にindex.htmlを作成する。

```
sudo vi /var/www/html/index.html
```
#####⑦下記手順でApatchを起動する。

```
$ sudo service httpd start//Apacheを起動する
$ sudo chkconfig httpd on //vagrant起動時にhttpdをスタートさせるようにしておく
```

あとこれもやったほうがいいみたい。
ファイアーウォールを切るみたいですが、ローカル環境なので問題ないみたい。
関係あるかわからないが、これをやらないとブラウザ更新する毎に接続が切れた。

```
$ sudo service iptables stop//iptablesを停止させる
$ sudo chkconfig iptables off//次回起動時も停止させる
```

centos7の場合下記
<a href="http://qiita.com/kino0104/items/99be3ee81cbea395a5b8">VagrantでCentOS7環境構築してWebページみたらエラーになったとき</a>

#####⑧ページを表示する
②でコメントアウトを外した``192.168.33.10``にブラウザでアクセスして、
index.htmlが表示されれば成功！

#####⑨シンボリックリンクの作成
Vagrantfileと同階層のファイルは、自動的に仮想マシンの/vagrantフォルダ配下に同期されます。
つまり、Vagrantfileと同階層に、index.htmlを作ったら、仮想マシンの/vagrantにも自動的に作成されます。

同期されるディレクトリは``/vagrant``ですが、仮想マシンのApacheが参照するディレクトリは``/var/www/html``です。
そこで、``/var/www/html``にシンボリックリンクの作成して、同期先の``/vagrant``配下がrootになるようにします。

```
//仮想マシーンのhtmlファイルを削除
sudo rm -r /var/www/html 

//シンボリックリンクを作成
sudo ln -s /vagrant /var/www/html 
```

リンク作成後は仮想マシンを再起動したほうがいいみたいです。
これで、sshでログインしなくてもファイルの編集などができるようになり便利です。

##Provisioning設定

Provisioningとは``vagrunt up``を実行した後に自動で実行される処理のことです。

Vagruntfileに下記を一行追加すると、外部ファイル(provision.sh)に記載したコマンドを、``vagrunt up``時に実行してくれます。

```lang:Vagruntfile
  config.vm.provision :shell, :path => "provision.sh"
```

```lang:provision.sh
sudo yum install httpd 
sudo service httpd start
sudo chkconfig httpd on
sudo service iptables stop
sudo chkconfig iptables off
```

これで、``vagrunt up``コマンドだけで、Apacheインストール、起動、ファイアーウォールの停止などを一気にやってくれます。

Provisioningだけ実行する場合は、下記になります。

```
vagrant provision
```

##vagrantコマンド

#####仮想マシンにログインする

```
vagrant ssh
```

#####仮想マシンからログアウトする

```
exit
```

#####仮想マシンを立ち上げる

```
vagrant up
```

#####仮想マシンを停止する

```
vagrant halt
```


#####仮想マシンをスリープする

```
vagrant suspend
```

#####仮想マシーンを復帰する

```
vagrant resume
```

#####仮想マシンを削除する

```
vagrant destroy
```

仮想マシンを削除しても、Vagrantfileは残るので、``vagrant up``で同じ設定で立ち上げることができる。

#####仮想マシンを再起動
```
vagrant reload
```

#####boxを追加

```
vagrant box add {名前} {centOSの物理パス}
```

#####boxを削除
```
vagrant box remove {名前}
```

#####追加されたboxを確認

```
vagrant box list
```

##まとめ
とりあえず、ブラウザで表示することはできましたが、
色々不便なのでそのへんも調べていこうと思います。


##参考

<a href="http://www.vagrantbox.es/">Vagrantbox.es(各OSごとのboxファイルダウンロードURL一覧)</a>
<a href="http://jukenki.com/contents/other/virtualbox/about-virtualbox.html">VirtualBox のインストールと基本的な使用方法</a>
<a href="http://knowledge.sakura.ad.jp/tech/1552/">仮想環境構築ツール「Vagrant」で開発環境を仮想マシン上に自動作成する</a>
<a href="http://www.webcyou.com/?p=4632">VirtualBoxとVagrantで開発環境を構築</a>