我试图找到一种最佳方式来设置我的服务器以使用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
所以它有效,但它不是很漂亮.我注意到当我用apt-get安装UWSGI时,创建了两个目录:/ etc / uwsgi / apps-available和/ etc / uqsgi / apps-enabled.这符合运行Nginx或Apache的debian服务器的惯例,只适用于应用而非站点.
这将是非常棒的:我希望能够将应用程序配置放入可用的应用程序(根据需要在应用程序中创建符号链接)并让UWSGI服务选择它们.但我不知道从哪里开始.我在应用程序中放置了哪些配置文件? Nginx配置对于传递到uwsgi服务而不是传递到我之前发出的命令创建的套接字是什么样的?
最佳答案
我搞定了!这是我做的:
创建/etc/uwsgi/apps-available/myapp.xml:
发出以下命令:
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