一、为什么需要部署FastAPI?¶
FastAPI是一个高性能的Python Web框架,适合构建API服务。但开发完成后,需要将代码部署到云服务器,才能让其他设备(如手机、前端项目、其他服务器)访问你的接口。本文将带你从本地调试到云服务器上线,完成全流程部署。
二、本地开发环境准备¶
1. 安装FastAPI和Uvicorn¶
首先在本地安装FastAPI和Uvicorn(FastAPI需要ASGI服务器运行,Uvicorn是最常用的选择):
pip install fastapi uvicorn
2. 编写第一个FastAPI接口¶
创建一个简单的main.py文件,写入以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
3. 本地运行测试¶
在终端执行以下命令启动服务:
uvicorn main:app --reload
main:app:表示从main.py文件中导入app对象(FastAPI实例)。--reload:开发模式,代码修改后自动重启服务(生产环境需去掉)。
此时访问http://127.0.0.1:8000,能看到{"message": "Hello, FastAPI!"},说明本地开发成功。
三、云服务器准备¶
1. 购买云服务器¶
选择一个云服务商(如阿里云、腾讯云、AWS),购买一台Linux服务器(推荐Ubuntu 20.04或CentOS 8)。购买后获取:
- 服务器IP地址(如120.xx.xx.xx)
- 登录用户名(如ubuntu或root)
- 登录密码/密钥(用于远程连接)
2. 远程连接云服务器¶
通过终端或工具(如Xshell、FinalShell)连接服务器:
- Linux/Mac终端:直接用ssh 用户名@服务器IP,例如ssh ubuntu@120.xx.xx.xx
- Windows:推荐用PuTTY或FinalShell,输入IP和用户名密码即可连接。
四、云服务器环境搭建¶
1. 安装Python环境¶
FastAPI依赖Python 3.7+,在服务器上安装Python和包管理工具:
# Ubuntu/Debian系统
sudo apt update && sudo apt install python3 python3-pip python3-venv
# CentOS系统(需先安装epel-release)
sudo yum install -y epel-release
sudo yum install -y python3 python3-pip
2. 创建项目目录并上传代码¶
假设项目放在服务器的/var/www/fastapi_demo目录下:
# 创建目录
mkdir -p /var/www/fastapi_demo
cd /var/www/fastapi_demo
# 本地代码上传到服务器(推荐用scp命令)
# 本地执行(需替换本地路径和服务器信息):
scp /本地路径/main.py ubuntu@120.xx.xx.xx:/var/www/fastapi_demo/
scp /本地路径/requirements.txt ubuntu@120.xx.xx.xx:/var/www/fastapi_demo/
- requirements.txt:本地项目依赖列表,在本地执行
pip freeze > requirements.txt生成,上传到服务器后安装。
3. 安装项目依赖¶
在服务器上进入项目目录,安装依赖:
cd /var/www/fastapi_demo
pip3 install -r requirements.txt
五、启动FastAPI服务(生产环境配置)¶
本地开发用uvicorn main:app --reload,但生产环境需稳定运行且支持多用户访问,推荐用以下方式:
1. 使用systemd管理服务(开机自启)¶
创建systemd服务配置文件,让服务后台运行并开机自启:
sudo nano /etc/systemd/system/fastapi.service
在文件中写入:
[Unit]
Description=FastAPI Demo Service
After=network.target # 网络启动后运行
[Service]
User=ubuntu # 服务器用户名(需与登录用户一致)
WorkingDirectory=/var/www/fastapi_demo # 项目目录
ExecStart=/usr/bin/uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
# --host 0.0.0.0:允许外部访问;--port 8000:服务端口;--workers 4:4个工作进程(CPU核心数建议为CPU核心数*2+1)
Restart=always # 服务崩溃后自动重启
[Install]
WantedBy=multi-user.target # 多用户模式下开机自启
2. 启动并设置开机自启¶
sudo systemctl daemon-reload # 重新加载服务配置
sudo systemctl start fastapi # 启动服务
sudo systemctl enable fastapi # 设置开机自启
3. 验证服务状态¶
sudo systemctl status fastapi # 查看服务状态(绿色active(running)表示正常)
六、配置防火墙与安全组¶
云服务器默认会有防火墙,需开放服务端口(如8000):
- 阿里云/腾讯云:登录控制台,进入服务器「安全组」,添加规则:入方向,端口8000,授权对象0.0.0.0/0(生产环境建议限制IP)。
- Linux系统防火墙(Ubuntu/CentOS):
# Ubuntu(ufw防火墙)
sudo ufw allow 8000/tcp # 允许外部访问8000端口
# CentOS(firewalld防火墙)
sudo firewall-cmd --add-port=8000/tcp --permanent
sudo firewall-cmd --reload
七、用Nginx反向代理(生产环境推荐)¶
直接用uvicorn暴露端口不安全,且无法处理静态资源。推荐用Nginx作为反向代理,将请求转发到Uvicorn:
1. 安装Nginx¶
# Ubuntu
sudo apt install nginx
# CentOS
sudo yum install nginx
2. 配置Nginx代理¶
sudo nano /etc/nginx/sites-available/fastapi_demo
写入以下配置:
server {
listen 80;
server_name 120.xx.xx.xx; # 替换为你的服务器IP或域名
location / {
proxy_pass http://127.0.0.1:8000; # 转发到Uvicorn(服务器本地运行端口)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
3. 启用Nginx配置¶
sudo ln -s /etc/nginx/sites-available/fastapi_demo /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置是否有误
sudo systemctl restart nginx # 重启Nginx
八、配置HTTPS(可选但推荐)¶
用Let’s Encrypt免费获取SSL证书,实现HTTPS访问:
1. 安装Certbot:
sudo apt install certbot python3-certbot-nginx # Ubuntu
# CentOS需额外安装snap(略复杂,推荐直接用Ubuntu/CentOS 8+)
- 获取证书并配置Nginx:
sudo certbot --nginx -d 120.xx.xx.xx # 替换为服务器IP或域名
Certbot会自动修改Nginx配置,添加HTTPS支持。
九、部署后维护¶
1. 查看日志¶
- 查看Uvicorn日志:
journalctl -u fastapi -f(-f实时刷新) - 查看Nginx日志:
tail -f /var/log/nginx/access.log(访问日志)和/var/log/nginx/error.log(错误日志)
2. 重启服务¶
# 重启Uvicorn
sudo systemctl restart fastapi
# 重启Nginx
sudo systemctl restart nginx
3. 代码更新¶
若本地代码修改,重新上传到服务器并重启服务:
# 本地更新后上传
scp /本地路径/main.py ubuntu@120.xx.xx.xx:/var/www/fastapi_demo/
# 服务器重启服务
sudo systemctl restart fastapi
十、进阶:用Docker容器化部署(可选)¶
若项目复杂,推荐用Docker简化部署:
1. 本地创建Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
- 在服务器构建Docker镜像:
docker build -t fastapi_demo .
docker run -d -p 8000:8000 fastapi_demo
总结¶
从本地开发到云服务器部署,核心步骤是:本地调试 → 服务器环境搭建 → 代码上传 → 启动服务 → 配置反向代理 → 安全加固。本文用最简单的方式覆盖了基础部署流程,后续可根据项目复杂度(如数据库、容器化)扩展。
如果遇到问题,可通过官方文档或搜索关键词(如“Ubuntu安装Python3”“Uvicorn生产环境配置”)解决,祝部署顺利!