通過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安裝步驟://jingyan.baidu.com/article/93f9803f234eade0e46f559f.html
[2]IIS伺服器SSL證書安裝部署://cloud.tencent.com/document/product/400/35225
[3]將基於Flask框架的Web應用部署到IIS上://www.jianshu.com/p/8b6b263144ba
[4]wfastcgi 3.0.0://pypi.org/project/wfastcgi/
[5]IIS解決首次載入慢的問題://www.cnblogs.com/chasingdreams2017/p/13972644.html
吾愛DotNet
專註於.NET領域的技術分享
人工智慧乾貨推薦
專註於人工智慧領域的技術分享