m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Perl(Mojolicious)+nginxで連携

やること

PerlにMojoliciousをインストールして、nginxと連携する

Perl設定

plenvをダウンロード
[root@localhost ~]# git clone git://github.com/tokuhirom/plenv.git ~/.plenv
Cloning into '/root/.plenv'...
remote: Counting objects: 1828, done.
remote: Compressing objects: 100% (946/946), done.
remote: Total 1828 (delta 551), reused 1793 (delta 523)
Receiving objects: 100% (1828/1828), 1.54 MiB | 387.00 KiB/s, done.
Resolving deltas: 100% (551/551), done.
Checking connectivity... done
[root@localhost ~]#
perl-buildのダウンロード
[root@localhost ~]# git clone git://github.com/tokuhirom/Perl-Build.git ~/.plenv/plugins/perl-build
Cloning into '/root/.plenv/plugins/perl-build'...
remote: Counting objects: 641, done.
remote: Compressing objects: 100% (222/222), done.
remote: Total 641 (delta 304), reused 626 (delta 289)
Receiving objects: 100% (641/641), 1.17 MiB | 385.00 KiB/s, done.
Resolving deltas: 100% (304/304), done.
Checking connectivity... done
[root@localhost ~]#
pathを設定し、環境設定をロード
[root@localhost ~]# echo 'export PATH="$HOME/.plenv/bin:$PATH"' >> ~/.bash_profile
[root@localhost ~]# echo 'eval "$(plenv init -)"' >> ~/.bash_profile
[root@localhost ~]# source ~/.bash_profile
[root@localhost ~]#
インストールされた場所の確認
[root@localhost ~]# which plenv
/root/.plenv/bin/plenv
[root@localhost ~]#

 

インストールできそうなバージョンを確認
[root@localhost ~]# plenv install --list
Available versions:
 5.6.0
 5.17.11

たくさん

 5.19.4
 5.19.5
[root@localhost ~]#
perlの導入
[root@localhost ~]# plenv install 5.18.1
めんどいので省略
[root@localhost ~]#
現在のバージョンの確認
[root@localhost ~]# plenv versions
* system (set by /root/.plenv/version)
  5.18.1
[root@localhost ~]#
デフォルトで使用するperlを切り替え
[root@localhost ~]# plenv global 5.18.1
[root@localhost ~]# plenv versions
  system
* 5.18.1 (set by /root/.plenv/version)
[root@localhost ~]#
perlで確認
[root@localhost ~]# perl -v

This is perl 5, version 18, subversion 1 (v5.18.1) built for x86_64-linux

Copyright 1987-2013, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

[root@localhost ~]#
有効なperlの確認
[root@localhost ~]# plenv version
5.18.1 (set by /root/.plenv/version)
[root@localhost ~]#
cpanmをインストール
[root@localhost ~]# plenv install-cpanm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  262k  100  262k    0     0   166k      0  0:00:01  0:00:01 --:--:--  699k
--> Working on App::cpanminus
Fetching http://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7001.tar.gz ... OK
Configuring App-cpanminus-1.7001 ... OK
Building and testing App-cpanminus-1.7001 ... OK
Successfully installed App-cpanminus-1.7001
1 distribution installed
[root@localhost ~]# which cpanm
/root/.plenv/shims/cpanm
[root@localhost ~]#
サンプルのモジュールを導入
[root@localhost ~]# cpanm Acme::FizzBuzz
--> Working on Acme::FizzBuzz
Fetching http://www.cpan.org/authors/id/Y/YA/YAPPO/Acme-FizzBuzz-0.03.tar.gz ... OK
Configuring Acme-FizzBuzz-0.03 ... OK
Building and testing Acme-FizzBuzz-0.03 ... OK
Successfully installed Acme-FizzBuzz-0.03
1 distribution installed
[root@localhost ~]#
サンプルファイル作成し、実行結果を確認
[root@localhost ~]# vim sample1.pl
#!/usr/bin/env perl
use strict;
use warnings;

use Acme::FizzBuzz;



Mojolicous、supervisord設定

ディレクトリを作成
[root@localhost ~]# mkdir -p /var/www/tools/app1
[root@localhost ~]# mkdir -p /var/log/starman/app1
[root@localhost ~]# 
Mojoliciousをインストール
[root@localhost ~]# cpanm Mojolicious Server::Starter Starman Net::Server::SS::PreFork
[root@localhost ~]# 
サンプルアプリ作成
[root@localhost ~]# vim /var/www/tools/app1/app.psgi
#!/usr/bin/env perl
use Mojolicious::Lite;

get '/' => sub {
     my $self = shift;
     $self->render(text => 'Hello World!');
};

app->start;
起動して参照できることを確認
[root@localhost ~]# morbo /var/www/tools/app1/app.psgi
[Mon Nov  4 15:01:04 2013] [info] Listening at "http://*:3000".
Server available at http://127.0.0.1:3000.
supervisordのインストール
[root@localhost ~]# yum -y --enablerepo=epel install supervisor
[root@localhost ~]#
起動、停止を確認
[root@localhost ~]# service supervisord start
supervisord を起動中:                                      [  OK  ]
[root@localhost ~]# service supervisord stop
supervisord を停止中:                                      [  OK  ]
[root@localhost ~]# chkconfig --level 2345 supervisord on
[root@localhost ~]# chkconfig --list supervisord
supervisord     0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@localhost ~]#
/etc/supervisord.confの設定ファイルの最後に追加
[root@localhost ~]# vim /etc/supervisord.conf
[program:app1]
user=root
command=/var/www/tools/app1/app.sh
autostart=true
autorestart=true
stopsignal=QUIT
startmanで実行して、「xxx.xxx.xxx.xxx:8000」で確認できること
[root@localhost ~]# /root/.plenv/shims/starman --listen :8000 --workers 10 --error-log /var/log/starman/app1/app.log --pid /var/www/tools/app1/app.pid /var/www/tools/app1/app.psgi
起動用ファイルを作成
[root@localhost ~]# vim /var/www/tools/app1/app.sh
#!/bin/sh
exec /root/.plenv/shims/starman --listen :8000 --workers 10 --error-log /var/log/starman/app1/app.log --pid /var/www/tools/app1/app.pid /var/www/tools/app1/app.psgi
実行権限を追加
[root@localhost ~]# chmod +x /var/www/tools/app1/app.sh
起動、停止を確認
[root@localhost ~]# service supervisord start
supervisord を起動中:                                      [  OK  ]
[root@localhost ~]#



nginx設定

nginxの設定ファイルを追加
[root@localhost ~]# mkdir -p /var/log/nginx/dev6.example.com
[root@localhost ~]# vim /etc/nginx/conf.d/dev6.example.com.conf
server {
    # ポート、サーバネーム
    listen       80;
    server_name  dev6.example.com;

    # アクセスログ、エラーログ
    access_log  /var/log/nginx/dev6.example.com/access.log  main;
    error_log   /var/log/nginx/dev6.example.com/error.log;
    
    # プロキシ
    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    # アクセスを制限する
    location ~ (\.htaccess|\.git|\.svn) {
        deny  all;
    }
    
    # 文字コード
    charset utf-8;
    
}



確認

f:id:m_shige1979:20131105235354j:plain

参考にされていただいたサイト

まとめ

PerlPSGIやnodejsもphp-fpmと同じように80番ポート以外だが、今回はプロキシ?経由なのでちょっと漏れがあるかもしれない。
とりあえず、ここまで来たのでなんかVPSの試用版でも借りて軽く確認してみる。

公開サーバでWebScoketが動作するのを試すだけなのにセットアップの確認だけで結構時間がかかっている…
PerlでのWebScoketをサポートしているPaasを探せば良いのかもしれないが、これも勉強になるはずなので頑張ってみる。

ネットの情報の信ぴょう性について

わからない頃はとにかく参考書を買っていたけど、最近はサイトで公開されている情報を参照するほうが新しい気がする。
参考書は既存の最新バージョンとは限らないので最悪とても古いものかもしれない。
なんかのデザインパターンなどはともかく、PHPの参考書などは1年経過したらただの紙に成り果てるかも…

ちょっと読みたい本(というか購入予定)

Perl徹底攻略 (WEB+DB PRESS plus)

Perl徹底攻略 (WEB+DB PRESS plus)

モダンPerl入門 (CodeZine BOOKS)

モダンPerl入門 (CodeZine BOOKS)