引言 在JAVA中可以使用Tomcat来部署装载War包,那么线上Python的Flask该怎么部署?常用的方案是,我们可以使用Tornado来部署Flask应用。 本文知识点概述:
- 为什么要选择Tornado
- 什么是Tornado
- 安装Tornado
- Tornado集成Flask
- Jenkins(Pipeline)整合Tornado+flask
1.选择Tornado部署Flask的理由
Tornado是”唯一兼容:windows、macOS、Linux,,且支持Python3+”
1.什么是Tornado
Tornado 是一个python web框架和异步网络库,最初开发于 FriendFeed . 通过使用非阻塞网络I/O,Tornado可以扩展到数万个开放连接,使其非常适合 long polling , WebSockets 以及其他需要与每个用户建立长期连接的应用程序。
2.安装Tornado
# 使用pipenv进行安装
pipenv install tornado
3.Tornado集成flask
本节最关键的内容是,在tornado容器之中装在flask(app),具体实现参见runServe.py文件:
#!/usr/bin/env pytho
# -*- coding: utf-8 -*-
"""
@author:xiecuihao
@file:runFlask.py
@time:2022/04/16
"""
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from main import app
flaskPort=8806
def runFlask():
print("init-flask")
http_server= HTTPServer(WSGIContainer(app))
http_server.listen(flaskPort)
print("start-flask")
IOLoop.instance().start()
if __name__ == '__main__':
runFlask()
4.Jenkins(Pipeline)整合Tornado+Flask
在jenkins中运行flask,主要就是在后台(nohup)运行“(章节2中的)runServe.py文件”。其中,直接执行nohup的话,jenkins会杀掉其进程,所以需要特殊处理【参考 【解决方案】Jenkins杀死nohup进程】。
1.pipeline代码实现
具体实现参见下文代码示例:
node {
stage('拉取') {
// Run the maven build
deleteDir()
cleanWs()
git credentialsId: 'codling-jamesz2011', url: 'https://e.coding.net/cooling37/tmp-web/TMP-back.git'
}
stage('环境初始化') {
sh 'pipenv install'
}
stage('编译') {
withEnv(['JENKINS_NODE_COOKIE=dontkillme']) {
//sh 'pwd'
sh 'nohup pipenv run python -u ${WORKSPACE}/runServe.py > out.log 2>&1 &' // (后台)运行flask(port:8809)
}
}
}
2.验证是否部署成功
编号 | 验证点 | 备注 |
---|---|---|
1 | 【jenkins】项目的状态:success | |
2 | 【访问】能正常访问”ip:8809” | |
3 | 【Linux】监控(losf)flask[8809]端口是否被占用(即被占用->服务运行正常) |
1.jenkins项目状态
2.访问flask服务
3.Linux监控Flask服务的运行状态
若执行”losf -i:8809“命令显示“端口被占用”,则表示“flask服务正常运行”;反之则否。