0

0

在IIS 10上部署FastAPI应用:完整教程

碧海醫心

碧海醫心

发布时间:2025-09-30 12:13:03

|

298人浏览过

|

来源于php中文网

原创

在iis 10上部署fastapi应用:完整教程

本教程详细指导如何在Windows Server 2019上的IIS 10环境中部署Python FastAPI应用程序。我们将涵盖从Python和HTTP Platform Handler的安装、FastAPI项目的构建、IIS应用程序池和网站配置、到关键的文件权限设置,确保您的FastAPI应用通过Uvicorn作为ASGI服务器在IIS上稳定运行,并提供故障排除建议。

1. 环境准备与先决条件

在开始部署FastAPI应用之前,需要确保服务器环境已正确配置。

1.1 安装Python

推荐安装Python 3.x 64位版本,并选择“为所有用户安装”以确保系统级别的可用性。

  • 访问Python官方网站下载最新稳定版Python 3.x 64位安装程序。
  • 运行安装程序,勾选“Add Python to PATH”选项,并选择“Install Now”。

1.2 安装Microsoft HTTP Platform Handler

HTTP Platform Handler是IIS用于托管非.NET应用程序(如Python、Node.js等)的关键组件。

  • 访问IIS.NET下载页面下载Microsoft HTTP Platform Handler 1.2 64位版本。
  • 运行安装程序完成安装。

1.3 安装Python库

打开命令提示符(以管理员身份运行),安装FastAPI和Uvicorn。Uvicorn是一个ASGI服务器,用于运行FastAPI应用。

pip install fastapi uvicorn

2. FastAPI应用程序构建

2.1 创建项目目录

在服务器上创建一个用于存放FastAPI应用代码的目录,例如 C:\python-app。同时,为日志文件创建一个子目录 C:\python-app\logs。

2.2 编写 main.py

在 C:\python-app 目录下创建 main.py 文件,并添加以下FastAPI示例代码。请注意,为了与IIS中的应用程序别名匹配,示例中的路由路径包含了 /python。

from fastapi import FastAPI

app = FastAPI()

@app.get("/python") # 路由路径应与IIS中设置的应用程序别名一致
async def get_root():
    return {"message": "Hello World from FastAPI on IIS!"}

3. IIS配置

IIS的配置是部署FastAPI应用的核心环节,主要包括 web.config 文件、应用程序池和IIS应用程序设置。

3.1 创建 web.config 文件

在 C:\python-app 目录下创建 web.config 文件。这个文件告诉IIS如何处理传入的请求,并将它们转发给Uvicorn。



  
    
      
      
    
    
      
        
        
        
        
      
    
  

关键配置说明:

STORYD
STORYD

帮你写出让领导满意的精美文稿

下载
  • processPath: 必须指向Uvicorn的可执行文件路径。根据您的Python安装路径,这通常位于 C:\Program Files\Python312\Scripts\uvicorn.exe(请根据实际Python版本调整路径)。
  • arguments: 这是传递给Uvicorn的参数。
    • main:app: 指示Uvicorn加载 main.py 文件中的 app 实例。
    • --host 0.0.0.0: 监听所有网络接口。
    • --port %HTTP_PLATFORM_PORT%: Uvicorn将监听IIS通过 HTTP_PLATFORM_PORT 环境变量分配的端口
    • --log-level info: 设置日志级别,便于调试。部署稳定后可改为 error。
  • stdoutLogEnabled="true" 和 stdoutLogFile=".\logs\uvicorn": 启用标准输出日志,并将其写入 C:\python-app\logs\uvicorn.log 文件。这是诊断启动问题的重要手段。
  • environmentVariable name="PYTHONPATH" value="C:\python-app\": 将FastAPI项目的根目录添加到Python的搜索路径中,确保Uvicorn能够找到 main.py。

3.2 创建IIS应用程序池

打开IIS管理器,创建一个新的应用程序池:

  1. 在左侧导航栏中右键点击“应用程序池”,选择“添加应用程序池”。
  2. 输入名称,例如 PythonAppPool。
  3. .NET CLR 版本 选择“无托管代码”。
  4. 托管管道模式 选择“集成”。
  5. 点击“确定”。
  6. 选中新创建的应用程序池,点击右侧“高级设置”,确保“标识”设置为 ApplicationPoolIdentity(这是默认值,推荐使用)。

3.3 在IIS中添加应用程序

将FastAPI应用添加到IIS网站中:

  1. 在左侧导航栏中展开“站点” -> “Default Web Site”(或您希望部署的任何网站)。
  2. 右键点击该网站,选择“添加应用程序”。
  3. 别名 (Alias): 输入 python。这将是您访问应用的URL路径(例如 http://localhost/python)。
  4. 应用程序池: 选择您刚刚创建的 PythonAppPool。
  5. 物理路径: 浏览到您的FastAPI项目目录,即 C:\python-app。
  6. 点击“确定”。

4. 文件系统权限设置

不正确的权限是导致HTTP 500.19 错误(无法读取配置文件)或应用程序无法启动的常见原因。IIS应用程序池标识(通常是 IIS APPPOOL\PythonAppPool 或 NT AUTHORITY\IUSR 和 Builtin\IIS_IUSRS)需要对Python安装目录和FastAPI应用目录具有读取和执行权限,对日志目录具有写入权限。

打开命令提示符(以管理员身份运行),执行以下命令来授予必要的权限:

# 授予IIS匿名用户和IIS_IUSRS组对Python安装目录的读取和执行权限
icacls "C:\Program Files\Python312" /grant "NT AUTHORITY\IUSR:(OI)(CI)(RX)"
icacls "C:\Program Files\Python312" /grant "Builtin\IIS_IUSRS:(OI)(CI)(RX)"

# 授予IIS匿名用户和IIS_IUSRS组对FastAPI应用目录的读取和执行权限
icacls "C:\python-app" /grant "NT AUTHORITY\IUSR:(OI)(CI)(RX)"
icacls "C:\python-app" /grant "Builtin\IIS_IUSRS:(OI)(CI)(RX)"

# 确保Uvicorn能够写入日志文件,对C:\python-app\logs目录授予修改权限
icacls "C:\python-app\logs" /grant "NT AUTHORITY\IUSR:(OI)(CI)(M)"
icacls "C:\python-app\logs" /grant "Builtin\IIS_IUSRS:(OI)(CI)(M)"

注意:

  • 请根据您的Python实际安装路径调整 C:\Program Files\Python312。
  • NT AUTHORITY\IUSR 是IIS匿名用户的内置账户。
  • Builtin\IIS_IUSRS 是IIS工作进程使用的组。
  • (OI)(CI) 表示对象继承和容器继承,确保子文件夹和文件也继承这些权限。
  • (RX) 表示读取和执行权限。
  • (M) 表示修改权限(包括写入),对于日志目录是必需的。

5. 测试与验证

完成所有配置后,即可测试您的FastAPI应用。

  1. 访问URL: 打开浏览器,访问 http://localhost/python(如果部署在Default Web Site下,且别名为 python)。
  2. 预期结果: 如果一切正常,您应该会看到一个JSON响应:{"message": "Hello World from FastAPI on IIS!"}。
  3. 检查日志: 如果遇到问题,请检查 C:\python-app\logs 目录下的 uvicorn.log 文件。这个日志文件会记录Uvicorn的启动信息和运行时错误,是诊断问题的关键。

6. 故障排除与最佳实践

  • HTTP Error 500.19 - Internal Server Error (Error Code 0x80070003):
    • 这通常表示IIS无法读取 web.config 文件或其依赖项。最常见的原因是文件权限不足。请仔细检查第4节中的 icacls 命令是否正确执行,确保 NT AUTHORITY\IUSR 和 Builtin\IIS_IUSRS 对 C:\python-app 目录及其子文件具有读取权限。
    • 另一个可能原因是 web.config 文件格式错误。使用XML编辑器检查其语法。
  • 应用程序启动失败,浏览器显示空白或通用错误页:
    • 检查 C:\python-app\logs\uvicorn.log 文件。它会显示Uvicorn启动时的详细错误信息,例如模块找不到、Python语法错误、端口冲突等。
    • 确保 web.config 中的 processPath 指向正确的 uvicorn.exe 路径。
    • 确认 PYTHONPATH 环境变量设置正确,指向您的FastAPI项目根目录。
  • Python版本和架构: 推荐使用64位Python,并确保HTTP Platform Handler也安装了64位版本,以避免潜在的兼容性问题。
  • Uvicorn参数: main:app 中的 main 对应 main.py 文件名(不含.py),app 对应 FastAPI() 实例的变量名。如果您的文件或实例名不同,请相应修改。
  • 日志级别: 在生产环境中,将 web.config 中 arguments 参数的 --log-level 设置为 error 或 critical,以减少日志输出量。

通过遵循本教程的步骤,您应该能够在IIS 10上成功部署和运行您的FastAPI应用程序。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

716

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

626

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

739

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1236

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

699

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号