码农之家

专注优质代码开发,为软件行业发展贡献力量

IIS 7/8/9上部署 Python Flask Web

在 IIS(Internet Information Services)上部署 Python Flask Web 应用,通常需要借助 ​​wfastcgi​​ 模块来实现。wfastcgi 是微软提供的一个 FastCGI 处理器,用于在 IIS 上运行 Python Web 应用。以下是详细的部署步骤:

一、前提条件
​​操作系统​​:Windows Server 或 Windows 桌面版(如 Windows 10/11)。
​​已安装 IIS​​:
打开“控制面板” > “程序” > “启用或关闭 Windows 功能”。
勾选“Internet Information Services”,确保以下组件被选中:
Web 管理工具
CGI(非常重要)
​​已安装 Python​​:
推荐使用 Python 3.7 及以上版本。
安装时勾选“Add Python to PATH”。
确认 Python 已正确安装,可以在命令行运行 python --version 或 py --version。
​​已创建 Flask 应用​​:


假设你的 Flask 应用位于 C:\FlaskApp 目录下,结构如下:

C:\FlaskApp
├── app.py
├── web.config
└── (其他必要的文件和文件夹,如 static、templates 等)


二、安装 wfastcgi
​​以管理员身份打开命令提示符(CMD)或 PowerShell​​。
​​安装 wfastcgi 模块​​:

pip install wfastcgi -i https://mirrors.aliyun.com/pypi/simple/

​​启用 wfastcgi​​:

找到python程序包wfastcgi所在目录,我的目录在:D:\Program Files\Python313\Scripts,在当前目录执行 cmd命令,
wfastcgi-enable

执行该命令后,会输出类似如下的信息:

ERROR ( message:新 application 对象缺少必需的属性。在组合的密钥属性“fullPath, arguments”分别设置为“"D:\Program Files\Python313\python.exe", "D:\Program Files\Python313\Lib\site-packages\wfastcgi.py"”时,无法添加类型为“application”的重复集合项
。 )
An error occurred running the command:

['C:\\Windows\\system32\\inetsrv\\appcmd.exe', 'set', 'config', '/section:system.webServer/fastCGI', '/+[fullPath=\'"D:\\Program Files\\Python313\\python.exe"\', arguments=\'"D:\\Program Files\\Python313\\Lib\\site-packages\\wfastcgi.py"\', signalBeforeTerminateSeconds=\'30\']']

Ensure your user has sufficient privileges and try again.

需要先执行,wfastcgi-disable,再执行wfastcgi-enable,执行完成后,正确的输出消息如下:
已经在配置提交路径“MACHINE/WEBROOT/APPHOST”向“MACHINE/WEBROOT/APPHOST”的“system.webServer/fastCgi”节应用了配置更改
""D:\Program Files\Python313\python.exe"|"D:\Program Files\Python313\Lib\site-packages\wfastcgi.py"" can now be used as a FastCGI script processor

记录下 Executable 的路径​​,稍后在配置 web.config 时会用到。当前路径为"D:\Program Files\Python313\python.exe"|"D:\Program Files\Python313\Lib\site-packages\wfastcgi.py",由于路径中有空格,
所以都增加了双引号

三、配置 Flask 应用
使用visual studio 2022创建项目 空白Flask Web项目,你的 Flask 应用主文件为 app.py,部署拷贝到C:\FlaskApp,需要安装Flask,jsonify,内容示例如下:

pip install jsonify -i https://mirrors.aliyun.com/pypi/simple/

# C:\FlaskApp\app.py

from flask import Flask,jsonify
app.config.from_object(__name__) 
app.config["JSON_AS_ASCII"] = False

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Flask on IIS!"

@app.route('/api/GetData', methods=['GET'])
def get_data():
    #return jsonify({"message": "你好!这是一个python接口api"})
    return "你好!这是一个python接口api !"

if __name__ == '__main__':
    app.run()


四、部署网站
​​打开 IIS 管理器​​:
按 Win + R,输入 inetmgr,回车。
​​添加一个新的站点​​:
在左侧“连接”树中,右键点击“站点”,选择“添加网站”。
配置如下:
​​站点名称​​:例如 FlaskApp
​​物理路径​​:C:\FlaskApp
​​绑定​​:
​​类型​​:http 或 https(根据需求)
​​IP 地址​​:全部未分配 或指定 IP
​​端口​​:例如 8080或其他未被占用的端口
​​主机名​​:可留空或填写域名(如果配置了 DNS)
​​配置应用程序池​​:
在左侧“连接”树中,展开“应用程序池”。
找到你刚刚创建的站点所使用的应用程序池(如 FlaskApp),右键选择“高级设置”。
将“.NET CLR 版本”设置为“无托管代码”。
将“托管管道模式”设置为“经典”或“集成”。​​推荐使用“集成”模式​​。
设置文件夹的权限,增加everone,iis User,iUser的权限完全控制


五、创建并配置 web.config
打开IIS,找到创建的站点,点击处理程序映射,点击添加模块映射,请求录入输入* ,模块选择FastCgiModule,可执行文件为
D:\Program Files\Python313\python.exe|"D:\Program Files\Python313\Lib\site-packages\wfastcgi.py",需要有双引号。详细配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="Flask_Web_CGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\Program Files\Python313\python.exe|&quot;D:\Program Files\Python313\Lib\site-packages\wfastcgi.py&quot;" resourceType="Unspecified" />
        </handlers>
    </system.webServer>
<appSettings>
<add key="WSGI_HANDLER" value="app.app" />
<add key="PYTHONPATH" value="D:\WWWRoot\FlaskWebPrj" />
<add key="WSGI_LOG" value="D:\WWWRoot\FlaskWebPrj\LogFiles\wfastcgi.log" />
</appSettings>
</configuration>

重要​​:请根据你的实际环境修改以下路径:
scriptProcessor 和 fullPath、arguments 中的 Python 路径(如 C:\Python39\python.exe)应与你的 Python 安装路径一致。
WSGI_HANDLER 的值应为你的 Flask 应用实例的路径。如果你的 Flask 应用实例在 app.py 中名为 app,则值为 app.app。如果实例名称不同,请相应修改。


示例解释​​:

scriptProcessor:指定 Python 解释器和 wfastcgi.py 的路径,用于处理 FastCGI 请求。
WSGI_HANDLER:告诉 wfastcgi 如何找到你的 Flask 应用实例。


七、测试部署
​​在浏览器中访问你的站点​​:
如果使用 http 绑定且端口为 8080,在浏览器输入 http://你的服务器IP或域名:8080。
应该看到 Flask 应用返回的 "Hello, Flask on IIS!" 页面。
​​如果遇到问题​​:
​​检查 IIS 日志​​:位于 D:\WWWRoot\FlaskWebPrj\LogFiles\wfastcgi.log,查看是否有相关错误信息。
​​启用详细错误信息​​:在 IIS 管理器中,选择站点,双击“错误页”,选择“详细错误”。
​​检查 Python 和 wfastcgi 是否正确安装​​:确保 wfastcgi-enable 成功,并且路径配置正确。
​​权限问题​​:确保 IIS 用户(如 IIS_IUSRS)对 C:\FlaskApp 目录有读取权限。


八、其他建议
虚拟环境​​:推荐在部署时使用 Python 虚拟环境(venv),以隔离依赖包。配置 web.config 时,需要指向虚拟环境中的 Python 解释器和 wfastcgi.py。 示例:

<handlers>
  <add name="PythonHandler" 
       path="*" 
       verb="*" 
       modules="FastCgiModule" 
       scriptProcessor="C:\FlaskApp\venv\Scripts\python.exe|C:\FlaskApp\venv\Lib\site-packages\wfastcgi.py" 
       resourceType="Unspecified" />
</handlers>
<fastCgi>
  <application fullPath="C:\FlaskApp\venv\Scripts\python.exe" 
               arguments="C:\FlaskApp\venv\Lib\site-packages\wfastcgi.py" />
</fastCgi>
<environmentVariables>
  <environmentVariable name="PYTHONPATH" value="C:\FlaskApp" />
  <environmentVariable name="WSGI_HANDLER" value="app.app" />
</environmentVariables>


部署多个 Flask 应用​​:如果需要在同一 IIS 服务器上部署多个 Flask 应用,需要为每个应用配置独立的应用程序池和站点,确保路径和配置不冲突。
​​安全性​​:确保 IIS 和 Flask 应用的安全配置,如使用 HTTPS、限制访问权限、防止常见的 Web 攻击等。

通过以上步骤,你应该能够成功在 IIS 上部署 Python Flask Web 应用。如果在部署过程中遇到具体问题,可以参考错误日志,或提供详细错误信息以进一步诊断。

AI探究员小豆

0 评论数