zoukankan      html  css  js  c++  java
  • IIS部署FLASK网站

    在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助。

    涉及工具和平台

    • Windows 7 x64

    • Python 3.4+

    • Flask

    完成 Hello Flask 网站

    这是一个最简单的 Flask 网站:

    # hello.py
    from flask import Flask
    app=Flask(__name__)
    
    @app.route('/',methods=['GET'])
    def index():
        return "Hello Flask!"
    
    if __name__=='__main__':
        app.run(debug=True)

    运行python hello.py后没有错误说明你的 Python 环境一切正常,可以继续后面的步骤。

    安装 IIS,启用 CGI

    在控制面板中找到打开或者关闭 Windows 功能,安装 IIS 和 CGI,如下图。

    iis+cgi

    安装 URL 重写组件

    IIS 需要安装 URL 重写组件,这个可以通过Microsoft Web Platform Installer来安装。下载Microsoft Web Platform Installer后运行,搜索url,分别安装。

    wpi-url

    注:据说 Windows10 上的 IIS 10 现在不支持 url 重写?待验证

    安装 wfastcgi

    通过pip就可以安装:

    pip install wfastcgi

    启用 wfastcgi

    剩下的事情就只有一些配置了。首先以管理员身份运行wfastcgi-enable来在IIS上启用wfastcgi,这个命令位于c:python_dirscripts,也就是你需要确保此目录在系统的PATH里,或者你需要cd到这个目录后再执行。

    # cd to python_dirscripts if it is not in PATH
    wfastcgi-enable

    记住命令执行成功后返回的信息:

    C:Python34Scripts> wfastcgi-enable
    Applied configuration changes to section "system.webServer/fastCgi" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
    "C:Python34python.exe|C:Python34libsite-packageswfastcgi.py" can now be used as a FastCGI script processor

    "C:Python34python.exe|C:Python34libsite-packageswfastcgi.py" 在下文的配置文件中需要使用。

    Tips: 使用命令 wfastcgi-disable 可以将其移除。

    创建 web.config 文件

    下面是一个web.config文件的例子,你只需要修改对应部分就可以使用。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <handlers>
          <!-- scriptProcessor 的值来自命令行工具 wfastcgi-enable -->
          <add name="FlaskFastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:Python34python.exe|C:Python34libsite-packageswfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
        <security> 
            <!-- URL 重写中的特殊字符,比如加号+等等 -->
            <requestFiltering allowDoubleEscaping="true"></requestFiltering> 
        </security> 
      </system.webServer>
    
      <appSettings>
        <!-- Required settings -->
        <!-- 在这里指定Falsk app在模块中的具体位置 -->
        <add key="WSGI_HANDLER" value="hello.app" />
        <add key="PYTHONPATH" value="~/" />
    
        <!-- Optional settings -->
        <!-- 需要先创建日志目录,否则报错 -->
        <add key="WSGI_LOG" value="C:logsoboeqa_web.log" />
        <add key="WSGI_RESTART_FILE_REGEX" value="" />
      </appSettings>
    </configuration>

    配置 IIS 目录及权限

    假设你的 Flask 程序将部署在 C:websitehello 下面,那么你的目录结构大致如此。

    C:WEBSITE
    └───hello
            hello.py
            web.config

    现在你需要让IIS用户拥有访问和执行你的网站脚本的权限,进入 C:website 目录,执行下面两条命令:

    cd C:website
    icacls . /grant "NT AUTHORITYIUSR:(OI)(CI)(RX)"
    icacls . /grant "BuiltinIIS_IUSRS:(OI)(CI)(RX)"

    创建并访问你的网站

    现在你离成功只差一步之遥,打开 IIS 管理面板,新建一个网站。

    iis-add-web-site

    你只需要填上网站名称,物理地址和相应的端口号,点击确认。

    iis-website-config

    打开浏览器,就可以访问你配置好的网站。如果有错误,可以去检查 web.config 中配置的日志文件。

    iis-web-site-ok

    简单总结

    写完之后发现其实要完成的步骤并不是特别复杂,但是从摸索到实践的过程确实不易。本文仅讨论了部署的主要步骤,其实真正的生产环境你要考虑的问题可能更多,比如使用virtualenv 对网站进行隔离,安全问题,静态文件解析等等。

    最后的惊喜

    据说部署Python 网站到 IIS 还有更简单的办法,那就是安装宇宙最强的IDE - Visual Studio 2015 (VS2017 暂不支持 Python 开发),个人开发者可以免授权使用社区版。在 VS 中你可以使用 PTVS 来快捷开发并部署Python 程序,真正让你一键无忧。

    ptvs-web

    PTVS 支持了常见的 Python Web 框架,比如 Flask,Django,Bottle,Jade 等等,调试的时候只需要按 F5,部署右键选择 publish,跟着向导一步两步你就可以完成魔鬼的步伐。

    link: https://segmentfault.com/a/1190000008909201

    IIS调用COM组件时的权限问题

    解决方案:

    在DCOM组件服务中给MICROSOFT.EXCEL组件 赋予ASP.NET的操作权限,具体步骤:
     (1)打开开始菜单的运行对话框,输入dcomcnfg命令,确定,这时会弹出组件服务窗口
     (2)展开计算机-〉我的电脑-〉DCOM配置,找到Microsoft Excel应用程序节点
     (3)单击右键-〉属性,选中“安全”选项,在下面三个项目都选择“自定义”,并单击编辑按钮
     (4)在启动权限对话框中点击添加按钮,添加相应的用户(注意:如果是WIN2000,XP,则添加“机器名/ASPNET”用户,我这里是以WIN2003为例,
     WIN2003是添加“NETWORK Service”用户),并赋予最大权限
     (5) 选择”身份标识”,再选择”交互式用户”即可
    上文中是设置EXCEL组件,你需要在你的dcomcnfg中找到你使用的com组件

    原文:https://blog.csdn.net/BleuRever/article/details/50783133

  • 相关阅读:
    matlab中pcolorh函数作用
    Matlab中^2和.^2的区别
    Python实战项目网络爬虫 之 爬取小说吧小说正文
    如何查看mysql数据库的端口
    template模板找不到
    templates模板使用变量,显示红色报错
    多线程案例1:奇偶交替输出
    idea配置classpath,后面文件找不到,显示红色
    idea创建各种类型项目
    tomcat修改端口
  • 原文地址:https://www.cnblogs.com/wfwup/p/10728557.html
Copyright © 2011-2022 走看看