上一篇 下一篇 分享链接 返回 返回顶部

AI 工具上生产:一套 Docker 部署方案的真实踩坑记录

发布人:慈云数据-客服中心 发布时间:10小时前 阅读量:2

AI工具 Docker部署教程|生产环境实测

在过去一年里,越来越多团队开始把各类 AI 工具引入到日常研发、运营、客服、内容生产和数据分析流程中。无论是本地大模型 WebUI、知识库问答系统、AI 绘图服务,还是智能客服、代码助手、自动化 Agent 平台,只要进入生产环境,就不可避免地会遇到一个问题:如何稳定、可控、可迁移地部署这些 AI 工具?

相比直接在服务器上安装 Python、Node.js、CUDA、数据库和各种依赖,使用 Docker 部署 AI 工具具有明显优势:环境隔离、版本可控、迁移方便、回滚简单、便于扩容,也更适合团队化运维。本文将结合生产环境实测经验,系统讲解 AI 工具的 Docker 部署方法,包括服务器准备、Docker 安装、镜像拉取、容器启动、数据持久化、反向代理、HTTPS、安全加固、日志监控以及常见问题排查。

本文不是单纯复制几条命令,而是以真实生产环境为目标,帮助你搭建一个稳定可靠的 AI 工具部署方案。


一、为什么 AI 工具推荐使用 Docker 部署?

AI 工具的部署复杂度通常高于普通 Web 应用,主要体现在以下几个方面:

  1. 依赖复杂
    很多 AI 工具依赖 Python、PyTorch、Transformers、CUDA、cuDNN、Node.js、FFmpeg、向量数据库等组件。如果直接裸机安装,很容易出现版本冲突。

  2. 环境复现困难
    开发环境能运行,不代表生产服务器也能运行。尤其是 GPU 驱动、CUDA 版本和 Python 依赖组合,经常导致“换台机器就崩”。

  3. 升级风险高
    AI 工具更新频繁,升级后可能出现模型不兼容、数据库结构变化、插件失效等问题。Docker 可以通过镜像版本控制降低风险。

  4. 迁移和回滚更方便
    只要保留配置文件、数据目录和 Docker Compose 文件,就可以快速在另一台服务器恢复服务。

  5. 更适合多服务组合
    许多 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

生产环境强烈建议不要长期使用 latestmain,最好使用明确版本号。虽然 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;

如果后端也有限制,还需要同时修改后端配置。


十四、推荐的生产环境最佳实践

综合实测经验,建议遵循以下原则:

  1. 使用 Docker Compose 管理多容器服务
    不要手动运行一堆 docker run,后期维护困难。

  2. 数据必须挂载到宿主机目录
    容器可以删除,数据不能丢。

  3. 镜像版本尽量固定
    生产环境避免长期使用 latest

  4. 只开放 80、443 和必要 SSH 端口
    其他服务放在 Docker 内部网络。

  5. 启用 HTTPS
    特别是涉及登录、API Key 和用户数据时。

  6. 升级前必须备份
    AI 工具版本变化快,数据库结构升级可能不可逆。

  7. 日志和资源监控要常看
    不要等服务崩了才排查。

  8. 敏感配置放入 .env
    不要把密钥写进代码仓库。

  9. 建立回滚机制
    保留旧版本镜像和配置。

  10. 根据使用场景选择模型和架构
    不要盲目追求大模型,本地部署成本并不低。


十五、总结

使用 Docker 部署 AI 工具,是目前生产环境中相对稳妥、可控、易维护的方案。对于轻量级 AI 应用,可以通过 Docker Compose 快速完成部署;对于需要本地模型推理的场景,则要额外关注 GPU 驱动、CUDA、显存、模型大小和并发性能。

从生产环境实测来看,一个稳定的 AI 工具部署方案,核心不只是“把容器跑起来”,而是要做到:

  • 目录结构清晰;
  • 数据持久化可靠;
  • 配置可迁移;
  • 服务可监控;
  • 安全边界明确;
  • 升级可回滚;
  • 故障可排查。

如果你只是个人测试,几条 Docker 命令就能启动一个 AI 工具;但如果是团队或企业使用,就必须按照生产环境标准来设计部署流程。Docker 能大幅降低 AI 工具部署和运维的复杂度,但真正决定服务稳定性的,仍然是规范的架构设计、持续的监控和可靠的备份机制。

只要按照本文的流程准备服务器、安装 Docker、配置 Compose、做好反向代理和 HTTPS,并落实安全与备份策略,就可以较为稳定地在生产环境中运行各类 AI 工具。对于后续扩展,也可以在此基础上逐步引入负载均衡、对象存储、集中日志、监控告警和 Kubernetes,实现更高等级的 AI 服务平台化部署。

目录结构
全文