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

把 AI 工具稳定跑在服务器上:一套 Docker 生产部署实战笔记

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

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

在过去一年里,越来越多的团队开始把 AI 工具引入到日常研发、运维、客服、数据分析和内容生产流程中。相比传统软件,AI 工具往往依赖更复杂的运行环境,例如 Python、Node.js、CUDA、模型文件、向量数据库、Redis、PostgreSQL、对象存储等。如果直接在服务器上手动安装,不仅容易出现依赖冲突,也很难在测试环境、预发布环境和生产环境之间保持一致。

因此,使用 Docker 部署 AI 工具,已经成为目前比较推荐的生产实践。本文将以“生产环境实测”的角度,系统讲解 AI 工具的 Docker 部署流程,包括服务器准备、Docker 安装、镜像构建、容器编排、数据持久化、环境变量配置、反向代理、HTTPS、日志、监控、安全加固以及常见问题排查。

本文适合以下读者:

  • 想把开源 AI 工具部署到自己服务器上的开发者;
  • 需要在公司内网部署 AI 助手、知识库、Agent 工具的技术人员;
  • 正在评估 Docker 生产环境部署方案的运维工程师;
  • 希望减少环境配置问题、提升部署稳定性的团队。

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

AI 工具通常不是一个单独的程序,而是一整套服务组合。例如,一个常见的 AI 知识库系统可能包含:

  • Web 前端服务;
  • 后端 API 服务;
  • 大模型调用服务;
  • Embedding 向量化服务;
  • 向量数据库,例如 Milvus、Qdrant、Weaviate;
  • 关系型数据库,例如 PostgreSQL、MySQL;
  • 缓存服务,例如 Redis;
  • 文件存储服务,例如 MinIO;
  • 任务队列服务,例如 Celery、RabbitMQ。

如果这些组件全部手动安装,环境维护成本会非常高。Docker 的优势主要体现在以下几个方面。

1. 环境一致性更好

Docker 可以把应用程序、运行依赖、系统库和启动命令全部打包进镜像。无论是在开发机、测试服务器还是生产服务器,只要镜像一致,运行结果就基本一致。

这对于 AI 工具尤其重要。因为很多 AI 工具依赖特定版本的 Python、PyTorch、Transformers、CUDA 或 Node.js,一旦版本不一致,就可能出现各种奇怪问题。

2. 部署速度更快

传统部署可能需要几十分钟甚至数小时配置环境,而 Docker 部署通常只需要:

docker compose up -d

或者:

docker run -d ...

如果镜像已经构建完成,服务可以在几分钟内启动。

3. 方便扩展和迁移

Docker 容器可以快速迁移到另一台服务器。只要保证配置文件、数据目录和镜像一致,就可以较容易地完成迁移。

在生产环境中,如果后期需要扩容,例如单独增加一个向量数据库节点、增加一个后端 API 实例,也可以基于 Docker Compose 或 Kubernetes 进一步演进。

4. 故障隔离能力更强

不同服务运行在不同容器中,一个服务异常不会直接污染宿主机环境。即使容器内部依赖出现问题,也可以通过重启容器、回滚镜像、重新构建等方式快速恢复。


二、生产环境部署前的服务器准备

在真正部署 AI 工具之前,需要先准备好服务器环境。这里以 Ubuntu 22.04 LTS 为例,其他 Linux 发行版也可以参考。

1. 服务器配置建议

不同 AI 工具对服务器配置要求不同。如果只是部署调用外部大模型 API 的 AI 工具,例如 OpenAI、Claude、通义千问、智谱、DeepSeek API 等,一般不需要本地 GPU。

推荐最低配置:

场景 CPU 内存 磁盘 GPU
轻量 AI 工具 2 核 4 GB 40 GB SSD 不需要
知识库系统 4 核 8 GB 100 GB SSD 不需要
多用户生产环境 8 核 16 GB 200 GB SSD 可选
本地模型推理 8 核以上 32 GB 以上 500 GB SSD 建议 NVIDIA GPU

如果要本地部署大模型,例如 Qwen、Llama、DeepSeek-R1-Distill、ChatGLM 等,还需要根据模型大小配置显存。比如 7B 量化模型通常需要 6GB 到 12GB 显存,14B 以上模型则需要更高规格 GPU。

2. 更新系统软件包

登录服务器后,先更新软件包:

sudo apt update
sudo apt upgrade -y

安装常用工具:

sudo apt install -y curl wget git vim htop net-tools unzip ca-certificates gnupg lsb-release

3. 创建专用部署目录

建议不要把 AI 工具部署在系统根目录下,可以创建一个统一目录,例如:

sudo mkdir -p /opt/ai-tools
sudo chown -R $USER:$USER /opt/ai-tools
cd /opt/ai-tools

后续所有项目都可以放在这个目录下,方便备份和迁移。


三、安装 Docker 和 Docker Compose

1. 卸载旧版本 Docker

如果服务器之前安装过旧版本 Docker,可以先卸载:

sudo apt remove -y docker docker-engine docker.io containerd runc

2. 安装 Docker 官方源

执行以下命令添加 Docker 官方 GPG key:

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

添加 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

更新软件包索引:

sudo apt update

3. 安装 Docker Engine

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

验证安装结果:

docker --version
docker compose version

运行测试容器:

sudo docker run hello-world

如果输出 hello-world 的说明信息,表示 Docker 安装成功。

4. 配置当前用户免 sudo 使用 Docker

生产环境中可以根据安全要求决定是否配置。如果是个人服务器,通常会把当前用户加入 docker 组:

sudo usermod -aG docker $USER

然后重新登录服务器,验证:

docker ps

如果不再提示权限错误,即配置成功。


四、AI 工具 Docker 部署的典型架构

生产环境中,不建议只启动一个孤立容器。更推荐使用 Docker Compose 管理多服务架构。一个典型 AI 工具部署架构如下:

用户浏览器
   |
   | HTTPS
   v
Nginx / Caddy 反向代理
   |
   | HTTP
   v
AI Web/API 服务
   |
   |---------------- PostgreSQL
   |---------------- Redis
   |---------------- Vector DB
   |---------------- MinIO
   |---------------- LLM API 或本地推理服务

其中:

  • Nginx 或 Caddy 负责域名访问、HTTPS 证书、反向代理;
  • AI Web/API 服务负责核心业务逻辑;
  • PostgreSQL 保存用户、配置、会话、知识库元数据;
  • Redis 用于缓存、任务队列或会话管理;
  • 向量数据库保存文档 embedding;
  • MinIO 用于存储上传文件;
  • 本地推理服务或第三方大模型 API 负责模型能力。

如果你的 AI 工具只需要数据库和 Redis,可以简化部署;如果涉及知识库和文件解析,则建议保留向量数据库和对象存储。


五、准备 Docker Compose 项目结构

假设我们要部署一个通用 AI 工具项目,可以采用如下目录结构:

/opt/ai-tools/my-ai-app
├── docker-compose.yml
├── .env
├── nginx
│   └── default.conf
├── data
│   ├── postgres
│   ├── redis
│   ├── minio
│   └── vector
├── logs
└── backup

创建目录:

cd /opt/ai-tools
mkdir -p my-ai-app/{nginx,data/postgres,data/redis,data/minio,data/vector,logs,backup}
cd my-ai-app

这个目录结构的优点是清晰、易维护:

  • docker-compose.yml 负责服务编排;
  • .env 保存环境变量;
  • data 保存持久化数据;
  • logs 保存日志;
  • backup 保存备份文件;
  • nginx 保存反向代理配置。

六、编写生产环境 docker-compose.yml

下面是一个较完整的示例,适合大多数 AI 工具改造使用。实际项目中,需要根据镜像名称、端口、环境变量进行调整。

services:
  app:
    image: your-registry/your-ai-app:latest
    container_name: ai_app
    restart: always
    env_file:
      - .env
    depends_on:
      - postgres
      - redis
      - qdrant
      - minio
    volumes:
      - ./logs/app:/app/logs
      - ./data/uploads:/app/uploads
    networks:
      - ai_net
    expose:
      - "3000"

  postgres:
    image: postgres:16
    container_name: ai_postgres
    restart: always
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    networks:
      - ai_net
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7
    container_name: ai_redis
    restart: always
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    volumes:
      - ./data/redis:/data
    networks:
      - ai_net

  qdrant:
    image: qdrant/qdrant:latest
    container_name: ai_qdrant
    restart: always
    volumes:
      - ./data/vector:/qdrant/storage
    networks:
      - ai_net
    expose:
      - "6333"

  minio:
    image: minio/minio:latest
    container_name: ai_minio
    restart: always
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
    volumes:
      - ./data/minio:/data
    networks:
      - ai_net
    expose:
      - "9000"
      - "9001"

  nginx:
    image: nginx:1.25
    container_name: ai_nginx
    restart: always
    depends_on:
      - app
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - ./logs/nginx:/var/log/nginx
      - ./certs:/etc/nginx/certs
    networks:
      - ai_net

networks:
  ai_net:
    driver: bridge

这个配置中,所有业务服务都放在 ai_net 网络内,只有 Nginx 对外暴露 80 和 443 端口。数据库、Redis、向量库和 MinIO 不直接暴露到公网,这是一种比较安全的生产环境做法。


七、配置环境变量 .env

在项目根目录创建 .env 文件:

vim .env

示例内容如下:

APP_ENV=production
APP_PORT=3000
APP_SECRET=please_change_this_secret

POSTGRES_DB=aiapp
POSTGRES_USER=aiuser
POSTGRES_PASSWORD=please_change_postgres_password

REDIS_PASSWORD=please_change_redis_password

QDRANT_URL=http://qdrant:6333

MINIO_ENDPOINT=http://minio:9000
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=please_change_minio_password
MINIO_BUCKET=ai-files

LLM_PROVIDER=openai
OPENAI_API_KEY=sk-your-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-4o-mini
EMBEDDING_MODEL=text-embedding-3-small

生产环境中,.env 文件非常重要,建议注意以下几点:

  1. 不要把 .env 提交到公开 Git 仓库;
  2. 密码必须使用强密码;
  3. API Key 要定期轮换;
  4. 如果多人协作,应通过密钥管理系统分发;
  5. 修改 .env 后通常需要重启容器才能生效。

设置文件权限:

chmod 600 .env

八、配置 Nginx 反向代理

假设 AI 工具内部服务监听 3000 端口,对外域名为 ai.example.com,可以编写如下 Nginx 配置:

server {
    listen 80;
    server_name ai.example.com;

    client_max_body_size 100M;

    location / {
        proxy_pass http://app:3000;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header Real-IP $remote_addr;
        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;
    }
}

保存到:

nginx/default.conf

这里有几个关键点:

  • client_max_body_size 100M 用于支持上传较大的文档;
  • proxy_read_timeout 300s 避免 AI 生成内容时间较长时连接被断开;
  • UpgradeConnection 用于支持 WebSocket;
  • proxy_pass http://app:3000 中的 app 是 Docker Compose 服务名,不是公网域名。

九、启动服务并检查状态

在项目目录下执行:

docker compose up -d

查看容器状态:

docker compose ps

查看日志:

docker compose logs -f app

如果某个服务启动失败,可以单独查看:

docker compose logs -f postgres
docker compose logs -f redis
docker compose logs -f qdrant
docker compose logs -f nginx

检查容器网络:

docker network ls
docker network inspect my-ai-app_ai_net

检查端口监听:

ss -tulnp | grep -E '80|443'

如果域名解析已经配置到服务器 IP,此时可以通过浏览器访问:

http://ai.example.com

十、配置 HTTPS 证书

生产环境不建议长期使用 HTTP,尤其是 AI 工具中可能包含用户登录、API Key、文档上传、聊天记录等敏感信息,必须启用 HTTPS。

方案一:使用 Caddy 自动签发证书

如果你希望简化 HTTPS 配置,可以把 Nginx 换成 Caddy。Caddy 可以自动申请和续期 Let's Encrypt 证书。

示例 Caddyfile:

ai.example.com {
    reverse_proxy app:3000
}

Docker Compose 中使用:

caddy:
  image: caddy:latest
  container_name: ai_caddy
  restart: always
  ports:
    - "80:80"
    - "443:443"
  volumes:
    - ./Caddyfile:/etc/caddy/Caddyfile
    - ./data/caddy:/data
    - ./config/caddy:/config
  networks:
    - ai_net

这种方式适合希望快速上线的团队。

方案二:Nginx + Certbot

如果继续使用 Nginx,可以通过 Certbot 获取证书:

sudo apt install -y certbot
sudo certbot certonly --standalone -d ai.example.com

证书路径通常为:

/etc/letsencrypt/live/ai.example.com/fullchain.pem
/etc/letsencrypt/live/ai.example.com/privkey.pem

然后可以挂载到 Nginx 容器中,配置 HTTPS:

server {
    listen 80;
    server_name ai.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name ai.example.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    client_max_body_size 100M;

    location / {
        proxy_pass http://app: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 https;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_read_timeout 300s;
        proxy_send_timeout 300s;
    }
}

十一、生产环境数据持久化策略

Docker 容器本身是可以删除和重建的,因此生产环境一定要做好数据持久化。常见需要持久化的数据包括:

  • PostgreSQL 数据;
  • Redis AOF/RDB 数据;
  • 向量数据库数据;
  • MinIO 文件;
  • 应用上传文件;
  • 日志文件;
  • 配置文件。

本文示例中通过本地目录挂载实现持久化,例如:

volumes:
  - ./data/postgres:/var/lib/postgresql/data

这意味着 PostgreSQL 数据实际保存在宿主机的:

/opt/ai-tools/my-ai-app/data/postgres

即使容器被删除,只要该目录还在,数据就不会丢失。

但要注意:持久化不等于备份。磁盘损坏、误删除、勒索软件、服务器故障都可能导致数据丢失。因此生产环境必须配置备份机制。


十二、数据库备份与恢复

以 PostgreSQL 为例,可以编写备份脚本:

mkdir -p backup

docker exec ai_postgres pg_dump \
  -U aiuser \
  -d aiapp \
  > backup/aiapp_$(date +%Y%m%d_%H%M%S).sql

也可以创建 backup.sh

#!/bin/bash

BACKUP_DIR="/opt/ai-tools/my-ai-app/backup"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

docker exec ai_postgres pg_dump -U aiuser -d aiapp \
  > $BACKUP_DIR/postgres_$DATE.sql

tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz \
  /opt/ai-tools/my-ai-app/data/uploads

tar -czf $BACKUP_DIR/minio_$DATE.tar.gz \
  /opt/ai-tools/my-ai-app/data/minio

find $BACKUP_DIR -type f -mtime +14 -delete

添加执行权限:

chmod +x backup.sh

配置定时任务:

crontab -e

每天凌晨 3 点备份:

0 3 * * * /opt/ai-tools/my-ai-app/backup.sh >> /opt/ai-tools/my-ai-app/logs/backup.log 2>&1

恢复 PostgreSQL 数据:

cat backup/postgres_20250101_030000.sql | docker exec -i ai_postgres psql -U aiuser -d aiapp

生产环境建议备份到异地,例如对象存储、NAS、另一台服务器或云厂商快照服务,避免本机故障导致备份一起丢失。


十三、日志管理与问题排查

Docker 默认会保存容器日志,如果长时间不处理,日志可能占满磁盘。可以配置 Docker 日志限制。

编辑 Docker daemon 配置:

sudo vim /etc/docker/daemon.json

写入:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "200m",
    "max-file": "5"
  }
}

重启 Docker:

sudo systemctl restart docker

注意:重启 Docker 会影响正在运行的容器,建议在维护窗口操作。

常用排查命令:

docker compose ps
docker compose logs -f app
docker stats
docker inspect ai_app
docker exec -it ai_app sh
docker compose restart app

如果应用无法连接数据库,重点检查:

  1. .env 中数据库用户名和密码是否正确;
  2. Compose 服务名是否写对,例如数据库地址应为 postgres,不是 localhost
  3. PostgreSQL 容器是否健康;
  4. 数据库端口是否在容器网络内可达;
  5. 应用是否在数据库完全启动前就开始初始化。

如果 Nginx 访问 502,重点检查:

  1. app 容器是否正常运行;
  2. proxy_pass 地址是否正确;
  3. app 服务监听端口是否为 3000
  4. app 是否只监听 127.0.0.1,而不是 0.0.0.0
  5. Nginx 和 app 是否在同一个 Docker 网络中。

十四、安全加固建议

AI 工具生产环境经常涉及敏感信息,例如企业文档、客户数据、内部知识库、API Key 和聊天记录,因此安全配置非常重要。

1. 不暴露数据库端口

生产环境中,PostgreSQL、Redis、Qdrant、MinIO 等服务不应直接暴露到公网。如果需要管理,可以通过 SSH 隧道或 VPN 访问。

错误示例:

ports:
  - "5432:5432"

如果不是必须,不要这样配置。

2. 使用强密码和最小权限

.env 中所有密码都要使用强密码,例如:

长度不少于 16 位,包含大小写字母、数字和特殊字符

同时不要使用默认账号密码,例如:

admin/admin
root/password
minioadmin/minioadmin

3. 限制服务器防火墙

可以使用 UFW:

sudo ufw allow OpenSSH
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
sudo ufw status

如果 SSH 使用自定义端口,需要提前放行,避免把自己锁在服务器外。

4. 定期更新镜像

可以定期拉取新镜像:

docker compose pull
docker compose up -d

但生产环境不建议盲目使用 latest 标签。更推荐使用固定版本,例如:

image: postgres:16.2
image: redis:7.2

这样可以避免镜像更新后出现不可预期问题。

5. API Key 不要写入前端代码

很多 AI 工具需要配置大模型 API Key。务必确保 API Key 只保存在后端环境变量或密钥管理系统中,不要暴露在前端页面、浏览器请求或公开仓库中。


十五、生产环境实测优化经验

以下是实际部署 AI 工具时比较常见、也比较有价值的经验。

1. AI 响应时间较长,要调大超时时间

大模型生成内容可能需要几十秒甚至几分钟。如果 Nginx 默认超时时间太短,用户会遇到请求中断。因此建议设置:

proxy_read_timeout 300s;
proxy_send_timeout 300s;

如果是长文生成、文件解析、Agent 自动任务,可以进一步调大。

2. 文件上传要限制大小

AI 知识库经常支持 PDF、Word、Excel、图片等文件上传。如果不限制大小,可能导致磁盘被恶意占满。可以在 Nginx 和应用层同时限制,例如:

client_max_body_size 100M;

同时在应用配置中限制单文件大小和用户总容量。

3. 向量数据库要单独备份

很多人只备份 PostgreSQL,忘记备份向量数据库。对于知识库系统来说,向量库非常关键。如果丢失,虽然可以重新解析文档生成 embedding,但会消耗大量时间和 API 成本。

因此建议备份:

data/vector

或者使用向量数据库自身的 snapshot 功能。

4. 不要在生产环境随意清理 Docker

很多运维习惯执行:

docker system prune -a

这个命令会删除未使用镜像、容器、网络和构建缓存。如果不熟悉,很可能误删生产环境需要的资源。建议清理前先查看:

docker system df
docker images
docker volume ls

对于绑定目录的数据通常不会被删除,但 Docker volume 有误删风险。

5. 设置健康检查

对于关键服务,建议增加 healthcheck。这样可以更容易判断服务是否真正可用,而不是容器仅仅处于 running 状态。

例如 PostgreSQL:

healthcheck:
  test: ["CMD-SHELL", "pg_isready -U aiuser -d aiapp"]
  interval: 10s
  timeout: 5s
  retries: 5

对于应用服务,如果有 /health 接口,也可以配置:

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
  interval: 30s
  timeout: 10s
  retries: 3

十六、如果需要部署本地大模型

如果 AI 工具需要调用本地模型,可以在 Docker Compose 中增加 Ollama、vLLM 或 text-generation-inference 等服务。

以 Ollama 为例:

ollama:
  image: ollama/ollama:latest
  container_name: ai_ollama
  restart: always
  volumes:
    - ./data/ollama:/root/.ollama
  networks:
    - ai_net
  ports:
    - "11434:11434"

如果需要 GPU,需要安装 NVIDIA Container Toolkit:

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

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/$distribution/libnvidia-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
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

验证 GPU 是否可用:

docker run --rm --gpus all nvidia/cuda:12.3.0-base-ubuntu22.04 nvidia-smi

如果能看到 GPU 信息,说明 Docker 已经可以调用显卡。


十七、升级与回滚策略

生产环境最怕“升级后不可用”。因此推荐使用以下流程:

  1. 在测试环境先升级;
  2. 备份数据库和关键数据;
  3. 拉取新镜像;
  4. 停止旧容器;
  5. 启动新容器;
  6. 检查日志和核心功能;
  7. 如果异常,立即回滚旧版本。

不要长期使用:

image: your-ai-app:latest

更推荐:

image: your-ai-app:1.3.2

升级时改成:

image: your-ai-app:1.3.3

如果新版本异常,只需要改回旧版本并执行:

docker compose up -d

即可快速回滚。


十八、完整上线检查清单

正式上线前,建议按以下清单检查:

  • [ ] 域名已经解析到服务器;
  • [ ] Docker 和 Docker Compose 安装正常;
  • [ ] .env 中密码和 API Key 已修改;
  • [ ] 数据库、Redis、向量库没有暴露公网端口;
  • [ ] Nginx 或 Caddy 已配置 HTTPS;
  • [ ] 文件上传大小限制已设置;
  • [ ] 容器日志大小限制已配置;
  • [ ] 数据库备份脚本已测试;
  • [ ] 备份文件可以正常恢复;
  • [ ] 防火墙只开放必要端口;
  • [ ] AI 工具核心功能测试通过;
  • [ ] 多用户并发访问测试通过;
  • [ ] API Key 没有出现在前端代码和公开日志中;
  • [ ] 已记录升级和回滚方案。

十九、总结

使用 Docker 部署 AI 工具,最大的价值不是“启动快”,而是让整个生产环境变得可复制、可维护、可迁移。对于 AI 应用来说,环境依赖复杂、服务组件众多、数据类型多样,如果没有容器化和标准化部署,很容易在后续维护中出现问题。

生产环境部署 AI 工具时,建议重点关注以下几点:

  1. 使用 Docker Compose 管理多服务;
  2. 只暴露 Nginx 或 Caddy,不直接暴露数据库;
  3. 所有关键数据必须持久化;
  4. 备份比持久化更重要;
  5. HTTPS 是生产环境必选项;
  6. API Key 和用户数据要重点保护;
  7. 升级前必须备份,并保留回滚方案;
  8. 本地模型部署需要额外关注 GPU 驱动和显存资源。

如果你的 AI 工具只是个人使用,按照本文方案可以快速完成上线;如果是企业内部生产系统,可以在此基础上继续扩展监控告警、集中日志、CI/CD、灰度发布和 Kubernetes 编排。总体来看,Docker 是 AI 工具从“能跑起来”走向“稳定运行”的关键一步。

目录结构
全文