news 2026/4/29 23:35:11

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 FastAPI

from pydantic import BaseModel

import openai

app = FastAPI(title="AI 问答 API")

# 定义请求体

class QuestionRequest(BaseModel):

question: str

@app.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(

model="gpt-3.5-turbo",

messages=[{"role": "user", "content": request.question}]

)

answer = response.choices[0].message.content

return {

"question": request.question,

"answer": answer

}

if name == "main":

import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)

requirements.txt 把你项目依赖列进去:

fastapi>=0.100.0

uvicorn>=0.23.2

pydantic>=2.0.0

openai>=1.0.0

python-multipart>=0.0.6

第二步:编写 Dockerfile

Dockerfile 告诉 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

.env

venv

.git

.gitignore

*.log

第三步:本地构建测试

构建镜像:

# 打标签叫 my-ai-app:v1

docker 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/docs,FastAPI 自动生成了 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.com:

server {

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 -t

sudo systemctl reload nginx

申请 SSL 证书(用 Let's Encrypt):

sudo 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

坑 3:GPU 模型在容器里用不了 CUDA

如果你要运行本地大模型,需要用 NVIDIA Docker 而非普通 Docker:

解决:

  1. 1. 服务器装好 NVIDIA 驱动和 nvidia-docker2
  2. 2. 基础镜像用 nvidia/cuda:12.1.0-cudnn8-runtime-ubuntu22.04
  3. 3. 运行的时候加 --gpus all:

docker 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_KEY=your-key-here \

--name my-ai-app \

my-ai-app:v1

代码里直接读就行:

import os

api_key = os.getenv("OPENAI_API_KEY")

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 23:34:57

FLUX.1文生图镜像体验:SDXL风格器让创意无限,新手友好操作简单

FLUX.1文生图镜像体验:SDXL风格器让创意无限,新手友好操作简单 想用AI把脑海里的画面变成现实,却总被复杂的参数和操作劝退?今天体验的这款FLUX.1文生图镜像,彻底改变了我的看法。它把强大的FLUX.1模型和傻瓜式的SDXL…

作者头像 李华
网站建设 2026/4/29 23:33:30

网络安全相关概念

我和网络安全的起源 我是在高中的时候开始接触网络安全相关的知识。当年,最开心的事情就是下课跑到书店,看见新出版《黑客X档案》买回来,里面会有一张实体光盘,放一些病毒和破解示例小程序,后面不知道为啥不出版了。差…

作者头像 李华
网站建设 2026/4/12 7:25:35

龙芯k - 久久派开发环境搭建及内核升级(下)殉

起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧&#xff…

作者头像 李华
网站建设 2026/4/12 16:47:26

Qwen3-VL-8B环境配置详解:Anaconda虚拟环境与依赖包安装

Qwen3-VL-8B环境配置详解:Anaconda虚拟环境与依赖包安装 如果你习惯用Anaconda来管理Python环境,想在本地跑通Qwen3-VL-8B这个多模态大模型,那这篇文章就是为你准备的。我会带你一步步搞定从创建虚拟环境到成功运行模型的所有环节&#xff0…

作者头像 李华
网站建设 2026/4/11 6:09:00

星图AI云:Qwen3-VL:30B私有化部署,飞书机器人快速搭建

星图AI云:Qwen3-VL:30B私有化部署,飞书机器人快速搭建 1. 为什么你需要一个能看图说话的飞书助手? 想象一下这个场景:周一早上,你刚打开飞书,就看到同事在群里发了一张密密麻麻的Excel表格截图&#xff0…

作者头像 李华
网站建设 2026/4/12 21:12:38

磁共振成像原理(理论)3:布洛赫方程与射频脉冲激发

1. 布洛赫方程:磁共振成像的数学语言 第一次接触布洛赫方程时,我盯着那一堆矢量符号和微分运算直发懵。直到在实验室亲眼看到磁化矢量的翻转过程,才真正理解这个方程的精妙之处。简单来说,布洛赫方程就是描述磁化矢量在磁场中运动…

作者头像 李华