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 应用。欢迎大家来观看!

相关推荐
数智化管理手记3 分钟前
财务大数据怎么管住资金风险?财务大数据和财务数智化到底怎么结合?
大数据·网络·数据库·人工智能·数据挖掘
晓子文集4 分钟前
Tushare接口文档:指数成分和权重(index_weight)
大数据·数据库·python·金融·量化投资
吴声子夜歌12 分钟前
MongoDB 4.2——入门指南
数据库·mongodb
吴声子夜歌17 分钟前
MongoDB 4.x——高可靠
数据库·mongodb
light blue bird32 分钟前
组轴式执行引擎 ✅ 多线程调度组装组件
数据库·信息可视化·oracle·桌面端winform·多节点端·gdi图表绘制开发
码农学院1 小时前
Node.js MongoDB构建户外用品GEO优化内容管理平台
数据库·mongodb·node.js
吴声子夜歌1 小时前
MongoDB 4.x——治理经验
数据库·mongodb
码农学院1 小时前
React公众号开发:母婴用品会员积分体系技术方案
前端·react.js·前端框架
mONESY1 小时前
React TodoList 通俗讲解|彻底搞懂父子组件通信与状态管理
react.js
黄华SJ520it2 小时前
门店预约系统开发:提升服务行业数字化转型
前端·数据库·系统开发