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

在使用 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" ]
thenecho "No running $APP_NAME process found"
elseecho "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" ]
thenecho "No running $APP_NAME process found"
elseecho "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,最后将响应返回给客户端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/5844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PCL】教程 supervoxel_clustering执行超体聚类并可视化点云数据及其聚类结果

[done, 417.125 ms : 307200 points] Available dimensions: x y z rgba 源点云milk_cartoon_all_small_clorox.pcd > Loading point cloud... > Extracting supervoxels! Found 423 supervoxels > Getting supervoxel adjacency 这段代码主要是使用PCL(Po…

【Linux】创建/扩容swap交换空间swap优化

一、当前交换空间大小 目前交换空间大小为2G 二、创建swap交换空间 #创建大小为2G的交换空间 [roothadoop01 data1]# dd if/dev/zero of/data1/swapfile bs1M count2048 #将文件设置为交换空间 [roothadoop01 data1]# mkswap /data1/swapfile #启用交换空间 [roothadoop01 da…

【Python】pandas.cut()函数的用法

pandas.cut() 函数是一个非常有用的工具,用于将数值型数据按照指定的分箱或区间进行分割,从而将连续的数值变量转换为离散的类别变量。这在数据分析和机器学习的特征工程中尤其有用,因为它可以帮助揭示不同区间内的数据分布特征,或…

【Qt问题】Qt Creator 如何链接第三方库

往期回顾 【QT问题】 Qt信号函数如果重名,调用怎么处理-CSDN博客 【Qt问题】Qt中文乱码问题解决方案(详细汇总)-CSDN博客 【Qt问题】Qt常用快捷键汇总-CSDN博客 【Qt问题】Qt Creator 如何链接第三方库 一、为什么会使用第三方库 在编写代码…

Java Web 开发 - 掌握拦截器和监听器

目录 深入了解Java Web的拦截器和监听器 拦截器(Interceptor) 拦截器的使用场景 拦截器实例 思维导图 ​编辑 监听器(Listener) 监听器的使用场景 监听器类型 监听器实例 思维导图​编辑 总结 深入了解Java Web的拦截器…

在UI界面中播放视频_unity基础开发教程

在UI界面中播放视频_unity基础开发教程 前言操作步骤结语 前言 之前我写过一篇在场景中播放视频的文章,但是在开发中有时候也会在UI的界面中播放视频,这期我们做一下在UI的界面中播放视频。 操作步骤 首先在场景中创建一个Raw Image,UI->…

DAO是什么?有什么用途?

DAO(Decentralized Autonomous Organization,去中心化自治组织)是一种基于区块链技术的组织形式,它没有中央管理层,而是通过智能合约和区块链上的代码来运作。DAO 的决策过程是透明的,通常由组织的成员通过…

java学习笔记11

20. 字符串类 字符串是指一连串的字符,它是由许多单个字符连接而成。字符串可以包含任意字符,这些字符必须包含在一对双引号""之内,例如:“abc”.java中封装了3个字符串类,分别是String类、StringBuffer类、StringBuilder类,都在java.lang包中。20.1 String类的…

孤独的城市公路(增加开始结束页面)

致敬 裴总 缺点 没有一个车没有背景音乐后期都会添加 为什么裴总良心 裴总真良心 还有音乐 还是3D 还有开始按钮 还能game 还有结尾 还有结尾提示 import arcadeSCREEN_WIDTH 700 SCREEN_HEIGHT 700 SCREEN_TITLE "孤独的城市公路" MOVEMENT_SPEED 5 …

go http框架下的静态资源代理实现(压缩,缓存验证自定义)

之前在这一篇文章里说了我的第一版静态资源代理,后面我又完善了一下: 上一种方案的问题: 首页未加入自定义代理中依赖了gin框架的file()方法反复访问本地文件,访问文件系统是很消耗性能的 所以本次我做了改进,思路是…

0418EmpTomCat项目 初次使用ajax实现局部动态离职

0418EmpTomCat项目包-CSDN博客 数据库字段: 员工部门表 分页查询; 多条件查询; 添加新员工; ajax点击离职操作效果:

【CTF Web】BUUCTF BUU CODE REVIEW 1 Writeup(代码审计+PHP弱类型漏洞+MD5的0e绕过+反序列化)

BUU CODE REVIEW 1 1 https://github.com/glzjin/buusec_2019_code_review_1 解法 <?php /*** Created by PhpStorm.* User: jinzhao* Date: 2019/10/6* Time: 8:04 PM*/highlight_file(__FILE__);class BUU {public $correct "";public $input ""…

Fabric,一个简洁远程系统管理Python库

Fabric,一个简洁远程系统管理Python库&#xff01; 什么是 Fabric 库&#xff1f; Fabric 是一个 Python 库,用于简化远程系统管理和部署任务的执行.它提供了一种简洁的方式来定义并运行SSH 命令,使得管理远程服务器变得更加高效和便捷. 安装与使用 # 通过 pip 来安装 Fabri…

动态数据结构中的表扩张性:摊还分析、伪代码与C语言实现

动态数据结构中的表扩张性&#xff1a;摊还分析、伪代码与C语言实现 引言表扩张性的概念摊还分析在表扩张性中的应用伪代码示例&#xff1a;TABLE-INSERT操作C语言实现结论 引言 在处理数据结构时&#xff0c;尤其是表&#xff08;或数组&#xff09;&#xff0c;我们经常面临…

Idea报错:无法访问org.springframework.boot.SpringApplication

在开发项目时&#xff0c;常常会遇到这种问题&#xff0c;报错信息如下图所示 版本号与jdk版本号存在对应关系&#xff0c;61.0对应jdk17&#xff0c;52.0对应jdk8 所以是某个依赖的版本太高&#xff0c;降低该依赖的版本即可 具体步骤&#xff1a; ①修改pom.xml中spring b…

【linuxC语言】exec函数族

文章目录 前言一、exec函数族二、示例代码2.1 代码12.2 代码22.3 代码3 总结 前言 在Linux环境下&#xff0c;C语言提供了一组强大的函数族&#xff0c;即exec函数族&#xff0c;用于执行其他程序。这些函数允许程序在运行时加载并执行不同的程序&#xff0c;从而实现了程序之…

使用docker部署nacos2.2.3单节点

docker部署nacos2.2.3 首先nacos要配合mysql进行初始化数据&#xff0c;部署一个mysql5.7版本的。 systemctl stop firewalld && setenforce 0 关闭防火墙和selinuxdocker pull mysql:5.7 && docker pull nacos/nacos-server:v2.2.3 拉取镜像docker …

redis中的集群模式

主从复制、主从同步(解决高并发读的问题) 主从同步原理&#xff1a; 1.全量同步 slave&#xff08;从节点&#xff09;每次请求数据同步会带两个参数&#xff1a;replid和offset。 replid&#xff1a;第一次请求同步时&#xff0c;replid和master的replid不一样&#xff0c;这…

Git Commit命令撤销操作

Git Commit命令撤销操作 在某些时候&#xff0c;通过git commit命令讲代码提交到了暂存区&#xff0c;但还未推送至远程仓库需要进行撤销&#xff0c;可以使用git reset命令来完成 文章目录 Git Commit命令撤销操作1. git commit 撤销操作2. 撤销多次想回到某一次撤销 1. git c…

探索AI工具的巅峰:个人体验与深度剖析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…