Flask 项目部署(Docker + Flask + uwsgi + Nginx)

近期参加比赛,原本 windows server 部署的 Flask 后端项目所用的服务器快要过期了,开始改用 Linux 服务器部署。

写过 Flask 项目的同学都知道, Flask 内置的 WSGI 服务器,只适合开发调试使用,但是如果要部署在生产环境,性能是完全不够用的。

Flask app 和 用户交互流程如下:

Flask app(web 应用) <—> uWSGI (实现了 uwsgi 协议的 web 服务器,可以实现 uwsgi 协议 与 http 协议的相互转化)<-> Nginx(高性能的 http 服务器)

所以,经过查阅网上已有的方案 + 自己的实践,找到了一套可用性比较高的部署方案,于是将本次的实践记录下来,以备日后所需。最终我哦采用的部署方案为

flask + gunicorn + Nginx

二、项目部署

=====================================================================

基础的知识就不补充了,但是我会在关键命令写注释

2.1 项目基础环境


以下环境及基础操作,默认大家是会的,毕竟已经安装完成

  1. Linux 云服务器(CentOS7 环境) 阿里云,腾讯云均可

  2. Nginx (高性能的 HTTP服务器)

  3. Docker + Docker Compose(容器编排)

  4. Flask app(Python 环境由 Docker 提供)

  5. SSL 证书配置(需要用到反向代理 HTTPS)

2.2 获得 Python 环境的所需依赖


在你的 Flask 项目根目录中,输入如下命令

pip freeze > requirement.txt

过一会,就能在当前目录看到一个名为 requirement.txt 的文档

当然,我们还需要另外两个依赖,现在可以先不管,在 Docker 里面安装即可。

  1. gunicorn

  2. gevent

在这里,我们以一个 Python 单页面应用为示例,命名为 app.py

from flask import Flask

app = Flask(name)

@app.route(‘/’)

def index():

return ‘hello world’

if name == ‘main’:

app.run(host=‘0.0.0.0’, port=80)

OK, 到这步,Python 基础环境搭建完毕

2.3 配置 gunicorn


创建 gun.conf 文件

并行工作进程数

workers = 2

指定每个工作者的线程数

threads = 4

监听内网端口80

bind = ‘0.0.0.0:80’

工作模式协程

worker_class = ‘gevent’

设置最大并发量

worker_connections = 2000

设置进程文件目录

pidfile = ‘gunicorn.pid’

设置访问日志和错误信息日志路径

accesslog = ‘gunicorn_acess.log’

errorlog = ‘gunicorn_error.log’

设置日志记录水平

loglevel = ‘info’

代码发生变化是否自动重启

reload=True

2.4 编写 Dockerfile


编写 Dockerfile 内容如下:

镜像环境,我们要 python 3.8.0

FROM python:3.8.0

这句话可有可无,标识你是编写这个 Dockerfile 的作者信息

MAINTAINER “codeaaax@xx.com

配置工作目录

WORKDIR /code

拷贝当前目录所有的文件,进入 docker 镜像中

COPY . .

执行安装 Python 环境依赖

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gunicorn gevent

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask

暴露 80 端口,给外部使用,因为上面我们开启的是 80 端口

EXPOSE 80

使用 gunicorn 运行 Flask 项目,最后一个命令: app:app 前者对应的是flask 启动 文件,后面不要乱改

CMD gunicorn -c gun.conf app:app

2.5 编写 docker-compose (选用)


docker-compose 只不过是让项目部署的更加优雅一点,实际和 Docker 创建容器,运行是一样的

version: “3”

services:

flask_test:

image: flask-test:2.0 # 生成的镜像的名称 和 tag

build: . # 一键构建镜像 ================= 以上为构建命令,以下为运行命令

restart: always # 总是重启

container_name: flask_v2 # 运行后的容器的名称

ports:

  • “5500:80” # 端口映射, 这里是将 docker 容器内的 80 端口映射到云服务器的 5500 端口

运行项目

docker-compose up -d # 运行项目,并且后台执行

docker-compose ps # 查看当前目录下 docker-composse 的运行状态

2.6 Docker 构建镜像,并且运行


上面的 docker-compose 对应的 docker 构建镜像命令如下

docker build -t flask-test:2.0 . # 构建镜像

查看构建好的镜像

docker images

在这里插入图片描述

运行容器

docker run -d -p 5500:80 --name flask_v2 --restart=always 需要运行的IMAGE ID

在这里插入图片描述

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)

最后

由于篇幅原因,就不多做展示了
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
]

[外链图片转存中…(img-9Mdw4iFG-1713845926270)]

[外链图片转存中…(img-xtxQcRDg-1713845926271)]

[外链图片转存中…(img-XyAUCas0-1713845926271)]

[外链图片转存中…(img-dFD4kHpD-1713845926271)]

[外链图片转存中…(img-gb7qmeyC-1713845926271)]

由于篇幅原因,就不多做展示了
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值