local::lib をちょっと使って Catalyst で作られた Wiki "MojoMojo" をいれてみる
今まで Front に Lighty、Back に Apache(mod_perl) の構成で Catalyst を動かしていましたが、Apache の mod_uploader を導入してからは、それを逆転し Front に Apache を、Back に Lighty (FastCGI) を利用するようになりました。
というわけで
「この構成に対して Catalyst で作られた Wiki "MojoMojo" をインストールしてみよう!」
のコーナ。
それと今回はもう1点。
MojoMojo を導入するにあたり必要となる CPAN モジュールは、local::lib を使い、専用のディレクトリへとインストールしてみることに。
というのも、local::lib のいいところは「root 権のないレンタルサーバでもカンタンに CPAN が使える!」ってゆーところもあるけれど、JPA セミナー#1 の中で、もっと「えきさいてぃんぐ」な側面も紹介していたような気がしたためです。
というわけで、今回はそれにちょっとだけチャレンジ。
長くなりそうなので、恒例の先にまとめ。
- Apache+Lighty (FCGI) の構成で Catalyst を動かす方法が分かった
- using_frontend_proxy: 1
- Catalyst + FCGI でプロセスをデーモン化するサンプルがこんなところに!
- FCGI::Engine::Manager
- loca::lib は便利そう
- 実際にまっさらなレンタルサーバで使ってみたい
1. MojoMojo をダウンロードする
MojoMojo は CPAN からダウンロードできるようですが、github で開発されているのでそちらを clone しました。
$ pwd
/home/my/path/to
$ git clone git://github.com/marcusramberg/mojomojo.git
2. MojoMojo を起動して足りないモジュールをインストール
clone してきたら、とりあえず ServerSimple で起動してみることに。
$ pwd /home/my/path/to/mojomojo $ perl script/mojomojo_server.pl Can't locate モジュール名 in @INC (@INC contains: ......
手元の環境で動作させたため、ほとんどのモジュールが揃っていましたが*1、それでもこの時点では足りないモジュールがありましたので、それらをインストールしていきます。
が、今回はただインストールするのではなく、アプリケーションルート以下に extlib というディレクトリを用意し、そこへと local::lib を用いてインストールしていきます。
と、その前に下準備。script/ 以下にある perl スクリプトに、以下の2行を追記します。
# 今回は mojomojo_server.pl と mojomojo_fastcgi.pl、mojomojo_fastcgi_manage.pl に記述しました。
use FindBin; use local::lib "$FindBin::Bin/../extlib"
準備が整ったところで cpan 開始。
$ pwd /home/my/path/to/mojomojo $ perl -MCPAN -Mlocal::lib=extlib -e shell # -Mlocal::lib=extlib を指定して cpan を起動するよ Can't use an undefined value as a symbol reference at /usr/local/share/perl/5.10.0/CPAN.pm line 508.
やだ、なにこれ。エラーが出て cpan できない。
どうやら、~/.cpan/CPAN/MyConfig.pm が存在していないため発生しているエラーみたい。
普通だったら cpan したときに作成されるような気がしたんだけど。。。
そんなわけで MyConfig.pm を生成します。
$ perl -MCPAN -e 'mkmyconfig' # "mkmyconfig" すると "o conf init" したときと似た動作をしてくれます # 最初の質問には yes で答えて自動で設定してもらう。 # no と答えてインストールに使う FTP サーバくらいは自分で選択してもよさそうだけど # それくらいなら MyConfig.pm を直接編集した方がはやい???
それでは改めて足りないモジュールをインストールしていきいます。
$ perl -MCPAN -Mlocal::lib=extlib -e shell cpan[1]> install 足りないモジュール
これで、ServerSimple が起動できるようになったら、たぶん OK。
3. FastCGI で動かしてみる
今回は FastCGI で動かすのが目的なので、mojomojo_fastcgi.pl を利用して。。。
と思ったら、"mojomojo_fastcgi_manage.pl" なるスクリプトを発見。
なんだろなー。とのぞいてみたら、どうやら FastCGI で起動してさらにデーモン化してくれるツールっぽい。
しかも、MojoMojo に限らずどんな Catalyst アプリにも対応してそう。
ぉぉ。これは便利。
ということで、これを利用します。
その前に設定ファイルらしきものがあったので編集します。
- script/mojomojo_fastcgi_manage.yml
- local::lib を利用するように設定を書き換え
- その他設定はお好きなように
- name: "mojomojo" (中略) additional_args: [ "-I", "lib/", "-Mlocal::lib=extlib/" ] # "-Mlocal::lib=extlib/" を追記 (省略)
そして実行
$ pwd /home/my/path/to/mojomojo $ ./script/mojomojo_fastcgi_manage.pl start mojomojo
FCGI::Engine::Manager がたりないと怒られたので、これも local::lib を使ってインストールし無事起動。
あとは、Lighty で Socket を捕まえてあげるだけだね!
4. Front + Back(FastCGI) の設定
まずは Front (Apache) から。
mod_rpaf や mod_http_proxy、mod_proxy はあらかじめ e2enmod*2 を使い有効にしておきます。
- /etc/apache/sites-available/15-mojomojo
<VirtualHost *> ServerName mojomojo.mydomain.jp # 中略 # static コンテンツは Apache 側でサーブする Alias /.static /home/path/to/mojomojo/root/static Alias /static /home/path/to/mojomojo/root/static ProxyRequests Off # Rewrite を使って Backend にリクエストを転送 # ただし Static なコンテンツをのぞく RewriteEngine On RewriteRule ^/.static - [L] RewriteRule ^/static - [L] RewriteRule ^/+(.*)$ http://mojomojo.mydomain.jp:8080/$1 [P,L] ProxyPassReverse / http://mojomojo.mydomain.jp:8080/ </VirtualHost>
たぶん一般的な設定だと思います。
続いて Backend の FastCGI。
- /etc/lighttpd/conf-available/15-mojomojo.conf
server.modules += ( "mod_fastcgi" ) $HTTP["host"] == "mojomojo.mydomain.jp" { accesslog.filename = "/var/log/lighttpd/mojomojo/access.log" server.errorlog = "/var/log/lighttpd/mojomojo/error.log" fastcgi.server = ( "" => (( "check-local" => "disable", "socket" => "/tmp/mojomojo.socket", # mojomojo_fastcgi_manage.yml で指定した Socket )) ) }
Backend もきっと一般的な設定方法だと思います。
これで Apache、Lighty を再起動し、アクセスすると。。。
わー。。。
あれ?表示されるページのリンクがすべからく "mojomojo.mydomain.jp:8080" になってる!
Port はあいていないけれど、Backend のサーバがバレバレですね。しかもアクセスできないし。。。
この解決方法は有名?らしく mojomojo.conf に
using_frontend_proxy 1 # mojomojo.conf は yaml 形式ではない。 # yaml 形式なら # using_frontend_proxy: 1 # で OK みたい
と書くことで、解決しました。
今度こそわーい。
参考にさせていただいたサイト
ごらんのページは以下のサイトの提供でお送りいたしました。多謝。
- やっとわかった、リバースプロキシの設定の意味 - 刺身☆ブーメランのはてなダイアリー
- http://d.hatena.ne.jp/a666666/20090211/1234348004
- Kopug Memo! - Reverse Proxyの後ろにCatalystアプリを置いてみた
- http://d.hatena.ne.jp/kopug/20061230/1167488679