moinmoinをApache2.4で動かしたくて少し躓いたのでメモ。
Apacheの準備
Apacheでmod_proxy_uwsgiを使うには、mod_proxyとmod_proxy_uwsgiをLoadする必要がある。
mod_proxy_uwsgiは標準では入ってない場合が多いと思うので適当にインストールする。
ArchLinuxとかならパッケージ管理システムで入る。
Apacheの設定ファイルに必要なモジュールを書いておく。
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
アプリケーション側の準備
uwsgiで動かすアプリケーションをダウンロードするなりパッケージ管理システムで入れるなりして準備をする。そしてuwsgiの設定をuwsgi.iniファイルで行う。
今回moinmoinを動かしてみたので、その時の例をあげる。moinmoinの必要なファイルを/var/lib/moin以下に配置して、以下のようなuwsgi.iniファイルを作成した。
[uwsgi]
uid = http
gid = http
socket = 127.0.0.1:50000
# mod_proxy_uwsgiでunix domain socketがうまく使えなかったのでTCPを使う
#socket = /run/uwsgi/moin.sock
#chmod-socket = 660
plugin = python2
chdir = /var/lib/moin/
wsgi-file = /var/lib/moin/server/moin.wsgi
master = True
workers = 2
max-requests = 200
#harakiri = 60
daemonize=/var/log/httpd/uwsgi-moin.log
とりあえず現在動いただけの段階なので細かいチューニングなどはしていない。パフォーマンスを求めるならもっとチューニングをしたほうがいいと思う。他の環境であれば当然chdirやwsgi-fileは適切に書き換える必要がある。
以上の準備ができたら、uwsgiを起動する。
$ /usr/bin/uwsgi --ini /var/lib/moin/uwsgi.ini
このように先ほど設定したuwsgi.iniを指定して起動させる。
httpd.confの設定
設定ファイル中の適当な場所に以下のように書く。
ProxyPass /hogehoge uwsgi://127.0.0.1:50000/
/hogehogeのところは任意で、/でも良いがサブドメインとして利用したい場合はこのようにする。
もちろんアプリケーションによってはサブディレクトリを指定すると別途設定が必要な場合もある(moinmoinでは必要)。
unixドメインソケットも使えるらしいが、使おうとするとうまくuwsgiにアクセスできなかった。もしかしたら引数をダブルクォートで囲めばよかったのかもしれないと今になって思うが、今更確認する気も起きないのでわからない。
それと、最近のApacheはhttp/2に対応しているが、このProxyPassが有効なところでhttp/2を有効にすると、uwsgiがhttp/2に対応してないのでIOErrorとなりうまく通信できない様子。