Windows で、vagrant を利用した FuelPHP 用 LAMP 環境構築

2016/01/31 追記
Vagrant を使って、自前でごにょごにょ作るよりも、「ScotchBox」が便利だと思うので、他の方が書いた記事を追記。
[ラクして環境構築するためのScotch-Boxが2.0になってかなり進化してた。](http://qiita.com/naru0504/items/560a150943d2251e1ae8)




# 最初に

FuelPHP を利用した開発をするのに、Vagrant + VirtualBox で PHP の開発環境をローカル環境に作ってみたときのメモ。

# 必要なアプリケーションをインストール

アプリケーションをダウンロードして、インストール。特に設定は変えませんでした。

* vagrant(1.7.2) / https://www.vagrantup.com/
* VirtuaBox(4.3.26 r98988) / https://www.virtualbox.org/

インストールが終わったら次の作業に入ります。

# vagrant 準備

Windows のコマンドプロンプトから操作します。

1.vagrant を利用するフォルダを用意

C:\ の下に、vagrant/lamp フォルダを作成して移動。

```:ホストOS
c:\
mkdir c:\vagrant/lamp
cd c:\vagrant/lamp
```

2.vagrant の初期化

```sh:ホストOS
vagrant init --minimal chef/centos-6.6
```

フォルダ内に、Vagrantfile が作成されます。

3.Vagrantfile の編集

Vagrantfile を編集します。
まず、起動に利用する BOX を指定します。
VirtualBOX で利用する場合、指定した BOX に Guest Additions がインストールされていないと、起動に失敗することがあります。ホストの Windows とフォルダを同期するために、Vagrant が rsync を利用しようとするのですが、Windows が rsync に対応しないので、起動に失敗します。そんな時は、フォルダの同期を無効化してください。
インストールされたゲストOSを、画面から操作できるように VirtualBox の画面が表示されるようにする設定を書きます。
標準では、VirtualBox のネットワーク設定が NAT になっているため、ゲストOSのポートが、ホストOSのどのポートにルーティングするかを書きます。

```rb:ホストOS
Vagrant.configure(2) do |config|
  config.vm.box = "chef/centos-6.6"
  # config.vm.synced_folder ".", "/home/vagrant/sync", disabled: true
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
  end
  config.vm.network "forwarded_port", guest: 22, host: 22
  config.vm.network "forwarded_port", guest: 80, host: 80
  config.vm.network "forwarded_port", guest: 443, host: 443
end
```

この設定で、ssh / http / https の通信が通るようになります。ホストOS がポート 22/80/443 を既に利用済みの場合は、別のポートを指定してください。

4.起動

```lang:ホストOS
vagrant up
```

最初に起動するとき、OS イメージがダウンロードされるのに時間がかかるので、お茶でも飲んで待ちましょう。2回目以後は、最初よりは早く起動するようになります。（それでも、数分待つかも）

5.終了

vagrant の設定は、これで終了。
VirtualBox に、新しい仮想サーバーが作成され、実行中になっているのを確認できます。

# WinSCP で接続

vagrant による仮想サーバー作成後、WinSCP から作成した仮想サーバーの中をのぞいてみます。

1.ssh の接続情報を確認します

```lang:ホストOS
vagrant ssh-config
```

仮想サーバーへの接続情報が表示されます。

```lang:ホストOS
  Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile c:/vagrant/fuelphp/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
```

表示ではポート番号が 2222 となっていますが、先に行った Vagrantfile の設定で 22 での接続も可能になっています。

2.鍵の形式を変換

WinSCP で接続するには、ssh 鍵の形式を変換する必要があります。変換するには、WinSCP を起動して、左下メニューにあるツールから、PuTTYgen 実行します。

[load] で private_key を読み込み
[save private key] で、[private_key.ppk] として保存

これで、鍵の形式が変換されて保存されます。

3.最後に

先ほど作成したキーを利用して WinSCP から接続して、ファイルの一覧が表示されたら成功です。

# TeraTerm で接続

ゲストOS を設定するために、TeraTerm で接続できるようにしておきます。

1.接続

WinSCP から PuTTYgen 変換したキーを利用して接続してください。

2.最後に

コマンドプロンプトが操作できたら接続完了です。

# CentOS を設定します

1.最初に

インストールしたイメージには、起動直後 Apache / MySQL / PHP / git が入っていないのでインストールします。ちなみに、root アカウントではログインできないので、sudo を利用して実行してください。

2.インストール、起動、起動設定

```lang:ゲストOS
sudo yum -y install httpd
sudo yum -y install mysql-server
sudo yum -y install php
sudo yum -y install php-mysql
sudo yum -y install git

sudo service httpd start
sudo service mysqld start

sudo chkconfig httpd on
sudo chkconfig mysqld on
```

php-mbstring など、必要に応じて足りないライブラリもインストールしてください。

# .htaccess が無効になっているので、有効にします。

FuelPHP の router を正常に動作させるために、Apache の設定ファイルを開いて .htaccess を有効にします。

```lang:ゲストOS
sudo vi /etc/httpd/conf/httpd.conf
```

AllowOverride None を AllowOverride All に変更します。何か所があるので、間違えないように書き換えましょう。書き換えたら再起動。

```lang:ゲストOS
sudo service httpd restart
```

# 共有フォルダの設定

1.最初に

ホストOS側のフォルダを、ゲストOS の /var/html にリンクします。ホストOS のエディッタでファイルを編集すれば、ゲストOS で実行されるようにします。

2.ホストOS に、環境を用意します

```lang:ホストOS
c:\vagrant/lamp/documentroot
```

3.FuelPHP を展開します。

c:\vagrant/documentroot の中に FuelPHP を解凍します。

```lang:ホストOS
c:\vagrant/lamp/documentroot/docs
c:\vagrant/lamp/documentroot/fuel
c:\vagrant/lamp/documentroot/public
```

のように配置されていることを前提としてます。実際のインストールは、[インストールマニュアルの Zip ファイルをダウンロードする](http://fuelphp.jp/docs/1.7/installation/instructions.html#/from_zip) に従いましょう。 

ちなみに、マニュアルによると以下のコマンドの実行が必要ですが、実行前に、c:\vagrant/lamp/documentroot/fuel/vendor フォルダを削除しておかないと、php composer.phar update に失敗するようえす。削除しても、php composer.phar update を実行することで、再構築されるようです。ここの挙動は、正直よくわかりません。
また、実行中にtokenを聞かれることがありますが、これは、GitHub の API 利用制限にひっかかった場合に出るようなので、https://github.com/settings/tokens にアクセスして、token 作成後、貼り付けてください。


```lang:ホストOS
php oil refine install
php composer.phar self-update
php composer.phar update
```


4.ゲストOS に、ホストOS のフォルダをリンクします

まず、/var/www/html フォルダを削除して、リンクします。

```lang:ゲストOS
sudo rmdir -r /var/www/html
sudo ln -s /vagrant/documentroot/public/ /var/www/html
```

インストール直後は、ホストOS の c:\vagrant が、ゲストOS の /vagrant にマウントされています。

5.PHP の timezone の設定

インストールは完了したので、ホストOS から 172.0.0.1 へブラウザでアクセスすると、エラーになります。これは、php.ini の timezone が設定されていないため、以下のコマンドを実行して、php.ini の場所を探して、timezone を "Asia/Tokyo" に変更してください。

php.ini の場所は、以下のコマンドで知ることができます。

```lang:ゲストOS
php --ini
Loaded Configuration File:         /etc/php.ini
```

php.ini を編集します。

```lang:php.ini
sudo vi /etc/php.ini
```

php.ini を編集して、timezone を変更します。

```php.ini
date.timezone = "Asia/Tokyo"
```

php.の設定を変更したら、サービスの再起動して設定を読み込ませます。

```lang:ゲストOS
sudo service httpd restart
```

再び、ブラウザで開いて、FuelPHP のホーム画面が表示されれば完了です。

# 最後に

もうちょっと、楽に構築する方法があるんじゃないかと思いつつ、作業完了です。