AI 工具上生产:一套 Docker 部署方案的真实踩坑记录
AI工具 Docker部署教程|生产环境实测
在过去一年里,越来越多团队开始把各类 AI 工具引入到日常研发、运营、客服、内容生产和数据分析流程中。无论是本地大模型 WebUI、知识库问答系统、AI 绘图服务,还是智能客服、代码助手、自动化 Agent 平台,只要进入生产环境,就不可避免地会遇到一个问题:如何稳定、可控、可迁移地部署这些 AI 工具?
相比直接在服务器上安装 Python、Node.js、CUDA、数据库和各种依赖,使用 Docker 部署 AI 工具具有明显优势:环境隔离、版本可控、迁移方便、回滚简单、便于扩容,也更适合团队化运维。本文将结合生产环境实测经验,系统讲解 AI 工具的 Docker 部署方法,包括服务器准备、Docker 安装、镜像拉取、容器启动、数据持久化、反向代理、HTTPS、安全加固、日志监控以及常见问题排查。
本文不是单纯复制几条命令,而是以真实生产环境为目标,帮助你搭建一个稳定可靠的 AI 工具部署方案。
一、为什么 AI 工具推荐使用 Docker 部署?
AI 工具的部署复杂度通常高于普通 Web 应用,主要体现在以下几个方面:
-
依赖复杂
很多 AI 工具依赖 Python、PyTorch、Transformers、CUDA、cuDNN、Node.js、FFmpeg、向量数据库等组件。如果直接裸机安装,很容易出现版本冲突。 -
环境复现困难
开发环境能运行,不代表生产服务器也能运行。尤其是 GPU 驱动、CUDA 版本和 Python 依赖组合,经常导致“换台机器就崩”。 -
升级风险高
AI 工具更新频繁,升级后可能出现模型不兼容、数据库结构变化、插件失效等问题。Docker 可以通过镜像版本控制降低风险。 -
迁移和回滚更方便
只要保留配置文件、数据目录和 Docker Compose 文件,就可以快速在另一台服务器恢复服务。 -
更适合多服务组合
许多 AI 工具不是单一应用,而是由前端、后端、数据库、Redis、向量库、模型服务等多个组件组成。Docker Compose 可以统一编排。
因此,对于生产环境来说,Docker 不是可选项,而是非常推荐的基础部署方式。
二、生产环境部署前的服务器准备
在正式部署之前,需要先确认服务器配置是否满足目标 AI 工具的要求。不同类型 AI 工具对资源要求差异很大。
1. CPU 与内存
如果部署的是轻量级 AI 工具,例如 ChatGPT API 套壳应用、AI 助手管理平台、知识库前端系统等,一般不需要本地运行大模型,服务器配置可以相对较低:
CPU:2 核以上
内存:4GB 以上
硬盘:40GB 以上
如果需要部署知识库问答系统,并包含文档解析、向量化、数据库、Redis、向量数据库等组件,建议配置:
CPU:4 核以上
内存:8GB~16GB
硬盘:100GB 以上
如果需要本地运行大模型,例如 Ollama、vLLM、LocalAI、Stable Diffusion 等,则需要重点关注 GPU:
CPU:8 核以上
内存:32GB 以上
显存:8GB 起步,推荐 16GB、24GB 或更高
硬盘:200GB 以上,建议 SSD
2. 操作系统建议
生产环境建议使用主流 Linux 发行版,例如:
- Ubuntu Server 22.04 LTS
- Debian 12
- Rocky Linux 9
- AlmaLinux 9
如果是新手,推荐使用 Ubuntu Server 22.04 LTS,社区资料丰富,Docker 和 NVIDIA 驱动安装相对友好。
3. 域名与端口规划
如果 AI 工具需要提供给团队或客户使用,建议准备一个域名,例如:
ai.example.com
并提前规划端口:
80:HTTP
443:HTTPS
3000:前端服务
8000:后端 API
5432:PostgreSQL
6379:Redis
7860:WebUI 类工具常见端口
11434:Ollama 默认端口
生产环境不建议直接暴露过多业务端口到公网,推荐通过 Nginx 或 Traefik 做反向代理,只开放 80 和 443。
三、安装 Docker 与 Docker Compose
以下以 Ubuntu Server 为例。
1. 更新系统软件包
sudo apt update
sudo apt upgrade -y
2. 安装基础依赖
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4. 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 安装 Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. 验证安装
docker version
docker compose version
如果能正常显示版本信息,说明安装成功。
7. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
8. 将当前用户加入 Docker 用户组
sudo usermod -aG docker $USER
执行后需要重新登录 SSH 才能生效。否则每次执行 Docker 命令都需要加 sudo。
四、生产环境目录规划
在生产环境中,不建议随便找一个目录启动容器。推荐统一规划应用目录,便于备份、迁移和权限管理。
例如:
sudo mkdir -p /opt/ai-tools
sudo chown -R $USER:$USER /opt/ai-tools
cd /opt/ai-tools
可以按照项目划分:
/opt/ai-tools/
├── open-webui/
├── dify/
├── ollama/
├── nginx/
├── backups/
└── logs/
每个工具单独一个目录,里面放置:
docker-compose.yml
.env
data/
logs/
config/
这样做的好处是结构清晰,后期维护时不会混乱。
五、示例一:使用 Docker 部署 Open WebUI + Ollama
Open WebUI 是一个常见的本地大模型 Web 管理界面,Ollama 则可以方便地运行 Llama、Qwen、Mistral 等模型。两者组合后,可以快速搭建一个本地 AI 对话平台。
1. 创建项目目录
mkdir -p /opt/ai-tools/open-webui
cd /opt/ai-tools/open-webui
2. 编写 docker-compose.yml
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama-data:/root/.ollama
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_SECRET_KEY=please_change_this_secret_key
volumes:
- ./open-webui-data:/app/backend/data
depends_on:
- ollama
这里有几个关键点:
ollama-data用于保存下载的模型;open-webui-data用于保存用户、配置和会话数据;OLLAMA_BASE_URL=http://ollama:11434使用 Docker 内部服务名通信;restart: unless-stopped确保服务异常退出后自动重启。
3. 启动服务
docker compose up -d
查看容器状态:
docker ps
查看日志:
docker compose logs -f
浏览器访问:
http://服务器IP:3000
首次进入后,根据页面提示创建管理员账号。
4. 下载模型
进入 Ollama 容器:
docker exec -it ollama bash
下载一个模型,例如 Qwen:
ollama pull qwen2.5:7b
或者下载 Llama:
ollama pull llama3.1:8b
下载完成后,回到 Open WebUI 页面即可选择模型进行对话。
六、GPU 环境下的 Docker 部署要点
如果你希望 AI 工具调用 NVIDIA GPU,需要额外安装 NVIDIA 驱动和 NVIDIA Container Toolkit。
1. 检查显卡
lspci | grep -i nvidia
如果能看到 NVIDIA 显卡信息,说明硬件识别正常。
2. 安装 NVIDIA 驱动
Ubuntu 可使用:
sudo ubuntu-drivers devices
sudo ubuntu-drivers autoinstall
sudo reboot
重启后验证:
nvidia-smi
如果能看到显卡型号、驱动版本和显存信息,说明驱动安装成功。
3. 安装 NVIDIA Container Toolkit
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
配置 Docker:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
测试 GPU 容器:
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi
如果容器内也能显示 nvidia-smi,说明 Docker 已经可以调用 GPU。
4. Compose 中启用 GPU
在 docker-compose.yml 中可以添加:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama-data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
部分 Docker Compose 版本也可以使用:
gpus: all
如果发现模型仍然跑在 CPU 上,需要检查:
docker inspect ollama
docker compose logs -f ollama
nvidia-smi
七、示例二:部署带数据库的 AI 应用
很多 AI 工具不仅仅是一个容器,还需要 PostgreSQL、Redis、向量数据库等组件。下面以一个通用 AI 应用架构为例:
前端 Web
后端 API
PostgreSQL
Redis
向量数据库
Nginx
示例 docker-compose.yml:
services:
ai-web:
image: example/ai-web:latest
container_name: ai-web
restart: unless-stopped
ports:
- "3001:3000"
environment:
- API_BASE_URL=http://ai-api:8000
depends_on:
- ai-api
ai-api:
image: example/ai-api:latest
container_name: ai-api
restart: unless-stopped
ports:
- "8001:8000"
environment:
- DATABASE_URL=postgresql://ai_user:ai_password@postgres:5432/ai_db
- REDIS_URL=redis://redis:6379/0
- VECTOR_DB_URL=http://vector-db:6333
- OPENAI_API_KEY=${OPENAI_API_KEY}
volumes:
- ./uploads:/app/uploads
- ./logs:/app/logs
depends_on:
- postgres
- redis
- vector-db
postgres:
image: postgres:16
container_name: ai-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=ai_db
- POSTGRES_USER=ai_user
- POSTGRES_PASSWORD=ai_password
volumes:
- ./postgres-data:/var/lib/postgresql/data
redis:
image: redis:7
container_name: ai-redis
restart: unless-stopped
volumes:
- ./redis-data:/data
command: redis-server --appendonly yes
vector-db:
image: qdrant/qdrant:latest
container_name: ai-qdrant
restart: unless-stopped
volumes:
- ./qdrant-data:/qdrant/storage
在生产环境中,数据库密码、API Key 等敏感信息不建议直接写死在 Compose 文件中,推荐放到 .env 文件:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
POSTGRES_PASSWORD=your_strong_password
WEBUI_SECRET_KEY=your_random_secret
然后在 Compose 中通过 ${变量名} 引用。
八、配置 Nginx 反向代理与 HTTPS
生产环境不建议让用户直接通过 http://IP:3000 访问服务。推荐使用域名和 HTTPS。
1. 安装 Nginx
sudo apt install -y nginx
2. 配置反向代理
创建配置文件:
sudo nano /etc/nginx/sites-available/ai.example.com
写入:
server {
listen 80;
server_name ai.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/ai.example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
3. 配置 HTTPS 证书
安装 Certbot:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d ai.example.com
按照提示完成后,Certbot 会自动修改 Nginx 配置并开启 HTTPS。
测试续期:
sudo certbot renew --dry-run
九、生产环境安全加固建议
AI 工具一旦暴露公网,安全问题必须重视。很多 AI 平台内部包含 API Key、用户数据、上传文档和聊天记录,如果配置不当,风险非常高。
1. 修改默认密码和密钥
所有默认密码必须修改,包括:
- Web 管理员密码;
- 数据库密码;
- Redis 密码;
- JWT Secret;
- Session Secret;
- WEBUI_SECRET_KEY;
- 第三方 API Key。
密钥建议使用随机字符串生成:
openssl rand -hex 32
2. 限制端口暴露
对公网只开放必要端口:
80
443
22
数据库、Redis、向量数据库、模型服务端口不建议直接暴露公网。
可以通过防火墙限制:
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status
3. SSH 安全
建议关闭 root 登录,使用普通用户登录,并配置密钥认证。
编辑:
sudo nano /etc/ssh/sshd_config
建议配置:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
重启 SSH:
sudo systemctl restart ssh
注意:修改前一定要确认密钥登录可用,避免把自己锁在服务器外面。
4. 控制注册入口
很多 AI WebUI 默认允许用户注册。如果是公司内部工具,建议关闭开放注册,只允许管理员邀请或手动创建用户。
5. API Key 不要写入前端
如果 AI 工具调用 OpenAI、Claude、Gemini 等 API,密钥必须放在后端或环境变量中,不应直接写入前端代码。否则浏览器开发者工具可以轻松看到密钥。
十、数据持久化与备份策略
Docker 容器本身是可删除、可重建的。生产环境真正重要的是数据,包括:
- 数据库数据;
- 用户上传文件;
- 模型文件;
- 配置文件;
- 日志;
- 向量数据库数据;
.env文件;docker-compose.yml文件。
1. 推荐备份目录
例如:
/opt/ai-tools/open-webui/
/opt/ai-tools/dify/
/opt/ai-tools/backups/
2. PostgreSQL 备份
docker exec ai-postgres pg_dump -U ai_user ai_db > /opt/ai-tools/backups/ai_db_$(date +%F).sql
恢复:
cat ai_db_2025-01-01.sql | docker exec -i ai-postgres psql -U ai_user ai_db
3. 文件目录备份
tar -czvf /opt/ai-tools/backups/open-webui-data_$(date +%F).tar.gz \
/opt/ai-tools/open-webui/open-webui-data
4. 定时备份
编辑 crontab:
crontab -e
添加:
0 3 * * * /opt/ai-tools/scripts/backup.sh
建议至少做到:
- 每日自动备份;
- 保留最近 7 天备份;
- 每周同步到异地存储;
- 升级前手动备份一次。
十一、日志查看与运行状态监控
生产环境不能只看“能不能打开页面”,还要关注服务是否稳定、资源是否足够。
1. 查看容器状态
docker ps
查看所有容器,包括已退出容器:
docker ps -a
2. 查看日志
docker compose logs -f
查看单个服务日志:
docker logs -f open-webui
如果日志太多,可以限制行数:
docker logs --tail=200 -f open-webui
3. 查看资源占用
docker stats
查看 GPU:
nvidia-smi
如果发现显存长期占满、内存持续上涨、CPU 持续满载,需要考虑:
- 降低并发;
- 使用更小模型;
- 增加内存或显存;
- 增加队列机制;
- 做服务拆分;
- 配置限流。
十二、升级与回滚流程
AI 工具更新很快,但生产环境不能盲目升级。推荐流程如下:
1. 升级前备份
tar -czvf backup_before_upgrade_$(date +%F).tar.gz /opt/ai-tools/open-webui
2. 拉取新镜像
docker compose pull
3. 重启服务
docker compose up -d
4. 观察日志
docker compose logs -f
5. 回滚方法
如果新版本异常,可以修改镜像版本,例如从:
image: ghcr.io/open-webui/open-webui:main
改为指定版本:
image: ghcr.io/open-webui/open-webui:v0.5.0
然后执行:
docker compose up -d
生产环境强烈建议不要长期使用 latest 或 main,最好使用明确版本号。虽然 latest 方便,但不可控,一旦镜像更新引入问题,排查成本会很高。
十三、生产环境实测常见问题
问题一:容器启动后页面打不开
排查步骤:
docker ps
docker compose logs -f
curl http://127.0.0.1:3000
sudo ufw status
常见原因:
- 容器未启动;
- 端口映射错误;
- 防火墙未放行;
- 应用启动较慢;
- Nginx 代理端口配置错误。
问题二:AI 回复很慢
常见原因:
- 使用 CPU 跑大模型;
- 模型参数过大;
- 显存不足,频繁换页;
- 并发请求太高;
- 网络 API 访问慢;
- 上下文长度过大。
解决方案:
- 使用更小模型;
- 开启 GPU;
- 限制上下文长度;
- 减少并发;
- 使用更稳定的模型 API 服务;
- 增加队列或负载均衡。
问题三:Docker 占用磁盘越来越大
查看磁盘:
df -h
docker system df
清理未使用镜像和缓存:
docker system prune -a
注意:该命令会删除未使用镜像,执行前要确认不会影响回滚。
查看大文件:
du -sh /opt/ai-tools/*
AI 模型文件通常非常大,尤其是本地模型,单个模型可能数 GB 到数十 GB。
问题四:数据库连接失败
检查:
docker logs ai-postgres
docker exec -it ai-postgres psql -U ai_user -d ai_db
常见原因:
- 数据库密码错误;
- 服务启动顺序问题;
- 数据库未初始化完成;
- DATABASE_URL 写错;
- 容器网络不通。
在 Docker Compose 内部,连接数据库应使用服务名,例如:
postgres:5432
而不是:
127.0.0.1:5432
问题五:上传大文件失败
通常是 Nginx 限制导致,需要配置:
client_max_body_size 100M;
如果后端也有限制,还需要同时修改后端配置。
十四、推荐的生产环境最佳实践
综合实测经验,建议遵循以下原则:
-
使用 Docker Compose 管理多容器服务
不要手动运行一堆docker run,后期维护困难。 -
数据必须挂载到宿主机目录
容器可以删除,数据不能丢。 -
镜像版本尽量固定
生产环境避免长期使用latest。 -
只开放 80、443 和必要 SSH 端口
其他服务放在 Docker 内部网络。 -
启用 HTTPS
特别是涉及登录、API Key 和用户数据时。 -
升级前必须备份
AI 工具版本变化快,数据库结构升级可能不可逆。 -
日志和资源监控要常看
不要等服务崩了才排查。 -
敏感配置放入
.env
不要把密钥写进代码仓库。 -
建立回滚机制
保留旧版本镜像和配置。 -
根据使用场景选择模型和架构
不要盲目追求大模型,本地部署成本并不低。
十五、总结
使用 Docker 部署 AI 工具,是目前生产环境中相对稳妥、可控、易维护的方案。对于轻量级 AI 应用,可以通过 Docker Compose 快速完成部署;对于需要本地模型推理的场景,则要额外关注 GPU 驱动、CUDA、显存、模型大小和并发性能。
从生产环境实测来看,一个稳定的 AI 工具部署方案,核心不只是“把容器跑起来”,而是要做到:
- 目录结构清晰;
- 数据持久化可靠;
- 配置可迁移;
- 服务可监控;
- 安全边界明确;
- 升级可回滚;
- 故障可排查。
如果你只是个人测试,几条 Docker 命令就能启动一个 AI 工具;但如果是团队或企业使用,就必须按照生产环境标准来设计部署流程。Docker 能大幅降低 AI 工具部署和运维的复杂度,但真正决定服务稳定性的,仍然是规范的架构设计、持续的监控和可靠的备份机制。
只要按照本文的流程准备服务器、安装 Docker、配置 Compose、做好反向代理和 HTTPS,并落实安全与备份策略,就可以较为稳定地在生产环境中运行各类 AI 工具。对于后续扩展,也可以在此基础上逐步引入负载均衡、对象存储、集中日志、监控告警和 Kubernetes,实现更高等级的 AI 服务平台化部署。