1. civic

    Posted

    civic
Changes in title
+NGINX Unitでpython wsgiサーバーを動かす
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,97 @@
+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で作ればいいのでフレームワークなんかは自由。
+
+```wsgi.py
+def application(environ, start_response):
+ start_response('200 OK', [('Content-Type', 'text/plain')])
+ return ['Hello World\n']
+```
+
+# 設定ファイルの記述
+配置してあるファイルを変更するのではなく、APIで設定を通知するという感じの使い方になるので、設定ファイルを記述してそれをアップロードして設定を反映させる。
+
+```start.json
+{
+ "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でアップロードして反映させる。
+
+```bash
+$ 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 で使うのは今後でてくるでしょうか。