最近来到新公司,学习了下flask,web服务加docker部署,记录一下
使用前部署
#虚拟环境
mkvirtualenv #创建虚拟环境
rmvirtualenv #删除虚拟环境
workon #进入虚拟环境、查看所有虚拟环境
deactivate #退出虚拟环境
#pip
pip install #安装依赖包
pip uninstall #卸载依赖包
pip list #查看已安装的依赖包
pifreeze #冻结当前环境的依赖包
因为这家公司跟我之前不一样业务写的比较多,刚好维护之前的项目
1.考虑业务规模,如果业务量大使用蓝图
flask蓝图:蓝图可以将应用程序分解为多个模块,每个模块可以独立开发、测试和维护,使代码组织更加清晰。
代码复用性更高:蓝图可以被多个应用程序使用,提高了代码的复用性。
路由管理更方便:蓝图可以定义自己的路由,使路由管理更加方便,同时也可以更好地控制 URL。
蓝图可以使应用程序的开发、测试和维护更加简单、灵活和高效。
然后设施日志格式
设置数据库配置
设置返回的失败请求页面
1.首先设置一下不同环境的数据库(开发环境配置,预生产环境配置,生产环境配置)
2.设置一下 Flask 蓝图中的错误处理函数,用于处理 HTTP 错误。代码中定义了三个函数分别对应 HTTP 状态码 403、404、500
这些函数都使用 @doc.app_errorhandler 装饰器来注册到 doc 蓝图中。这样,当出现对应的 HTTP 错误时,Flask 就会调用相应的错误处理函数来进行处理。
每个错误处理函数都先判断请求的 Accept header 是否为 JSON 格式,如果是,则返回 JSON 格式的错误信息;否则返回 HTML 格式的错误页面。其中,request.accept_mimetypes 表示请求的 Accept header,accept_json 和 accept_html 分别表示是否接受 JSON 和 HTML 格式的响应。如果同时接受 JSON 和 HTML 格式的响应,则默认返回 HTML 格式的错误页面。
在返回 JSON 格式的错误信息时,使用 jsonify 函数将字典类型的错误信息转换为 JSON 格式。在返回 HTML 格式的错误页面时,使用 render_template 函数渲染对应的 HTML 模板,并指定 HTTP 状态码。
3.配置一下日志
- 导入了
create_app()
函数,用于创建Flask应用程序。 - 导入了
dictConfig()
函数,用于配置日志记录。 - 使用
dictConfig()
函数配置了日志记录,包括设置日志输出样式、控制台输出和日志文件输出等。 - 创建了Flask应用程序对象。
4.注册蓝图
- 导入了
os
、Flask
、dotenv
和config
模块。 - 创建了
create_app()
函数,用于创建Flask应用程序对象。 - 加载了环境变量。
- 根据不同的环境变量加载不同的配置。
- 注册了
doc
、pcmp
和wjf
三个蓝图。 - 返回了Flask应用程序对象。
- 总结:主要作用是创建一个Flask应用程序对象,并根据环境变量加载不同的配置,同时注册了三个蓝图
开始实现接口
到这里熟悉flask的应该就懂了
接下来配置Gunicorn,一个Python的Web服务器,它可以处理多个并发请求。
绑定的IP地址和端口号
backlog参数
timeout参数
worker_class参数
worker进程数
线程数
日志级别
访问日志格式
访问日志文件路径
错误日志文件路径
X-Forwarded-For头部的名称
这些参数可以根据具体的需求进行设置,以优化服务器性能和日志记录。
worker_class 的值应该根据您的应用程序和实际情况进行设置。Gunicorn 支持多种 Worker 类型,例如 gevent、sync、eventlet 等,每种 Worker 类型都有不同的特点和适用场景。
如果您的应用程序是基于 IO 操作的,例如网络请求、数据库查询等,那么使用 gevent Worker 类型可以提高并发能力和性能。而如果您的应用程序是 CPU 密集型的,例如加密算法、图像处理等,那么使用 sync Worker 类型可能更加适合。
因此,您应该根据您的应用程序的特点和实际情况选择合适的 Worker 类型。如果您不确定应该选择哪种 Worker 类型,可以先使用默认的 sync Worker 类型进行测试和调试,然后根据实际情况进行调整。
这里就差不多了,我做的这个项目主要是爬取数据到本地,然后写接口做数据回填,业务比较多,这个项目到今天位置应该差不多结束了,大概30多个接口
这里是添加新的项目
以前用flask都是做做简单的接口,这算是第一次用他来做web二次开发(记录一下)
下面是配置docker,配置大家自己百度一下就好了,这里说一下简单的部署
配置Dockerfile
- 基于
192.168.xxxxx/crawler_python/python:v1
镜像构建新镜像。 - 设置环境变量
LANG
为C.UTF-8
。 - 设置环境变量
env
为test
。 - 使用
pip
设置镜像源为百度镜像,并卸载旧版本pycryptodome
,安装新版本pycryptodome
、openpyxl
、pandas
、py_mini_racer
。 - 创建文件夹
/court_crawler/logs
。 - 设置工作目录为
/court_crawler
。 - 拷贝当前目录下的所有文件到
/court_crawler
目录下。 - 对外暴露端口
5000
。 - 容器启动时运行
CMD
命令,使用gunicorn
启动 Flask 应用,加载配置文件gun.py
,监听5000
端口,设置环境变量FLASK_ENVIRONMENT
为test
。
1.真实项目禁止转载,也希望大家多多指点一下(小白求指点)
个人感悟
2.目前来到新公司快1个半月了,业务跟我之前公司差距很大,唯一相同的就是爬取数据到数据库了,业务偏多.因为公司就我一个py,所以工作中没有啥学习机会,主要是锻炼业务逻辑,后面也是买买课学习下安卓了,学无止境太卷了