使用 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

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

  • Path :C:\你的项目路径\venv\Scripts\uvicorn.exe(如果使用虚拟环境)或者 C:\Program Files\Python314\Scripts\uvicorn.exe
  • Startup directory :C:\你的项目路径 或者 E:\shop
  • Arguments :main: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. 检查是否有防火墙或杀毒软件阻止
相关推荐
小蜗牛狂飙记6 小时前
Windows 双击 Jar 包无反应,不用写 bat 脚本!Jarfix 一键修复(以 Struts2 扫描工具为例)
windows·struts·jar
坐看风云变幻6 小时前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
IT技术分享社区7 小时前
在 Windows 上跑未改动的 Linux 程序:微软 LiteBox v0.1 把这件事变简单了
linux·运维·windows·microsoft·开源
kakakahahahaha7 小时前
Win10/Win11 Windows Hello指纹不可用处理:WbioSrvc、传感器驱动与登录策略
windows·电脑·笔记本电脑·内容运营·软件需求
小黄人软件8 小时前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows
Vex2une17 小时前
Windows 性能监视器发展史:从 PerfMon 计数器到 XPerf 深度诊断
windows·wpa·etw·性能监视器·perfmon·性能计数器·xperf
在角落发呆17 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
Vd7H20A718 小时前
Windows 下用 llama.cpp 运行 Qwen3.8-27B 并开启 512K 上下文 完全指南
windows·llama
kakakahahahaha1 天前
Win10/Win11扬声器有电平无声音:Audio服务、默认设备与驱动修复
windows·电脑·笔记本电脑·软件需求·windows电脑没有声音
溪语流沙1 天前
【Web全栈进阶】FastAPI工程化:APIRouter拆分 + 配置 + 依赖注入
java·前端·fastapi