首页 > 其他分享 >使用gunicorn和supervisor部署flask项目

使用gunicorn和supervisor部署flask项目

时间:2023-05-06 14:07:53浏览次数:30  
标签:hero gunicorn flask home assemble supervisor heroes supervisord

我们自己编写的发布系统基于Python3.6开发,项目存放在自建gitlab上,地址为ssh://gitlab.xxxx/xxx/xxx.git

这里先简单说下gitlab的3中发布方式:

HTTP协议是最常用的方式,因为它简单易用,拉取只需要输入账号密码,但相对较慢且安全性较低。SSH协议则更加安全和方便,拉取代码速度更快,适合在需要较高安全性的场景使用。而Git协议则更适合在内部网络环境中使用,因为它不需要额外的配置和身份验证,但也较不安全。

一:配置gitlab使支持ssh协议拉取flask项目代码

在这里我们使用ssh方式来拉去flask项目代码,这里需要简单配置下:

首先打开git bash

使用gunicorn和supervisor部署flask项目_Python

在上面执行ssh-keygen

使用gunicorn和supervisor部署flask项目_ico_02


回车就行了,然后看到又生成的密钥对,我们看到是在这个目录下面/c/Users/Administrator/.ssh/


打开公钥文件

使用gunicorn和supervisor部署flask项目_git_03

使用gunicorn和supervisor部署flask项目_ico_04

打开gitlab控制台

使用gunicorn和supervisor部署flask项目_ico_05


使用gunicorn和supervisor部署flask项目_Python_06


把我们复制的公钥粘贴上去,然后点add key

使用gunicorn和supervisor部署flask项目_ico_07



二:在服务器上安装基础环境

yum install -y epel-release
yum install -y python3 git supervisor ansible
# enable supervisord
systemctl enable supervisord
 
 
# 安装Python virtualenv
pip3 install virtualenv -i https://pypi.tuna.tsinghua.edu.cn/simple
 
# 运行账号配置
useradd hero
# 注意 一下代码均使用hero用户执行
su - hero
mkdir .ssh
cat > .ssh/id_rsa <<EOF
这里粘入你之前生成的私钥文件id_rsa的内容
EOF
 
 
chmod 600 .ssh/id_rsa
 
# 在 hero 家目录拉代码
git clone ssh://[email protected]:59878/xxx/heroes_assemble.git
 
 
# 安装运行环境
cd heroes_assemble/
virtualenv venv
# 进入python虚拟环境
source venv/bin/activate
# 安装好依赖包
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 创建日志log文件夹,该目录不能由Python创建,需要手动操作。
mkdir /home/hero/log


三:在服务器上配置gunicron和supervisor

Gunicron是一个在Unix上被广泛使用的,高性能的Python WSGI UNIX HTTP Server。它和大多数的web框架兼容,并具有简单,轻量级,高性能等特点。

1,安装gunicron

su - hero
cd heroes_assemble/
virtualenv venv
# 进入python虚拟环境
source venv/bin/activate
# 安装gunicron
pip3 install gunicron

2,编写gunicron配置文件,文件名为Heroes_Assemble_gunicorn.conf

# 并行工作进程数
workers = 4
# 指定每个工作者的线程数
threads = 2
# 监听内网端口5554
bind = '0.0.0.0:5000'
# 设置守护进程,将进程交给supervisor管理
daemon = 'false'
# 工作模式协程
worker_class = 'gevent'
timeout = 600
# 设置最大并发量
worker_connections = 2000
# 设置进程文件目录
pidfile = '/home/hero/heroes_assemble_gunicorn.pid'
# 设置访问日志和错误信息日志路径
accesslog = '/home/hero/log/heroes_assemble_gunicorn_access.log'
errorlog = '/home/hero/log/heroes_assemble_gunicorn_error.log'
access_log_format = '"%({X-Forwarded-For}i)s" %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" '
# 设置日志记录水平
loglevel = 'warning'

3,配置supervisor启动服务文件配置,文件名为Heroes_Assemble_supervisor.ini

[include]
files=/etc/supervisord.conf

[program:HA]
environment=
            HOME=/home/hero,
            ANSIBLE_FORCE_COLOR=True
user=hero
directory=/home/hero/heroes_assemble
command=/home/hero/heroes_assemble/venv/bin/gunicorn -c /home/hero/heroes_assemble/Heroes_Assemble_gunicorn.conf app:app

解释下app:app参数指定了要运行的Python应用程序的名称和变量名。在这里,app指的是Python应用程序的主模块,并且应该有一个名为app的变量,该变量是一个WSGI callable(接受请求并返回响应的函数),如果你的启动文件名不叫app.py而是叫其他的文件名,请自行修改

4,修改supervisor主配置文件使include配置生效

使用gunicorn和supervisor部署flask项目_ico_08

5,将gunicron supervisor启动文件软链到/etc/supervisord.d/目录下

ln -s /home/hero/heroes_assemble/Heroes_Assemble_supervisor.ini /etc/supervisord.d/Heroes_Assemble_supervisor.ini


四,启动supervisord

# 启动
systemctl start supervisord
# 使配置生效
supervisorctl update HA


最终实现:

使用gunicorn和supervisor部署flask项目_ico_09

标签:hero,gunicorn,flask,home,assemble,supervisor,heroes,supervisord
From: https://blog.51cto.com/u_15703497/6249579

相关文章

  • flask_video_stream
    /Users/song/Code/flask_video_stream/main3.pyfromflaskimportFlask,Response,send_fileimportcv2fromPILimportImageimportioapp=Flask(__name__)defgenerate_frames():cap=cv2.VideoCapture(0)#打开第一个摄像头ifnotcap.isOpened():......
  • flask_简单服务器搭建----根据不同的路由实现不同的功能
     当函数中出现很多的条件分支==,可使用字典封装 ......
  • 一Python flask框架
    一:Pythonflask框架前言1.Python面向对象的高级编程语言,以其语法简单、免费开源、免编译扩展性高,同时也可以嵌入到C/C++程序和丰富的第三方库,Python运用到大数据分析、人工智能、web后端等应用场景上。2.Python目前主要流行的web框架:flask、Django、Tornado补充一下,我们......
  • flask--app.add_url_rule()函数 和 类视图详解
    flask--app.add_url_rule()函数和类视图详解app.add_url_rule()函数在flask中,我们知道给一个函数添加url的时候,只需要使用装饰器@app.route('')装饰对应的函数就可以了。为什么这个装饰器就可以给函数视图添加url规则呢?查看app.route()源码发现,这个装饰器在里面调用的另外一......
  • Flask - 基础知识入门解析
    Flask-基础知识入门解析框架比较Djangoweb框架:优点-组件非常全,教科书框架,adminmodel-ORMsession缺点-资源浪费,因为组件多,大,还是互相关联的,随便卸载组件,可能会造成项目的崩溃Flaskweb框架:优点-扩展性强,精简,简单,第三方组件丰富sessionFlask-SessionFlask-Adm......
  • flask blueprint
    定义fromflaskimportBlueprintfrom.importdataApidefregister_url():bp=Blueprint('layers',__name__,url_prefix='/<regex("[0-9a-zA-Z-]+"):system>/<SN>/<source>/<project_id>')bp.add_u......
  • flask 服务器简单搭建
    一个简单的服务器过程大概分为4步1、搭建服务2、监听动作,while,0.1s监听3、处理程序4、返回数据到套接字,生成一个响应对象 搭建简单的服务器  前端访问 ......
  • supervisor 进程管理工具使用详解
    简介supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自......
  • windows supervisord 开机自启
    1.新建任务计划2.建好以后3.ok......
  • unix:///var/run/supervisor/supervisor.sock no such file
    问题unix:///var/run/supervisor/supervisor.socknosuchfile原因使用过程中可能是因为机器宕机,supervisor没有正常关掉,导致/var/run目录下supervisor.sock文件被删除,找不到所以失败报错unix:///var/run/supervisor/supervisor.socknosuchfile解决#创建supervisor.sock......