用nssm部署FASTAPI服务

将开发完成的文件夹拷贝到了新windows服务器上。

1.Python安装 :新服务器上下载python,并安装,安装完成后检查一下

C:\Users\Administrator>python --version

Python 3.14.3

2.安装waitress.

C:\Users\Administrator>python -m pip install waitress

Collecting waitress

Downloading waitress-3.0.2-py3-none-any.whl.metadata (5.8 kB)

Downloading waitress-3.0.2-py3-none-any.whl (56 kB)

Installing collected packages: waitress

Successfully installed waitress-3.0.2

notice\] A new release of pip is available: 25.3 -\> 26.0.1 \[notice\] To update, run: python.exe -m pip install --upgrade pip 其实main.py里面写的是:uvicorn.run(app, host="0.0.0.0", port=5200)。uvicorn本身就是生产级的 ASGI 服务器,比 waitress 更适合 FastAP,所以安装waitress就是多此一举。 **3.配置nssm:** 希望作为服务自启动,不要每次重启服务器都手工启动 下载nssm并解压缩到c:\\ c:\\nssm\\win64\>nssm install MESAPI 将里面的参数配置,按实际情况配置好。 Service "MESAPI" installed successfully! **4.启动服务器失败** c:\\nssm\\win64\>nssm start mesapi MESAPI: Unexpected status SERVICE_STOPPED in response to START control. 但是服务日志中并没有错误,直接运行python. PS E:\\MESAPI\> python main.py Traceback (most recent call last): File "E:\\MESAPI\\main.py", line 1, in \ from fastapi import FastAPI, HTTPException, status, Depends ModuleNotFoundError: No module named 'fastapi' 原来是新服务器上没有安装组件。 PS E:\\MESAPI\> pip install fastapi uvicorn pyodbc python-jose\[cryptography\] passlib\[bcrypt\] python-multipart 安装成功后再执行: PS E:\\MESAPI\> python main.py INFO: Started server process \[2588

INFO: Waiting for application startup.

INFO: Application startup complete.

INFO: Uvicorn running on http://0.0.0.0:5200 (Press CTRL+C to quit)

启动正常。

关闭后再试一次

C:\Users\Administrator>python e:\mesapi\main.py

←[32mINFO←[0m: Started server process [←[36m8432←[0m]

←[32mINFO←[0m: Waiting for application startup.

←[32mINFO←[0m: Application startup complete.

←[32mINFO←[0m: Uvicorn running on ←[1mhttp://0.0.0.0:5200←[0m (Press CTRL+C to quit)

启动也正常,说明程序本身没有问题,nssm安装的服务无法启动,问题还是在nssm设置问题。
4.用nssm重新设置服务

c:\nssm\win64>nssm remove mesapi confirm --删除

c:\nssm\win64>nssm install MESAPI

这次把nssm要设置的参数都好好检查了一遍

Application Path: C:\Python310\python.exe

Arguments: e:\mesapi\main.py

Startup directory: e:\mesapi\

Details Display name : mesapi

Log on Account: Local System account

I/O Output (stdout) e:\mesapi\logs\stdout.log

Error (stderr) e:\mesapi\logs\stderr.log

设置完成后,启动服务,正常了!看来还是参数设置错误。
5.安装ODBC驱动

但是启动了,却无法访问,提示数据库链接错误。

{

"detail": "Database connection failed"

}

原因是缺少Microsoft ODBC Driver 18 for SQL Server (x64)

去微软网站:https://go.microsoft.com/fwlink/?linkid=2345415,下载安装。

安装后在用postman调用API,返回正确

{

"code": 200,

"data": {

"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbiIsImV4cCI6MTc3Mzk3NzI0N30.dBZdCWMmnHoOe3v_larjOM2Dm1MsQ3EiyPIRNMZZ2A8"

},

"msg": "success"

}

6.POSTMAN测试API接口

虽然刚才用postman测试了一个API,但是为了验证,还是再测一下其它API接口

post http://192.168.10.15:5200/system/login

body 设置x-www-form-urlencoded

username:admin

password: adminpassword

post http://192.168.10.15:5200/system/sp/Menu

headers中添加:

authorization: Bearer (login返回的token)

content-Type: application/json

测试第二个接口就遇到新问题:

调用服务API,提示内部错误,但是直接运行python main.py,访问接口正常返回。

去日志stderr中找到了信息:

\encodings\cp1252.py", line 19, in encode

return codecs.charmap_encode(input,self.errors,encoding_table)[0]

~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

UnicodeEncodeError: 'charmap' codec can't encode characters in position 22-23: character maps to <undefined>

问了通义前问,告诉我原因是print输出中有中文字符,但 Windows 控制台默认编码(cp1252/cp936)无法处理。

处理方法是修改main.py

在文件最开头添加

import sys

import io

强制标准输出使用 UTF-8

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')

sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')

按建议修改后再次启动python main.py测试,遇到:

Errno 10048\] error while attempting to bind on address ('0.0.0.0', 5200): \[winerror 10048\] only one usage of each socket address (protocol/network address/port) is normally permitted 原因是服务状态是pending,端口被占用了。 停止服务,启动正常。 关闭测试,启动nssm安装的服务,再用postman测试API,接口都正常,部署完成。

相关推荐
小李云雾2 小时前
零基础-从ESS6基础到前后端联通实战
前端·python·okhttp·中间件·eclipse·html·fastapi
@insist1232 小时前
数据库系统工程师-分布式数据库与数据仓库核心考点及应用体系
数据库·数据仓库·分布式·软考·数据库系统工程师·软件水平考试
axinawang2 小时前
XPath与lxml解析库
爬虫·python
电商API&Tina2 小时前
唯品会数据采集API接口||电商API数据采集
java·javascript·数据库·python·sql·json
回到原点的码农2 小时前
maven导入spring框架
数据库·spring·maven
zero15972 小时前
Python 8天极速入门笔记(大模型工程师专用):第三篇-列表与字典(Python核心数据结构,大模型必备)
开发语言·python·ai编程
书到用时方恨少!2 小时前
Python 零基础入门系列(十一):模块和包
开发语言·python
阿kun要赚马内2 小时前
Python面向对象编程:封装性
开发语言·python
Yao.Li2 小时前
PVN3D TensorRT 环境配置指南
人工智能·python·具身智能