简单的python项目fastapi在云服务器的部署

FastAPI在云服务器上的部署实战

fastapi在云服务器的部署

最近在学习fastapi,但是在本地运行确实很不过瘾,所以买了一个阿里云服务器,今天终于让代码在云服务器上跑起来了。

1.从gitee上将代码克隆下来

git clone --depth [url]

2.安装虚拟环境
切换到对应路径:

cd /root/fastapi/

安装virtualenv

pip3 install virtualenv  

安装虚拟环境

virtualenv --python=$(which python) venv

3.激活虚拟环境

. venv/bin
<think>我们正在处理一个关于在Windows服务器上部署FastAPI应用的问题。用户提供的引用主要涉及Linux部署(Docker、Gunicorn等),但用户明确要求Windows部署。因此,我们需要调整方案。 在Windows服务器上部署FastAPI应用,通常有以下几种方式: 1. 直接使用Uvicorn运行(开发模式,不推荐生产) 2. 使用Windows服务的方式运行Uvicorn 3. 使用ASGI服务器(如Hypercorn)并配置为Windows服务 4. 使用IIS(Internet Information Services)作为反向代理,并通过Windows服务或任务计划程序运行FastAPI应用(需要安装WFastCGI或其他桥接工具) 由于用户要求部署到Windows服务器,我们选择一种较为常见的方式:将FastAPI应用作为Windows服务运行。 步骤: 1. 准备FastAPI应用(确保代码结构正确,有入口文件,如main.py) 2. 创建虚拟环境并安装依赖 3. 安装uvicorn(或其他ASGI服务器,如hypercorn) 4. 编写一个运行脚本(.py)来启动应用 5. 使用pywin32创建Windows服务 详细步骤: 步骤1:项目结构 假设项目结构如下: ``` project/ ├── app/ │ ├── __init__.py │ └── main.py # 包含FastAPI应用实例,例如:app = FastAPI() ├── requirements.txt ├── run_server.py # 用于启动服务的脚本 └── win_service.py # 用于安装和运行Windows服务的脚本 ``` 步骤2:创建虚拟环境并安装依赖 在项目根目录下: ```bash python -m venv venv venv\Scripts\activate pip install -r requirements.txt ``` 步骤3:安装必要的包 除了FastAPI和uvicorn,我们还需要pywin32来创建Windows服务。 ```bash pip install fastapi uvicorn pywin32 ``` 步骤4:编写运行脚本(run_server.py) 这个脚本将直接启动uvicorn服务器。例如: ```python # run_server.py import uvicorn from app.main import app # 根据实际导入路径调整 if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) ``` 步骤5:编写Windows服务脚本(win_service.py) 这个脚本将定义一个服务类,并能够安装和卸载服务。 示例代码(win_service.py): ```python import win32serviceutil import win32service import win32event import servicemanager import socket import sys import os import subprocess # 获取当前脚本所在目录 script_dir = os.path.dirname(os.path.abspath(__file__)) class FastAPIService(win32serviceutil.ServiceFramework): _svc_name_ = "FastAPIService" _svc_display_name_ = "FastAPI Service" _svc_description_ = "This service runs a FastAPI application." def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) socket.setdefaulttimeout(60) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) # 终止子进程 if self.process: self.process.terminate() def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYSERVICE_STARTED, (self._svc_name_, '')) self.main() def main(self): # 切换到项目目录 os.chdir(script_dir) # 在虚拟环境中运行命令 # 假设虚拟环境在项目目录下的venv文件夹 python_exe = os.path.join(script_dir, "venv", "Scripts", "python.exe") cmd = [python_exe, "run_server.py"] self.process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) # 等待服务停止事件 win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) # 如果服务停止,则终止进程 if self.process: self.process.terminate() if __name__ == '__main__': if len(sys.argv) == 1: servicemanager.Initialize() servicemanager.PrepareToHostSingle(FastAPIService) servicemanager.StartServiceCtrlDispatcher() else: win32serviceutil.HandleCommandLine(FastAPIService) ``` 步骤6:安装服务 在项目根目录下,以管理员权限运行命令提示符: ```bash python win_service.py install ``` 然后启动服务: ```bash python win_service.py start ``` 或者使用Windows服务管理器(services.msc)来启动服务。 注意:这种方式将FastAPI应用作为Windows服务运行,但使用subprocess启动uvicorn,因此服务管理的是这个子进程。此外,在Windows上,uvicorn使用的是asyncio的事件循环,性能可能不如在Linux上。 替代方案:使用hypercorn 如果你希望使用支持Windows的ASGI服务器,hypercorn是一个选择(它支持Windows上的异步工作方式)。只需将run_server.py中的uvicorn换成hypercorn,并安装hypercorn: ```bash pip install hypercorn ``` 然后修改run_server.py: ```python from hypercorn.config import Config from hypercorn.asyncio import serve from app.main import app import asyncio async def run(): config = Config() config.bind = ["0.0.0.0:8000"] await serve(app, config) if __name__ == '__main__': asyncio.run(run()) ``` 然后在win_service.py中调用run_server.py即可。 注意事项: 1. 确保防火墙允许8000端口(或你指定的端口)的入站连接。 2. 如果使用IIS作为反向代理,可以安装IIS并配置URL重写,将请求转发到本地运行的FastAPI应用(127.0.0.1:8000)。但这不是必须的。 以上步骤提供了一个基本的部署方案。对于生产环境,建议进一步考虑: - 日志记录 - 进程监控和自动重启 - 安全性(HTTPS等) 由于用户引用中提到了Docker,但问题要求Windows服务器,而Windows服务器也可以运行Docker(需要安装Docker Desktop for Windows)。如果用户希望使用Docker,也可以采用Docker方式部署,但需要确保服务器是Windows 10专业版/企业版或Windows Server 2016及以上版本,并安装Docker。 鉴于用户明确要求Windows服务器,且没有提及Docker,我们提供了上述非Docker方案。 相关问题: 1. 在Windows服务器上部署FastAPI应用时,如何配置HTTPS? 2. 如何将FastAPI应用作为Windows服务运行,并在服务崩溃时自动重启? 3. 在Windows服务器上,如何监控FastAPI应用的运行状态?</think>### 在 Windows 服务器上部署 FastAPI 应用 以下是部署 FastAPI 应用到 Windows 服务器的完整步骤: #### 1. **环境准备** ```powershell # 安装 Python(建议 3.8+) winget install Python.Python.3.11 # 创建虚拟环境 python -m venv venv venv\Scripts\activate # 安装依赖 pip install fastapi uvicorn ``` #### 2. **项目结构示例** ``` project/ ├── app/ │ ├── __init__.py │ └── main.py # FastAPI 应用入口 ├── requirements.txt └── run_server.bat # 启动脚本 ``` #### 3. **创建启动脚本 (`run_server.bat`)** ```batch @echo off call venv\Scripts\activate uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 2 ``` #### 4. **配置 Windows 服务** 使用 `NSSM`(非官方的服务管理器)将应用设为服务: ```powershell # 下载 NSSM curl -Uri "https://nssm.cc/release/nssm-2.24.zip" -OutFile nssm.zip Expand-Archive nssm.zip -DestinationPath C:\nssm # 安装服务 C:\nssm\nssm.exe install FastAPI_Service ``` 在 NSSM 配置界面设置: - **Path**: `P:\ath\to\run_server.bat` - **Startup directory**: 项目根目录 - **Logon**: 选择有权限的系统账户 #### 5. **防火墙配置** ```powershell New-NetFirewallRule -DisplayName "FastAPI_Port" -Direction Inbound -LocalPort 8000 -Protocol TCP -Action Allow ``` #### 6. **启动服务** ```powershell Start-Service -Name "FastAPI_Service" # 验证服务状态 Get-Service -Name "FastAPI_Service" ``` #### 7. **访问应用** 浏览器访问:`http://服务器IP:8000/docs` --- ### 关键注意事项 1. **性能优化**: - 使用 `--workers` 参数配置工作进程数(建议为 CPU 核心数+1) - 生产环境添加 `--timeout-keep-alive 30` 参数[^3] 2. **日志管理**: ```batch uvicorn app.main:app --log-config logging.conf ``` 在 `logging.conf` 中配置日志轮转和级别 3. **进程监控**: - 使用 [PM2 for Windows](https://pm2.keymetrics.io/) 管理进程 - 配置自动重启策略: ```powershell pm2 start run_server.bat --name fastapi-app --watch ``` 4. **HTTPS 配置**: ```python # main.py from fastapi import FastAPI import uvicorn app = FastAPI() if __name__ == "__main__": uvicorn.run( app, ssl_keyfile="key.pem", ssl_certfile="cert.pem" ) ``` --- ### 部署方案对比 | 方式 | 优点 | 缺点 | |----------------|---------------------------|--------------------------| | Windows 服务 | 开机自启,集成系统管理 | 调试复杂,依赖 NSSM | | PM2 管理 | 实时监控,日志集中管理 | 需额外安装 Node.js | | 任务计划程序 | 无需第三方工具 | 崩溃后需手动恢复 | > ⚠️ 注意:Windows 上 Uvicorn 的性能低于 Linux,对于高并发场景建议: > 1. 使用 WSL2 运行 Linux 容器 > 2. 或改用 Hypercorn 服务器(支持 Windows 异步 I/O) ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python和数据分析

钟意作者

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值