Ansibleを使ってNginx+Raptor(Phusion Passenger 5)をインストール

Raptorの公開
---
Raptorのベータ版が11月25日に公開されました。
公開される前はUnicornの4倍のスピードがなど話題になってましたね。
蓋を開けてみればPassengerか…みたい感じでしたけど…
まぁ早いならインストールしてみようじゃないか.

参考：[Raptor](http://www.rubyraptor.org/)
参考：[「RaptorはどのようにしてUnicornの4倍、Puma, Torqueboxの2倍の速度を達成したのか」を読んでまとめてみた](http://qiita.com/yuroyoro/items/afb681a317561bb82470)

Vagrant+Ansibleでインストール
---
Vagrant+Ansibleでインストールします。
利用するBoxは`ubuntu/trusty64`(Ubuntu Server 14.04)です。
Ansibleはvagrantのprovisionでshellを選択して、実行しています。
Ansibleをローカル実行する場合は以下の様なコマンドを指定する必要があるかな？

```
$script = <<SCRIPT
sudo apt-get update
sudo apt-get install python-dev python-setuptools -y
sudo easy_install pip
sudo pip install ansible -U
cd /vagrant
ansible-playbook -i localhost, -c local raptor-playbook.yml
SCRIPT
~~~~
~~~~
config.vm.provision :shell, :inline => $script
```

Passengerをインストール
---
PassengerのaptリポジトリにRaptor出てたりしないかな？と思ったけど4系しかまだなかったのでgemを使ってインストールする。
Rubyは2.1を使ってますがrbenvするの面倒だったのでBrightboxのaptリポジトリを利用する（[Ruby packages for Ubuntu](http://brightbox.com/docs/ruby/ubuntu/)）
Ansibleでこの流れを記述すると以下になる

```ruby:passenger_install
  # 次のapt_repositoryで必要となるパッケージとその後必要となるパッケージのインストール
  - name: apt | pkg install
    apt:  name={{ item }}
      update_cache=yes
    with_items:
      - build-essential
      - libcurl4-openssl-dev
      - python-software-properties

  # brightboxのリポジトリ追加
  - name: apt_repository | add brightbox repo
    apt_repository: repo='ppa:brightbox/ruby-ng'

  # rubyとruby-devインストール
  - name: apt | install ruby
    apt: name={{ item }}
      update_cache=yes
    with_items:
    - ruby2.1
    - ruby2.1-dev

  # Passengerのインストール
  - name: gem | install passenger
    gem: name=passenger
      user_install=no
      pre_release=yes
```
gemモジュール実行時に
`pre_release=yes`を忘れると4系がインストールされ、
`user_install=no`を忘れるとsudo使ってるならrootのローカルにインストールされるのでを気をつけて。
また、rbenvなどでRubyをインストールした場合は`executable=GEM_PATH`gemのパスを指定しないと動かないです。
動かないけどエラーとか出ずにデフォルトのgemを使ってインストールされてたりします。

参考:[debianやUbuntuでCannot find curl-configエラーが出る。](http://retrorocket.biz/archives/42) `libcurl4-openssl-dev`を入れ忘れるとpassengerのインストールでこける

Nginxのインストール
---
Nginxのインストールには`passenger-install-nginx-module`を利用。
通常は対話式ですがAnsibleで対話は辛いので`--auto`のオプションを指定する。
Ansibleではcommandモジュールを使って実行している。

```ruby:nginx_install
  # nginx のグループ作成
  - name: group | add nginx group
    group: name=nginx

  # nginx のユーザ作成
  - name: user | add nginx user
    user: name=nginx
      group=nginx
      shell=/usr/sbin/nologin

  # passenger-install-nginx-moduleを実行 
  #  --auto : 対話式ではなく自動で
  #  --languages ruby : PassengerをRubyで利用
  #  --extra-configure-flags='--user=nginx --group=nginx' : Nginxのインストール時に指定するオプション
  - name: command | install nginx
    command: passenger-install-nginx-module --auto --languages ruby --extra-configure-flags='--user=nginx --group=nginx'

  # 起動スクリプトを取って来て配置
  - name: get_url | get init script
    get_url: url=https://www.linode.com/docs/assets/1139-init-deb.sh
      dest=/etc/init.d/nginx
      mode=0755

  # 起動スクリプトをOS起動時に実行されるようにしつつ、サービススタート
  - name: service | nginx start
    service: name=nginx
      enabled=yes
      state=started
```

参考：[Websites with Nginx on Ubuntu 12.04 LTS (Precise Pangolin)](https://www.linode.com/docs/websites/nginx/websites-with-nginx-on-ubuntu-12-04-lts-precise-pangolin/) 起動スクリプト考えるの面倒だったので利用

Ansible実行
---
AnsibleのコードやVagrantfileなどはコチラに
https://github.com/mominosin/ansibe-raptor
実行する場合は

```
cd ansible-raptor
vagrant up
```

実行結果
---
`vagrant ssh`で中に入ってみて、NginxとPassengerが起動しているのを確認する。

```
$ vagrant ssh
vagrant@vagrant-ubuntu-trusty-64:~$ ps -ef |egrep 'Passenger|nginx'
root     17981     1  0 17:18 ?        00:00:00 PassengerAgent watchdog
root     17984 17981  0 17:18 ?        00:00:00 PassengerAgent server
nobody   17989 17981  0 17:18 ?        00:00:00 PassengerAgent logger
root     17996     1  0 17:18 ?        00:00:00 nginx: master process /opt/nginx/sbin/nginx
nginx    17997 17996  0 17:18 ?        00:00:00 nginx: worker process
vagrant  18078 18057  0 17:19 pts/0    00:00:00 egrep --color=auto Passenger|nginx
```
ちゃんと起動していますね。あ
っと本当にRaptor入ってるか確認しなきゃ

```
vagrant@vagrant-ubuntu-trusty-64:~$ passenger -v
Phusion Passenger version 5.0.0.beta1

"Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
```

ちゃんと5.0.0.beta1、つまりRaptor入ってますね！

おわり