Ubuntu

Ubuntu 11.10 上用於 Python 應用程序的 UWSGI 和 NGINX

  • December 21, 2011

我正在嘗試找到一種最佳方式來設置我的伺服器以使用 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

引用自:https://serverfault.com/questions/343050