我正在尝试寻找一种最佳方法来设置我的服务器以使用 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 服务器的惯例。apps
sites
这真是太棒了:我希望能够将应用程序配置放入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