FastAPI部署指南:从本地开发到云服务器部署全流程

一、为什么需要部署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
- 登录用户名(如ubunturoot
- 登录密码/密钥(用于远程连接)

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+)
  1. 获取证书并配置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"]
  1. 在服务器构建Docker镜像
docker build -t fastapi_demo .
docker run -d -p 8000:8000 fastapi_demo

总结

从本地开发到云服务器部署,核心步骤是:本地调试 → 服务器环境搭建 → 代码上传 → 启动服务 → 配置反向代理 → 安全加固。本文用最简单的方式覆盖了基础部署流程,后续可根据项目复杂度(如数据库、容器化)扩展。

如果遇到问题,可通过官方文档或搜索关键词(如“Ubuntu安装Python3”“Uvicorn生产环境配置”)解决,祝部署顺利!

小夜