内网也能用的智能办公平台搭建指南:Docker一键部署与完整配置
AI办公 部署完整教程|附配置文件
本文将从零开始,带你部署一套可本地化运行的“AI办公系统”。该系统适合企业内部知识问答、文档总结、邮件撰写、会议纪要生成、表格辅助分析、流程自动化等场景。教程以 Docker Compose 为核心,组合使用 Ollama + Open WebUI + Nginx,并预留知识库、API调用和企业内网访问扩展能力。
一、什么是AI办公系统?
所谓“AI办公”,并不是单纯安装一个聊天机器人,而是将大模型能力嵌入日常办公流程中,例如:
- 帮你撰写周报、日报、邮件、通知;
- 对Word、PDF、Excel等文档进行总结和问答;
- 根据会议录音或会议纪要生成行动项;
- 辅助编写方案、合同、标书、运营文案;
- 将企业内部资料接入知识库,实现内部问答;
- 通过API接入OA、CRM、ERP、工单系统;
- 在内网部署,避免敏感数据上传到公网平台。
本文部署的方案偏向“轻量级、易落地、可扩展”,适合个人、团队、小型企业先行试用,也可以作为后续建设企业级AI办公平台的基础。
二、整体架构说明
本教程采用如下架构:
用户浏览器
↓
Nginx反向代理
↓
Open WebUI 前端界面
↓
Ollama 本地大模型服务
↓
本地模型:qwen、llama、deepseek、mistral等
各组件作用如下:
| 组件 | 作用 |
|---|---|
| Ollama | 本地大模型运行服务,负责加载和推理模型 |
| Open WebUI | 类似ChatGPT的网页界面,支持多用户、聊天、模型管理 |
| Nginx | 反向代理,方便域名访问、HTTPS配置、统一入口 |
| Docker Compose | 一键编排多个服务,便于部署和维护 |
| 本地模型 | 提供实际AI能力,例如写作、总结、问答、代码生成 |
本方案最大的优点是:
部署简单、成本低、数据可控、适合内网使用。
三、服务器配置建议
AI办公系统对硬件有一定要求,尤其是本地运行大模型时,内存和显存非常重要。
1. 最低配置
适合个人测试:
| 项目 | 配置 |
|---|---|
| CPU | 4核 |
| 内存 | 8GB |
| 硬盘 | 50GB |
| GPU | 可无 |
| 系统 | Ubuntu 22.04 / Debian 12 / CentOS 7+ |
可运行较小模型,例如:
- qwen2.5:3b
- llama3.2:3b
- gemma2:2b
2. 推荐配置
适合团队内部使用:
| 项目 | 配置 |
|---|---|
| CPU | 8核以上 |
| 内存 | 32GB以上 |
| 硬盘 | 200GB SSD |
| GPU | NVIDIA 8GB显存以上 |
| 系统 | Ubuntu 22.04 LTS |
可运行:
- qwen2.5:7b
- llama3.1:8b
- deepseek-r1:7b
- mistral:7b
3. 企业级配置
适合多人并发、知识库、自动化流程:
| 项目 | 配置 |
|---|---|
| CPU | 16核以上 |
| 内存 | 64GB以上 |
| 硬盘 | 500GB SSD或更高 |
| GPU | NVIDIA 24GB显存以上 |
| 网络 | 千兆内网 |
| 系统 | Ubuntu Server 22.04 LTS |
可运行:
- qwen2.5:14b
- llama3.1:70b量化版
- deepseek-r1:14b / 32b量化版
四、部署前准备
本文以 Ubuntu 22.04 为例。
1. 更新系统
sudo apt update
sudo apt upgrade -y
2. 安装常用工具
sudo apt install -y curl wget git vim unzip net-tools ca-certificates gnupg lsb-release
3. 安装Docker
curl -fsSL https://get.docker.com | bash
启动Docker:
sudo systemctl enable docker
sudo systemctl start docker
查看版本:
docker version
4. 安装Docker Compose
新版Docker通常已内置Compose插件,可直接检查:
docker compose version
如果没有安装,可执行:
sudo apt install -y docker-compose-plugin
五、创建项目目录
建议将AI办公系统统一放到 /opt/ai-office 目录下:
sudo mkdir -p /opt/ai-office
sudo chown -R $USER:$USER /opt/ai-office
cd /opt/ai-office
创建必要目录:
mkdir -p nginx/conf.d
mkdir -p nginx/certs
mkdir -p data/ollama
mkdir -p data/open-webui
目录结构如下:
/opt/ai-office
├── docker-compose.yml
├── .env
├── nginx
│ ├── conf.d
│ │ └── ai-office.conf
│ └── certs
├── data
│ ├── ollama
│ └── open-webui
六、编写环境变量配置文件
在项目根目录创建 .env 文件:
vim .env
写入以下内容:
# 项目名称
COMPOSE_PROJECT_NAME=ai-office
# Open WebUI端口
OPEN_WEBUI_PORT=3000
# Ollama端口
OLLAMA_PORT=11434
# Nginx HTTP端口
NGINX_HTTP_PORT=80
# Nginx HTTPS端口,如暂不启用HTTPS可先保留
NGINX_HTTPS_PORT=443
# 默认管理员邮箱,可在首次登录后创建管理员
ADMIN_EMAIL=admin@example.com
# 时区
TZ=Asia/Shanghai
说明:
OPEN_WEBUI_PORT:Open WebUI容器内部服务端口;OLLAMA_PORT:Ollama API端口;NGINX_HTTP_PORT:对外访问端口;TZ:设置为中国时区,方便日志时间准确。
七、编写Docker Compose配置文件
在 /opt/ai-office 下创建 docker-compose.yml:
vim docker-compose.yml
写入以下完整配置:
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
container_name: ai-office-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ./data/ollama:/root/.ollama
environment:
- TZ=${TZ}
networks:
- ai-office-net
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-office-open-webui
restart: unless-stopped
depends_on:
- ollama
ports:
- "${OPEN_WEBUI_PORT}:8080"
volumes:
- ./data/open-webui:/app/backend/data
environment:
- TZ=${TZ}
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=true
- ENABLE_SIGNUP=true
- DEFAULT_USER_ROLE=user
networks:
- ai-office-net
nginx:
image: nginx:1.25-alpine
container_name: ai-office-nginx
restart: unless-stopped
depends_on:
- open-webui
ports:
- "${NGINX_HTTP_PORT}:80"
- "${NGINX_HTTPS_PORT}:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/certs:/etc/nginx/certs
environment:
- TZ=${TZ}
networks:
- ai-office-net
networks:
ai-office-net:
driver: bridge
这份配置会启动三个服务:
ollama:负责运行本地大模型;open-webui:提供网页聊天界面;nginx:提供统一访问入口。
八、编写Nginx反向代理配置
创建配置文件:
vim nginx/conf.d/ai-office.conf
写入以下内容:
server {
listen 80;
server_name _;
client_max_body_size 200m;
location / {
proxy_pass http://open-webui: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 3600;
proxy_send_timeout 3600;
}
}
配置说明:
client_max_body_size 200m:允许上传较大的PDF、Word、Excel文件;proxy_read_timeout 3600:防止大模型长时间回答时连接中断;Upgrade和Connection:支持WebSocket连接。
如果你有域名,例如 ai.example.com,可以将:
server_name _;
改为:
server_name ai.example.com;
九、启动AI办公系统
在项目目录下执行:
docker compose up -d
查看容器状态:
docker ps
正常情况下会看到三个容器:
ai-office-ollama
ai-office-open-webui
ai-office-nginx
查看日志:
docker compose logs -f
如果没有报错,说明基础服务已经部署成功。
十、下载并运行本地模型
Ollama启动后,还需要下载模型。
进入Ollama容器:
docker exec -it ai-office-ollama bash
下载中文能力较好的模型:
ollama pull qwen2.5:7b
也可以下载更小的模型:
ollama pull qwen2.5:3b
或下载推理模型:
ollama pull deepseek-r1:7b
查看已安装模型:
ollama list
测试模型是否可用:
ollama run qwen2.5:7b
输入:
请帮我写一份项目周报模板。
如果能正常输出内容,说明模型运行成功。
十一、访问AI办公系统
在浏览器中访问:
http://服务器IP
如果你没有使用Nginx,也可以访问:
http://服务器IP:3000
首次打开Open WebUI时,需要注册一个账号。第一个注册的用户通常会成为管理员。
注册完成后,进入后台可以看到模型列表。如果没有显示模型,可以检查Open WebUI是否正确连接Ollama。
十二、常用办公场景提示词
部署完成后,你可以直接将AI用于日常办公。以下是一些实用提示词。
1. 周报生成
你是一名专业项目经理,请根据以下内容生成一份结构清晰的项目周报。
要求包括:本周完成事项、存在问题、风险点、下周计划。
内容如下:
【粘贴工作内容】
2. 邮件润色
请帮我将下面这封邮件改写得更加正式、清晰、礼貌,适合发送给客户。
邮件内容:
【粘贴邮件】
3. 会议纪要整理
请根据以下会议记录生成会议纪要。
要求包含:会议主题、参会人员、讨论要点、决议事项、待办任务、负责人、截止时间。
会议记录:
【粘贴内容】
4. 文档总结
请将以下文档内容总结为三部分:
1. 核心观点
2. 关键数据
3. 可执行建议
文档内容:
【粘贴文档】
5. Excel数据分析思路
你是一名数据分析师,请根据以下表格数据,分析业务趋势、异常点和优化建议。
数据如下:
【粘贴表格数据】
十三、开启HTTPS访问
如果你的AI办公系统需要公网访问,强烈建议启用HTTPS。
假设你已经有证书文件:
nginx/certs/fullchain.pem
nginx/certs/privkey.pem
修改 nginx/conf.d/ai-office.conf:
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 200m;
location / {
proxy_pass http://open-webui: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 https;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
}
重启Nginx:
docker compose restart nginx
访问:
https://ai.example.com
十四、配置GPU加速
如果服务器有NVIDIA显卡,建议启用GPU推理,否则大模型回答速度可能较慢。
1. 安装NVIDIA驱动
查看显卡:
lspci | grep -i nvidia
安装驱动后确认:
nvidia-smi
如果能看到显卡信息,说明驱动正常。
2. 安装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.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
3. 修改docker-compose.yml
将 ollama 服务改为支持GPU:
ollama:
image: ollama/ollama:latest
container_name: ai-office-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ./data/ollama:/root/.ollama
environment:
- TZ=${TZ}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
networks:
- ai-office-net
然后重启:
docker compose down
docker compose up -d
进入容器运行模型时,Ollama会自动优先使用GPU。
十五、模型选择建议
不同办公场景适合不同模型。
| 场景 | 推荐模型 |
|---|---|
| 中文写作 | qwen2.5:7b、qwen2.5:14b |
| 日常问答 | llama3.1:8b、qwen2.5:7b |
| 推理分析 | deepseek-r1:7b、deepseek-r1:14b |
| 代码辅助 | qwen2.5-coder:7b |
| 低配置机器 | qwen2.5:3b、llama3.2:3b |
| 高质量输出 | qwen2.5:14b、deepseek-r1:32b |
如果你的机器配置有限,建议优先选择 qwen2.5:7b。它在中文办公、总结、写作、问答方面表现比较均衡。
十六、数据安全与权限建议
企业部署AI办公系统时,必须注意数据安全。
1. 不建议直接公网裸奔
如果必须公网访问,至少应做到:
- 开启HTTPS;
- 使用强密码;
- 关闭自由注册;
- 增加防火墙限制;
- 配置访问白名单;
- 定期备份数据。
2. 关闭用户注册
当管理员账号创建完成后,可以修改 docker-compose.yml 中Open WebUI环境变量:
- ENABLE_SIGNUP=false
然后重启:
docker compose restart open-webui
这样新用户就不能随意注册。
3. 限制端口访问
建议仅对外开放Nginx端口,不直接暴露Ollama端口。
如果只允许内网访问,可使用防火墙:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw deny 11434/tcp
sudo ufw enable
如果只在内网使用,甚至可以不开放公网端口。
十七、备份与恢复
AI办公系统的重要数据主要包括:
- Open WebUI用户数据;
- 聊天记录;
- 模型文件;
- 配置文件;
- 上传的知识库文件。
1. 备份
cd /opt
tar -zcvf ai-office-backup-$(date +%F).tar.gz ai-office
2. 恢复
将备份文件上传到新服务器:
cd /opt
tar -zxvf ai-office-backup-2025-01-01.tar.gz
cd ai-office
docker compose up -d
3. 定时备份
创建脚本:
vim /opt/backup-ai-office.sh
内容如下:
#!/bin/bash
BACKUP_DIR="/opt/backups"
PROJECT_DIR="/opt/ai-office"
DATE=$(date +%F-%H%M)
mkdir -p ${BACKUP_DIR}
tar -zcvf ${BACKUP_DIR}/ai-office-${DATE}.tar.gz ${PROJECT_DIR}
find ${BACKUP_DIR} -name "ai-office-*.tar.gz" -mtime +7 -delete
赋予执行权限:
chmod +x /opt/backup-ai-office.sh
配置定时任务:
crontab -e
加入:
0 2 * * * /opt/backup-ai-office.sh
表示每天凌晨2点自动备份,并删除7天前的旧备份。
十八、常见问题排查
1. 访问页面打不开
检查容器是否运行:
docker ps
查看日志:
docker compose logs nginx
docker compose logs open-webui
检查端口是否占用:
sudo netstat -tulnp | grep 80
如果80端口被占用,可以修改 .env:
NGINX_HTTP_PORT=8080
然后重启:
docker compose up -d
访问:
http://服务器IP:8080
2. Open WebUI看不到模型
检查Ollama是否有模型:
docker exec -it ai-office-ollama ollama list
检查Open WebUI是否能访问Ollama:
docker exec -it ai-office-open-webui curl http://ollama:11434/api/tags
如果能返回模型列表,说明连接正常。
3. 模型回答很慢
可能原因:
- CPU推理性能不足;
- 模型太大;
- 内存不够;
- 没有启用GPU;
- 并发用户太多。
解决方法:
- 换小模型,例如
qwen2.5:3b; - 增加内存;
- 启用GPU;
- 减少上下文长度;
- 限制多人同时使用。
4. 上传文件失败
检查Nginx配置:
client_max_body_size 200m;
如果文件更大,可以改成:
client_max_body_size 500m;
然后重启Nginx:
docker compose restart nginx
十九、升级系统
升级前建议先备份:
cd /opt
tar -zcvf ai-office-before-upgrade.tar.gz ai-office
拉取最新镜像:
cd /opt/ai-office
docker compose pull
重启服务:
docker compose up -d
清理旧镜像:
docker image prune -f
二十、完整配置文件汇总
1. .env
COMPOSE_PROJECT_NAME=ai-office
OPEN_WEBUI_PORT=3000
OLLAMA_PORT=11434
NGINX_HTTP_PORT=80
NGINX_HTTPS_PORT=443
ADMIN_EMAIL=admin@example.com
TZ=Asia/Shanghai
2. docker-compose.yml
version: "3.9"
services:
ollama:
image: ollama/ollama:latest
container_name: ai-office-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ./data/ollama:/root/.ollama
environment:
- TZ=${TZ}
networks:
- ai-office-net
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-office-open-webui
restart: unless-stopped
depends_on:
- ollama
ports:
- "${OPEN_WEBUI_PORT}:8080"
volumes:
- ./data/open-webui:/app/backend/data
environment:
- TZ=${TZ}
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=true
- ENABLE_SIGNUP=true
- DEFAULT_USER_ROLE=user
networks:
- ai-office-net
nginx:
image: nginx:1.25-alpine
container_name: ai-office-nginx
restart: unless-stopped
depends_on:
- open-webui
ports:
- "${NGINX_HTTP_PORT}:80"
- "${NGINX_HTTPS_PORT}:443"
volumes:
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/certs:/etc/nginx/certs
environment:
- TZ=${TZ}
networks:
- ai-office-net
networks:
ai-office-net:
driver: bridge
3. nginx/conf.d/ai-office.conf
server {
listen 80;
server_name _;
client_max_body_size 200m;
location / {
proxy_pass http://open-webui: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 3600;
proxy_send_timeout 3600;
}
}
二十一、总结
通过本文的步骤,我们完成了一套基础但实用的AI办公系统部署,包括:
- 使用Docker Compose统一管理服务;
- 部署Ollama作为本地大模型运行环境;
- 部署Open WebUI作为AI办公交互界面;
- 使用Nginx提供统一访问入口;
- 配置模型下载、HTTPS、GPU加速、备份和安全策略。
这套方案适合快速搭建企业内部AI助手,尤其适合对数据安全有要求、希望降低外部API依赖的团队。后续如果要进一步增强能力,可以继续接入知识库、RAG检索、工作流自动化、企业微信机器人、飞书机器人、OA系统接口等,让AI真正融入日常办公流程。