例えば、PHPを使った開発のケースにおいてサーバソフトウェアと言えば、 Apacheオンリーという選択肢だと思うのですが (追記: コメントでいただいたんだけど nginx+fastcgiという選択肢も結構使われてるそうです!) 、 Perlの場合はいろいろたくさんあります。 意外とPerl以外の言語を使っている人はPerlのWeb開発におけるサーバ環境って知らない人が 多いと思うので、僕個人的にどんな物を使っているのかを紹介します。
まずはテスト環境ですが、これはPlackのテストサーバ使ってます。 PSGIというWebアプリケーションとサーバソフトをつなぐ規格が定義されているので、 テスト環境で動かすサーバと本番環境で動かすサーバが違ってもアプリの挙動は全く同じだったりします。
お手軽に試すにはMacのTerminalでcpanmというコマンドを入れてから、
$ cpanm Plack
とPlackを入れてみてください。
そしてこれは全く推奨されていませんが、直でPSGIのアプリを書いてしまうHello Worldを動かしてみます。 実際のアプリケーション開発ではPSGI互換のWeb Application Frameworkを必ず使ってください。
my $app = sub { return [ 200, [ 'Content-Type' => 'text/plain' ], ['Hello World'] ]; }; $app;
そしてplackupというコマンドでテストサーバを起動。ポート番号をあえて指定しています。
$ plackup -p 5001 helloworld.psgi
すると 5001 番ポートで起動したlocalhostとかにサーバが立ち上がります。
「http://localhost:5001/」とかにアクセスすれば、「Hello World」が見れるはずです。
$ plackup -p 5001 -r helloworld.psgi
という風に「-r」オプションをつければ、psgiファイルと「./lib」ディレクトリ以下を監視して、更新があったら再起動とかしてくれます。他のオプションはヘルプを見てください。
次に本番環境。これは様々な流儀があると思いますが、僕はフロントエンドとバックエンドと分けて運用しています。 静的ファイルのサーブやヴァーチャルホストの解決などはApacheやnginxに行い、リバースプロキシなどで、 アプリ部分はバックエンドのサーバでまかないます。 バックエンドのサーバにはPerl製の「Starman」を使っています。 CPANモジュールなので、
$ cpanm Starman
でインストールされ、starmanコマンドで.psgiファイルを指定します。 運用の際に欠かせないのが、 starmanコマンドをデーモン化するdaemontoolsです。 僕はdebianのaptでインストールできるdaemontoolsをそのまま使ってます。
$ sudo apt-get install daemontools-run
すると /etc/service というディレクトリができるので、
/home/www-data/daemontools/sugokuii_web
とかってディレクトリを作ってその中に実行権限を与えた run ファイルを以下のように作ります。
#!/bin/sh exec 2>&1 cd /home/www-data/www/sugokuii exec setuidgid www-data starman sugokuii_web.psgi --p 8000 --workers 10
そして そのディレクトリを /etc/service 以下にシンボリックリンクを張れば自動的に起動される、もしくはプロセスが死んでも復活するようになります。 細かいログの取り方などは調べて見てください。
本番環境をまとめると
- フロントはnginxかApache
- バックエンドはdaemontoolsでデーモン化したStarman
ということになります。
ここまでやるには知識が必要だったり、環境もroot権限が必須だったりするので、 大変かもしれませんが、今はVPSも安いですからねー。 また、RubyやPythonも似たような環境があると思います。 ということで最近の個人的なWebサーバ事情でしたー。