共计 2734 个字符,预计需要花费 7 分钟才能阅读完成。
本文次要介绍在 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/art…
[2]IIS 服务器 SSL 证书装置部署:https://cloud.tencent.com/doc…
[3]将基于 Flask 框架的 Web 利用部署到 IIS 上:https://www.jianshu.com/p/8b6…
[4]wfastcgi 3.0.0:https://pypi.org/project/wfas…
[5]IIS 解决首次加载慢的问题:https://www.cnblogs.com/chasi…
本文由 mdnice 多平台公布