FastAPI + Docker 打包你的 AI 应用,五分钟上线

张开发
2026/4/18 23:19:53 15 分钟阅读

分享文章

FastAPI + Docker 打包你的 AI 应用,五分钟上线
这篇文章写给开发好了 AI 应用想快速上线给别人用但不会容器化部署的开发者。用 FastAPI 写接口Docker 打包五分钟就能上线新手也能看懂。痛点场景你辛辛苦苦把 AI 应用开发好了模型调通了效果也不错现在想给别人用——怎么部署直接在本地跑别人访问不到扔到服务器上环境不对跑不起来手工装依赖装一下午还各种报错。其实用 FastAPI Docker 一套下来五分钟就能打包上线不管搬到哪台服务器一键就能跑起来。我把完整流程整理出来你照着做就行。适用场景你开发好了 AI 模型/问答/RAG 应用想上线给用户用不想折腾环境配置希望一次打包到处运行新手第一次部署想要一个简单能跑通的流程项目结构我们先看一下最简单的项目结构my-ai-app/├── main.py # FastAPI 入口├── requirements.txt # 依赖列表├── Dockerfile # Docker 配置└── .dockerignore # Docker 忽略文件第一步用 FastAPI 写接口FastAPI 非常适合写 AI 服务接口异步性能好自动生成文档上手简单。main.py 示例以问答接口为例from fastapi import FastAPIfrom pydantic import BaseModelimport openaiapp FastAPI(titleAI 问答 API)# 定义请求体class QuestionRequest(BaseModel):question: strapp.get(/)def read_root():return {status: ok, message: AI API is running}app.post(/ask)def ask_question(request: QuestionRequest):# 这里替换成你的 AI 逻辑response openai.chat.completions.create(modelgpt-3.5-turbo,messages[{role: user, content: request.question}])answer response.choices[0].message.contentreturn {question: request.question,answer: answer}if name main:import uvicornuvicorn.run(app, host0.0.0.0, port8000)requirements.txt 把你项目依赖列进去fastapi0.100.0uvicorn0.23.2pydantic2.0.0openai1.0.0python-multipart0.0.6第二步编写 DockerfileDockerfile 告诉 Docker 怎么打包你的镜像# 用官方 Python 基础镜像FROM python:3.10-slim# 设置工作目录WORKDIR /app# 复制依赖文件COPY requirements.txt .# 安装依赖RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 复制项目代码COPY . .# 暴露端口EXPOSE 8000# 启动命令CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000].dockerignore 把不需要打包的文件排除掉减小镜像体积pycache*.pyc*.pyo*.pyd.envvenv.git.gitignore*.log第三步本地构建测试构建镜像# 打标签叫 my-ai-app:v1docker build -t my-ai-app:v1 .运行容器测试docker run -d \-p 8000:8000 \--name my-ai-app \my-ai-app:v1测试一下是否正常运行# 测试根路径curl http://localhost:8000# 应该返回 {status: ok, message: AI API is running}# 测试问答接口curl -X POST http://localhost:8000/ask \-H Content-Type: application/json \-d {question: 你好}打开浏览器访问 http://localhost:8000/docsFastAPI 自动生成了 Swagger 文档你可以在这里在线调试接口第四步推送到镜像仓库可选如果你要部署到其他服务器可以把镜像推到 Docker Hub 或者阿里云镜像服务# 打标签docker tag my-ai-app:v1 your-username/my-ai-app:v1# 推送docker push your-username/my-ai-app:v1第五步服务器上线在服务器上拉取镜像然后运行# 拉取镜像docker pull your-username/my-ai-app:v1# 运行docker run -d \-p 8000:8000 \--restart always \--name my-ai-app \your-username/my-ai-app:v1--restart always 让容器随服务器启动自动重启很方便。用 Nginx 反向代理可选如果你有域名想通过 HTTPS 访问加一层 Nginx 反向代理/etc/nginx/sites-available/ai-api.your-domain.comserver {listen 80;server_name ai-api.your-domain.com;location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}}启用配置sudo ln -s /etc/nginx/sites-available/ai-api.your-domain.com /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl reload nginx申请 SSL 证书用 Lets Encryptsudo certbot --nginx -d ai-api.your-domain.com搞定现在你可以通过 https://ai-api.your-domain.com 访问你的 AI 接口了。避坑指南坑 1镜像体积太大拉取慢解决方法用 python:3.10-slim 基础镜像比完整版本小很多.dockerignore 排除掉不需要的文件比如 venv、.git如果模型文件很大可以考虑用数据卷挂载不要打进镜像坑 2容器里能访问宿主机器访问不了原因FastAPI 绑定地址错了应该绑定 0.0.0.0 不是 127.0.0.1解决启动命令改成uvicorn main:app --host 0.0.0.0 --port 8000坑 3GPU 模型在容器里用不了 CUDA如果你要运行本地大模型需要用 NVIDIA Docker 而非普通 Docker解决1. 服务器装好 NVIDIA 驱动和 nvidia-docker22. 基础镜像用 nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.043. 运行的时候加 --gpus alldocker run -d --gpus all -p 8000:8000 my-ai-app:v1坑 4依赖安装慢解决Dockerfile 里换国内 pip 镜像RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple坑 5环境变量比如 API Key怎么放不要把 API Key 写进 Docker 镜像运行的时候传进去docker run -d \-p 8000:8000 \-e OPENAI_API_KEYyour-key-here \--name my-ai-app \my-ai-app:v1代码里直接读就行import osapi_key os.getenv(OPENAI_API_KEY)

更多文章