mod_wsgi を使う。

はじめに

最近お仕事で使っている環境をアップグレードしたので、記憶が新しいうちに書いておくかみたいないつものノリです。ありがとうございます。

関係なくもないけど WSGI って「ウィズギー」って読むんですって、言葉に発する機会はほとんどありませんでしたけど、脳内では「だぶるえすじーあい」てそのまま読んでました。「ウィズギー」、覚えた。覚えてない、だって前にも検索した記憶があるもの……。

なに、まだ WSGI なの。しかも Apache て。

みたいなことを言う悪い子はおじさんは嫌いですね。

そんなわけで、適当な Linux で各種開発環境的なものとか、Apache さんとかは既にインストール、稼働済みとして参ります。

Python を install

公式から適当なバージョンの Python をダウンロードして解凍しましょう。良い子はその時の最新のものにしましょう。良い子じゃなくても特に理由がなければ最新のもので良いと思いますよ。ここのところの Python さんは5年間はサポートするよーってアナウンスしてくれています。

現時点では 3.9.4 が最新なのでそれをチョイス(以下その前提で)。

./configure --enable-shared

...

make; make install

...

ldconfig /usr/local/lib

じゃまぁ、configure して make してインストール。今どきの Linux なら、ちゃんと開発環境周りをインストールしているなら問題なく進むと思います。

--enable-shared オプションは mod_wsgi を動かすのに必要なので脳死で追加してください。あと、このままだと /usr/local 以下に配置されるようになりますので、違う、そうじゃない人は --prefix=PATH を追加して変更しましょう。

ldconfig は共有ライブラリーをごにょごにょしてくれるもので、Python のインストールで新しく入ったやつを認識させてます。ごめん、この辺適当。他にもやり方はたくさんあって、ちゃんと /usr/local/lib を ld.so.conf に登録するもよし、既に通っているところへ libpython3.9.so へリンクを張ってもよし、環境変数 LD_LIBRARY_PATH に登録してもよし。各自検索して都合の良いやつにしましょう。

mod_wsgi を install

pip3 install mod_wsgi

Source を取ってきて自前で build してもいいけれど、普通に pip でいけるのでそうしましょう。楽しましょう。

そうしますと、所定の、それっぽいところに wsgi_module.so ができますので、それをまた都合が良いように取り扱います。Apache の modules の下にリンク張ったり、放り込んでもいいし、httpd.conf 的なものから直接指定してあげてもいいと思います。

LoadModule wsgi_module /usr/local/lib/python3.9/site-packages/mod_wsgi/server/mod_wsgi-py39.cpython-39-x86_64-linux-gnu.so

ちなみに、今回の結果的に上記のを動かしている Web アプリの httpd.conf 的なものに書きました。で、systemctl restart httpd

おわりに

昔は mod_wsgi の取り扱いがちょっと面倒でしたけど、今は pip でインストールできるので楽々お手軽ですね。言うて Deploy 環境なので頻繁にバージョン上げたりはしないと思うのですけど、このくらいなら割とカジュアルにやっちゃってもいいと思います。試してはいないけれど、上手いことやれば他のバージョンの Python とかのとも共存できるんじゃないかなぁ。まぁ、そんなことするくらいならもう別に Container 作っちゃった方がいいと思いますけど。

とはいえ、ぼちぼち他の方法でも動かしたいし、何だったら ASGI にも行きたいですわねぇ。

かいているひと

しもだ たくろう a.k.a. たくぅ

1996年くらいからこんなことをやっているのでなかなかのおじさんです。一応今もWeb系の仕事はやっているぽい。実がないので口の方で煙に巻きます。「ぺちぱな。」ん。くず界のくず。 SW-2066-7468-5602✨