Ubuntu 11.10 上用於 Python 應用程序的 UWSGI 和 NGINX
我正在嘗試找到一種最佳方式來設置我的伺服器以使用 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/預設:
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
所以它有效,但它不是很漂亮。我注意到,當我安裝 UWSGI 時
apt-get
,創建了兩個目錄:/etc/uwsgi/apps-available
和/etc/uqsgi/apps-enabled
. 這符合執行 NGINX 或 Apache 的 debian 伺服器的約定,僅使用apps
而不是sites
.這真是太棒了:我希望能夠將應用程序配置
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 選項。
同樣有效的是在 UWSGI 配置中
<socket>127.0.0.1:9090</socket>
保留和保留 NGINX 配置。最後一點: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