VagrantでLAMP環境(FreeBSD8.4)を作る


仮想のFreeBSDでLAMP環境を作って自由に作ったり壊したりしたかったので、Vagrantを使って環境を作りました。その際のメモです。

##■作業環境
Mac OS X 10.9.5
ただ仮想環境なのでWinでも大差ないと思います。

##■前提
・VagrantとVirtualBoxがインストールされていること
・FreeBSD用のboxファイルをダウンロードしていること
　(http://www.vagrantbox.es/)
できるだけminimalなものを選びます。

このあたりまではこちら( http://qiita.com/y_arakawa/items/08ef7a4568ef1545313d )が参考になります。

#◆ホストOSでの作業
VMを作成したい場所にディレクトリを作成し

```bash:bash
vagrant init freebsd8_4(←boxファイルの名前)
```
これでそのディレクトリにVagrantfileが作成され、VMが利用できるようになります。

VMを起動してsshログインします。

```bash:bash
vagrant up
vagrant ssh
```

※`vagrant status`でVMの状況確認が可能。

```bash:bash
$vagrant status
Current machine states:
default                   running (virtualbox)
```

#◆ゲストOSでの作業

###・wheelグループへ追加

Vagrantで起動したサーバにはユーザvagrantがデフォルトで作成されていて、上記コマンドでログインするのはvagrantユーザです。ノーパスでsudoできますが、FreeBSDの場合一般ユーザはwheelに入っていないとsuできない模様なので、

```bash:bash
$sudo vi /etc/group

（変更前）
wheel:*:0:root

（変更後）
wheel:*:0:root,vagrant
```
とし、suでrootになっておきます。

###・FreeBSD update
パッケージのセキュリティアップデートを行なうため、以下のコマンドを実行します。

```bash:bash
freebsd-update fetch
freebsd-update install
```
これが行われていないと、この後行うpkgを使ってのinstallがうまくいかないため、必要な工程です。

###・パッケージ管理ツールのインストール
CentOSでいうyumにあたるのがpkgというもので、それをインストールします。これはPorts Collectionという機能を使ってソースからコンパイルする必要があります。まずPorts Collectionの利用準備を行います。

```bash:bash
portsnap fetch
portsnap extract
portsnap update
```

上記を実行すると、/usr/ports/以下にいろんなソフトのMakefileが生成されます。

pkgは/usr/ports/ports-mgmt/pkgにあるので、移動して、makeすると

```bash:bash
You are about to convert your system to pkg while you have ports/packages
installed with the old pkg_install tools.

To switch to pkg:
    1) Install ports-mgmt/pkg
       cd ports-mgmt/pkg && make UPGRADEPKG=1 install clean
    2) Convert your package database by running pkg2ng
```
というメッセージが出るのでその通り

```bash:bash
make UPGRADEPKG=1 install clean
pkg2ng
```

を実行します。これでpkgのインストールは完了です。

```bash:bash
pkg update
```

で更新しておきます。

以上でインストールの基本的な準備ができたので、Apache/MySQL/PHPを入れていきます。

##■Apacheを入れる
###・インストール
```bash:bash
pkg install apache24-2.4.12
```
OS起動時にapacheも起動するよう、/etc/rc.confに以下の記述を追加します。

```conf:/etc/rc.conf
apache24_enable="yes"
```
###・起動

```bash
/usr/local/etc/rc.d/apache24 start
```
で起動しようとすると"libiconv.so.2"がないという旨のエラーが出るので、

```bash:bash
pkg install libiconv
```
でインストールします。
どうやら1.14_1 -> 1.14_6へのupdateの模様。updateを終えると無事apacheが立ち上がるようになりました。

###・動作確認
apache動作確認のためcurlを入れます。

```bash:bash
pkg install curl
```

ローカルホストにアクセスしてみます。

```bash:bash
curl http://localhost
```

無事レスポンスが返ってきました。

```text
<html><body><h1>It works!</h1></body></html>
```

###・ホストOSからの接続確認
ホストOSからもアクセスして確認したいのでやってみます。

↓↓↓ホストOSでの作業↓↓↓

---
Vagrantfileに下記を追加。	

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

`vagrant reload`でVMを再起動し、http://192.168.33.10 にアクセスすれば確認が可能です。

---
↑↑↑ホストOSでの作業↑↑↑

ちなみに上記の結果ゲストOSの/etc/rc.confに以下の記述が自動で追加されるようです。

```conf:/etc/rc.conf
#VAGRANT-BEGIN
ifconfig_em1="inet 192.168.33.10 netmask 255.255.255.0"
#VAGRANT-END
```
##■MySQLを入れる
###・インストール
```bash:bash
mysql56-server-5.6.22
```
`mysql56-client: 5.6.22`も一緒に入れてくれるようです。

apacheと同様、起動時に実行されるよう/etc/rc.confに以下の記述を追加。

```conf:/etc/rc.conf
mysql_enable="yes"	
```

###・起動
起動コマンドは以下。
	
```bash:bash
/usr/local/etc/rc.d/mysql-server start			
```
###・動作確認
`mysql`でコンソールに入って確認が可能です。

##■PHPを入れる
###・インストール
```bash:bash
pkg install php56-5.6.5
```

バージョン確認。

```bash:bash
php -v

PHP 5.6.5 (cli) (built: Jan 30 2015 21:04:23)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
```

###・php.iniの作成
```bash:bash
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
```
でphp.iniを作成。

###・Apache用モジュールのインストールと設定

FreeBSDのpkgではアパッチのPHPモジュールが別で配布されているらしく、それを別途インストールします。

```bash:bash
pkg install mod_php56-5.6.5
```

この際、/usr/local/etc/apache24/httpd.confのモジュール追加の箇所は勝手に記述してくれる模様です。apacheを後で追加した場合は、手書きしなければならないと思われます。また、下記については手動で追加しなければなりません。

```text:httpd.conf
AddType application/x-httpd-php .php
```	

###・動作確認
これでApacheとPHPの連携ができました。確認するためphpinfo()を含んだファイルを作成します。

```bash:bash
echo "<?php phpinfo();?>" > /usr/local/www/apache24/data/info.php
```

以上全て完了したら、Apacheを再起動し、上記で生成されたファイルへアクセスしてみます。

```bash:bash
/usr/local/etc/rc.d/apache24 restart
curl http://localhost/info.php
```

これでphp.iniの情報が取れればOKです。
ホストOSからも、ブラウザでhttp://192.168.33.10/info.php にアクセスして確認可能です。

#◆VMのpackage化
ちなみにVMの状態をとりあえずpackage化してboxとすることで、現状をコピーして残すといったこともできます。

```bash:bash
vagrant package 作成するvm名 作成先ディレクトリ
vagrant box add 作成するbox名 作成したvmの場所
```

あとは本記事の最初と同様に

```bash:bash
vagrant init freebsd84_custom(←生成したboxファイルの名前)
```
とすれば、切り出した状態のVMをまた弄っていくことができます。便利です！これさえ作っておけば環境壊れてもまたやり直せます。
満足いくVMができたり、これは手戻りしたくないなと思ったら、その時点でVMをpackage化して保存しておくのが良いと思います。

#◆まとめ
CentOS等と比べると、パッケージ管理ツールのインストール、ApacheのPHPモジュールのインストール等が少し面倒なようです。

ChefやらDockerやらを使ってもっとお手軽に♪自動化♪云々はまたいつか・・