当社はIT技術のオンライン教育を得意としたセミナー専門会社です。

ITエンジニアの技術力UPをお約束します。

Apache2.4(Ubuntu/Debian)で複合言語(メイン:php サブ:python)で組み合わせる典型的なやり方。

サイトを構築する場合、1つのプログラミング言語で作る場合より複数の言語で構成するほうが多いと思う。従来WEBに非常に親和性の高い言語といえばなんといってもphpになるだろう。さらにCMSとなるとWORDPRESSをケースが非常に多いと思います。このようなケースでサイトの一般的なページはWORDPRESSで作るけど、システム的な部分はsymfonyやlaravel、cakephpのようなフレームワークで作るのではないかと思います。今回はこのシステムを組み込む部分に異なる言語pythonを使った場合はどうやって一つのサイトにまとめるか解説していきたいと思います。

PythonをApache2.4に組み込む

Apache2.4へ仮想ホストを登録する

WSGIScriptAlias,WSGIDaemonProcess,WSGIProcessGroup,WSGIApplicationGroupのパラメータ設定が肝である。特に注意しなければならないのは通常apacheのユーザ、グループはwww-dataなのだが、pythonで作るシステム部分が共通でwww-dataで良い場合もあるだろうし、異なったほうが良い場合もある。下記の例では異なるユーザでpythonプログラムを起動して動かす前提で作っています。予めuser&groupをuseraddコマンドで作っておきましょう。pythonプログラムを設置するパスは当然起動ユーザのアクセス権になっている必要があります。そのユーザのログインパスをそこに設置するというのも一つの手法です。あともう一つ注意点があるとすれば、processとthreadsの数です。apache2.4でhttp2対応させるケースが増えてきた現在ではpreforkからevent,workerタイプに移行しapacheを動作させるケースが多くなりました。メイン設定プロセス数とスレッド数に対しpythonのプログラムが独立してマルチプロセス、マルチスレッドで動作するためメインとサブで恐らく設定数の兼ね合い、バランスを取らないとApacheサーバが落ちてしまう原因を作りそうな気はしています。サブがサイト運用の中で処理メインならば、当然サブのほうがプロセス数、スレッド数が多くなければいけないだろうと思います。興味ある方は実験してみてください。Scriptで呼び出していると言ってもバックエンドで動いてる動作に近いのではないかと推測します。

下記の例ではドキュメントルートは/var/www/vhosts/flat_siteへ配置し、pythonのコンテンツは/var/www/vhosts/sideaに配置します。セキュリティ的にpythonコンテンツをドキュメントルート配下に設置しないよう気をつけましょう。

Pythonプログラム

/var/www/vhosts/sideaに下記をindex.pyとして配置します。

開発とデバッグ用に単独起動の処理を”__main__”に導入しています。通常はapache起動ではelseのapplicationに分岐します。尚WSCRIPTSで動作させる場合はpython側はシングルスレッド仕様で作成して大丈夫です。(スレッドセーフにプログラムを作ってさえいれば問題なし)マルチプロセス・マルチスレッドの部分はApache側が担当します。

接続確認を行う。

下記の例で「http://zero.serve.net/sideapp」にアクセスするとpythonのコンテンツが表示され、それ以外のフォルダーはWORDPRESS(php)で動作するようになっています。ドメインは貴方のドメインして実験してみてください。