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

标签 python deployment nginx flask uwsgi

我正在尝试部署一个我使用 Python 和 Flask 构建的简单网络应用。

我的应用具有以下结构:

/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 文件。他配置他的uwsgi文件的方式是这样的(/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)

现在,我的问题是:考虑到我的 Flask 应用程序包含多个文件,我的 uwsgi.ini 文件应该是什么样子?

最佳答案

您的应用程序有多复杂并不重要。你告诉 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)

关于python - 使用 uwsgi 和 nginx 部署 Flask 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187947/

相关文章:

python - 如何使用 gunicorn 运行 Flask 应用程序?

python - 自动对 pandas 数据框中具有相似名称的多个列进行分组

node.js - 如何将NodeJS项目部署到Azure网站?

Django + Nginx + Uwsgi 查看Nginx默认页面然后运行在80端口

python - gekko中定义最大函数时出错

python - 无法在 Eclipse 中创建 python View

c# - ASP.Net - 新版本的代码是否仍在使用以前的程序集?

c# - 部署后Az​​ure函数应用程序设置为空

javascript - 防止在 Opera Mini 上上传大文件

nginx ingress Jenkins 路径重写配置不起作用