ApacheのCGIプログラムでユーザーPerlを利用する方法

ApacheのCGIプログラムでユーザーPerlを利用する方法を解説します。

ApacheのCGIプログラムでは通常、システムにインストールされているPerlが利用されます。ですが、CPANモジュールの管理の手間を一元化するために、perlbrewplenvでユーザー環境にインストールしたユーザーPerlを使いたいという場合があると思います。

新しくPerlでWebアプリケーションを作る場合は、リアルタイムWebとクラウドサーバーに自然に対応できるリバースプロキシを使ったWebシステム開発手法をお勧めしますが、既存のCGIアプリケーションが存在するという場合も、まだまだあると思います。

環境変数の設定

UbuntuのApacheにおける環境変数の設定方法は、envvarsファイルに指定する方法と、SetEnvディレクティブを使う方法があります。グローバルに影響を与える、envvarsには手を加えないで、個別のサイトで、SetEnvディレクトリブを使うのがお勧めです。SetEnvでは、定数しか使えないことに注意してください。

環境変数PATHの設定

環境変数PATHの設定しましょう。まず、現在のPATHを調べます。envコマンドとgrepコマンドでPATHを表示します。PATHという名前を含む環境変数が複数あるので、Perlの正規表現を使ってPATHだけに絞り込んでいます。

env | grep -P '^PATH='

表示されたPATHをメモします。

PATH=/home/appuser/perl5/perlbrew/bin:/home/appuser/perl5/perlbrew/perls/perl-5.20.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

この値をSetEnvディレクトリを使用して設定します。

SetEnv PATH /home/appuser/perl5/perlbrew/bin:/home/appuser/perl5/perlbrew/perls/perl-5.20.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

これで、ユーザーPerlが利用されるようになります。

環境変数PERL5LIBの設定

自分で作成したPerlのライブラリを読み込みたい場合は、PERL5LIB環境変数を設定します。

SetEnv PERL5LIB /home/appuser/my-app/lib

環境変数を設定した後は、Apacheの再起動が必要です。

関連情報