つい先日、NginxがNGINX Unitと呼ばれる新しいアプリケーションをオープンソースとしてリリースした。
これを使うと、PHP、Go、Python、さらにはJava、Node.jsのアプリケーションとNginxの連携が楽になる(らしい
ということで実際にpythonの軽量WEBフレームワークことFlaskで試してみた。
環境
- Ubuntu Server 16.04
- Pyhton 3.5
- NGINX Unit 0.1
構成
いままでは
Nginx ----- uWSGI ---- server.py(Flask)
だったのが
Nginx ----- NGINX Unit ---- server.py(Flask)
になる。
手順
まずはインストール。認証鍵のインストールを適当なところにダウンロードして追加
wget http://nginx.org/keys/nginx_signing.key apt-key add nginx_signing.key
でインストール
apt update apt install unit -y
flask入ってなかったら入れておくこと
pip install flask
次にサンプルのFlaskコードを用意する。今回は /home/ubuntu/wsgi.py に以下を記述
#!/usr/bin/env python from flask import Flask application = Flask(__name__) @application.route("/") def index(): return "<h1>Hello World!!!!!!!!!</h1>"
次にNGINX Unitにロードさせるための設定ファイルを作成。今風というべきか形式はJSON形式。今回は同ディレクトリの /home/ubuntu/start.jsonに記述
{ "applications": { "hello": { "type": "python", "workers": 2, "path": "/home/ubuntu", "module": "wsgi" } }, "listeners": { "*:8400": { "application": "hello" } } }
module": "wsgi"
となっているがPythonのファイル名と合わせること。ポート番号8400は任意。
いざ設定 rootで
curl -X PUT -d @start.json --unix-socket /var/run/control.unit.sock http://localhost/ service unitd restoreconfig /home/ubuntu/start.json
のあとに以下を叩いて記述したJSONが返ってきたら成功
sudo curl --unix-socket /var/run/control.unit.sock http://localhost/
これで http://localhost/:8400を開くとHello worldがお出迎えしてくれる
現状の問題点
- 設定項目がUwsgiより圧倒的に少ない
- pyenv、virtualenvなどといった仮想python環境に対応できていない
- これについてはすでにIsuueが上がってる https://github.com/nginx/unit/issues/15
まぁ時間が解決してくれるでしょと気長に待つことにした