使用wfastcgi在IIS上部署Python Flask應用

本文介紹瞭如何在Windows上部署Python Flask應用,相關環境以下:python

  • 操做系統:windows 7
  • Python:3.4
  • WFastCGI: 2.2

應用所用到的包版本以下:git

Flask==0.10.1
Flask-SQLAlchemy==2.1
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
pyodbc==3.0.10
SQLAlchemy==1.0.9
Werkzeug==0.11.2
wheel==0.24.0

1. WFastCGI

wfastcgi.py使用WSGI和FastCGI提供了IIS和Python之間的橋接,相似於Apache HTTP服務器上的mod_python.github

它可以用於任何支持WSGI的Python web應用或者框架,並且提供了IIS處理請求和進程池的高效方法。web

2. 安裝

2.1 下載安裝包

經過PyPI安裝:windows

pip install wfastcgi

2.2 IIS安裝FastCGI和URL重寫

IIS須要安裝FastCGI和URL重寫,這個能夠經過Microsoft Web Platform Installer來安裝。下載過Microsoft Web Platform Installer點擊運行,會出現以下的界面。服務器

在搜索欄分別輸入cgi和url重寫,點擊添加按鈕:app

:windows10上的IIS 10如今不支持url重寫。框架

3. 啓用wfastcgi

一旦wfastcgi和IIS安裝完畢,用管理員的身份運行wfastcgi-enable來在IIS上啓用wfastcgi配置。這個能配置一個路由處理器的CGI應用。網站

wfastcgi-enable

要在卸載以前禁用wfastcgi,運行wfastcgi-disableui

wfastcgi-disable
pip uninstall wfastcgi

注意: 卸載wfastcgi不會自動的取消註冊CGI應用。

若是傳遞給wfastcgi-enable或者wfastcgi-disable的第一個參數是一個有效的文件,整個命令行就用來註冊或取消註冊這個CGI處理器。

例如,下面的命令就是在IIS Express上啓用wfastcgi,並且指定主機配置。

wfastcgi-enable "C:\Program Files (x86)\IIS Express\appcmd.exe"
    /apphostconfig:C:\Path\To\applicationhost.config

你也可使用wfastcgi-disable來禁用相同配置的wfastcgi:

wfastcgi-disable "C:\Program Files (x86)\IIS Express\appcmd.exe"
    /apphostconfig:C:\Path\To\applicationhost.config

4. 使用PTVS建立Python Web項目

PTVS是Visual Studio的一個插件,可以讓VS支持Python開發,下載並安裝後,就可使用它來開發Python項目了。
使用PTVS建立一個Flask項目(Django項目相似):

PTVS會自動根據模板建立一個項目,點擊運行,就會在項目根目錄下建立一個web.config文件。我在下面對文件進行了一些修改說明。

?xml version="1.0"?>
<configuration>
  <system.diagnostics>
    <!--若是不用此節點能夠移除-->
  </system.diagnostics>
  <appSettings>
    <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="TgwlDataCenter.app" /><!--value指定Flask實例,PTVS會自動生成,也能夠本身定義-->
    <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="%ROOTDIR%\env\Scripts\activate_this.py" /><!--value指定激活虛擬路環境用到的內容-->
    <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" /><!--也是虛擬路徑的WSGI_HANDLER,不用修改-->
    <add key="PYTHONPATH" value="%ROOTDIR%" /><!--項目根目錄-->
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <add name="Python FastCGI" path="handler.fcgi" verb="*" modules="FastCgiModule" scriptProcessor="%INTERPRETERPATH%|%WFASTCGIPATH%" resourceType="Unspecified" requireAccess="Script" /><!--scriptProcessor的值就是你在運行wfastcgi-enbale時輸出的值-->
    </handlers>
    <rewrite>
      <rules>
        <rule name="Static Files" stopProcessing="true">
          <match url="^/static/.*" ignoreCase="true" /><!--靜態文件不用CGI處理,直接使用IIS返回靜態文件-->
          <action type="Rewrite" url="^/TgwlDataCenter/static/.*" appendQueryString="true" />
        </rule>
        <rule name="Configure Python" stopProcessing="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
          </conditions>
          <action type="Rewrite" url="handler.fcgi/{R:1}" appendQueryString="true" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

scriptProcessor的值是wfastcgi-enable命令執行時輸出的,不一樣機器值也不同。pathverb的值也能夠進一步自定義來限制request的類型。

name值能夠在子文件夾的web.config文件中使用,來屏蔽handler的做用。好比,在/static子文件夾中添加一個web.config文件,包含<remove name="Python FastCGI"/>來阻止IIS經過Python應用來解析靜態文件。

app setting被轉換爲環境變量,而且可以在Python應用中經過os.getenv來獲取。下面這些變量由wfastcgi使用。

注意:部署時須要將%ROOTDIR%所有替換爲項目根目錄,%INTERPRETERPATH%|%WFASTCGIPATH%替換爲wfastcgi-enable命令執行時輸出,個人是C:\Python34\python.exe|C:\Python34\lib\site-packages\wfastcgi.py

此時,將項目部署到IIS上就能夠了,建立方法同普通的ASP.NET網站建立方法相同。

做者:做者:liulixiang1988#gmail.com (#換成@)

相關文章
相關標籤/搜索