使用 uvicorn + NSSM(作为 Windows 服务)

在window FastApi 作为 服务启动

使用 uvicorn + NSSM(作为 Windows 服务)

NSSM(Non-Sucking Service Manager)是一个轻量级工具,可将任何程序注册为 Windows 服务。

步骤 1:下载 NSSM

从官网下载:https://nssm.cc/download

其它网下载:https://soft.3dmgame.com/down/214439.html

步骤 2:安装服务

以管理员身份打开命令提示符(CMD),执行:

cmd 复制代码
nssm install FastAPI_Service

随后会弹出图形界面,填写以下信息:

  • PathC:\你的项目路径\venv\Scripts\uvicorn.exe(如果使用虚拟环境)或者 C:\Program Files\Python314\Scripts\uvicorn.exe
  • Startup directoryC:\你的项目路径 或者 E:\shop
  • Argumentsmain:app --host 0.0.0.0 --port 8000 或者 shop:app --host 0.0.0.0 --port 8088
步骤 3:启动服务
cmd 复制代码
net start FastAPI_Service

服务将在后台运行,开机自启。


使用 python 直接启动(适合开发)

如果只是临时运行,可以直接在命令行启动:

cmd

复制代码
cd C:\你的项目路径
venv\Scripts\activate
uvicorn main:app --reload --host 0.0.0.0 --port 8000

注意--reload 会在代码修改时自动重启,仅用于开发环境。


关键注意事项

  1. 1.防火墙:确保 Windows 防火墙允许指定端口(如 8000)的入站连接。

  2. 2.虚拟环境:如果使用了虚拟环境,确保路径正确。

  3. 3.依赖安装:在项目目录下安装依赖:

    cmd

    复制代码
    pip install fastapi uvicorn
  4. 4.生产环境 :生产环境建议使用 --workers 参数(如 --workers 4)提升性能,并配合反向代理(如 Nginx)。

检查并修复NSSM配置(推荐)

步骤1:打开NSSM编辑界面

以管理员身份运行CMD或PowerShell,执行:

cmd

复制代码
nssm edit FastAPI_Service
步骤2:检查并修正配置

在弹出的图形界面中,检查以下三个关键部分:

1. Path(路径)

  • 应该是 uvicorn.exe 的完整路径
  • 正确示例C:\项目路径\venv\Scripts\uvicorn.exe
  • 常见错误 :只写了 uvicorn,没有完整路径

2. Arguments(参数)

  • 应该是:main:app --host 0.0.0.0 --port 8000
  • 确保 main:app 对应你的FastAPI应用文件

3. Startup directory(启动目录)

  • 应该是你的项目根目录
  • 正确示例C:\项目路径
步骤3:测试配置

在NSSM界面点击 "Test" 按钮,测试配置是否正确。

步骤4:保存并重启服务

保存配置后,在命令行执行:

cmd

复制代码
net stop FastAPI_Service
net start FastAPI_Service

重新安装服务

步骤1:删除现有服务

cmd

复制代码
nssm remove FastAPI_Service confirm
步骤2:确认文件路径

在项目目录下,确认这些文件存在:

  1. 1.main.py(你的FastAPI应用文件)
  2. 2.venv\Scripts\uvicorn.exe(虚拟环境中的uvicorn)
步骤3:重新安装服务

cmd

复制代码
nssm install FastAPI_Service

在弹出的界面中:

  • Path : 浏览选择 C:\项目路径\venv\Scripts\uvicorn.exe
  • Arguments : main:app --host 0.0.0.0 --port 8000
  • Startup directory : C:\项目路径
步骤4:启动服务

cmd

复制代码
net start FastAPI_Service

使用绝对路径

如果NSSM配置有问题,可以尝试创建一个批处理文件来启动服务:

1. 创建启动脚本 start_service.bat

batch

复制代码
@echo off
cd /d "C:\项目路径"
call venv\Scripts\activate.bat
uvicorn main:app --host 0.0.0.0 --port 8000

2. 用NSSM指向批处理文件

cmd

复制代码
nssm remove FastAPI_Service confirm
nssm install FastAPI_Service

在NSSM配置中:

  • Path : C:\项目路径\start_service.bat
  • Arguments: (留空)
  • Startup directory : C:\项目路径

检查并修复虚拟环境

步骤1:确认虚拟环境存在

cmd

复制代码
cd C:\项目路径
dir venv\Scripts\uvicorn.exe

如果文件不存在,需要重新创建虚拟环境:

cmd

复制代码
python -m venv venv
venv\Scripts\activate.bat
pip install fastapi uvicorn
步骤2:检查服务账户权限

服务可能使用了错误的账户运行。在NSSM配置中:

  1. 1.切换到 "Details" 选项卡
  2. 2.在 "Log on" 部分,尝试选择 "Local System account"
  3. 3.保存并重启服务

调试技巧

1. 查看服务日志

在NSSM配置中:

  • 切换到 "I/O" 选项卡

  • 设置 "Output (stdout)" 和 "Output (stderr)" 到文件路径,例如:

    text

    text

    复制代码
    C:\项目路径\service.log
    C:\项目路径\service_error.log

这样可以看到服务启动时的详细错误信息。

2. 手动测试命令

在项目目录下,手动运行相同的命令,看是否有错误:

cmd

复制代码
cd C:\项目路径
venv\Scripts\activate.bat
uvicorn main:app --host 0.0.0.0 --port 8000

3. 检查事件查看器

  1. 1.打开 "事件查看器"
  2. 2.导航到 "Windows 日志" → "应用程序"
  3. 3.查找与 "FastAPI_Service" 相关的错误条目

常见错误场景及解决

场景1:找不到 uvicorn.exe

解决:确保在NSSM的Path中使用完整路径:

text

复制代码
C:\Users\你的用户名\项目路径\venv\Scripts\uvicorn.exe

场景2:虚拟环境未激活

解决:在批处理文件中添加激活命令,或在NSSM的Arguments中添加:

text

复制代码
-c "import sys; sys.path.insert(0, '.'); from uvicorn import main; main(['main:app', '--host', '0.0.0.0', '--port', '8000'])"

场景3:端口被占用

解决:修改端口或结束占用进程:

cmd

复制代码
netstat -ano | findstr :8000
taskkill /PID <PID> /F

快速排查清单

    1. 确认 uvicorn.exe 路径正确且文件存在
    1. 确认 main:app 对应正确的Python文件和FastAPI实例
    1. 确认项目目录存在且有读取权限
    1. 测试手动运行命令是否成功
    1. 检查是否有防火墙或杀毒软件阻止
相关推荐
Dylan的码园4 小时前
从软件工程师看计算机是如何工作的
java·jvm·windows·java-ee
SmartBrain5 小时前
FastAPI实战:基于 SQLAlchemy的后端接口开发流程
数据库·架构·fastapi
智慧地球(AI·Earth)5 小时前
在Windows上使用Claude Code并集成到PyCharm IDE的完整指南
ide·人工智能·windows·python·pycharm·claude code
岱宗夫up6 小时前
FastAPI进阶3:云原生架构与DevOps最佳实践
前端·python·云原生·架构·前端框架·fastapi·devops
我是大猴子6 小时前
迭代器以及Hutool工具包
windows
蘼子6 小时前
Windows装Docker至D盘/其他盘(最新,最准确,直接装)
windows·docker·容器
musenh6 小时前
python基础
开发语言·windows·python
PieroPc7 小时前
在飞牛 NAS(fnOS)上使用 Docker 部署 FastAPI 应用(这个是从错误学习教程 图是可以的)
学习·docker·fastapi·飞牛nas
七夜zippoe7 小时前
集成测试实战:构建可靠的测试金字塔体系
python·log4j·e2e·fastapi·持续集成·flask api