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 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G3 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
卡布鲁3 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
自由能燃气设备3 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远3 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
此冬歌咏3 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
2601_962218613 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器