使用uwsgi和nginx部署Flask应用程序

我想部署一个简单的Web应用程序,我已经使用Python和Flask构build。

我的应用程序有以下结构:

/var/www/watchgallery/ + app + __init__.py + views.py + templates + flask #virtual environment for Flask + run.py #script I used in my machine to start the development Flask server + watchgallery_nginx.conf + watchgallery_uwsgi.ini + watchgallery_uwsgi.sock 

为了这个部署的目的,我正在关注这个链接: http : //vladikk.com/2013/09/12/serving-flask-with-nginx-on-ubuntu/

在本教程中,Flask应用程序只包含一个hello.py文件。 他configurationuwsgi文件的方式就像这样(/var/www/demoapp/demoapp_uwsgi.ini):

 [uwsgi] #application's base folder base = /var/www/demoapp #python module to import app = hello module = %(app) home = %(base)/venv pythonpath = %(base) #socket file's location socket = /var/www/demoapp/%n.sock #permissions for the socket file chmod-socket = 666 #the variable that holds a flask application inside the module imported at line #6 callable = app #location of log files logto = /var/log/uwsgi/%n.log 

我试图将相同的逻辑应用于我的uwsgi.ini文件,但是我做错了什么。 这是我的文件的样子:

 [uwsgi] #application's base folder base = /var/www/watchgallery #python module to import app = run module = %(app) home = %(base)/flask pythonpath = %(base) #socket file's location socket = /var/www/watchgallery/%n.sock #permissions for the socket file chmod-socket = 666 #the variable that holds a flask application inside the module imported at line #6 callable = app 

当我在本地机器上开发我的应用时,我运行这个命令来启动服务器: ./run.py

这是我的run.py文件:

 #!flask/bin/python from app import app app.run(debug = False) 

现在,我的问题是:我的uwsgi.ini文件应该如何看起来像我的Flask应用程序包含多个单个文件?

不要紧,你的应用程序有多复杂。 你告诉uWSGI这个入口在哪里,其余的部分通常用Python导入来处理。

在你的情况下,输入是module = %(app)callable = app 。 因此,uWSGI将加载模块并将请求发送给Flask应用程序的可调用对象。

现在,由于请求是由uWSGI服务的,而不是Flask的服务器,所以你不需要app.run(debug = False)行。 但是你可以用这个技巧来保持开发和生产代码的一致性:

 #!flask/bin/python from app import app if __name__ == "__main__": app.run(debug = False)