通过IIS部署Flask项目
本文主要介绍在Windows Server 2012R2上通过IIS部署Flask项目的过程,以及对TTFB延迟大问题的思考。关于如何申请云服务器,注册(子)域名,备案,开放云服务器端口,获取SSL证书等不做介绍,感兴趣可以参考通过二级域名解决1台云服务器搭建多个公众号后端服务的问题。
一.部署环境准备
1.操作系统和IIS版本
操作系统的版本是Windows Server 2012R2,IIS版本为8.5.9600.16384:

2.CGI和ISAPI安装
通过服务器管理器添加角色和功能,主要是安装CGI、ISAPI扩展、ISAPI筛选器:

二.IIS部署Flask项目
这里的Flask项目特指通过Flask框架封装的REST API后端接口的单个文件。
1.安装和启用wfastcgi模块
安装、启用和禁用wfastcgi命令如下所示:
pip install wfastcgi #安装
wfastcgi-enable #启用
wfastcgi-disable #禁用
通过命令wfastcgi-enable启用后输出结果如下:

2.添加和绑定网站
添加和编辑网站如下所示:

添加和编辑网站绑定如下所示:

3.添加模块映射
首先选中要配置的Flask项目,然后点击处理程序映射,添加模块映射:

(1)请求路径:*
(2)模块:FastCgiModule
(3)可执行文件:执行命令wfastcgi-enable的输出
(4)名称:自定义填写
说明:填写完毕后,在弹出的对话框中选择是。
4.请求限制
取消"仅当请求映射至以下内容时才调用处理程序'前面的对号:

5.FastCGI设置
首先选中服务器,然后点击FastCGI设置:

对环境变量PYTHONPATH和WSGI_HANDLER的设置:

其中,PYTHONPATH表示Flask项目的根目录,WSGI_HANDLER表示文件名.app。
6.项目配置
主要是Flask项目根目录下面的web.config文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="XXX" path="*" verb="*" modules="FastCgiModule" scriptProcessor="d:\python37\python.exe|d:\python37\lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="server_fastapi.app" />
<add key="PYTHONPATH" value="YYY" />
<add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
</appSettings>
</configuration>
wfastcgi官方完整的web.config配置文件[4]如下所示:
<configuration>
<system.webServer>
<handlers>
<add name="Python FastCGI"
path="*"
verb="*"
modules="FastCgiModule"
scriptProcessor="C:\Python36\python.exe|C:\Python36\Lib\site-packages\wfastcgi.py"
resourceType="Unspecified"
requireAccess="Script" />
</handlers>
</system.webServer>
<appSettings>
<!-- Required settings -->
<add key="WSGI_HANDLER" value="my_app.wsgi_app()" />
<add key="PYTHONPATH" value="C:\MyApp" />
<!-- Optional settings -->
<add key="WSGI_LOG" value="C:\Logs\my_app.log" />
<add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
<add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="__instrumentation_key__" />
<add key="DJANGO_SETTINGS_MODULE" value="my_app.settings" />
<add key="WSGI_PTVSD_SECRET" value="__secret_code__" />
<add key="WSGI_PTVSD_ADDRESS" value="ipaddress:port" />
</appSettings>
</configuration>
说明:重新启动服务器后就可以使用https+域名访问Flask项目接口了。
三.关于TTFB延迟大的问题
1.首次请求TTFB延迟大
通过IIS部署Flask接口后,发现在首次请求API的时候,TTFB延迟大:

当再次请求API的时候,响应速度就非常的快了:

2.没有得到解决
主要参考了[5]和其它的相关文章,无论是网站高级设置->预加载已启用,还是配置编辑器,还是应用程序池高级设置(队列长度|启动模式|固定时间间隔|闲置超时)等都做了尝试,但是首次请求API的时候,TTFB延迟大的问题仍然存在。现在的权宜之计是在app启动的时候自动发一次测试请求,这样用户在首次使用的时候不会觉得请求时间过长,毕竟TTFB几十秒的延迟实在是太高了。
参考文献:
[1]Windows Server 2012R2服务器IIS安装步骤:https://jingyan.baidu.com/article/93f9803f234eade0e46f559f.html
[2]IIS服务器SSL证书安装部署:https://cloud.tencent.com/document/product/400/35225
[3]将基于Flask框架的Web应用部署到IIS上:https://www.jianshu.com/p/8b6b263144ba
[4]wfastcgi 3.0.0:https://pypi.org/project/wfastcgi/
[5]IIS解决首次加载慢的问题:https://www.cnblogs.com/chasingdreams2017/p/13972644.html
吾爱DotNet

专注于.NET领域的技术分享
人工智能干货推荐

专注于人工智能领域的技术分享
通过IIS部署Flask项目的更多相关文章
- CentOS 下部署Nginx+Gunicorn+Supervisor部署Flask项目
原本之前有一部分东西是在Windows Server,但是由于Gunicorn不支持Windows部署起来颇为麻烦.最近转战CentOS,折腾一段时间,终于简单部署成功.CentOS新手,作为一个总结 ...
- 部署Flask项目到腾讯云服务器CentOS7
部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...
- 通过Nginx部署flask项目
用Flask开发之后,很多人,喜欢用nohup python manage.py & 这样的形式,放到后台运行,其实这样只是个发开模式,很简陋,无法支持并发,进程监控等功能.所以采用nginx ...
- 使用Nginx和uwsgi部署Flask项目
前言 之前用Flask框架开发了一个Python的Web项目,使用Nginx和uWSGI部署起来感觉挺麻烦,过程中还因为对Flask框架的不熟悉,花了好长时间才把应用完全部署起来.下面分享部署成功 ...
- IIS部署.NET项目的有关事项_2015.07.02
今天在做项目中的关于发送邮件的一些功能.在部署服务的时候遇到了一些奇葩的问题,基本上是和IIS有关的问题. 首先,项目是基于.NET Framework4.0 版本的,由于本人用的是一台新配置好的机器 ...
- iis部署php项目
今天跟着学习了如何在IIS下部署php项目,操作很简单,记录一下步骤! 1.启动iis服务器 最后点击确定就完成了 2.打开iis 点击进入即可 3.创建网站 进入添加网站. 添加注意事项如图所示! ...
- IIS部署PHP项目并与mysql完美结合
在上一篇文章中,提到iis与apache共用80端口,但是发现很多问题,例如 IIS网站有支付功能,而微信支付是不支持带有端口的网址的,虽然通过apche代理,在外面看来没有端口,可是内部还是避免不了 ...
- [转]iis部署php项目
阅读目录 1.启动iis服务器 2.打开iis 3.创建网站 4.php设置 ①添加默认文档 ②处理程序映射 1.安装urlrewrite 2.使用URL重写 今天跟着学习了如何在IIS下部署php项 ...
- IIS部署php项目——discuz论坛
1.安装CgiModule模块 首先,IIS要部署php项目,需要CgiModule模块的支持,所以首先我们要确认这个模块是否存在 打开IIS管理器: 我这里是存在的: 如果不存在,可以自行在控制面板 ...
随机推荐
- ms12-020漏洞
一.环境说明 kali linux windows 7 sp1 二.ms12-020漏洞利用 msf5 exploit(windows/browser/ms10_002_aurora) > se ...
- ssh空闲一段时间后自动断网
ssh空闲一段时间后自动断网 用客户端工具,例如securecrt连接linux服务器,有的会出现过一段时间没有任何操作,客户端与服务器就断开了连接. 造成这个的原因,主要是因为客户端与服务器之间存在 ...
- 【小程序自动化Minium】二、元素定位-Page接口中的 get_element() 与 get_elements()
UI自动化中的重要工作就是元素定位了,高效精准的定位方法可以让工作事半功倍. 在过去的一段web自动化经历中,使用的selenium库支持了多种定位方法,我们可以利用这些定位方法来做进一步封装,写出符 ...
- Centos8安装NextCloud记录
今天在网上学习了这个Nextcloud 网盘的搭建,被折磨的快崩溃了.始终是找不到答案,我在网上查了2天的资料 还是没有找到答案,今天这里总结一下安装的下面的总结: 原文出处在官网:CentOS 8 ...
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- 低代码如何构建支持OAuth2.0的后端Web API
OAuth2.0 OAuth 是一个安全协议,用于保护全球范围内大量且不断增长的Web API.它用于连接不同的网站,还支持原生应用和移动应用于云服务之间的连接,同时它也是各个领域标准协议中的安全层. ...
- Taro框架完美使用Axios
前言 众所周知,在H5前端开发中,axioshttp库几乎是必选.大部分人都对它的使用非常熟悉.然而在小程序开发中,axios怎么没法用,需要使用对应平台提供的http接口,如微信小程序的wx.req ...
- Docker非root用户使用
Docker 用户管理 安装Docker后docker相关命令都需要加上sudo才能执行,这里为特定用户添加下权限 Docker群组 不过一般安好docker后该群组已创建 sudo groupadd ...
- 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_202 "表达欲"是人类成长史上的强大"源动力",恩格斯早就直截了当地指出,处在蒙昧时代即低 ...
- 用JavaScript计算平年闰年
var i = prompt("请输入你要查询的年份") if(i % 4 == 0 && i % 100 != 0 || i % 400 == 0){ conso ...