在使用 Flask 作为 Web 应用框架,并使用 Gunicorn 作为 WSGI 容器,使用shell 脚本来管理应用的启动、重启和停止。
启动脚本 start.sh
:
#!/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
:
#!/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
:
#!/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
)。
为了使用这些脚本,你需要给予它们执行权限:
chmod +x start.sh restart.sh stop.sh
然后,你可以通过运行以下命令来启动、重启或停止你的 Flask 应用:
./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,最后将响应返回给客户端。