vagrantを用いたPHPの環境構築


# 初めに

この記事は

* PHPを自宅で動かしたい
* 開発環境の構築はさっぱり
* 環境構築に時間をかけたくない
* vagrantを使ってみたい

という比較的初心者向けになっています。
最終的に、PHPからmysqlを操作し、ブラウザでデータの確認までします。

ステップ１(本記事)→[vagrantを用いたPHPの環境構築](http://qiita.com/tiwu_offical/items/f135e6b6fbbe3ec6aa54)
ステップ２→[centOS6.5にmysql5.6をインストールする](http://qiita.com/tiwu_offical/items/5ff3fa38611de058704a)
ステップ３→[PHPからmysqlの操作](http://qiita.com/tiwu_offical/items/3415fad87fb3a6d68666)


### 前提条件
* vagrantインストール済み
* VirtualBoxインストール済み
* centOS入手済み

### 開発環境

* OS X Yosemite

Windowsでも同じことができると思います（未確認）

※追記
Windows環境で試してみました。
マシンの起動(vagrant up)までは同じ手順になります。
Windowsのコマンドプロンプトはssh接続機能がないため
Tera Term等を利用してcentOSにログインすることになります。
Tera Term等でログインする以外は同じ手順で大丈夫でした。
Tera Termのログインは
ホスト名 => 127.0.0.1
TCPポート => 2222
user => vagrant
password => vagrant
でした。
※追記




# 1.BOXの追加

まず入手したcentOSをvagrantに追加します。

	$ vagrant box add NAME URL
	
NAME -> 任意の名前
URL -> 入手したcentOSの物理パス
（例）

	$ vagrant box add centOS /Users/myPc/centos65-x86_64-20140116.box
	
# 2.仮想マシンの作成

次に仮想マシンを作成します。仮想マシンは一つのディレクトリに一つしか作成できません。

	$ mkdir DirNAME
	$ cd DirNAME
	$ vagrant init NAME
	
DirNAME -> 任意のディレクトリ名
NAME -> vagrantにBOXを追加した時の名前。上記例ではcentOS

（例）

	$ mkdir centOSDir
	$ cd cnetOSDir
	$ vagrant init centOS
	
ディレクトリの中にVagrantfileというファイルがあれば成功です。


# 3.ネットワークの設定

次にVagrantfileを編集してネットワークの設定を行います。

	$ vi Vagrantfile
	
大体25行目あたりの

	# config.vm.network "private_network", ip: "192.168.33.10"
	
この行のコメントアウトを外します。

# 4.仮想マシンの起動

いよいよ仮想マシンの起動です。

	$ vagrant up
	
で起動。

	$ vagrant ssh
	
で仮想マシンにログインできます。

	$ exit
	
で仮想マシンからログアウトできます。
ただし、Vagrantfileがあるディレクトリからでしかログインができません。
そこで、どこからでも仮想マシンにログインできるように設定します。
Vagrantfileがあるディレクトリで以下のコマンドを叩きます。

	$ vagrant ssh-config --host NAME >> ~/.ssh/config
	$ ssh NAME
	
NAME -> 任意の名前
これでどこからでも仮想マシンにssh NAMEでログインができます。

（例）

	$ vagrant ssh-config --host centOSssh >> ~/.ssh/config
	$ ssh centOSssh
	
# 5.Apache,PHPのインストール

centOSにログインしたら次にApacheとPHPをインストールします。

	$ sudo yum install php
	$ sudo yum install httpd
	
これでインストールできます。

# 6.ブラウザからのアクセス

次に実際に自身が作ったページにブラウザからアクセスしてみましょう。
Apacheは/var/www/にあるhtmlというディレクトリを見に行きます。
まずはPHPではなくhtmlファイルから。

	$ cd /var/www/html
	$ sudo vi index.html
	
```index.html
<html>
<body>
Hello World
</body>
</html>
```

index.htmlを作成したらコメントアウトをした行のipアドレスにブラウザからアクセスします。

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

この例だと192.168.33.10にアクセスしましす。
Hello Wolrdと表示されたら成功です。

次にPHPで表示させてみます。まずApacheにPHPを対応させます。

	$ sudo vi /etc/httpd/conf/httpd.conf
	
でhttpd.confを開いてAddTypeタイプで検索してください
自分の場合は760行目あたりにありました。
その下にある
	
	# If the AddEncoding directives above are commented-out, then you
	# probably should define those extensions to indicate media types:
	#
	AddType application/x-compress .Z
	AddType application/x-gzip .gz .tgz
		
この下に下記2行を追加してください。

	AddType application/x-httpd-php .php
	AddType application/x-httpd-php-source .phps

追加した結果は

	# If the AddEncoding directives above are commented-out, then you
	# probably should define those extensions to indicate media types:
	#
	AddType application/x-compress .Z
	AddType application/x-gzip .gz .tgz
	AddType application/x-httpd-php .php
	AddType application/x-httpd-php-source .phps

となります。これで拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

ではindex.htmlを作ったディレクトリでPHPファイルを作ってみましょう。

	$ sudo vi test.php
	
```test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>
```

そして、先ほどアクセスしたアドレス（自分の例では192.168.33.10）に/test.phpとつけてアクセスしてみましょう。
（例）
192.168.33.10/test.php
Hello PHPと表示されたら成功です。


# 7.Macとのファイル同期

これで仮想マシン上のファイルにブラウザから見れるようになりましたが、
編集するたび仮想マシンにログインしてはお気に入りのエディタで編集できなかったりして
めんどくさいのでMac上でファイルを同期したいと思います。

といっても特に設定する必要はなく、Mac上のVagrantfileがあるディレクトリにあるファイル
は仮想マシンに自動的に同期されます。仮想マシンの同期先は/vagrantになります。

試しにMac上のVagrantfileがあるディレクトリにsampleという名前のディレクトリを作って、
中にsample.txtを作って同期されるか確認してみましょう。

Vagrantfileがあるディレクトリで

	$ mkdir sample
	$ cd sample
	$ vi sample.txt
	
```sample.txt
サンプル
```
上記のコマンドを叩いたら、仮想マシンにログインし確認してみましょう。
ログインしたら

	$ cd /vagrant
	$ ls
	$ cd sample
	$ cat sample.txt

でsampleディレクトリがあるのを確認し、sample.txtがあるか確認して、サンプルと表示されたら成功です。

# 8.シンボリックリンクの作成

これで、仮想マシンのファイルをブラウザから見れるようになり、Mac上で編集したファイルを仮想マシンと同期をとることができました。

しかし、仮想マシンのApacheが見にいくディレクトリはは/var/www/htmlですが
同期されるディレクトリは/vagrantです。
せっかく同期されているのにこのままではブラウザから同期したファイルを見れません。
そこでシンボリックリンクを作成して、ブラウザから同期したファイルを見れるようにします。
まず、仮想マシンにログインして/var/www/にあるhtmlディレクトリを削除します。

	$ cd /var/www
	$ sudo rm -r html
	
すると

	$ rm: remove directory `html'?
	
と聞かれるのでyesと打ってエンターを押します。

	$ rm: remove directory `html'?yes
	
これでhtmlディレクトリを削除しました。

つぎに/vagrantにhtmlディレクトリを作ります。Mac上でVagrantfileがあるディレクトリでhtmlディレクトリを作成します。

	$ mkdir html
	

これで同期されるため仮想マシンの/vagrantにhtmlディレクトリができました。次にシンボリックリンクを作成します。仮想マシンにログインして

	$ sudo ln -s /vagrant/html /var/www/html
	
これでシンボリックリンクを作成しました。
シンボリックリンクはショートカットのようなもので、Apacheは/var/www/htmlを見にいくと
/var/www/にあるhtmlはシンボリックリンクのため、/vagrantにあるhtmlディレクトリを見にいくように
なります。
つまり、Mac上で編集したファイルは自動で仮想マシンと同期され、ブラウザで見れるようになります。

# 9.Macで編集したファイルをブラウザで確認

最後にMacでファイルを作成し、自動的に仮想マシンに同期して、ブラウザから確認します。
Mac上でVagrantfileがあるディレクトリに作成したhtmlディレクトリの中にファイルを作成します。

	$ vi last.php
	
```last.php
<hmlt>
<body>
<?php
	echo('last php');
?>
</body>
</html>
```

作成して、test.phpにアクセスしたのと同じようにブラウザからアクセスしてみましょう。
（例）
192.168.33.10/last.php
last phpと表示されたら成功です。

# 終わりに

これでvagrantを用いたPHPの環境構築は終わりです。
今回は手動で環境構築を行いましたが、chef等を利用して自動で環境構築を行うことも可能です（chefは勉強中）。
[次回](http://qiita.com/tiwu_offical/items/5ff3fa38611de058704a)はcentOSにmysqlをインストールしたいと思います。