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構成はどのように見えますか?
動作しました!これが私がしたことです:
/ 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