测试平台系列(60) 在Linux机器上部署Pity

2021年09月16日 阅读数:2
这篇文章主要向大家介绍测试平台系列(60) 在Linux机器上部署Pity,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

你们好~我是米洛


这是一个完整的接口测试平台系列教程,但愿能和你们一块儿学习,从0到1打造一个开源平台。



欢迎关注个人公众号测试开发坑货,获取最新文章教程!python

回顾

上一节咱们编写了用例列表相关改造,但因为编辑/新增case的页面还得好好设计一番,而后端接口也没啥大的变化。git

因此今天咱们来聊聊怎么部署。github

部署服务的几种方式

其实咱们若是是在公司使用的话,通常公司运维都会提供部署服务的平台,但可能都是以业务代码使用的语言为主。web

好比我上家公司,业务代码是用的Java,因此在Java服务的部署上,基本上接入公司发布系统便可。不扯远了,有的公司测试会本身维护一台服务器,随便儿你玩,不走发布系统。(固然若是大家公司支持Python服务的发布,建议仍是用公司的发布系统,贵在稳定+可视化)docker

若是咱们是本身维护本身的服务器,该怎么部署我们的系统呢?shell

如下是Pity的部署教程,若是想看其余Python部署方式的,能够先跳过哈。数据库

数据库

数据库这块比较简单,Pity提供了自动建表功能,底层使用的是MySQL,因此你们须要准备一台MySQL服务器,或者就在你的服务器安装好MySQL也是同样。flask

具体的安装过程我这儿就不细说了。后端

安装好之后咱们会拿到用户名,密码,host和port信息,咱们还须要建立数据库:api

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:端口号/

思考一下这样作的弊端:

  1. 服务器会一直打印着请求信息,并无在后台运行

就像如今这样,shell会一直持续保持这样的状态

  1. 程序若是自动宕机,不能自动恢复

好比哪天程序不当心崩溃了,有的异常没有被自动捕获,致使整个Python程序崩溃,从而致使系统没法访问

  1. 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的具体位置。

试验一下

能够看到服务都启动成功了

ps -ef | grep gunicorn能够看到这些个线程

配置文件的方式启动

咱们编写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

这块的资料比较多,你们能够尽情百度,由于博主主要讲的是部署方式,还得靠你们本身去实践呐。

更多部署方式

dockerk8s什么的也是不错的选择,若是你们有兴趣也能够多研究一下,做为测试的咱们,掌握好基本的用法便可。

若是有兴趣也欢迎你们一块儿探讨~~