Help us understand the problem. What is going on with this article?

NGINX Unitでpython wsgiサーバーを動かす

More than 1 year has passed since last update.

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'.encode('utf-8')]

設定ファイルの記述

配置してあるファイルを変更するのではなく、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でアップロードして反映させる。

$ 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 で使うのは今後でてくるでしょうか。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした