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

用 Docker Compose 搭一套 AI 办公平台:从配置文件到上线运维

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

AI办公 Docker部署教程|附配置文件

随着企业数字化办公的不断深入,越来越多团队开始将 AI 能力接入日常工作流,例如:智能问答、文档总结、会议纪要生成、知识库检索、代码辅助、客服自动回复、办公自动化审批等。相比传统软件部署方式,使用 Docker 部署 AI 办公系统具有环境一致、迁移方便、维护简单、扩展灵活等优势,非常适合企业内网、个人服务器、云服务器以及实验室环境使用。

本文将以一个通用的“AI 办公平台”部署思路为例,介绍如何使用 Docker Compose 快速搭建一套包含 Web 服务、数据库、缓存、向量数据库、反向代理等组件的 AI 办公系统。文章会提供完整配置文件示例,适合有一定 Linux 基础的用户参考使用。

说明:本文以通用 AI 办公系统架构为例,不绑定某一个具体商业产品。你可以将本文中的 ai-office 理解为一个支持大模型调用、知识库问答、文件管理、用户管理和办公自动化功能的 Web 应用。如果你部署的是具体开源项目,也可以根据项目实际镜像名和环境变量进行替换。


一、AI办公系统常见架构

一个完整的 AI 办公系统,通常不仅仅是一个 Web 页面,而是由多个服务组成。常见架构如下:

用户浏览器
   │
   ▼
Nginx / Caddy 反向代理
   │
   ▼
AI办公 Web 服务 / API 服务
   │
   ├── PostgreSQL / MySQL 数据库
   ├── Redis 缓存
   ├── 向量数据库 Milvus / Qdrant / Chroma
   ├── 文件存储 MinIO / 本地磁盘
   └── 大模型接口 OpenAI / 通义千问 / DeepSeek / Ollama

其中各组件作用如下:

组件 作用
Web/API 服务 提供用户界面、接口、业务逻辑
PostgreSQL/MySQL 存储用户、权限、文件记录、会话记录等结构化数据
Redis 缓存登录状态、任务队列、临时数据
向量数据库 存储知识库文档切片后的向量,用于语义检索
MinIO 存储上传的文档、图片、附件等对象文件
Nginx 反向代理、HTTPS 证书、访问控制
大模型服务 提供文本生成、总结、问答、代码生成等能力

在实际企业部署中,AI 办公平台经常还会对接 LDAP、企业微信、钉钉、飞书、邮件服务器、OA 系统等,但本文先聚焦基础 Docker 部署。


二、服务器环境准备

1. 推荐配置

根据使用人数和知识库规模不同,推荐配置会有所差异。一般来说:

使用场景 CPU 内存 磁盘 说明
个人测试 2 核 4GB 40GB 可运行基础服务
小团队 4 核 8GB 100GB 支持多人轻量使用
企业内网 8 核+ 16GB+ 200GB+ 建议拆分数据库与应用
本地大模型 8 核+ / GPU 32GB+ 500GB+ 视模型大小而定

如果你只调用外部大模型 API,例如 DeepSeek、OpenAI、通义千问、智谱、Moonshot 等,那么服务器不需要 GPU。如果你希望本地运行模型,例如通过 Ollama 部署 Qwen、Llama、DeepSeek-R1-Distill 等模型,则需要更高配置,最好具备 NVIDIA GPU。


2. 操作系统建议

推荐使用以下系统:

  • Ubuntu 22.04 LTS
  • Ubuntu 24.04 LTS
  • Debian 12
  • CentOS Stream / Rocky Linux / AlmaLinux

本文以 Ubuntu 22.04 为例。


三、安装 Docker 和 Docker Compose

1. 更新系统软件包

sudo apt update
sudo apt upgrade -y

2. 安装必要依赖

sudo apt install -y ca-certificates curl gnupg lsb-release

3. 安装 Docker

可以使用官方脚本快速安装:

curl -fsSL https://get.docker.com | sudo bash

安装完成后查看版本:

docker -v

如果能看到类似下面输出,说明安装成功:

Docker version 27.x.x, build xxxxx

4. 安装 Docker Compose

新版 Docker 一般已经内置 Compose 插件,可以执行:

docker compose version

如果显示版本号,例如:

Docker Compose version v2.x.x

说明可正常使用。

5. 将当前用户加入 Docker 组

sudo usermod -aG docker $USER

执行后建议重新登录服务器,或者执行:

newgrp docker

四、创建项目目录

为了方便管理,我们将 AI 办公系统部署到 /opt/ai-office 目录。

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

建议目录结构如下:

/opt/ai-office
├── docker-compose.yml
├── .env
├── nginx
│   └── default.conf
├── data
│   ├── postgres
│   ├── redis
│   ├── minio
│   └── qdrant
└── logs

创建目录:

mkdir -p nginx data/postgres data/redis data/minio data/qdrant logs

五、编写环境变量配置文件

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

nano .env

写入以下内容:

# =========================
# 基础配置
# =========================
APP_NAME=AI Office
APP_ENV=production
APP_PORT=8080
APP_URL=https://ai.example.com

# 请务必修改为随机字符串
APP_SECRET=change_this_to_a_long_random_secret

# =========================
# 数据库配置
# =========================
POSTGRES_DB=ai_office
POSTGRES_USER=ai_office_user
POSTGRES_PASSWORD=change_this_postgres_password
POSTGRES_PORT=5432

DATABASE_URL=postgresql://ai_office_user:change_this_postgres_password@postgres:5432/ai_office

# =========================
# Redis配置
# =========================
REDIS_PASSWORD=change_this_redis_password
REDIS_PORT=6379
REDIS_URL=redis://:change_this_redis_password@redis:6379/0

# =========================
# MinIO对象存储配置
# =========================
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=change_this_minio_password
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001

S3_ENDPOINT=http://minio:9000
S3_ACCESS_KEY=admin
S3_SECRET_KEY=change_this_minio_password
S3_BUCKET=ai-office
S3_REGION=us-east-1

# =========================
# 向量数据库配置
# =========================
QDRANT_PORT=6333
VECTOR_DB=qdrant
QDRANT_URL=http://qdrant:6333

# =========================
# 大模型API配置
# =========================
LLM_PROVIDER=deepseek
LLM_API_BASE=https://api.deepseek.com
LLM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
LLM_MODEL=deepseek-chat

# 如果使用OpenAI,可参考:
# LLM_PROVIDER=openai
# LLM_API_BASE=https://api.openai.com/v1
# LLM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
# LLM_MODEL=gpt-4o-mini

# 如果使用通义千问,可根据具体项目配置:
# LLM_PROVIDER=dashscope
# LLM_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
# LLM_MODEL=qwen-plus

# =========================
# 嵌入模型配置
# =========================
EMBEDDING_PROVIDER=openai-compatible
EMBEDDING_API_BASE=https://api.openai.com/v1
EMBEDDING_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxx
EMBEDDING_MODEL=text-embedding-3-small

# =========================
# 文件上传限制
# =========================
UPLOAD_MAX_SIZE=50MB
ALLOW_FILE_TYPES=pdf,docx,doc,txt,md,xlsx,pptx,png,jpg,jpeg

# =========================
# 管理员账号初始化
# =========================
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=ChangeThisAdminPassword123

需要注意:

  1. APP_SECRET 必须修改为足够长的随机字符串;
  2. 数据库、Redis、MinIO 密码不要使用默认值;
  3. APP_URL 要改成你的实际访问域名;
  4. LLM_API_KEY 根据你使用的大模型服务填写;
  5. 如果部署在内网,也可以将 APP_URL 设置为 http://服务器IP:端口

生成随机密钥可以使用:

openssl rand -base64 32

六、编写 Docker Compose 配置文件

/opt/ai-office 目录创建 docker-compose.yml

nano docker-compose.yml

写入以下内容:

services:
  ai-office:
    image: your-registry/ai-office:latest
    container_name: ai-office
    restart: unless-stopped
    env_file:
      - .env
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
      qdrant:
        condition: service_started
      minio:
        condition: service_started
    ports:
      - "${APP_PORT}:8080"
    volumes:
      - ./logs:/app/logs
      - ./data/uploads:/app/uploads
    networks:
      - ai-office-net

  postgres:
    image: postgres:16-alpine
    container_name: ai-office-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      TZ: Asia/Shanghai
    ports:
      - "${POSTGRES_PORT}:5432"
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - ai-office-net

  redis:
    image: redis:7-alpine
    container_name: ai-office-redis
    restart: unless-stopped
    command: >
      redis-server
      --requirepass ${REDIS_PASSWORD}
      --appendonly yes
    ports:
      - "${REDIS_PORT}:6379"
    volumes:
      - ./data/redis:/data
    networks:
      - ai-office-net

  qdrant:
    image: qdrant/qdrant:latest
    container_name: ai-office-qdrant
    restart: unless-stopped
    ports:
      - "${QDRANT_PORT}:6333"
    volumes:
      - ./data/qdrant:/qdrant/storage
    networks:
      - ai-office-net

  minio:
    image: minio/minio:latest
    container_name: ai-office-minio
    restart: unless-stopped
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
      TZ: Asia/Shanghai
    ports:
      - "${MINIO_API_PORT}:9000"
      - "${MINIO_CONSOLE_PORT}:9001"
    volumes:
      - ./data/minio:/data
    networks:
      - ai-office-net

networks:
  ai-office-net:
    driver: bridge

这里需要重点说明:

  • ai-office 是应用主服务,你需要把 your-registry/ai-office:latest 替换为实际镜像;
  • PostgreSQL 用于存储业务数据;
  • Redis 用于缓存和任务队列;
  • Qdrant 用于知识库向量检索;
  • MinIO 用于文件对象存储;
  • 所有服务使用同一个 Docker 网络,容器之间可通过服务名互相访问,例如 postgres:5432redis:6379

如果你的 AI 办公项目不需要 MinIO 或 Qdrant,可以删除对应服务,但多数知识库类项目都需要向量数据库。


七、启动服务

在项目目录执行:

docker compose up -d

查看容器状态:

docker compose ps

正常情况下可以看到类似:

NAME                  STATUS
ai-office             Up
ai-office-postgres    Up healthy
ai-office-redis       Up
ai-office-qdrant      Up
ai-office-minio       Up

查看日志:

docker compose logs -f ai-office

如果应用启动成功,通常会看到数据库连接成功、服务监听端口、初始化管理员账号等日志。


八、初始化 MinIO 存储桶

如果应用不会自动创建 Bucket,可以手动创建。先进入 MinIO 控制台:

http://服务器IP:9001

使用 .env 中配置的账号密码登录:

用户名:MINIO_ROOT_USER
密码:MINIO_ROOT_PASSWORD

然后创建一个名为:

ai-office

的 Bucket。

也可以使用 MinIO Client 创建:

docker run --rm -it --network ai-office_ai-office-net minio/mc:latest sh

进入容器后执行:

mc alias set local http://minio:9000 admin change_this_minio_password
mc mb local/ai-office
mc anonymous set none local/ai-office

注意将密码替换为你的实际 MinIO 密码。


九、配置 Nginx 反向代理

如果你希望通过域名访问,例如:

https://ai.example.com

建议使用 Nginx 作为反向代理。你可以选择直接在宿主机安装 Nginx,也可以用 Docker 启动 Nginx。下面提供 Docker 方式。

1. 创建 Nginx 配置

创建 nginx/default.conf

nano nginx/default.conf

写入:

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

    client_max_body_size 100m;

    location / {
        proxy_pass http://ai-office:8080;
        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;
    }
}

2. 将 Nginx 加入 Compose

如果你希望 Nginx 也由 Docker Compose 管理,可以在 docker-compose.yml 中追加:

  nginx:
    image: nginx:1.27-alpine
    container_name: ai-office-nginx
    restart: unless-stopped
    depends_on:
      - ai-office
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    networks:
      - ai-office-net

添加后重新启动:

docker compose up -d

然后访问:

http://ai.example.com

如果域名还没有解析,需要先在 DNS 服务商处添加 A 记录,将域名指向服务器公网 IP。


十、配置 HTTPS 证书

生产环境强烈建议启用 HTTPS。常见方式有两种:

  1. 使用宿主机 Nginx + Certbot;
  2. 使用 Caddy 自动申请证书;
  3. 使用 Docker 版 Nginx Proxy Manager;
  4. 手动上传证书到 Nginx 容器。

这里给出一个简单的 Caddy 配置方案。

1. 添加 Caddyfile

创建目录:

mkdir -p caddy
nano caddy/Caddyfile

写入:

ai.example.com {
    reverse_proxy ai-office:8080
    request_body {
        max_size 100MB
    }
}

2. Compose 中添加 Caddy 服务

  caddy:
    image: caddy:2-alpine
    container_name: ai-office-caddy
    restart: unless-stopped
    depends_on:
      - ai-office
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro
      - ./data/caddy/data:/data
      - ./data/caddy/config:/config
    networks:
      - ai-office-net

使用 Caddy 时,你可以不再使用 Nginx。Caddy 会自动申请和续期 Let’s Encrypt 证书,但前提是:

  • 域名已经解析到当前服务器;
  • 服务器的 80 和 443 端口开放;
  • 云服务器安全组允许 80/443 入站访问。

十一、使用 Ollama 部署本地大模型

如果你不希望调用外部 API,也可以在本地部署 Ollama。Ollama 可以较方便地运行 Qwen、Llama、DeepSeek-R1-Distill 等模型。

1. Compose 添加 Ollama

docker-compose.yml 中添加:

  ollama:
    image: ollama/ollama:latest
    container_name: ai-office-ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ./data/ollama:/root/.ollama
    networks:
      - ai-office-net

启动:

docker compose up -d

2. 下载模型

例如下载 Qwen2.5 7B:

docker exec -it ai-office-ollama ollama pull qwen2.5:7b

或者下载 DeepSeek-R1 蒸馏模型:

docker exec -it ai-office-ollama ollama pull deepseek-r1:7b

3. 修改 .env

如果你的应用支持 OpenAI Compatible 接口,可以这样配置:

LLM_PROVIDER=openai-compatible
LLM_API_BASE=http://ollama:11434/v1
LLM_API_KEY=ollama
LLM_MODEL=qwen2.5:7b

然后重启应用:

docker compose restart ai-office

需要注意,本地模型效果和速度取决于服务器配置。如果没有 GPU,7B 模型可能响应较慢;如果用于企业多人并发,建议使用 GPU 或调用云端大模型 API。


十二、首次访问与系统初始化

服务启动后,如果没有配置域名,可以通过以下地址访问:

http://服务器IP:8080

如果配置了反向代理:

http://ai.example.com

或:

https://ai.example.com

首次进入系统后,一般需要完成以下设置:

  1. 创建管理员账号;
  2. 配置大模型供应商;
  3. 配置 Embedding 模型;
  4. 创建知识库;
  5. 上传测试文档;
  6. 测试文档问答;
  7. 添加普通用户;
  8. 配置部门、权限和角色;
  9. 根据实际办公流程配置智能助手。

如果系统支持初始化管理员账号,可以直接使用 .env 中配置的:

ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=ChangeThisAdminPassword123

登录后请立即修改管理员密码。


十三、知识库使用建议

AI 办公系统最常用的能力之一就是知识库问答。部署完成后,可以按照以下流程创建知识库:

  1. 新建知识库,例如“公司制度库”“产品文档库”“客服话术库”;
  2. 上传 PDF、Word、Markdown、TXT 等文件;
  3. 等待系统解析文件并切片;
  4. 调用 Embedding 模型生成向量;
  5. 存入 Qdrant 等向量数据库;
  6. 用户提问时先进行向量检索;
  7. 将检索结果作为上下文交给大模型生成回答。

为了获得更好的效果,建议:

  • 文档标题清晰;
  • 文件内容结构化,例如使用一级标题、二级标题;
  • 避免上传大量扫描版 PDF;
  • 重要制度文档尽量使用 Markdown、DOCX、TXT;
  • 定期更新失效内容;
  • 对敏感知识库设置访问权限;
  • 对模型回答增加“引用来源”要求。

如果系统支持 Prompt 配置,可以为知识库助手添加类似提示词:

你是企业内部知识库助手。
回答问题时必须基于已检索到的文档内容。
如果文档中没有相关信息,请明确说明“当前知识库未找到相关内容”,不要编造。
回答要简洁、准确,并尽可能列出依据来源。

十四、常用运维命令

1. 查看服务状态

docker compose ps

2. 查看全部日志

docker compose logs -f

3. 查看某个服务日志

docker compose logs -f ai-office
docker compose logs -f postgres
docker compose logs -f redis
docker compose logs -f qdrant

4. 重启服务

docker compose restart

重启单个服务:

docker compose restart ai-office

5. 停止服务

docker compose down

6. 更新镜像

docker compose pull
docker compose up -d

7. 进入容器

docker exec -it ai-office sh

或者:

docker exec -it ai-office bash

具体取决于镜像是否包含 bash。


十五、数据备份方案

AI 办公系统涉及大量重要数据,包括用户数据、聊天记录、知识库文档、向量数据、对象存储文件等。生产环境必须定期备份。

1. 备份 PostgreSQL

mkdir -p /opt/ai-office/backup

docker exec ai-office-postgres pg_dump \
  -U ai_office_user \
  ai_office > /opt/ai-office/backup/ai_office_$(date +%F).sql

2. 备份 MinIO 文件

如果使用本地挂载目录,可以直接打包:

tar -czf /opt/ai-office/backup/minio_$(date +%F).tar.gz /opt/ai-office/data/minio

3. 备份 Qdrant 数据

tar -czf /opt/ai-office/backup/qdrant_$(date +%F).tar.gz /opt/ai-office/data/qdrant

4. 编写自动备份脚本

创建脚本:

nano /opt/ai-office/backup.sh

写入:

#!/bin/bash

set -e

BACKUP_DIR="/opt/ai-office/backup"
DATE=$(date +%F_%H-%M-%S)

mkdir -p "$BACKUP_DIR"

echo "开始备份数据库..."
docker exec ai-office-postgres pg_dump \
  -U ai_office_user \
  ai_office > "$BACKUP_DIR/postgres_$DATE.sql"

echo "开始备份MinIO..."
tar -czf "$BACKUP_DIR/minio_$DATE.tar.gz" /opt/ai-office/data/minio

echo "开始备份Qdrant..."
tar -czf "$BACKUP_DIR/qdrant_$DATE.tar.gz" /opt/ai-office/data/qdrant

echo "清理30天前的备份..."
find "$BACKUP_DIR" -type f -mtime +30 -delete

echo "备份完成:$DATE"

赋予执行权限:

chmod +x /opt/ai-office/backup.sh

添加定时任务:

crontab -e

每天凌晨 2 点备份:

0 2 * * * /opt/ai-office/backup.sh >> /opt/ai-office/backup/backup.log 2>&1

十六、安全加固建议

AI 办公系统往往包含企业内部文档,因此安全非常重要。

1. 修改所有默认密码

包括:

  • 管理员密码;
  • 数据库密码;
  • Redis 密码;
  • MinIO 密码;
  • 大模型 API Key;
  • 服务器 SSH 密码或密钥。

2. 限制数据库端口暴露

如果 PostgreSQL、Redis、Qdrant 只给 Docker 内部服务访问,建议不要映射到公网端口。可以删除以下配置:

ports:
  - "${POSTGRES_PORT}:5432"

Redis、Qdrant 同理。生产环境通常只暴露 Web 服务端口或反向代理端口。

3. 配置防火墙

Ubuntu 可以使用 UFW:

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status

如果你只通过 8080 访问,也可以开放:

sudo ufw allow 8080/tcp

但生产环境更推荐只开放 80/443。

4. 使用 HTTPS

登录、文件上传、API Key 配置等操作都应通过 HTTPS 进行,避免明文传输。

5. 控制知识库权限

不同部门的文档不要放在同一个公共知识库中。建议按照部门、项目、密级划分权限,例如:

  • 公共制度库;
  • 产品知识库;
  • 财务制度库;
  • 人事制度库;
  • 客服知识库;
  • 研发技术文档库。

6. 定期轮换 API Key

如果系统调用第三方大模型 API,建议定期更换 Key,并设置调用额度,避免 Key 泄露后产生高额费用。


十七、常见问题排查

1. 页面无法访问

检查容器是否启动:

docker compose ps

检查端口是否监听:

ss -tunlp | grep 8080

检查防火墙和云服务器安全组是否放行端口。


2. 数据库连接失败

查看 PostgreSQL 日志:

docker compose logs -f postgres

确认 .env 中的 DATABASE_URL 是否正确,尤其是用户名、密码、数据库名和主机名。Docker 内部连接数据库时,主机名应该使用服务名:

postgres

而不是 127.0.0.1


3. Redis 认证失败

确认 REDIS_PASSWORDREDIS_URL 中密码一致:

REDIS_PASSWORD=change_this_redis_password
REDIS_URL=redis://:change_this_redis_password@redis:6379/0

修改后重启:

docker compose restart redis ai-office

4. 知识库上传后无法问答

可能原因包括:

  • Embedding API Key 配置错误;
  • 向量数据库未启动;
  • 文档解析失败;
  • 文件格式不支持;
  • 模型上下文长度不足;
  • 知识库没有完成索引。

排查日志:

docker compose logs -f ai-office
docker compose logs -f qdrant

5. MinIO 上传失败

检查 Bucket 是否存在,确认以下配置一致:

S3_ENDPOINT=http://minio:9000
S3_ACCESS_KEY=admin
S3_SECRET_KEY=change_this_minio_password
S3_BUCKET=ai-office

如果应用运行在 Docker 网络内,Endpoint 应该使用:

http://minio:9000

如果外部工具访问 MinIO,则使用服务器 IP 或域名。


6. 大模型调用失败

常见原因:

  • API Key 错误;
  • 模型名称不正确;
  • API Base 地址缺少 /v1
  • 账户余额不足;
  • 服务商网络访问受限;
  • 请求超时。

建议先用 curl 测试接口,例如 OpenAI Compatible 接口:

curl "${LLM_API_BASE}/chat/completions" \
  -H "Authorization: Bearer ${LLM_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-chat",
    "messages": [
      {"role": "user", "content": "你好,请简单介绍一下你自己"}
    ]
  }'

十八、生产环境优化建议

当 AI 办公系统从测试走向生产时,可以进一步优化:

1. 服务拆分

将数据库、对象存储、向量数据库拆分到独立服务器,提升稳定性。

2. 使用云数据库

如果团队没有专业 DBA,可以考虑使用云厂商 PostgreSQL、Redis、对象存储服务,降低运维压力。

3. 增加监控

可以使用 Prometheus、Grafana、Uptime Kuma 等工具监控:

  • 服务在线状态;
  • CPU 使用率;
  • 内存使用率;
  • 磁盘空间;
  • API 调用耗时;
  • 大模型调用错误率。

4. 日志归档

生产环境不要只依赖容器日志,建议接入 ELK、Loki、Graylog 等日志系统,便于排查问题。

5. 设置资源限制

可以在 Compose 中为服务设置资源限制,避免某个服务占满服务器资源。例如:

deploy:
  resources:
    limits:
      cpus: "2"
      memory: 4G

需要注意,普通 Docker Compose 对 deploy 字段支持有限,部分配置主要用于 Swarm。如果需要更严格的资源限制,可以使用 Docker run 参数或 Kubernetes。


十九、完整部署流程总结

整体流程可以总结为:

安装 Docker
   ↓
创建项目目录
   ↓
编写 .env
   ↓
编写 docker-compose.yml
   ↓
启动服务
   ↓
初始化 MinIO Bucket
   ↓
配置大模型 API
   ↓
配置域名和 HTTPS
   ↓
创建知识库
   ↓
上传文档测试
   ↓
设置备份和安全策略

对于个人或小团队来说,使用 Docker Compose 部署 AI 办公平台是成本最低、上手最快的方案。它既能满足日常知识库问答、文档总结、智能写作等需求,也方便后续迁移到更复杂的 Kubernetes 或云原生环境。


二十、结语

AI 办公系统的核心价值并不只是“接入一个聊天机器人”,而是将大模型能力与企业内部知识、流程和数据结合起来。通过 Docker 部署,我们可以快速搭建一套可控、可迁移、可扩展的 AI 办公基础平台,并在此基础上逐步扩展知识库、智能助手、自动化流程、数据分析等功能。

本文提供了从环境准备、Docker Compose 编排、数据库配置、对象存储、向量数据库、反向代理、HTTPS、本地模型、备份、安全加固到故障排查的一整套参考方案。你可以根据实际项目镜像和业务需求调整配置文件,最终形成适合自己团队的 AI 办公部署方案。

如果是生产环境,务必重点关注三件事:数据安全、定期备份、权限隔离。只有在稳定可靠的基础设施之上,AI 办公才能真正成为提高团队效率的工具,而不是新的运维负担。

目录结构
全文