栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Ubuntu 18.04 使用Gunicorn + Nginx + Supervisor为Flask应用提供服务

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Ubuntu 18.04 使用Gunicorn + Nginx + Supervisor为Flask应用提供服务

目录

1.创建Python虚拟环境

2.设置Flask应用程序

3.创建WSGI入口点

4.配置Gunicorn

5.配置Supervisor

6.将Nginx配置为代理请求


1.创建Python虚拟环境

接下来,我们将设置一个虚拟环境,以便将Flask应用程序与系统上的其他Python文件隔离开来。

首先安装python3-venv软件包,安装venv模块:

sudo apt install python3-venv

接下来,让我们为Flask项目创建一个父目录。创建后移动到目录:

mkdir ~/myproject

cd ~/myproject

通过键入以下内容创建一个虚拟环境来存储Flask项目的Python需求:

python3.6 -m venv myprojectenv

这将安装Python的本地副本和pip进入项目目录中名为myprojectenv的目录。

在虚拟环境中安装应用程序之前,需要将其激活。输入以下命令:

source myprojectenv/bin/activate

您的提示将更改为表示您现在正在虚拟环境中运行。它看起来像这样:(myprojectenv)user@host:~/myproject$。

2.设置Flask应用程序

现在您已进入虚拟环境,可以安装Flask和Gunicorn并开始设计应用程序。

首先,让我们使用本地实例pip安装wheel,以确保我们的软件包即使丢失了轮存档也会安装:

pip install wheel

注意

无论您使用的是哪个版本的Python,在激活虚拟环境时,都应该使用pip命令(不是pip3)。

接下来,让我们安装Flask和Gunicorn:

pip install gunicorn flask

创建示例应用程序

现在您可以使用Flask,您可以创建一个简单的应用程序。Flask是一个微框架。它不包括许多功能更全面的框架可能存在的工具,并且主要作为一个模块存在,您可以将其导入到项目中以帮助您初始化Web应用程序。

虽然您的应用程序可能更复杂,但我们将在单个文件中创建Flask应用程序,名为myproject.py:

nano ~/myproject/myproject.py

应用程序代码将存在于此文件中。它将导入Flask并实例化Flask对象。您可以使用它来定义在请求特定路由时应运行的函数:

from flask import Flask

app = Flask(__name__)

@app.route("/")

def hello():

    return "

Hello There!"

if __name__ == "__main__":

    app.run(host='0.0.0.0')

这基本上定义了访问根域时要呈现的内容。完成后保存并关闭文件。

如果您按照初始服务器设置指南进行操作,则应启用UFW防火墙。要测试应用程序,您需要允许访问端口5000:

sudo ufw allow 5000

现在,您可以键入以下内容来测试Flask应用:

python myproject.py

您将看到如下输出,包括一个有用的警告,提醒您不要在生产中使用此服务器设置:

* Serving Flask app "myproject" (lazy loading)

 * Environment: production

   WARNING: Do not use the development server in a production environment.

   Use a production WSGI server instead.

 * Debug mode: off

 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

完成后,点击终端窗口的CTRL-C以停止Flask开发服务器。

3.创建WSGI入口点

接下来,让我们创建一个文件,作为我们应用程序的入口点。这将告诉我们的Gunicorn服务器如何与应用程序进行交互。

我们来调用这个文件wsgi.py:

nano ~/myproject/wsgi.py

在这个文件中,让我们从我们的应用程序导入Flask实例,然后运行它:

from myproject import app
if __name__ == "__main__":
    app.run()

完成后保存并关闭文件。

4.配置Gunicorn

您的应用程序现在已经建立了入口点。我们现在可以继续配置Gunicorn了。

在继续之前,我们应该检查Gunicorn是否可以正确地提供应用程序。

我们可以通过简单地传递入口点的名称来实现这一点。这被构造为模块的名称(减去.py扩展名),以及应用程序中可调用的名称。在我们的例子中,这是wsgi:app。

我们还将指定要绑定的接口和端口,以便应用程序将在公共可用的界面上启动:

cd ~/myproject
gunicorn --bind 0.0.0.0:5000 wsgi:app

您应该看到如下输出:

[2018-07-13 19:35:13 +0000] [28217] [INFO] Starting gunicorn 19.9.0
[2018-07-13 19:35:13 +0000] [28217] [INFO] Listening at: http://0.0.0.0:5000 (28217)
[2018-07-13 19:35:13 +0000] [28217] [INFO] Using worker: sync
[2018-07-13 19:35:13 +0000] [28220] [INFO] Booting worker with pid: 28220

确认其功能正常后,请按终端窗口的CTRL-C。

我们现在已经完成了虚拟环境,因此我们可以将其停用:

       deactivate

5.配置Supervisor

安装Supervisor:

sudo apt-get install surpervisor

开始编辑项目的配置文件 xxx 随意定

sudo nano/etc/supervisor/conf.d/xxx.conf

以下为配置内容:

# 以下为该配置文件的内容

# 进程名

[program:plrproject]

# 需要执行的命令 (一定要指定虚拟环境的 gunicorn 来执行) pid 那个就是套路,就是要写,没为什么.

command=/home/kcsm/plrproject/plrprojectenv/bin/gunicorn wsgi:app  -w 3 -b 0.0.0.0:12634 --pid /tmp/plrproject.pid

# 工作目录路径

directory=/home/kcsm/plrproject/alpr

# 自动运行 肯定是 true 啦

autostart=true

autorestart=True

startsecs=5

startretries=3

# 以下为该配置文件的内容# 进程名[program:mysite] # 需要执行的命令(一定要指定虚拟环境的gunicorn来执行) command=/home/yaotiancheng/mysite/ENV/bin/gunicorn wsgi --bind 0.0.0.0:2000 --pid /tmp/mysite.pid# 工作目录路径directory=/home/yaotiancheng/mysite# 自动运行autostart=true

接下来启动该进程(命令中的 status 只是为了让你看到 supervisor 的状态变化,因为现在执行 restart并不会提示你 suepervisor 的状态变更信息, 用 status 来确认自己每一步都有效果。

# 查看一下supervisor的状态service supervisor status# 关闭supervisorservice supervisor stop# 再查看一下 supervisor的状态service supervisor status# 启动supervisorservice supervisor  start# 再查看一下supervisor 的状态,确定supervisor是启动的service supervisor status# 另外可以通过supervisorctl 来控制进程的启动, mysite为你配置文件的 program后面的名字supervisorctl restart mysite

到目前为止你已经可以通过IP:端口号来访问你的网站了,重启服务器也没有问题.
接下来是配置 Nginx

6.将Nginx配置为代理请求
# 安装Nginx、sudo apt-get install nginx

首先在Nginx的sites-available目录中创建一个新的服务器块配置文件。让我们称之为myproject确保其与指南的其余部分保持一致:

sudo nano /etc/nginx/sites-available/myproject

打开服务器块并告诉Nginx监听默认端口80,配置Nginx的配置文件。

server {
        listen 80;      server_name 172.163.1.4; #这里为你的IP地址/域名            #静态文件路径
        location /static{
                alias/home/kcsm/plrproject/static;       
                }
        location/{                proxy_set_header  X-Real-IP $remote_addr;                proxy_set_header   Host   $http_host;                       # 这里的地址要与你在 supervisor 里面相同
        ​​​​​​​        ​​​​​​​  proxy_pass         http://0.0.0.0:12634;   
        ​​​​​​​        }
​​​​​​​}

要启用刚刚创建的Nginx服务器块配置,请将文件链接到sites-enabled目录:

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled

使用该目录中的文件,您可以测试语法错误:

sudo nginx -t

如果返回但未指示任何问题,请重新启动Nginx进程以读取新配置:

sudo systemctl restart nginx

7.大功告成

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/599389.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号