You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在IIS上部署基于Flask/FastAPI开发的Python Web API

如何在IIS上部署基于Flask/FastAPI开发的Python Web API

嘿,我之前刚好帮团队把Flask和FastAPI的API都部署到过内网的IIS服务器,结合你已经完成的前置准备(Python装到PATH、虚拟环境和依赖都弄好、本地测试正常),给你一步步梳理靠谱的操作流程:

一、先搞定IIS的必要组件安装

首先得确保IIS装了能跑Python的相关组件:

  • 打开Windows的「控制面板」→「程序和功能」→「启用或关闭Windows功能」
  • 找到「Internet Information Services」,展开后勾选以下选项:
    • Web管理工具 → IIS管理控制台(必选
    • World Wide Web服务 → 应用程序开发功能 → CGI(必选,用来支持wfastcgi中间件)
    • 其他基础的Web服务组件(比如静态内容、HTTP错误这些默认选上就行)
  • 点击确定,等待安装完成后重启一下IIS管理器(或者直接重启服务器更稳妥)

二、安装并配置wfastcgi(适配Flask的WSGI模式)

如果是Flask项目,用wfastcgi作为IIS和Python之间的桥梁最直接:

  1. 激活你之前创建的虚拟环境(比如打开命令行,cd到项目根目录,运行.\venv\Scripts\activate
  2. 安装wfastcgi:pip install wfastcgi
  3. 注册wfastcgi到IIS:运行wfastcgi-enable,执行成功后会返回类似C:\path\to\venv\Scripts\python.exe|C:\path\to\venv\Lib\site-packages\wfastcgi.py的路径,把这个路径记下来,后面配置web.config要用

三、配置IIS网站(通用步骤,Flask/FastAPI都适用)

  1. 打开「IIS管理器」,右键左侧的「网站」→「添加网站」
  2. 填写站点信息:
    • 站点名称:随便起(比如MyPythonAPI)
    • 物理路径:选择你的API项目根目录(就是放app.py/main.py的文件夹)
    • 绑定:IP地址选你内网的服务器IP(或者选「全部未分配」让所有IP都能访问),端口选一个没被占用的(比如8080,避免和默认的80端口冲突)
  3. 配置应用程序池:
    • 右键刚才新建的站点→「管理网站」→「高级设置」,找到「应用程序池」,点击后面的「...」
    • 新建一个应用程序池,名称和站点对应(比如MyPythonAPI_Pool),.NET CLR版本选「无托管代码」(因为我们跑的是Python,不需要.NET托管),托管管道模式选「集成」
    • 把站点的应用程序池改成刚新建的这个

四、针对不同框架配置核心文件

情况1:Flask项目(WSGI)

在项目根目录新建一个web.config文件,把下面的内容粘贴进去,注意替换掉对应的路径和参数:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="PythonFastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="这里替换成你刚才记的wfastcgi路径" resourceType="Unspecified" requireAccess="Script" />
    </handlers>
  </system.webServer>
  <appSettings>
    <!-- Flask的入口配置:第一个app是你的文件名(比如app.py就写app),第二个app是Flask实例名 -->
    <add key="WSGI_HANDLER" value="app.app" />
    <!-- 项目根目录路径 -->
    <add key="PYTHONPATH" value="你的项目根目录绝对路径" />
    <!-- 可选:设置环境变量,比如FLASK_ENV -->
    <add key="FLASK_ENV" value="production" />
  </appSettings>
</configuration>

情况2:FastAPI项目(ASGI)

因为FastAPI是ASGI框架,wfastcgi支持不太好,我更推荐用反向代理的方式,操作更简单:

  1. 先确保你的虚拟环境里装了uvicorn:pip install uvicorn
  2. 写一个启动脚本(比如start_api.bat),内容是:
    @echo off
    cd /d "你的项目根目录绝对路径"
    call .\venv\Scripts\activate
    uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2
    
    (这里的main是你的文件名,app是FastAPI实例名,端口8000可以自己改)
  3. 把这个脚本设置成开机自启(可以放到Windows的「启动」文件夹里,或者用任务计划程序设置成后台运行)
  4. 回到IIS管理器,给刚才新建的站点配置反向代理:
    • 先确保装了「URL重写」和「应用程序请求路由(ARR)」组件(如果没装,去IIS的「管理工具」→「Web平台安装程序」里搜索安装)
    • 右键站点→「URL重写」→「添加规则」→「反向代理」
    • 在「输入要转发的目标」里填http://localhost:8000,勾选「启用SSL卸载」(如果不需要HTTPS可以忽略),点击确定
    • 这样IIS就会把所有收到的请求转发到本地运行的uvicorn服务上

五、最后搞定权限和测试

  1. 权限设置:右键你的项目根目录→「属性」→「安全」→「编辑」→「添加」,搜索并添加IIS_IUSRSIUSR用户,给他们「读取和执行」「列出文件夹内容」「读取」的权限
  2. 测试:重启IIS站点(右键站点→「管理网站」→「重启」),然后在同一内网的其他电脑上访问http://服务器内网IP:你设置的端口,比如http://192.168.1.100:8080,测试API的接口是否正常响应
  3. 常见坑:如果遇到500错误,去IIS的「错误页」里开启详细错误信息,或者查看项目根目录下的日志;如果是虚拟环境路径有空格,记得在web.config里给路径加双引号;确保Python的PATH在IIS的环境变量里能读到(可以在应用程序池的「高级设置」里添加环境变量)

备注:内容来源于stack exchange,提问作者Praveen Kumar

火山引擎 最新活动