最近Mojolicious + SkinnyもしくはTeng + XslateでWebアプリを書いているんですが、デプロイ作業をやってみたので、そのまとめです。合わせて以下の記事も読んでみてください。
- Mojolicious + Xslate + SkinnyでMVC開発環境 - $shibayu36->blog;
- Mojo + Skinny + Xslateの雛形を作成するFlavorを作った - $shibayu36->blog;
- debianにmod_perl2をインストールする - $shibayu36->blog;
- capistranoでperlアプリケーションを簡単にデプロイ - $shibayu36->blog;
デプロイ時の前提
今回のアプリケーションは以下のような前提でデプロイ作業を行います。
- OSはdebian 5
- サーバはApache + mod_perl
- WAFはMojolicious
- capistranoを使っての配置
Webアプリの配置
これに関してはcapistranoで行います。詳しくはcapistranoでperlアプリケーションを簡単にデプロイ - $shibayu36->blog;を見てください。
Apacheの設定
Apacheにはmod_perlが導入済みとします。導入の仕方はdebianにmod_perl2をインストールする - $shibayu36->blog;を見てください。
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での実行を行わないように
という風にしてあります。
設定ファイルを作成したら、これを有効にします。debianのApacheはこのためのコマンドがあるので
$ sudo a2ensite sample $ /etc/init.d/apache2 reload
で反映されます。
以上でデプロイ作業は終了です。