これは「Alfasado Inc. / LAB Inc. Advent Calendar 2023」の15日目の記事です。
PowerCMS を従来型の CGI ではなく、常駐型アプリサーバーの PSGI で利用すると、管理画面の利用で軽快な応答を体感できるかと思います。
従来型の CGI では、画面操作によって Web ブラウザーから CMS へとリクエストが来るたびに「必要なプログラムやライブラリーをストレージから読み込んで、メモリー上にプロセスとして起動し、プロセスが要求を CPU で処理して結果を応答し、終了後にリソースを開放する」という初期化から終了までを繰り返すので、本来の処理の前後に付加的な負荷が発生します。
それに対して PSGI では、初期化されたワーカーと呼ばれるプロセスが起動したまま常駐して待ち構え、ブラウザーからの要求の処理と応答だけを繰り返します。
どちらのサーバーモデルも処理する速度は同じですが、PSGI は初期化や終了をしない分だけ全体としては高速で、通常は利用者としても体感できるほど速くなります。
その一方で PSGI では、管理画面を始めとする PowerCMS の各種アプリへのリクエストが集中したとき、相応のワーカー数やサーバーの性能を用意できなければ、応答性が悪くなります。
そのような状況でも CGI は、時間をかけながらも PSGI より多くリクエストに応答できる傾向があり、安定感はあります。
一般に公開するカスタムフォーム (mt-contactform.cgi
) やサイト内検索 (mt-estraier.cgi
) などのアプリは CGI で運用するけど、管理画面 (mt.cgi
) は PSGI でサクサク利用したい。
あるいは一定の運用で得られた傾向から、特定のアプリだけ CGI 方式を選択したい。
今回はそのような要求に応えるべく、1つの PowerCMS で PSGI と CGI をうまく使い分けるサーバー設定のヒントを簡単に説明します。
PowerCMS のアプリケーションディレクトリ ($MT_HOME) が「/var/www/cgi-bin
」で、サーバーモデルは CGI を利用、sudo
が利用できるサーバー OS の管理者という前提です。
まず、PowerCMS の環境設定ファイル (mt-config.cgi
) を複製して、PSGI 用の CMS 環境変数「PIDFilePath」を追加します。
この複製により、環境設定ファイルで CMS 環境変数を追加・変更するときは、二重管理する必要がありますので注意してください。
PSGI では複製した環境設定ファイル「/var/www/cgi-bin/config-admin.cgi
」を使用するように、サーバー環境変数「$MT_CONFIG」を追加します。
この環境では PSGI を systemd で管理していて、ユニットファイルで環境変数を追加しています。
Apache HTTP サーバー (httpd) の設定を変更します。
この環境では管理画面のパスを既定の「mt.cgi
」から「powercms
」、カスタムフォームのパスを既定の「mt-contactform.cgi
」から「form
」に変更してあります。
管理画面でシステム情報を開き、サーバーモデルが「PSGI」となっていることを確認してください。
また、一時的に PSGI のアプリサーバー (starman) を終了させてみて、管理画面 (/cgi-bin/powercms
) の応答はエラー (503 Service Unavailable) となる一方で、サイトの問い合わせフォームから確認画面 (/cgi-bin/form
) に進むことができれば、フォームのアプリが CGI で動作していることを確認できます。
Have a merry Christmas. 🎄