VagrantでUbuntu+nginx+MySQL+PHP-FPMの最新環境を構築する

タイトルを見たら分かるかもしれませんが、百番煎じくらいの記事です。

動画配信用のサーバーを構築する業務があったのですが、Apacheよりnginxのほうが構築しやすい感じがあったので、ローカルPCに仮想環境を構築してみました。

一応、簡単に最新環境を構築するということにこだわっています。

# 仮想Linux環境の構築

ローカルPCに仮想Linux環境を構築します。

## VirtualBoxのインストール

https://www.virtualbox.org/wiki/Downloads
こちらから仮想化ソフトVirtualBoxをダウンロードしてインストールします。オプションはデフォルトのままにしました。

## Vagrantのインストール

VirtualBoxだけでも仮想環境を構築することはできるのですが、コマンドラインからVirtualBoxを操作することのできるVagrantを導入するととても効率化できます。

http://www.vagrantup.com/downloads.html
こちらから各プラットフォーム用のインストーラーをダウンロードしてインストールします。

## ConEmuのインストール

デフォルトのコマンドプロンプトでvagrantを操作するのはちょっと厳しいので代替になるツールを導入します。Console2が有名ですが、自分はConEmuが気に入ってます。

http://www.fosshub.com/ConEmu.html
こちらからインストールします。

# Ubuntuのインストール

ConEmuを起動し、適当なワークフォルダを作ってそこに移動します。自分はC:\ubuntuというフォルダを作成しました。

```
>mkdir \ubuntu
>cd \ubuntu
```

次に、Vagrant Cloud (https://vagrantcloud.com/) からUbuntuの入ったBoxをインストールします。現時点での最新版は14.04 LTS(trusty64)です。

```
vagrant init ubuntu/trusty64
```

これでワークフォルダ内にVagrantfileが生成されます。このファイルにいろいろと仮想環境の設定を書いて行くのですが、とりあえずそのまま起動してみます。

```
vagrant up
```

1回目の起動はBoxをダウンロードしてくるので時間がかかります。
VMが起動したら、SSHでログインします。

```
vagrant ssh
```

もしTeratermなどでログインする場合は、以下の設定にします。

```
ホスト: localhost
ポート: 2222
ID: vagrant
パスワード: vagrant
```

ユーザーvagrantでログインしていますが、面倒なのでこれから先はルートで作業します。

```
sudo su -
```

## パッケージを最新にする

```
apt update
apt upgrade
```

updateでパッケージリストを最新にし、upgradeで最新のパッケージをインストールします。

パッケージ操作のコマンドはapt-getやaptitudeやaptなどが乱立しててよく分からないので、一番綴りが短いaptを使っています。

# nginxのインストール

次にnginxをインストールしますが、公式のパッケージではかなり古いバージョンが入ってしまいますので、PPAという非公式パッケージを追加して最新バージョンをインストールします。

```
add-apt-repository ppa:nginx/development
```

これで現時点での最新バージョン(1.7.7)がパッケージに追加されます。最新版が怖いチキン野郎は以下の安定板を使うがいいさです。

```
add-apt-repository ppa:nginx/stable
```

パッケージを更新します。

```
apt update
```

インストールされるバージョンを確認してみます。

```
apt show nginx
```

nginxをインストールします。

```
apt install nginx-extras
```

nginx-extrasはいろんな拡張機能がこみこみです。nginx < nginx-full < nginx-extras の順に拡張機能が多くなるようです。nginxは十分軽いのでnginx-extrasでも良いのではないかと思います。

## ブラウザで確認する。

インストールされたら既にnginxが起動した状態なのでデフォルトのサイトが見れます。

Vagrantfileを編集して、ホストPCから仮想環境にアクセスできるようにします。

以下のコメントを外すと http://localhost:8080 でアクセスできるようになります。

```
config.vm.network "forwarded_port", guest: 80, host: 8080
```

以下のコメントを外すと http://192.168.33.10 でアクセスできるようになります。

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

自分的には下がオススメです。
書き換えたら、リロードすることを忘れずに。

```
vagrant reload
```

ブラウザに「Welcome to nginx on Debian!」という画面が表示されればOKです。

# MySQLのインストール

MySQLは5.7が最新の開発版ですが、チキン野郎なので5.6を導入します。PPAだとうまく入らなかったので、公式サイト (http://dev.mysql.com/downloads/repo/apt/) からdebパッケージを取得してインストールしました。

```
wget http://dev.mysql.com/get/mysql-apt-config_0.3.2-1ubuntu14.04_all.deb
dpkg -i mysql-apt-config_0.3.2-1ubuntu14.04_all.deb
rm mysql-apt-config_0.3.2-1ubuntu14.04_all.deb
apt update
apt install mysql-server
```

dpkgコマンドの途中で目に悪い色の選択画面が出ますが、そのまま「Apply」を選びます。

パッケージインストール中にも目に悪い色でパスワードが聞かれますが、面倒なので空にします。testデータベースは作っても作らなくてもOKです。

インストールが終わったら、mysqlコマンドでちゃんと入っているか確認してみます。Ctrl+Dで抜けます。

# PHP-FPMのインストール

FPM (FastCGI Process Manager) とはPHPのFastCGI実装のひとつで、主に高負荷のサイトで有用な追加機能を用意しています。公式サイトのコピペです。

nginxではApacheのmod_phpのようなモジュールは無いので、FastCGIで動かします。

```
add-apt-repository ppa:ondrej/php5-5.6
apt update
apt install php5-cli php5-fpm php5-mysql php5-sqlite php5-curl php5-gd php5-mcrypt 
```

PHPの拡張は適当に必要そうなものを入れました。

## nginx.confの設定

もともとPHP-FPM用の設定があるのでそれを使います。

/etc/nginx/sites-available/default を開き、以下のようにコメントを外します。

```
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

        #       # With php5-cgi alone:
        #       fastcgi_pass 127.0.0.1:9000;
                # With php5-fpm:
                fastcgi_pass unix:/var/run/php5-fpm.sock;
        }
```

nginxを再起動します。

```
service nginx reload
```

## 確認

/var/www/html/ に test.php というファイルを以下の内容で作成します。

```php
<?php phpinfo();
```

ブラウザで http://192.168.33.10/test.php を開いてみて、見慣れたphpinfoの画面が出ればOKです。

お疲れ様でした。