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

简介: 在Linux机器上部署Pity

大家好~我是米洛


这是一个完整的接口测试平台系列教程,希望能和大家一起学习,从0到1打造一个开源平台。


回顾


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

所以今天我们来聊聊怎么部署。

部署服务的几种方式


其实我们如果是在公司使用的话,一般公司运维都会提供部署服务的平台,但可能都是以业务代码使用的语言为主。

比如我上家公司,业务代码是用的Java,所以在Java服务的部署上,基本上接入公司发布系统即可。不扯远了,有的公司测试会自己维护一台服务器,随便儿你玩,不走发布系统。(当然如果你们公司支持Python服务的发布,建议还是用公司的发布系统,贵在稳定+可视化)

如果我们是自己维护自己的服务器,该怎么部署咱们的系统呢?

以下是Pity的部署教程,如果想看其他Python部署方式的,可以先跳过哈。

数据库

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

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

安装好以后我们会拿到用户名,密码,host和port信息,我们还需要创建数据库:


create database pity;

修改pity关于数据库的配置


在pity/Config.py修改SQLALCHEMY的连接串:

44.jpg

配置成你们本地的数据库连接

这样你的数据就能好好保存在你们的数据库了。

安装依赖


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

45.jpg

如果出现这样的图片,则是启动成功了

打开http://服务器ip:7777:

46.jpg

image


正题

我们今天主要是讲怎么用gunicorn部署Python服务,只不过博主我先用了自己的项目

回到正题,我们先来看一看最简单的一个部署方式

经典部署方式


在解决好所有环境依赖以后,我们通过python3 xxx.py启动服务,这样其他人就能够通过服务器ip+端口访问页面了。

http://服务器ip:端口号/

思考一下这样做的弊端:

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

47.jpg

就像现在这样,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

48.jpg

image

普通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的具体位置。

试验一下

49.jpg

可以看到服务都启动成功了

50.jpg

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。

51.jpg

image

可以看到服务起来了,这边我开了8个workder

其实这个时候gunicorn已经具备了自动拉起功能,但gunicorn也可能被kill掉,所以我们更稳妥点儿的话,需要supervisor

supervisor

这块的资料比较多,大家可以尽情百度,因为博主主要讲的是部署方式,还得靠大家自己去实践呐。

更多部署方式


dockerk8s什么的也是不错的选择,如果大家有兴趣也可以多研究一下,作为测试的我们,掌握好基本的用法即可。

如果有兴趣也欢迎大家一起探讨~~



相关文章
|
14天前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
21天前
|
安全 Linux 虚拟化
|
8天前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
15天前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
18天前
|
监控 安全 测试技术
构建高效的精准测试平台:设计与实现指南
在软件开发过程中,精准测试是确保产品质量和性能的关键环节。一个精准的测试平台能够自动化测试流程,提高测试效率,缩短测试周期,并提供准确的测试结果。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
82 1
|
25天前
|
缓存 自然语言处理 并行计算
基于NVIDIA A30 加速卡推理部署通义千问-72B-Chat测试过程
本文介绍了基于阿里云通义千问72B大模型(Qwen-72B-Chat)的性能基准测试,包括测试环境准备、模型部署、API测试等内容。测试环境配置为32核128G内存的ECS云主机,配备8块NVIDIA A30 GPU加速卡。软件环境包括Ubuntu 22.04、CUDA 12.4.0、PyTorch 2.4.0等。详细介绍了模型下载、部署命令及常见问题解决方法,并展示了API测试结果和性能分析。
920 1
|
1月前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
53 2
|
1月前
|
NoSQL Ubuntu Linux
Linux平台安装MongoDB
10月更文挑战第11天
43 5
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
92 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
18天前
|
监控 安全 测试技术
构建高效精准测试平台:设计与实现全攻略
在软件开发过程中,精准测试是确保产品质量的关键环节。一个高效、精准的测试平台能够自动化测试流程,提高测试覆盖率,缩短测试周期。本文将分享如何设计和实现一个精准测试平台,从需求分析到技术选型,再到具体的实现步骤。
43 0
下一篇
无影云桌面