栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在IIS中部署Flask应用程序?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在IIS中部署Flask应用程序?

高层概述

HTTP-> IIS-> ISAPI-> FastCGI-> WSGI(Flask应用程序)


设定步骤

步骤1:安装所需的二进制文件

  1. 安装Python(2.7或3.x-我使用3.3)
  2. 安装pip-Win(我使用1.6版)
  3. 安装pywin32(我使用版本218)
  4. 使用fcgisetup 1.5安装IIS FastCGI扩展

步骤2:安装可选的二进制程序包

pyodbc
使用此站点的安装程序.exe进行安装。从源代码安装(例如,用于安装到虚拟环境的pip)需要C
/ C ++编译器。

步骤3:取得的副本
wfastcgi.py

选择一个适合您的版本,最好是一个支持Python 3.3的版本(我使用了David
Ebbo的
)。您可能需要这里的“官方”版本。

wfastcgi.py
脚本安装到其中
C:Inetpubwwwroot
,并确保将为您的应用程序提供服务的帐户(默认情况下为“网络服务”)具有对该文件的读取权限。

步骤4:安装
virtualenv
到系统站点包

C:Python33scriptspip.exe install virtualenv

(如果您使用的是Python 3.3,并将所有内容都安装在默认位置)

步骤5:安装Flask应用程序

  • 您可以在系统上的任何位置安装应用程序。您可能需要将其安装在下

    C:Inetpub
    。在本教程中,我们将调用应用程序install的根文件夹
    %APPROOT%
    。(不要在环境变量中加上引号。)

  • 确保将为您的应用程序提供服务的帐户(默认情况下为“网络服务”)具有对所有脚本文件的读取权限。该命令:

    cacls "%APPROOT%" /S:"D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;NS)(A;OICI;FA;;;SY)"

将为您的应用程序目录提供以下权限:

* BUILTIN  Administrators:完全控制此文件夹,子文件夹和文件* 创建者所有者:完全控制子文件夹和文件* NT AUTHORITY  NETWORK SERVICE:对此文件夹,子文件夹和文件的读取权限* NT AUTHORITY  SYSTEM:对此文件夹,子文件夹和文件的完全控制
  • 添加任何必要的本地配置(我的应用程序使用版本控制系统忽略的local.cnf文件),例如数据库URL。

  • 确保您的应用程序中包含一个

    Web.config
    文件
    %APPROOT%
    -有关文件格式的信息,请参见以下部分。

步骤6:为您的应用程序创建一个virtualenv

C:Python33scriptsvirtualenv.exe --system-site-packages "%APPROOT%env"

(选择名称,

env
除非您的应用程序已经使用该目录。)

步骤7:将应用程序所需的软件包安装到virtualenv

cd "%APPROOT%"envscriptsactivatepip install -r Packages

(我的项目将需求规范保存在名为的文件中

Packages
。)

步骤8:为您的应用程序创建网站或虚拟目录

使用

inetmgr.msc
开始 -> 运行… ,然后
inetmgr
在编辑框中输入并按 ENTER )启动
Internet信息服务(IIS)管理器 。确保将您创建的节点(网站或虚拟目录)的本地路径设置为Flask应用程序的根文件夹。
wfastcgi.py
使用本地路径标识Flask应用程序来处理请求。

授予节点 读取 和脚本( 运行脚本 )权限。

步骤9:设定
fcgiext.ini

该文件与

fcgiext.dll
步骤1中安装的目录位于同一目录(默认为
%SYSTEMROOT%system32inetsrv
)。

在配置此文件时,您需要几个参数:

  • {site id} :当从窗口左侧的树中选择“网站”时,您可以在 Internet信息服务(IIS)管理器 的详细信息(右侧)窗格中找到的数字站点ID 。
  • {application name}
    fcgiext.ini
    其中提供FastCGI(ISAPI)处理程序参数的部分的名称。您选择此值-选择代表您的应用程序的内容。
  • {app的路径} :对于虚拟目录,是网站内要处理的虚拟目录的URL路径。
  • {approot} :应用程序根目录的路径。

使用这些参数可以:

  • 将FastCGI请求映射到处理部分:

    • 对于整个网站,请添加到该部分。
      *: **{site id}** = **{application name}**``[Types]
    • 对于虚拟目录,请添加到该部分。
      *:/lm/w3svc/ **{site id}** /root/ **{path to app}** = **{application name}**``[Types]
    • 添加带有此应用程序参数的处理部分()(完整参考):

      [ **{application name}** ]

    • ExePath= **{approot}** envpython.exe

    • Arguments=C:Inetpubwwwrootwfastcgi.py
      (或
      wfastcgi.py
      安装适配器脚本的任何地方)
    • EnvironmentVars=ENV_VAR1:value,ENV_VAR2:value, _etc._
      (有关报价规则,请参见完整参考)。这是设置WSGI_LOG环境变量的好地方-确保为站点提供服务的帐户(默认情况下为“网络服务”)具有文件的写许可权,以及(如果文件不存在)具有将文件添加到的权限。包含的目录。

步骤10:为目标URL配置FastCGI处理

使用 Internet信息服务(IIS)管理器 ,从Flask应用程序要服务的节点(网站或虚拟目录)的上下文(右键单击)菜单中选择“属性…”,并且:

  • 在“主目录”选项卡(网站)或“虚拟目录”选项卡(虚拟目录)中,单击“配置…”按钮。

  • 在“通配符应用程序映射”部分中,使用“插入…”按钮添加通配符映射:

    • 可执行文件是在步骤1中安装的FastCGI扩展DLL。其默认位置是
      %SYSTEMROOT%system32inetsrvfcgiext.dll
    • 确保 未选中 “验证该文件是否存在” 。Flask应用程序执行自己的路由,这些路由不一定与磁盘上的文件有任何关系。

Web.config

这个文件是(在此设置)读取

wfastcgi.py
不是 由IIS。

<?xml version="1.0" encoding="UTF-8"?><configuration>    <applicationSettings>        <add key=“PYTHONPATH” value=“”/>        <add key=“WSGI_HANDLER” value=“module.application”/>    </applicationSettings></configuration>
  • <add>
    元素添加环境变量(
    os.environ
    在Python中)。

  • WSGI_HANDLER
    必须指定-它告诉
    wfastcgi.py
    如何定位WSGI应用程序对象。如果值以“()”结尾,
    wfastcgi.py
    则将调用命名对象,并期望其返回WSGI应用程序对象。

  • PYTHONPATH
    是经过特殊处理的-对的值
    wfastcgi.py
    执行(环境)变量扩展(使用Windows标准
    %VAR%
    表示法)
    PYTHONPATH
    ,然后将结果分割为分号,并将条目追加到
    sys.path
    调用WSGI应用程序之前。因为
    wfastcgi.py
    在导入包含WSGI应用程序对象的模块之前将当前目录更改为指定为Web站点或虚拟目录的本地路径的路径,所以在PYTHONPATH中包含空字符串将导致搜索将Flask应用程序目录作为开始点。您还可以在
    fcgiext.ini
    中设置PYTHonPATH (在这种情况下,
    sys.path
    解释器将其包括在内,然后在
    wfastcgi.py
    )中将其包含在内。

  • WSGI_RESTART_FILE_REGEX
    给出一个Python正则表达式,用于过滤应触发FastCGI处理程序进程重新启动的路径的文件更改通知。设置为在源文件或配置文件更改时触发。我用
    (?i).*.(py|cnf|config)$

  • WSGI_LOG
    可能在这里设置,但我认为最好在设置
    fcgiext.ini


对于IIS 7

从IIS
7开始,FastCGI的某些事情发生了巨大变化。从此版本开始,FastCGI直接通过IIS进行支持,并且未通过扩展程序进行配置(即步骤1.4是不必要的,

fcgiext.ini
并且不控制IIS
7+的FastCGI行为,因此不需要创建/编辑它)。相反,请确保在“ 控制面板” >“程序和功能”>“打开或关闭Windows功能”*下的“
Internet信息服务” 下启用了 CGI
***

Web.config

IIS 7是第一个从

Web.config
文件中读取与FastCGI相关的配置设置的IIS
。您的
Web.config
文件将需要在
<configuration>
元素内
<system.webServer>
包含一个
<handlers>
元素,该元素包含一个元素,该元素包含
<add>
具有以下属性的元素:

  • 路径:
    *
  • 动词:
    *
  • 模块:
    FastCgiModule
  • resourceType:
    Unspecified
  • requireAccess:
    script
  • scriptProcessor: 棘手的一个

scriptProcessor
属性

<add>
元素的此属性必须包含
.exe
您要使用的Python解释器文件的完整路径(
scripts
Python
virtualenv子文件夹中的
|
路径),后跟a
,然后是
wfastcgi.py
您正在使用的文件的完整路径。由于这些路径取决于运行应用程序的计算机的设置,因此您可能需要在部署过程中设置此属性。

IIS服务器范围的设置

  • 在中
    inetmgr
    ,单击树中的服务器节点,然后从中心窗格中选择“ FastCGI设置” 。将列出可执行文件/参数对的列表。
  • 为您
    python.exe
    wfastcgi.py
    您正在使用的完整路径添加一个条目。两者都应以相同的方式显示在
    <handlers>/<add>
    元素中
    Web.config
  • 确保
    PYTHONPATH
    在新的FastCGI应用程序条目中设置环境变量,以包括应用程序代码库的根。有关添加一个空的建议
    PYTHONPATH
    在进入
    <applicationSettings>
    你的
    Web.config
    可能并不适用于这个版本的IIS。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/653598.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号