关于程序员:通过IIS部署Flask项目

27次阅读

共计 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 多平台公布

正文完
 0