最近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
で反映されます。
以上でデプロイ作業は終了です。