Ubuntu 11.10 上用于 Python 应用程序的 UWSGI 和 NGINX

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/站点可用/默认:

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 服务器的惯例。appssites

这真是太棒了:我希望能够将应用程序配置放入apps-available(根据需要创建符号链接apps-enabled)并让 UWSGI 服务获取它们。但我不知道从哪里开始。我要放入哪些配置文件apps-available?并且,传递给 uwsgi 服务而不是传递给我之前发出的命令创建的套接字的 NGINX 配置是什么样的?

答案1

我成功了!以下是我所做的:

创建/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

相关内容