测试平台系列(60) 在Linux机器上部署Pity
大家好~我是
米洛!
这是一个完整的接口测试平台系列教程,希望能和大家一起学习,从0到1打造一个开源平台。
欢迎关注我的公众号测试开发坑货,获取最新文章教程!
回顾
上一节我们编写了
用例列表相关改造,但由于编辑/新增case的页面还得好好设计一番,而
后端接口也没啥大的变化。
所以今天我们来聊聊怎么部署。
部署服务的几种方式
其实我们如果是在
公司使用的话,一般公司运维都会提供部署服务的平台,但可能都是以业务代码使用的语言为主。
比如我上家公司,
业务代码是用的Java,所以在Java服务的部署上,基本上接入公司发布系统即可。不扯远了,有的公司测试会自己维护一台服务器,随便儿你玩,不走发布系统。(当然如果你们公司支持Python服务的发布,建议还是用公司的发布系统,贵在稳定+可视化)
如果我们是自己维护自己的服务器,该怎么
部署咱们的系统呢?
以下是Pity的
部署教程,如果想看其他Python部署方式的,可以先跳过哈。
数据库
数据库这块比较简单,Pity提供了自动建表功能,底层使用的是
MySQL,所以大家需要准备一台MySQL服务器,或者就在你的服务器安装好MySQL也是一样。
具体的安装过程我这儿就不细说了。
安装好以后我们会拿到用户名,密码,host和port信息,我们还需要创建数据库:
create database pity;
修改pity关于数据库的配置
在pity/Config.py修改SQLALCHEMY的连接串:
这样你的数据就能好好保存在你们的
数据库了。
安装依赖
pip3 install -r requirements.txt
也可以使用豆瓣源:
pip3 install -r requirements.txt -i https://pypi.douban.com/simple
如果过程中安装失败了,建议
升级一下pip。
测试服务是否启动
如果启动服务的时候报没有logs文件夹,可以在pity根目录新建文件夹:
logs,因为github会自动忽略掉空文件夹,所以可能需要大家自己创建。
在pity目录下启动服务:
python3 main.py
打开
http://服务器ip:7777:
正题
我们今天主要是讲怎么用gunicorn部署Python服务,只不过博主我先用了自己的项目
探路。
回到正题,我们先来看一看最简单的一个
部署方式。
经典部署方式
在解决好所有环境依赖以后,我们通过python3 xxx.py启动服务,这样其他人就能够通过服务器ip+端口访问页面了。
http://服务器ip:端口号/
思考一下这样做的弊端:
- 服务器会一直打印着请求信息,并没有在后台运行
- 程序如果自动宕机,不能自动恢复
比如哪天程序不小心崩溃了,有的异常没有被
自动捕获,导致整个Python程序崩溃,从而导致
系统无法访问。
- Python GIL性能太差
改进一下
针对经典部署,其实也有一些处理方式,比如第一条,我们可以用
nohup帮我们解决第一个困难。
nohup python xxx.py &
然后可以看到
当前目录生成了nohup.out的文件,而你的控制台窗口也没有再
停留在服务输出窗口。
但还有其他困难,我们怎么解决呢?别慌!我们还有gunicorn+supervisor
supervisor
supervisor是一个托管容器,你的应用会被托管到里面,而他会提供一个
守护线程,专门监控你的应用。当你的应用不小心崩了,他会自动把应用拉起,
非常好用!
遇到非代码错误,比如有人误操作kill掉你的程序,它会自动帮忙拉起,毫无波澜。
gunicorn
gunicorn基于gevent,差不多算是个提升app性能的库,它可以帮助我们的web应用提升性能,并且他也有自动重启的功能,还可以开启根据服务器配置开启不同数量的
worker。
怎么使用呢
安装Gunicorn
pip3 install gunicorn
以我们的app为例,我们的app名字叫pity,文件是main.py,所以取到app的方法就是: main:pity
普通gunicorn模式
安装好以后gunicorn命令就能够使用了,输入命令:
# FastApi应用 gunicorn -k uvicorn.workers.UvicornWorker main:pity -b 0.0.0.0:7777 -w 4 &
解释一下参数:
-k:
这个是指定worker为Uvicorn的Worker,为fastapi专属,其他比如flask应用不需要带上这个参数。
-w
workers数量,也就是起的线程数量,一般根据自己
CPU内核来。比如我的服务器是4核的,那我就设定为4。
main:pity就是上面说的app的具体位置。
试验一下
配置文件的方式启动
我们编写gunicorn.py文件(配置文件):
import os import gevent.monkey gevent.monkey.patch_all() import multiprocessing # debug = True loglevel = 'debug' bind = "0.0.0.0:7777" pidfile = "logs/gunicorn.pid" accesslog = "logs/access.log" errorlog = "logs/debug.log" daemon = True timeout = 60 # 启动的进程数 # workers = multiprocessing.cpu_count() workers = 8 worker_class = 'gevent' x_forwarded_for_header = 'X-FORWARDED-FOR'
配置好bind地址,日志信息,workders数量,
multiprocessing.cpu_count()会返回CPU数量。
记得安装gevent,用pip。
可以看到服务起来了,这边我开了8个
workder。
其实这个时候gunicorn已经具备了
自动拉起功能,但gunicorn也可能被kill掉,所以我们更稳妥点儿的话,需要
supervisor。
supervisor
这块的资料比较多,大家可以尽情百度,因为博主主要讲的是部署方式,还得靠大家自己去
实践呐。
更多部署方式
docker,
k8s什么的也是不错的选择,如果大家有兴趣也可以多研究一下,作为
测试的我们,掌握好基本的用法即可。
如果有兴趣也欢迎大家一起
探讨~~
- Linux系列-Red Hat5平台下部署Nessus漏洞检测系统
- Caffe学习系列(12):训练和测试自己的图片--linux平台
- 分离解析域名服务器部署文档(for linux平台)
- 测试人员如何搭建自动打包部署平台?(具体详细步骤及下载地址)
- Linux系列-Red Hat5平台下的LAMP网站服务搭建(一)
- Linux系列-Red Hat5平台下的Iptables防火墙应用(二)Iptables中必须掌握的两个技术S
- Linux系列-Red Hat5平台下的Samba服务搭建(RPM安装)
- 编写Django项目并使用uwsgi和nginx部署在Linux平台
- 测试平台系列(62) 让前置条件有自己的顺序
- 测试平台系列(65) 异步方法装饰器
- (二)Java游戏部署在Linux平台仿真器上(Motorola)
- 使用Linux可视化远程工具Remmina来实现远程桌面共享(RDPP快速平台部署计划)
- 迁移 linux系统,实现测试环境的快速部署
- kubernate系列一:创建label(指定若干机器进行部署)
- 阿里云上部署webservice其他机器调用提示“测试窗体只能用于来自本地计算机的请求”问题
- [转载] 新兵训练营系列课程——平台服务部署及Web框架
- linux下快速部署LNMP平台
- Linux部署实时应用监控平台CAT
- Maemo Linux手机平台系列分析:(15) Maemo应用开发
- Linux平台部署varnish 高性能缓存服务器