使用 Flask、Gunicorn 与 Shell 脚本构建高效 Web 应用部署流程

在使用 Flask 作为 Web 应用框架,并使用 Gunicorn 作为 WSGI 容器,使用shell 脚本来管理应用的启动、重启和停止。

启动脚本 start.sh

bash 复制代码
#!/bin/bash

# 设置应用名称和端口
APP_NAME="my_flask_app"
PORT=8000

# 设置 Flask 应用的路径
APP_PATH="/path/to/your/flask/app.py"

# 使用 Gunicorn 启动 Flask 应用
gunicorn -w 4 -b 0.0.0.0:$PORT $APP_PATH:app &

echo "Flask app started on port $PORT"

重启脚本 restart.sh

bash 复制代码
#!/bin/bash

# 设置应用名称
APP_NAME="my_flask_app"

# 查找并杀死正在运行的进程
PID=$(pgrep -f "gunicorn -w 4 -b 0.0.0.0:8000 /path/to/your/flask/app.py:app")
if [ -z "$PID" ]
then
  echo "No running $APP_NAME process found"
else
  echo "Killing $APP_NAME process $PID"
  kill $PID
fi

# 等待一段时间确保进程已经停止
sleep 2

# 启动应用
bash /path/to/your/start.sh

停止脚本 stop.sh

bash 复制代码
#!/bin/bash

# 设置应用名称
APP_NAME="my_flask_app"

# 查找并杀死正在运行的进程
PID=$(pgrep -f "gunicorn -w 4 -b 0.0.0.0:8000 /path/to/your/flask/app.py:app")
if [ -z "$PID" ]
then
  echo "No running $APP_NAME process found"
else
  echo "Killing $APP_NAME process $PID"
  kill $PID
fi

请注意,需要将上述脚本中的 /path/to/your/flask/app.py 替换为你的 Flask 应用的实际路径。可以根据需要调整工作进程数 (-w 4) 和端口号 (PORT=8000)。

为了使用这些脚本,你需要给予它们执行权限:

bash 复制代码
chmod +x start.sh restart.sh stop.sh

然后,你可以通过运行以下命令来启动、重启或停止你的 Flask 应用:

bash 复制代码
./start.sh   # 启动应用
./restart.sh # 重启应用
./stop.sh    # 停止应用

Gunicorn 参数说明

Gunicorn是一个用Python编写的WSGI HTTP服务器,用于部署和运行Web应用,如Flask。它提供了简单和灵活的API,让开发者可以快速构建可扩展的应用程序。

以下是Gunicorn的一些常用参数:

  • -c CONFIG, --config=CONFIG:指定配置文件的路径,通过配置文件启动。这在生产环境中非常有用。
  • -b ADDRESS, --bind=ADDRESS:绑定运行的主机,格式为ip加端口。例如,gunicorn -b 127.0.0.1:8000 manager:app会将应用绑定到本地的8000端口。
  • -w INT, --workers=INT:用于指定处理工作进程的数量,为正整数,默认为1。推荐的worker数量通常为当前的CPU个数乘以2再加1。
  • -k STRTING, --worker-class=STRTING:指定要使用的工作模式。默认为sync异步,但也可以下载并指定eventlet和gevent等其他模式。
  • --threads INT:当使用eventlet或gevent模式时,此参数用于指定处理请求的工作线程数,使用指定数量的线程运行每个worker。默认为1。
  • --worker-connections INT:设置最大客户端并发数量,即每个worker可以处理的最大并发连接数。默认情况下这个值为1000。
  • --limit-request-line INT:用于限制HTTP请求头的行数的最大大小,防止过大的请求头导致的问题。此参数的值范围在0到8190之间,默认值为4094。
  • --backlog INT:设置未决连接的最大数量,即等待服务的客户的数量。这是TCP/IP中的backlog队列长度,用于存储尚未被worker处理的连接。默认值为2048,一般不修改。
  • --pid FILE:设置pid文件的文件名,如果不设置将不会创建pid文件。
  • --access-logfile FILE--error-logfile FILE:分别指定要写入的访问日志和错误日志的文件目录。
  • --log-level LEVEL:设置错误日志的输出等级。

这些参数可以根据实际需要进行调整,以满足应用程序的性能和稳定性要求。在使用Gunicorn部署Web应用时,建议查阅其官方文档以获取更详细和最新的参数信息。

关于WSGI

WSGI,全称为Web Server Gateway Interface,即Web服务器网关接口,是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。它的作用是在协议之间进行转化,相当于一座桥梁,桥梁的一端称为服务端或网关端,另一端称为应用端或者框架端。

在客户端和服务器端之间进行沟通时,遵循的是HTTP协议。然而,用Python所编写的很多Web程序并不会直接去处理HTTP请求,因为这太复杂了。因此,WSGI应运而生,使得从HTTP请求到Web程序之间多了一种转换过程------即从HTTP报文转换成WSGI的数据格式。

根据WSGI的规定,Web程序(即WSGI程序)必须是一个可调用的对象,这个可调用对象可以是函数、方法、类或是实现了__call__方法的类实例。

WSGI还将Web组件分成了三类:Web服务器(WSGI Server)、Web中间件(WSGI Middleware)与Web应用程序(WSGI Application)。

Web服务器接收HTTP请求,封装一系列环境变量,按照WSGI接口标准调用注册的WSGI Application,最后将响应返回给客户端。

相关推荐
DK七七6 分钟前
多端校园圈子论坛小程序,多个学校同时代理,校园小程序分展示后台管理源码
开发语言·前端·微信小程序·小程序·php
老赵的博客17 分钟前
QSS 设置bug
前端·bug·音视频
Chikaoya17 分钟前
项目中用户数据获取遇到bug
前端·typescript·vue·bug
南城夏季18 分钟前
蓝领招聘二期笔记
前端·javascript·笔记
Huazie18 分钟前
来花个几分钟,轻松掌握 Hexo Diversity 主题配置内容
前端·javascript·hexo
NoloveisGod44 分钟前
Vue的基础使用
前端·javascript·vue.js
GISer_Jing1 小时前
前端系统设计面试题(二)Javascript\Vue
前端·javascript·vue.js
海上彼尚1 小时前
实现3D热力图
前端·javascript·3d
杨过姑父1 小时前
org.springframework.context.support.ApplicationListenerDetector 详细介绍
java·前端·spring
理想不理想v1 小时前
使用JS实现文件流转换excel?
java·前端·javascript·css·vue.js·spring·面试