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

   2023-02-09 学习力0
核心提示:本文介绍了如何在Windows上部署Python Flask应用,相关环境如下:操作系统:windows 7Python:3.4WFastCGI: 2.2应用所用到的包版本如下:Flask==0.10.1Flask-SQLAlchemy==2.1itsdangerous==0.24Jinja2==2.8MarkupSafe==0.23pyodbc==3.0.10SQLAlchemy==1.0.9We

本文介绍了如何在Windows上部署Python Flask应用,相关环境如下:

  • 操作系统:windows 7
  • Python:3.4
  • WFastCGI: 2.2

应用所用到的包版本如下:

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.

它能够用于任何支持WSGI的Python web应用或者框架,而且提供了IIS处理请求和进程池的高效方法。

2. 安装

2.1 下载安装包

通过PyPI安装:

pip install wfastcgi

2.2 IIS安装FastCGI和URL重写

IIS需要安装FastCGI和URL重写,这个可以通过Microsoft Web Platform Installer来安装。下载过Microsoft Web Platform Installer点击运行,会出现如下的界面。

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

在搜索栏分别输入cgi和url重写,点击添加按钮:

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

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

:windows10上的IIS 10现在不支持url重写。

3. 启用wfastcgi

一旦wfastcgi和IIS安装完毕,用管理员的身份运行wfastcgi-enable来在IIS上启用wfastcgi配置。这个能配置一个路由处理器的CGI应用。

wfastcgi-enable

要在卸载之前禁用wfastcgi,运行wfastcgi-disable

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项目类似):

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

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 (#换成@)

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • Server Application Error IIS密码不同步 MS D
    最近电脑出了一系列的问题,IIS能启动,但是不能正常访问.提示错误.记得没事养成看系统日志的习惯,先看系统日志有一些红色的叉叉,出现的频率非常高.MS DTC 事务管理器启动失败。LogInit 返回错误 0x2。具体的是什么服务,我就不写了,百度一下非常多. 我想出现这
    03-08
  • Visual Studio-IIS Express 支持局域网访问配置
    转自:http://www.itnose.net/detail/6132793.html注意:本人测试后,发现个问题,不知是我个人的VS问题还是普遍的。就是将配置文件中的新增的节点注释后,会导致页面调试的时候很难加载,一直转圈,出不来。痛苦使用Visual Studio开发Web网页的时候有这样的
    03-08
  • 开发 Web 服务 (SOAP) 并将其发布到 IIS
    开发 Web 服务 (SOAP) 并将其发布到 IIS
    1.首先我想将 SOAP 通信服务从用 Java/Axsis2 实现的遗留系统迁移到 C#我想将 SOAP 通信服务发布到 IIS 并使用 Soap UI 检查客户端的操作使用 .NET Framework 中包含的 ASP.NET asmx 提高开发效率.NETX 不包含 SOAP 通信工具二、开发环境 Visual Studio 2022.
    03-08
  • vs添加到附加进程调试(IIS页面调试) vs附加到进程调试不了
    vs添加到附加进程调试(IIS页面调试) vs附加到
    有时候单元测试不是很方便,通过页面调试接口会更直观,也跟容易发现问题(尤其是在页面传参的时候),这时vs添加到附加进程的调试方式就显得尤为重要了!步骤如下:1、首先是通过IIS建立网站,(前提是要先安装iis,网上教程很多且详尽)这里我已HYS.BT.V3项
    02-12
  • VS项目发布到本地IIS vs部署项目
    VS项目发布到本地IIS vs部署项目
      ①web项目,开发工具Visual Studio,语言C#  ②本地IIS,手机上或其他用户在和本地在同一个局域网(并不绝对是指同一个WIFI)内访问,同时要把防火墙关掉  ③IIS全名Internet Information Services,用来发布网站 二、步骤    1在开始菜单中搜索I
    02-10
  • Windows7下安装IIS出现“出现错误,并非所有的功能被成功更改
    Windows7下安装IIS出现“出现错误,并非所有的功
     1、开始,搜索输入UAC--选择 “更改用户账户控制设置” 2、调到最低 3、打开控制面板--》程序--》打开或关闭windows功能,去掉图里的2个选项,点确定,重启 4、重启后,再把这2个勾选上,注:indernet信息服务很多子项不勾选,需要手动展开到最底层进行
    02-10
  • asp.net mvc 发布到IIS测试,路径的引用问题
    asp.net mvc 发布到IIS测试,路径的引用问题
    之前做的一个ASP.NET MVCI应用程序,今天发布到IIS中进行测试,结果发现之前的很多引用的脚本文件和CSS文件都显示不正常,仔细一看原来是路径引用的问题。IIS里建的虚拟目录,但我在引用文件的时候都是使用的是站点根目录的方式,当时没有考虑到,我是菜鸟大
    02-10
  • IIS中实现http自动转换到https
    IIS中实现http自动转换到https修改以下文件:C:\WINDOWS\Help\iisHelp\common\403-4.htm 为以下内容!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"HTMLHEADTITLE该页必须通过安全通道查看/TITLEMETA HTTP-EQUIV
    02-10
  • IIS短文件名漏洞 IIS主要漏洞
    IIS短文件名漏洞 IIS主要漏洞
    Internet Information Services(IIS,互联网信息服务)是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。危害:攻击者可以利用“~”字符猜解或遍历
    02-10
  • 错误">IIS 发布网站出现<compilation debug="tr
    参考:http://www.mamicode.com/info-detail-1180214.html原因是环境只安装到.net Framework 4.5 的版本(.net版本向下兼容 )解决方案:升级.net Framework修改为compilation debug="true" targetFramework="4.5"
    02-10
点击排行