我试图find一个最佳的方式来设置我的服务器使用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时,创build了两个目录: /etc/uwsgi/apps-available
和/etc/uqsgi/apps-enabled
。 这与运行NGINX或Apache的debian服务器的约定只与apps
而不是sites
。
下面是真棒:我希望能够将应用程序configuration下载到apps-available
根据需要在apps-enabled
创build符号链接),然后让UWSGI服务接收它们。 但我不知道从哪里开始。 我apps-available
哪些configuration文件? 那么NGINXconfiguration看起来像传递给uwsgi服务,而不是传递到我之前发布的命令创build的套接字?
我得到它的工作! 以下是我所做的:
创build/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
而一切都是金色的! 显然,以上是一个非常简单的configuration,在开始生产之前,应该查看可用的UWSGI和NGINX选项。
在UWSGIconfiguration中,还有一个工作是<socket>127.0.0.1:9090</socket>
并保持原来的NGINXconfiguration。
最后说明:UWSGI支持多种格式的configuration:(INI,XML和YAML)。 我最初尝试YAML,但服务器将无法启动,所以我尝试XML,一切工作正常。
编辑:
我只是尝试INIconfiguration,它也工作。 上面的XML文件等价的INI文件如下所示:
[uwsgi] socket = /tmp/uwsgi-myapp.sock plugins = http, pythong chdir = /path/to/directory/containing/python/app module = myapp