• 通过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文件:

    
    <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>
        
        <add key="WSGI_HANDLER" value="my_app.wsgi_app()" />
        <add key="PYTHONPATH" value="C:\MyApp" />
    
        
        <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领域的技术分享

    人工智能干货推荐 左边的图片1 专注于人工智能领域的技术分享

  • 相关阅读:
    Spring Boot整合Postgres实现轻量级全文搜索
    解决过的Java相关问题
    (echarts)饼图封装相关总结及使用
    node 格式化时间的传统做法与高级做法(moment)
    python 之 tar.gz格式压缩、解压
    python3问题解决之pip(一)
    HashData获得华为鲲鹏Validated认证 信创版图持续壮大
    满目星河、转身、皆是背影
    浅谈MySQL 索引
    opencv c++ 二值图像、阈值计算方法、全局阈值、自适应阈值
  • 原文地址:https://www.cnblogs.com/shengshengwang/p/16664188.html