从内网试用到正式上线:AI办公系统生产部署全流程实战指南
AI办公 生产环境部署指南|附完整命令
本文面向准备将“AI办公系统”部署到生产环境的团队,目标是搭建一个稳定、安全、可维护的企业级 AI 办公平台。
典型场景包括:AI文档问答、知识库检索、会议纪要生成、合同/制度解读、邮件草拟、日报周报生成、内部智能助手等。
一、生产环境部署目标
很多人在本地体验 AI 办公工具时,往往只关注“能不能跑起来”。但真正进入生产环境后,需要考虑的问题会更多,例如:
- 服务是否稳定?
- 是否支持多人同时访问?
- 数据是否安全?
- 文件、知识库、向量数据是否可持久化?
- 服务崩溃后能否自动恢复?
- 是否支持 HTTPS?
- 是否方便升级和备份?
- 是否便于后期接入大模型 API 或本地大模型?
因此,生产环境部署不能只是简单执行一条启动命令,而应该形成一套完整的标准化流程。
本文将以一套通用 AI 办公应用架构为例,使用 Docker Compose + Nginx + HTTPS + 数据持久化 + 日志管理 + 备份策略 来完成部署。
二、推荐生产架构
一个较完整的 AI 办公生产环境通常包含以下组件:
| 模块 | 作用 |
|---|---|
| Web 前端 | 用户访问 AI 办公系统的界面 |
| API 服务 | 处理业务逻辑、用户请求、权限、模型调用 |
| PostgreSQL | 存储用户、配置、文档元数据等结构化数据 |
| Redis | 缓存、任务队列、会话状态 |
| 向量数据库 | 存储知识库文档切片后的向量数据 |
| 对象存储/本地存储 | 存储上传的文档、图片、附件 |
| Nginx | 反向代理、HTTPS、负载转发 |
| 大模型服务 | 可使用 OpenAI、通义千问、DeepSeek、智谱、Claude 或本地模型 |
| 监控与日志 | 用于排查问题、定位性能瓶颈 |
| 备份任务 | 定期备份数据库、配置和文件 |
本文为了便于落地,采用如下部署方式:
- 操作系统:Ubuntu 22.04 LTS
- 容器管理:Docker + Docker Compose
- 数据库:PostgreSQL
- 缓存:Redis
- 反向代理:Nginx
- HTTPS:Certbot + Let’s Encrypt
- 应用部署目录:
/opt/ai-office
三、服务器配置建议
1. 基础配置
如果你只是部署企业内部 AI 办公应用,且主要调用外部大模型 API,可以选择:
| 规模 | CPU | 内存 | 磁盘 | 适用场景 |
|---|---|---|---|---|
| 小型团队 | 2 核 | 4GB | 80GB SSD | 10 人以内轻量使用 |
| 中小团队 | 4 核 | 8GB | 200GB SSD | 10~100 人 |
| 企业部门 | 8 核 | 16GB+ | 500GB SSD | 高频知识库问答、多人并发 |
| 本地大模型 | 16 核+ | 32GB+ | 1TB SSD | 需要本地推理,建议配 GPU |
如果你要运行本地大模型,还需要 GPU,例如:
- NVIDIA RTX 4090
- NVIDIA L20
- NVIDIA A10
- NVIDIA A100
- H100
但如果只是做 AI 办公应用,建议优先使用成熟的大模型 API,这样部署成本更低,稳定性也更好。
四、系统初始化
以下命令均以 Ubuntu 22.04 为例。
1. 更新系统
sudo apt update && sudo apt upgrade -y
2. 安装常用工具
sudo apt install -y \
curl \
wget \
git \
vim \
unzip \
tar \
htop \
net-tools \
ca-certificates \
gnupg \
lsb-release \
ufw
3. 设置服务器时区
sudo timedatectl set-timezone Asia/Shanghai
timedatectl
4. 创建部署目录
sudo mkdir -p /opt/ai-office
sudo chown -R $USER:$USER /opt/ai-office
cd /opt/ai-office
五、安装 Docker 和 Docker Compose
1. 卸载旧版本 Docker
sudo apt remove -y docker docker-engine docker.io containerd runc || true
2. 添加 Docker 官方源
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
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3. 安装 Docker
sudo apt update
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
4. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
5. 验证 Docker
docker version
docker compose version
6. 将当前用户加入 Docker 用户组
sudo usermod -aG docker $USER
执行后重新登录服务器,或执行:
newgrp docker
六、编写生产环境目录结构
建议目录结构如下:
/opt/ai-office
├── docker-compose.yml
├── .env
├── nginx
│ └── ai-office.conf
├── data
│ ├── postgres
│ ├── redis
│ ├── uploads
│ └── vector
├── logs
│ ├── nginx
│ └── app
└── backup
创建目录:
cd /opt/ai-office
mkdir -p nginx
mkdir -p data/postgres
mkdir -p data/redis
mkdir -p data/uploads
mkdir -p data/vector
mkdir -p logs/nginx
mkdir -p logs/app
mkdir -p backup
七、编写环境变量文件
创建 .env 文件:
vim /opt/ai-office/.env
写入以下内容:
# 基础配置
APP_NAME=AI Office
APP_ENV=production
APP_PORT=3000
API_PORT=8000
# 域名配置
DOMAIN=ai.example.com
PUBLIC_URL=https://ai.example.com
# 数据库配置
POSTGRES_DB=ai_office
POSTGRES_USER=ai_office_user
POSTGRES_PASSWORD=请替换为强密码
# Redis 配置
REDIS_PASSWORD=请替换为Redis强密码
# 文件上传配置
UPLOAD_DIR=/app/uploads
MAX_UPLOAD_SIZE=100MB
# JWT 密钥
JWT_SECRET=请替换为至少32位随机字符串
# 大模型 API 配置,可根据实际厂商修改
LLM_PROVIDER=openai
OPENAI_API_KEY=请替换为你的API_KEY
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
# Embedding 模型配置
EMBEDDING_MODEL=text-embedding-3-small
# 向量数据库配置
VECTOR_DB_PATH=/app/vector
# 日志级别
LOG_LEVEL=info
为了生成安全随机密码,可以使用:
openssl rand -base64 32
例如:
openssl rand -base64 48
八、编写 Docker Compose 配置
下面给出一个通用 AI 办公系统的生产部署模板。实际项目中,你可以将 ai-office-web 和 ai-office-api 替换成自己的镜像地址。
创建文件:
vim /opt/ai-office/docker-compose.yml
写入:
services:
postgres:
image: postgres:16
container_name: ai-office-postgres
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
TZ: Asia/Shanghai
volumes:
- ./data/postgres:/var/lib/postgresql/data
networks:
- ai-office-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-office-redis
restart: always
command: >
redis-server
--appendonly yes
--requirepass ${REDIS_PASSWORD}
volumes:
- ./data/redis:/data
networks:
- ai-office-net
healthcheck:
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
interval: 10s
timeout: 5s
retries: 5
api:
image: your-registry/ai-office-api:latest
container_name: ai-office-api
restart: always
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- ./data/uploads:/app/uploads
- ./data/vector:/app/vector
- ./logs/app:/app/logs
networks:
- ai-office-net
expose:
- "8000"
web:
image: your-registry/ai-office-web:latest
container_name: ai-office-web
restart: always
env_file:
- .env
depends_on:
- api
networks:
- ai-office-net
expose:
- "3000"
networks:
ai-office-net:
driver: bridge
注意:
如果你的 AI 办公系统使用的是开源项目,例如 Dify、MaxKB、FastGPT、AnythingLLM、Open WebUI 等,Docker Compose 文件会有所不同,但部署思路基本一致:应用服务、数据库、缓存、向量数据、文件存储必须持久化。
九、启动服务
在 /opt/ai-office 目录执行:
cd /opt/ai-office
docker compose pull
docker compose up -d
查看容器状态:
docker compose ps
查看日志:
docker compose logs -f
只查看 API 日志:
docker compose logs -f api
只查看数据库日志:
docker compose logs -f postgres
如果需要重启:
docker compose restart
停止服务:
docker compose down
十、初始化数据库
不同应用的初始化命令不同。一般来说,后端服务可能需要执行数据库迁移。
示例命令:
docker compose exec api npm run migrate
或者:
docker compose exec api python manage.py migrate
如果你的后端是 Node.js 项目,常见命令如下:
docker compose exec api npm run db:migrate
docker compose exec api npm run db:seed
如果是 Python FastAPI / Django 项目,可能是:
docker compose exec api alembic upgrade head
或:
docker compose exec api python manage.py migrate
创建管理员账号示例:
docker compose exec api npm run create-admin
或:
docker compose exec api python manage.py createsuperuser
十一、配置 Nginx 反向代理
生产环境不建议直接暴露容器端口给公网,而应该通过 Nginx 统一入口访问。
1. 安装 Nginx
sudo apt install -y nginx
设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
2. 创建 Nginx 配置
创建配置文件:
sudo vim /etc/nginx/sites-available/ai-office.conf
写入以下内容,请将 ai.example.com 替换为你的真实域名:
server {
listen 80;
server_name ai.example.com;
client_max_body_size 100M;
access_log /opt/ai-office/logs/nginx/access.log;
error_log /opt/ai-office/logs/nginx/error.log;
location /api/ {
proxy_pass http://127.0.0.1:8000/;
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_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
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_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
但是上面的配置要求宿主机能访问 127.0.0.1:3000 和 127.0.0.1:8000。如果你的 compose 没有将端口映射出来,需要修改 docker-compose.yml。
给 api 增加:
ports:
- "127.0.0.1:8000:8000"
给 web 增加:
ports:
- "127.0.0.1:3000:3000"
完整示例:
api:
image: your-registry/ai-office-api:latest
container_name: ai-office-api
restart: always
env_file:
- .env
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
volumes:
- ./data/uploads:/app/uploads
- ./data/vector:/app/vector
- ./logs/app:/app/logs
ports:
- "127.0.0.1:8000:8000"
networks:
- ai-office-net
web:
image: your-registry/ai-office-web:latest
container_name: ai-office-web
restart: always
env_file:
- .env
depends_on:
- api
ports:
- "127.0.0.1:3000:3000"
networks:
- ai-office-net
重新启动:
cd /opt/ai-office
docker compose up -d
启用 Nginx 站点:
sudo ln -s /etc/nginx/sites-available/ai-office.conf /etc/nginx/sites-enabled/ai-office.conf
测试配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
十二、配置 HTTPS 证书
生产环境必须启用 HTTPS,尤其是 AI 办公系统通常会涉及企业文档、合同、制度、客户信息等敏感数据。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
请确保域名已经解析到服务器公网 IP。
sudo certbot --nginx -d ai.example.com
按照提示输入邮箱并同意协议即可。
3. 测试自动续期
sudo certbot renew --dry-run
查看证书定时任务:
systemctl list-timers | grep certbot
十三、配置防火墙
生产环境建议只开放必要端口。
允许 SSH:
sudo ufw allow 22/tcp
允许 HTTP:
sudo ufw allow 80/tcp
允许 HTTPS:
sudo ufw allow 443/tcp
启用防火墙:
sudo ufw enable
查看状态:
sudo ufw status
如果你的 SSH 端口不是 22,请先放行自定义端口,否则可能导致无法远程登录。例如:
sudo ufw allow 2222/tcp
十四、接入大模型服务
AI 办公的核心能力来自大模型。生产环境建议至少支持两类模型:
- 对话模型:用于问答、写作、总结、分析;
- Embedding 模型:用于知识库检索、文档向量化。
1. 使用 OpenAI 兼容接口
如果你的供应商支持 OpenAI-compatible API,可以在 .env 中配置:
OPENAI_API_KEY=sk-xxxx
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4o-mini
EMBEDDING_MODEL=text-embedding-3-small
如果使用 DeepSeek:
OPENAI_API_KEY=sk-xxxx
OPENAI_BASE_URL=https://api.deepseek.com
OPENAI_MODEL=deepseek-chat
如果使用通义千问兼容接口:
OPENAI_API_KEY=sk-xxxx
OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
OPENAI_MODEL=qwen-plus
修改后重启服务:
cd /opt/ai-office
docker compose restart api
十五、部署本地大模型,使用 Ollama
如果你希望在企业内网运行本地大模型,可以使用 Ollama。它适合快速部署本地模型服务,但生产高并发场景建议使用 vLLM、TGI 等推理框架。
1. 安装 Ollama
curl -fsSL https://ollama.com/install.sh | sh
2. 启动 Ollama
sudo systemctl enable ollama
sudo systemctl start ollama
3. 下载模型
例如下载 Qwen2.5:
ollama pull qwen2.5:7b
运行测试:
ollama run qwen2.5:7b
4. 配置应用使用 Ollama
如果应用支持 OpenAI 兼容接口,可使用 Ollama 的接口地址:
OPENAI_BASE_URL=http://host.docker.internal:11434/v1
OPENAI_API_KEY=ollama
OPENAI_MODEL=qwen2.5:7b
Linux Docker 默认不一定支持 host.docker.internal,可以在 docker-compose.yml 的 api 服务中增加:
extra_hosts:
- "host.docker.internal:host-gateway"
重启:
docker compose up -d
十六、文件上传与知识库配置
AI 办公系统通常会上传大量文档,例如:
- Word 文档
- PDF 文件
- Excel 表格
- PPT 文件
- Markdown 文件
- 企业制度文档
- 产品手册
- 合同模板
- 客户 FAQ
生产环境需要注意以下几点:
1. 限制上传文件大小
Nginx 中已经配置:
client_max_body_size 100M;
应用环境变量中也建议配置:
MAX_UPLOAD_SIZE=100MB
2. 文件目录必须持久化
Compose 中已经将上传文件挂载到宿主机:
volumes:
- ./data/uploads:/app/uploads
这样即使容器重建,上传文件仍然保留。
3. 向量数据必须持久化
volumes:
- ./data/vector:/app/vector
知识库检索依赖向量数据,如果没有持久化,容器删除后知识库可能需要重新构建。
十七、日志管理
生产环境一定要关注日志,否则系统出现问题后很难定位。
1. 查看容器日志
docker compose logs -f api
docker compose logs -f web
docker compose logs -f postgres
docker compose logs -f redis
2. 查看 Nginx 日志
tail -f /opt/ai-office/logs/nginx/access.log
tail -f /opt/ai-office/logs/nginx/error.log
3. 限制 Docker 日志大小
编辑 Docker daemon 配置:
sudo vim /etc/docker/daemon.json
写入:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "5"
}
}
重启 Docker:
sudo systemctl restart docker
重新启动应用:
cd /opt/ai-office
docker compose up -d
十八、数据库备份
AI 办公系统中最重要的数据通常包括:
- 用户数据
- 权限配置
- 应用配置
- 文档元数据
- 对话记录
- 知识库索引信息
因此 PostgreSQL 必须定期备份。
1. 手动备份 PostgreSQL
cd /opt/ai-office
docker compose exec postgres pg_dump \
-U ai_office_user \
-d ai_office \
> backup/ai_office_$(date +%F_%H%M%S).sql
2. 压缩备份
gzip backup/ai_office_*.sql
3. 恢复数据库
先将备份文件解压:
gunzip backup/ai_office_2025-01-01_120000.sql.gz
恢复:
cat backup/ai_office_2025-01-01_120000.sql | \
docker compose exec -T postgres psql \
-U ai_office_user \
-d ai_office
4. 备份上传文件和向量数据
tar -czf backup/uploads_$(date +%F_%H%M%S).tar.gz data/uploads
tar -czf backup/vector_$(date +%F_%H%M%S).tar.gz data/vector
十九、自动备份脚本
创建脚本:
vim /opt/ai-office/backup.sh
写入:
#!/bin/bash
set -e
BASE_DIR="/opt/ai-office"
BACKUP_DIR="$BASE_DIR/backup"
DATE=$(date +%F_%H%M%S)
cd $BASE_DIR
echo "开始备份 PostgreSQL..."
docker compose exec -T postgres pg_dump \
-U ai_office_user \
-d ai_office \
> $BACKUP_DIR/postgres_$DATE.sql
gzip $BACKUP_DIR/postgres_$DATE.sql
echo "开始备份上传文件..."
tar -czf $BACKUP_DIR/uploads_$DATE.tar.gz data/uploads
echo "开始备份向量数据..."
tar -czf $BACKUP_DIR/vector_$DATE.tar.gz data/vector
echo "删除 15 天前的旧备份..."
find $BACKUP_DIR -type f -mtime +15 -delete
echo "备份完成:$DATE"
添加执行权限:
chmod +x /opt/ai-office/backup.sh
手动测试:
/opt/ai-office/backup.sh
添加定时任务:
crontab -e
每天凌晨 2 点执行:
0 2 * * * /opt/ai-office/backup.sh >> /opt/ai-office/logs/backup.log 2>&1
二十、应用升级流程
生产环境升级不能直接覆盖,建议按以下流程:
1. 查看当前版本
docker compose images
2. 备份数据
/opt/ai-office/backup.sh
3. 拉取新镜像
cd /opt/ai-office
docker compose pull
4. 重启服务
docker compose up -d
5. 查看日志
docker compose logs -f api
6. 如果升级失败,回滚镜像
建议生产环境不要使用 latest,而是固定版本号,例如:
image: your-registry/ai-office-api:v1.2.3
回滚时修改为旧版本:
image: your-registry/ai-office-api:v1.2.2
然后执行:
docker compose up -d
二十一、安全加固建议
AI 办公系统往往会处理企业敏感信息,因此安全配置非常重要。
1. 不要暴露数据库端口
PostgreSQL 和 Redis 不应映射到公网。Compose 中只通过内部网络访问即可。
不要这样写:
ports:
- "5432:5432"
也不要这样写:
ports:
- "6379:6379"
2. 使用强密码
以下配置必须使用强密码:
POSTGRES_PASSWORD=强密码
REDIS_PASSWORD=强密码
JWT_SECRET=随机长字符串
3. 限制后台访问
如果有管理后台,可以在 Nginx 中限制 IP:
location /admin/ {
allow 你的办公公网IP;
deny all;
proxy_pass http://127.0.0.1:3000;
}
4. 定期更新系统
sudo apt update && sudo apt upgrade -y
5. 禁止 root SSH 登录
编辑 SSH 配置:
sudo vim /etc/ssh/sshd_config
修改:
PermitRootLogin no
PasswordAuthentication no
重启 SSH:
sudo systemctl restart ssh
注意:关闭密码登录前,请确保你已经配置好 SSH Key,否则可能无法登录服务器。
二十二、常见问题排查
1. 容器启动失败
查看日志:
docker compose logs -f api
查看容器状态:
docker compose ps
2. Nginx 访问 502
常见原因是后端服务没有启动,或者端口没有映射。
检查端口:
ss -lntp | grep 3000
ss -lntp | grep 8000
检查 Nginx 配置:
sudo nginx -t
重启服务:
sudo systemctl reload nginx
docker compose restart
3. 上传大文件失败
检查 Nginx:
client_max_body_size 100M;
检查应用配置:
MAX_UPLOAD_SIZE=100MB
然后重载:
sudo systemctl reload nginx
docker compose restart api
4. 大模型调用失败
检查 API Key:
docker compose exec api env | grep OPENAI
查看日志:
docker compose logs -f api
测试网络:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer 你的API_KEY"
如果使用国内模型厂商,需要确认 BASE_URL 是否正确。
二十三、生产环境检查清单
上线前建议逐项检查:
- [ ] 域名已经解析到服务器
- [ ] Docker 和 Docker Compose 已安装
- [ ]
.env中密码已替换为强密码 - [ ] PostgreSQL 数据目录已持久化
- [ ] Redis 数据目录已持久化
- [ ] 上传文件目录已持久化
- [ ] 向量数据目录已持久化
- [ ] Nginx 已配置反向代理
- [ ] HTTPS 证书已申请成功
- [ ] 防火墙只开放 22、80、443
- [ ] 数据库和 Redis 未暴露公网
- [ ] 已配置自动备份
- [ ] 已配置日志大小限制
- [ ] 已测试大模型 API 调用
- [ ] 已创建管理员账号
- [ ] 已完成一次恢复演练
二十四、总结
AI 办公系统从“本地体验”到“生产可用”,关键不在于能否启动一个服务,而在于是否具备稳定运行能力。生产环境部署至少要关注五件事:
- 服务编排:使用 Docker Compose 管理应用、数据库、缓存等组件;
- 数据持久化:上传文件、数据库、向量数据都不能放在临时容器中;
- 安全访问:通过 Nginx 统一入口,启用 HTTPS,不暴露数据库端口;
- 可维护性:日志、备份、升级、回滚都要有明确流程;
- 模型配置:根据业务场景选择外部 API 或本地大模型。
如果你的团队刚开始建设 AI 办公平台,建议先采用外部大模型 API,优先把文档问答、知识库检索、会议纪要、邮件写作、制度查询等高频场景跑通。等业务稳定后,再根据成本、安全和性能要求,逐步引入本地模型、私有化向量数据库、监控告警和多节点部署。
按照本文的流程,你可以快速搭建一套具备生产环境基础能力的 AI 办公系统,并且后续可以平滑扩展到更复杂的企业级架构。