PowerCMS™

【東京セミナー】6月6日(木) 企業Webリニューアル。最初に押えたい要件定義の進め方と、最新CMSで出来ること

PowerCMS ブログ

ホーム > PowerCMS ブログ > PowerCMS 3.2 を PSGI 環境で運用する

2012年11月28日

PowerCMS 3.2 を PSGI 環境で運用する

はじめに

PSGI は、Perl Web Server Gateway Interface の略で、Perl ウェブアプリケーションについて、個々のウェブサーバーに対応したコードを記述することなく、効率的に開発できるように規定したインターフェイスです。

従来の PowerCMS は、各種ウェブサーバーに対応したコードを記述していましたが、PowerCMS 3.2 以降では PSGI に正式に対応しており、要件にあわせて様々なウェブサーバーを活用できるようになりました。

PSGI に対応したアプリケーションは、PSGI サーバーという PSGI に準拠したウェブアプリケーションサーバーで動作します。加えて CGI アプリケーションと異なり、アプリケーションサーバー上に永続化して動作するため、レスポンスがよくなります。

PSGI サーバーの多くは、簡易的なウェブサーバー機能しか実装されていません。そのため、実際の運用では Apache や nginx といったウェブサーバーのリバースプロキシ機能を活用し、バックエンドに PSGI サーバーを配置するようにします。

今回は、DynamicMTML を利用することを考慮し、CentOS 6.3 の環境で Apache をフロントエンドに、バックエンドには PSGI サーバーのひとつである Starman を採用した環境を構築する方法を解説いたします。(DynamicMTML やダイナミック・パブリッシングを利用しない場合は、フロントエンドに nginx を採用できます。nginx を利用した構築方法は別の機会に解説します。)

なお、既に Apache、MySQL、PHP 等はインストールされているものとし、以下のように PowerCMS 3.2 がインストールされているものとします。

  • アプリケーションディレクトリ (PowerCMS を実行するスクリプトやライブラリを保管するディレクトリ): /var/www/cgi-bin/mt
  • スタティックディレクトリ (PowerCMS の管理画面で利用するスタイルシートや画像ファイル等を保管するディレクトリ): /var/www/html/mt-static
  • ウェブサイトディレクトリ (PowerCMS が作成するウェブサイトを保管するディレクトリ): /var/www/html
  • PowerCMS ディレクトリ (PowerCMS が利用するキャッシュやリビジョンのバックアップデータ等の各種ファイルを保管するディレクトリ): /var/www/powercms_files
  • 管理画面 URL: http://www.example.com/cgi-bin/mt/mt.cgi

注:解説するコマンドは、すべて root アカウントでの実行を前提としてています。sudo 等適宜追加してください。

開発ツールのインストール

PSGI 環境に必要なソフトウェアをインストールするために、開発ツールをインストールします。以下のコマンドを実行してください。

yum -y groupinstall "Development tools"
yum -y install wget

yum リポジトリの追加

PSGI 環境に必要なパッケージをインストールするために、以下のコマンドを実行して、リポジトリを追加します。

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -Uvh epel-release-6-7.noarch.rpm

次に、追加したリポジトリの環境ファイルを編集します。

vi /etc/yum.repos.d/epel.repo

なお、[epel] セクションの enabled 行を以下のように編集します。

enabled=0

Starman のインストール

PSGI サーバー Starman をインストールするために、Perl モジュールを取得・ビルド・インストールするコマンド cpanm を先にインストールします。

yum -y install perl-ExtUtils-MakeMaker
curl -L http://cpanmin.us | perl - --sudo App::cpanminus

※ sudoで実行する場合、sudoのタイムアウトが短いとパスワードの入力が数度発生します。そこで事前に visudo で Defaults timestamp_timeout の値を調整しておきます。

以下のコマンドを実行し、cpanm のインストールが完了したことを確認します。

cpanm --help

cpanm のインストールが完了したら、以下のコマンドを実行し Starman をインストールします。

cpanm Plack
cpanm Task::Plack
cpanm XMLRPC::Transport::HTTP::Plack
cpanm CGI::Parse::PSGI
cpanm CGI::PSGI

※ 最後の2つのモジュールは場合によってはインストール済みになります

PSGI サーバー起動用スクリプトの作成

インストールした Starman を起動するためのスクリプトを作成します。最初にスクリプトを保管するディレクトリを作成します。

mkdir -p /var/www/tools

以下の内容を /var/www/tools/mt.sh として保存します。なお、workers の値はサーバーの CPU コア数にあわせて調整してください。

#!/bin/sh
cd /var/www/cgi-bin/mt
exec /usr/local/bin/starman --listen :8000 --workers 2 --user apache --group apache --error-log /var/log/starman/mt.log --pid /var/www/tools/mt.pid ./mt.psgi

保存したスクリプトに対して実行権限を設定します。

chmod +x /var/www/tools/mt.sh

Starman が出力するログを保管するディレクトリを作成します。

mkdir -p /var/log/starman

環境設定ファイル mt-config.cgi の修正

環境設定ファイル mt-config.cgi の CGIPath または AdminCGIPath について、相対表記から絶対表記に変更します。

変更前
CGIPath /cgi-bin/mt/
変更後
CGIPath http://www.example.com/cgi-bin/mt/

また、以下を追記した後に保存します。

PidFilePath          /var/www/tools/mt.pid

Apache にリバースプロキシを設定

yum 経由で Apache をインストールしている場合、リバースプロキシ機能に必要なモジュールはインストールされています。設定ファイルに、以下の内容を記述してください。

<IfModule mod_proxy.c>
    ProxyRequests    Off
    ProxyPass        /cgi-bin/mt/ http://localhost:8000/cgi-bin/mt/
    ProxyPassReverse /cgi-bin/mt/ http://localhost:8000/cgi-bin/mt/
</IfModule>

Apache を再起動します。

service httpd restart

Supervisor

Supervisor は、サーバーのプロセスを死活監視するアプリケーションです。今回は Starman の死活監視を実行します。以下のコマンドを実行し、Supervisor をインストールします。

yum -y --enablerepo=epel install supervisor

設定ファイル /etc/supervisord.conf に、以下の内容を追記します。

[program:mt]
user=apache
command=/var/www/tools/mt.sh
autostart=true
autorestart=true
stopsignal=QUIT

※ /var/www/tools を Apacheが書き込めるように設定します。例:

chown apache:apache /var/www/tools/

Supervisor を起動します。

chkconfig --level 2345 supervisord on
service supervisord start

確認方法

http://www.example.com/cgi-bin/mt/mt.cgi?__mode=tools&blog_id=0

上記にアクセスし、[サーバーモデル] が PSGI になっていればインストール成功です。

トラブルシューティング

Starman ならびに Supervisor のログは、それぞれ以下のディレクトリ下に出力されます。

  • Starman: /var/log/starman
  • Supervisor: /var/log/supervisor

また、何らかの理由で Starman のプロセスを再起動したい場合は、以下のコマンドを実行します。

pkill starman

カテゴリー
PowerCMS 3
トラブルシューティング
技術情報

Recent Entries