はじめに
mojoliciousを使ってみたくなったのでメモ。
おもに下記2つのサイトを参考にさせていただきました。
主な流れは2の方をメインに参考にし、Mojoliciousについてのチュートリアル的なものは1の方を参考にしました。
アジェンダ
- webアプリ用のuser作る
- perlbrewインストール
- cpanmインストール
- Mojoliciousのインストール
- nginx入れる
- plackupでアプリを立ち上げてブラウザで確認
- 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です。
7. daemontoolsでアプリのプロセス監視
marboやplackupのみでアプリを立ち上げても良いですが、
最終的にはアプリケーションのプロセス監視をするために
daemontools経由でやりたい場合も多いと思います。
本当はこの記事でそこまでかくつもりだったのですが
daemontoolsについてだけでかなり長くなったので別途記事に切り出しました。
もしプロセス監視を行いたい場合は下記を参考に行ってください。
この流れで設定したメモになるのでそのまんまいけるはずです。
→centos6.5にdaemontoolsいれてプロセス監視するメモ - svscan起動したりsupervise監視(svc、svstat)したりmultilog出してみたり
まとめ
nginxはシンプルで見やすいしMojolicious::Liteもwebアプリケーションとしては
すごく見通しが良いのでサクっとwebアプリを作成するには良さそうですね!
enjoy!