web-dev-qa-db-ja.com

UWSGIおよびNGINXfor Python Ubuntu11.10上のアプリ

NGINXとUWSGIを使用してpythonアプリケーションを提供するようにサーバーを設定する最適な方法を見つけようとしています。これまでのところ、以下が機能しています。

初期設定:

Sudo apt-get install nginx uwsgi uwsgi-plugin-http uwsgi-plugin-python python-setuptools

easy_install pip

pip install web.py

/ etc/nginx/sites-available/default:

server {
    listen 80;
    server_name localhost;
    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:9090;
    }
}

そして、基本的なmyapp.pyがあります(現在の設定では場所は関係ありません):

import web

urls = (
    '/', 'index'
)

app = web.application(urls, globals())

class index:
    def GET(self):
        return "Hello from Web.py!"

application = app.wsgifunc()

その後、次のコマンドを発行でき、すべてが機能します:

Sudo service nginx restart

uwsgi --plugins http,python -s 127.0.0.1:9090 myapp

だからそれは動作しますが、あまりきれいではありません。 apt-getを指定してUWSGIをインストールすると、/etc/uwsgi/apps-available/etc/uqsgi/apps-enabledの2つのディレクトリが作成されていることに気付きました。これは、appsではなくsitesのみを使用してNGINXまたはApacheを実行するDebianサーバーの規則と一致します。

これが素晴らしいことです。アプリケーション構成をapps-availableにドロップして(必要に応じてapps-enabledにシンボリックリンクを作成し)、UWSGIサービスにそれらを取得させたいと思います。しかし、どこから始めればよいのかよくわかりません。 apps-availableにはどのような構成ファイルを入れますか?また、以前に発行したコマンドで作成されたソケットに渡すのではなく、uwsgiサービスに渡すためのNGINX構成はどのように見えますか?

4
knpwrs

動作しました!これが私がしたことです:

/ etc/uwsgi/apps-available/myapp.xmlを作成:

<uwsgi>
    <socket>/tmp/uwsgi-myapp.sock</socket>
    <plugins>http, python</plugins>
    <chdir>/path/to/directory/containing/python/app</chdir>
    <module>myapp</module><!-- myapp.py from before -->
</uwsgi>

次のコマンドを発行しました:

ln -s /etc/uwsgi/apps-available/myapp.xml /etc/uwsgi/apps-enabled/myapp.xml
Sudo service uwsgi restart

更新された/ etc/nginx/sites-available/default:

server {
    listen 80;
    server_name localhost;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi-myapp.sock;
    }
}

NGINXを再起動しました:

Sudo service nginx restart

そして、すべてが金色です!明らかに、上記は非常に単純な構成であり、本番環境に移行する前に、利用可能なUWSGIおよびNGINXオプションを確認する必要があります。

また、<socket>127.0.0.1:9090</socket>を持ち、NGINX構成をそのままにしておくUWSGI構成でも機能しました。

最後の注意として:UWSGIは、構成に複数の形式(INI、XML、およびYAML)をサポートします。最初はYAMLを試しましたが、サーバーが起動しないため、XMLを試しましたが、すべて正常に機能しました。

編集:

INI構成を試したところ、それも機能しました。上記のXMLファイルと同等のINIファイルは次のとおりです。

[uwsgi]
socket = /tmp/uwsgi-myapp.sock
plugins = http, pythong
chdir = /path/to/directory/containing/python/app
module = myapp
3
knpwrs