$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

Mojoliciousアプリケーションをmod_perlでデプロイする方法

 最近Mojolicious + SkinnyもしくはTeng + XslateでWebアプリを書いているんですが、デプロイ作業をやってみたので、そのまとめです。合わせて以下の記事も読んでみてください。

デプロイ時の前提

 今回のアプリケーションは以下のような前提でデプロイ作業を行います。

Webアプリの配置

 これに関してはcapistranoで行います。詳しくはcapistranoでperlアプリケーションを簡単にデプロイ - Dive into the Tech World!を見てください。

Apacheの設定

 Apacheにはmod_perlが導入済みとします。導入の仕方はdebianにmod_perl2をインストールする - Dive into the Tech World!を見てください。

 debianの場合サイトの設定は/etc/apache2/sites-availableディレクトリ内にファイルを作って作成するのが一般的(?)です。今回は/etc/apache2/sites-available/sampleというファイルを作ります。

/etc/apache2/sites-available/sample

<VirtualHost *:80>
    ServerName sample.com
    DocumentRoot /var/www/Sample/current/public
    ErrorLog /var/www/Sample/shared/log/error.log
    CustomLog /var/www/Sample/shared/log/access.log common

    Alias /css/     "/var/www/Sample/current/statics/css/"
    Alias /images/  "/var/www/Sample/current/statics/images/"
    Alias /js/      "/var/www/Sample/current/statics/js/"

    <Perl>
        $ENV{PERL5LIB} = '/var/www/Sample/current/lib';
        $ENV{PLACK_ENV} = 'production';
        $ENV{MOJO_HOME} = '/var/www/Sample/current';
    </Perl>

    <Location />
        SetHandler perl-script
        PerlHandler Plack::Handler::Apache2
        PerlSetVar psgi_app /var/www/Sample/current/script/Sample
    </Location>
    <LocationMatch "/(css|images|js)/">
        SetHandler None
    </LocationMatch>
</VirtualHost>

 軽く説明をしておくと、

  • Log(error, access)はsharedの中に入るように設定。
  • staticファイルはaliasして内部のファイルに内部のファイルに飛ばす
  • Perlディレクティブ内でplackの環境変数とMojoliciousアプリケーションのルートを決定
  • Locationを使って全てのパスでperlでの実行を行うように設定
  • /css, /images, /jsの場合はperlでの実行を行わないように

という風にしてあります。

 設定ファイルを作成したら、これを有効にします。debianApacheはこのためのコマンドがあるので

$ sudo a2ensite sample
$ /etc/init.d/apache2 reload

で反映されます。

 以上でデプロイ作業は終了です。

まとめ

 今回はMojoliciousアプリケーションのApacheでのデプロイ作業に関して説明しました。MojoliciousはPlack対応しているのでStarmanなどの別のサーバでも簡単に動かすことが出来るようですね。また機会があったらそちらにも挑戦したいと思ってます。なにか指摘などがあれば教えてください。