NGINX Unitが公開されて、Python用のWSGIを動かすアプリケーションサーバーとして使っていけるかなぁという感じです。とりあえずHello Worldを動かしてみました。
ためした環境
- vagrant
- ubuntu/xenial64
- python3.5
NGINX Unitのインストール
こちらを参考にubuntuパッケージ版をインストール。
https://github.com/nginx/unit#ubuntu-packages
そして起動
$ sudo service unitd start
pythonアプリケーションの作成
pythonアプリケーションはwsgiで作成する。指定したパスにwsgi.pyというファイルを配置して、あとはwsgiの流儀に従うだけ。wsgiで作ればいいのでフレームワークなんかは自由。
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello World\n'.encode('utf-8')]
設定ファイルの記述
配置してあるファイルを変更するのではなく、APIで設定を通知するという感じの使い方になるので、設定ファイルを記述してそれをアップロードして設定を反映させる。
{
"applications": {
"hello": {
"type": "python",
"workers": 2,
"path": "/home/ubuntu",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"application": "hello"
}
}
}
設定の反映
制御のAPIはunixソケットでAPIを叩く。
参照: https://github.com/nginx/unit#configuration
記述した設定ファイルをcurlでアップロードして反映させる。
$ sudo curl -X PUT -d @start.json --unix-socket /var/run/control.unit.sock http://localhost/
もしくは、ubuntuのパッケージインストールではそれをしてくれるスクリプトが用意されているので、それを使うと楽。
$ sudo service unitd restoreconfig start.json
GETでリクエストすれば、設定が取得できる。
$ sudo curl --unix-socket /var/run/control.unit.sock http://localhost/
{
"applications": {
"hello": {
"type": "python",
"workers": 2,
"path": "/home/ubuntu",
"module": "wsgi"
}
},
"listeners": {
"*:8400": {
"application": "hello"
}
}
}
unitdが設定ファイルを持ったりしてないので、再起動するたびに反映させる必要がある。
動作の確認
8400ポートでアプリケーションが動くように設定したので、そこにcurlでHTTPリクエストをなげると結果が得られた。
$ curl http://localhost:8400/
Hello World
uWSGIなどと比べると機能が圧倒的にすくないけど、これから多機能になっていくかもしれませんね。
virtualenv/venv で使うのは今後でてくるでしょうか。