読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【Mojolicious】さくらVPS x perlbrew x Mojolicious::Lite x nginxをサクっとためす

はじめに

mojoliciousを使ってみたくなったのでメモ。
おもに下記2つのサイトを参考にさせていただきました。

  1. Mojolicious入門 ~ PerlでWebサイトを作ろう ~
  2. さくらVPSでnginxとsupervisordを使ってMojolicious::Liteを動かしてみた

主な流れは2の方をメインに参考にし、Mojoliciousについてのチュートリアル的なものは1の方を参考にしました。

アジェンダ

  1. webアプリ用のuser作る
  2. perlbrewインストール
  3. cpanmインストール
  4. Mojoliciousのインストール
  5. nginx入れる
  6. plackupでアプリを立ち上げてブラウザで確認
  7. daemontoolsでアプリのプロセス監視

1. webアプリ用のuser作る

この記事では公開するwebアプリ用のuser(webアプリを置く場所となるユーザ)を作るところから行います。
また、このユーザでrootな操作もするかもしれないのでsudores設定もしておきます。

※ ユーザの作成
$ sudo useradd hoge

※ sudoresの設定
$ sudo usermod -G wheel hoge

※ ホームディレクトリができてることを確認
※ ls -l /
/home/hoge

perlbrewインストール

※ ユーザを変えておく
$ sudo su - hoge

※ デフォルトは5.10.1
$ perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

※ perlbrewインストール
$ curl -L http://install.perlbrew.pl | bash

※ 設定読み込み
$ source ~/.bash_profile

※ perlの5.16.3をインストール
※ すげー時間かかる
$ perlbrew install perl-5.16.3

※ perlbrewコマンドで利用可能なパールバージョンを確認
$ perlbrew list
  perl-5.16.3

※ バージョンを変更
$ perlbrew switch perl-5.16.3

※ 変わったか確認
$ perl -v

This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux

$ perlbrew list
* perl-5.16.3
OFFる

perlbrewによるバージョン切り替えをOFFりたいときはこんな感じ

$ perlbrew off

※ バージョンがデフォルトに戻る
$ perl -v

This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
補足

perlbrewについてはこちらでも解説してみてます
さくらvpsの設定自分メモ - perlbrew入れてからのperl-5.18やらcpanmいれて使ってみるメモ

3. cpanmインストール

これはやるだけですね。

$ perlbrew install-cpanm

cpanmが入ったらためしにJSONモジュールを入れて確認してみます

$ cpanm JSON

$ locate JSON.pm
/home/hoge/.cpanm/work/1434272897.4266/JSON-2.90/blib/lib/JSON.pm
/home/hoge/.cpanm/work/1434272897.4266/JSON-2.90/lib/JSON.pm
/home/hoge/perl5/perlbrew/perls/perl-5.16.3/lib/site_perl/5.16.3/JSON.pm

4. Mojoliciousのインストール

インストール

続いてperlbrewからのcpanm経由でMojoliciousをインストールします。
これもサクっといけるはずです。

※ Mojoliciousのインストール
$ cpanm Mojolicious

※ 確認
※ docsが表示されればOK
$ perldoc Mojolicious
アプリの作成&立ち上げ

おもむろにホームディレクトリ以下にアプリを作ってみます。

※ ディレクトリの作成&移動
$ mkdir ~/mojo_app
$ cd mojo_app

※ webapp.plを作成
※ 中身は後述
$ vi webapp.pl

※ 立ち上げる
$ morbo webapp.pl
Server available at http://127.0.0.1:3000
webapp.pl

webapp.plの中身はまんまコピペで大丈夫です

use Mojolicious::Lite;

get '/' => sub {
  my $self = shift;

  $self->render(text => 'Hello World');
};

app->start;
確認してみる

ローカル環境であればブラウザで確認するのですが
さくらVPSなどの想定なので当然ですがapacheやnginxなどの設定が必要です。

http://127.0.0.1:3000にアクセスしても当然見れません。

なので、一時的な確認としてwgetで確認します。
morboで立ち上げたターミナルはそのままに、もうひとつ別にターミナルを開いてsshログインして確認します。

※ ちゃんと動いてるとこんな感じで表示される
$ wget http://127.0.0.1:3000 --spider
スパイダーモードが有効です。リモートファイルが存在してるか確認します。
--2015-06-14 18:14:49--  http://127.0.0.1:3000/
127.0.0.1:3000 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 11 [text/html]
リモートファイルが存在し、さらなるリンクもあり得ますが、再帰が禁止されています -- 取得しません。

また、morboで立ち上げたターミナル側にもこんな感じでアクセスがあったログが出ているはずです

[Sun Jun 14 18:14:49 2015] [debug] HEAD "/"
[Sun Jun 14 18:14:49 2015] [debug] Routing to a callback
[Sun Jun 14 18:14:49 2015] [debug] 200 OK (0.000406s, 2463.054/s)
morboコマンド

まんま引用ですがmorboコマンドについてメモっておきます

morboコマンドは、Mojoliciousをインストールしたときに、一緒にインストールされたものです。
morboコマンドは、Webアプリケーションを読み込んで、開発用のサーバーを起動します。
デフォルトでは3000番ポートを使って待機します。
そしてローカルホスト(127.0.0.1)の3000番ポートへのアクセスがあると、応答を返します。

5. nginx入れる

続いてwebサーバとなるnginxをいれます。

流れとしてはこんな感じでやります

  • nginxインストール
  • nginxの起動スクリプトを作成
  • nginxの設定
nginxインストール

参考サイトのまんま気にせず1.2.1でいれました。

※ 必要なものを先にインストール
$ sudo yum -y install pcre-devel openssl-devel

※ nginxのダウンロードとインストール
$ cd /usr/local/src/
$ sudo wget http://nginx.org/download/nginx-1.2.1.tar.gz
$ sudo tar zxvf ./nginx-1.2.1.tar.gz
$ cd ./nginx-1.2.1
$ sudo ./configure
$ sudo make
$ sudo make install
nginxの起動スクリプトを作成

参考サイトにも載っていた起動スクリプトをまんま拝借しました。
拝借させていただいたサイト

このサイトのスクリプトをまんま/etc/init.d/nginxとして新規作成します。
一応下に貼りますが長いのでgist化しました。

$ sudo vi /etc/init.d/nginx

※ 保存したあとに2箇所編集
$ sudo vi /etc/init.d/nginx
---- vi編集 ----
nginx="/usr/sbin/nginx"
↓ 変更
nginx="/usr/local/nginx/sbin/nginx"

NGINX_CONF_FILE="/etc/nginx/nginx.conf"
↓ 変更
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
---------------

※ 実行権を付与
$ sudo chmod +x /etc/init.d/nginx

※ 起動してみる
$ /etc/rc.d/init.d/nginx start
/etc/init.d/nginx
nginxの設定

ここまできたらwebサーバとしての設定を行います。
sample.example.comにアクセスしてきたら、
/home/hoge/mojo_app/webapp.plを実行するように設定してみます。

※ このアプリ用の設定を外出ししたいので、
※ 外だしした設定ファイルを読み込むように追記
※ serverセクションの上あたり。
$ sudo vi /usr/local/nginx/conf/nginx.conf
---- vi編集 ----
http {
    ・・・省略・・・
    include /usr/local/nginx/conf/extra/*.conf;
    server {
        ・・・省略・・・
    }
}
----------------

※ ディレクトリ(usr/local/nginx/conf/extra/)を作成
$ sudo mkdir /usr/local/nginx/conf/extra

※ 外だしする設定ファイルを作成
$ sudo vi /usr/local/nginx/conf/extra/vhost.conf
---- vi作成 ----
server {
    listen 80;
    server_name sample.example.com;
    access_log /dev/stdout;
    location / {
        proxy_pass http://127.0.0.1:8000;
    }
}
----------------

※ nginxを再起動
$ sudo /etc/init.d/nginx restart

これで80番ポートをlistenし、sample.example.comにアクセスしてきたら
http://127.0.0.1:8000にプロキシする設定ができました

6. plackupでアプリを立ち上げてブラウザで確認

もし4. Mojoliciousのインストールでアプリを立ち上げっぱなしの場合は
contol + cコマンドでアプリを落としてください。

※ 念のため再起動
$ sudo /etc/init.d/nginx restart

$ cd /home/hoge/mojo_app

※ plackupコマンドで立ち上げ
$ plackup --port 8000 webapp.pl -D &

--port 8000を指定することで、アプリはポート8000番で立ち上がります。
また、-Dオプションでdaemon化した上で、ターミナルを抜けてもアプリが起動し続けるように&をつけてバックグラウンドしておきます。

ブラウザで確認してこんな感じに表示されればOKです。 f:id:tweeeety:20150706025031p:plain

7. daemontoolsでアプリのプロセス監視

marboやplackupのみでアプリを立ち上げても良いですが、
最終的にはアプリケーションのプロセス監視をするために
daemontools経由でやりたい場合も多いと思います。

本当はこの記事でそこまでかくつもりだったのですが
daemontoolsについてだけでかなり長くなったので別途記事に切り出しました。

もしプロセス監視を行いたい場合は下記を参考に行ってください。
この流れで設定したメモになるのでそのまんまいけるはずです。

centos6.5にdaemontoolsいれてプロセス監視するメモ - svscan起動したりsupervise監視(svc、svstat)したりmultilog出してみたり

まとめ

nginxはシンプルで見やすいしMojolicious::Liteもwebアプリケーションとしては
すごく見通しが良いのでサクっとwebアプリを作成するには良さそうですね!
enjoy!