FastAPI 全栈后端(八):部署与运维

创作者: Yardon | GitHub: github.com/YardonYan | 版本: v1.0 |



开发 vs 生产环境配置

python 复制代码
# config.py
from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    APP_NAME: str = "MyApp"
    DATABASE_URL: str
    SECRET_KEY: str
    DEBUG: bool = False

    class Config:
        env_file = ".env"
        env_file_encoding = "utf-8"

settings = Settings()
bash 复制代码
# .env
DATABASE_URL=postgresql+asyncpg://user:pass@localhost/mydb
SECRET_KEY=change-me-in-production
DEBUG=true

Uvicorn 运行配置

bash 复制代码
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 --reload
参数 说明
--workers 进程数(生产用)
--reload 热重载(仅开发)
--log-level 日志级别

Gunicorn + Uvicorn Workers

Gunicorn 负责进程管理,Uvicorn 处理异步:

bash 复制代码
gunicorn main:app \
  -w 4 \
  -k uvicorn.workers.UvicornWorker \
  -b 0.0.0.0:8000 \
  --log-level info

Docker 容器化

dockerfile 复制代码
FROM python:3.12-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"]
yaml 复制代码
# docker-compose.yml
services:
  api:
    build: .
    ports: ["8000:8000"]
    env_file: .env
    depends_on:
      db:
        condition: service_healthy
  db:
    image: postgres:16-alpine
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5

健康检查与监控

python 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get("/health")
async def health():
    return {"status": "ok"}

@app.get("/ready")
async def ready():
    # 检查数据库连接
    try:
        await db.execute(select(1))
        return {"status": "ready"}
    except Exception as e:
        raise HTTPException(status_code=503, detail=str(e))

Nginx 配合健康检查做负载均衡:

nginx 复制代码
upstream api_backend {
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}

server {
    location / {
        proxy_pass http://api_backend;
        proxy_set_header Host $host;
    }
    location /health {
        proxy_pass http://api_backend/health;
    }
}

环境变量与安全

bash 复制代码
# 永远不要把 secrets 提交到 Git!
# .gitignore
.env
.env.*
python 复制代码
import os
SECRET_KEY = os.getenv("SECRET_KEY")  # Kubernetes Secret 注入

日志管理

python 复制代码
import logging
from contextlib import asynccontextmanager
import structlog

structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.JSONRenderer()
    ]
)

FastAPI 全栈总结

章节 核心内容
第1章 FastAPI vs Flask,类型驱动,自动文档
第2章 RESTful 路由,Pydantic 模型,请求/响应模型
第3章 SQLAlchemy 2.0 异步,Alembic 迁移
第4章 JWT 认证,bcrypt 密码,OAuth2
第5章 BackgroundTasks / Celery 后台任务
第6章 中间件,CORS,依赖注入
第7章 pytest + TestClient 异步测试
第8章 Docker 部署,Gunicorn,Nginx,健康检查

📌 创作者: Yardon | 🏠 个人网站: GlimmerAI.top

📖 本章是「FastAPI 全栈后端」系列的终章!FastAPI 路线全部完成 🎉

🎉 下一个系列:「LangChain + RAG 实战」------构建你的第一个 AI 应用。欢迎大家来观看!

相关推荐
!chen几秒前
数据库主从有延迟怎么处理
数据库·adb
SelectDB技术团队2 分钟前
Apache Doris 多云原生实践:SaaS、BYOC 与四大公有云覆盖
数据库·阿里云·云原生·华为云·腾讯云·亚马逊云·写入更新
zzzzzz31016 分钟前
看 react-bits,不要只看“酷炫”:一套阅读动画交互组件库的框架
javascript·react.js·动效
guo_wen_qiang1 小时前
mac中docker desktop服务端开启远程访问
运维·服务器·macos·docker
小五传输2 小时前
消防总队信创改造实践:国产文件传输服务器解决文件传输难题
大数据·运维·安全
云飞云共享云桌面2 小时前
医疗器械设备研发:多人同时操作 SolidWorks,怎样依靠单台服务器替代多工作站
运维·服务器·网络·数据库·制造
T型码农要学习2 小时前
开源项目5|FileBrowser:免费在线文件管理器!随时随地管控服务器文件
运维·服务器·人工智能·开源
朱 欢 庆2 小时前
云服务器附件备份到本机内网服务器
运维·服务器·前端·经验分享
梦想不只是梦与想2 小时前
Web 服务器网关协议:ASGI 和 WSGI
服务器·python·fastapi
智恒百亿2 小时前
8 卡 RTX 5090 服务器深度实测:256GB 显存能否支撑 70B 模型微调?选型参考
大数据·运维·服务器·人工智能