从零搭建企业内网 ChatGPT:Ollama + Open WebUI 私有化部署实战命令全记录
ChatGPT 私有化部署方案|附完整命令
说明:严格来说,OpenAI 官方的 ChatGPT 产品本身不能被“私有化部署”到企业内网或个人服务器中。通常我们所说的“ChatGPT 私有化部署”,本质上是指:在本地服务器、企业内网或私有云环境中,部署开源大语言模型,并配套 Web 聊天界面、API 服务、知识库检索、权限控制等能力,从而实现类似 ChatGPT 的对话体验。
本文将以 Ollama + Open WebUI + Docker Compose 为核心方案,给出一套可落地、易维护、适合个人和中小团队使用的私有化部署方案,并附上完整命令。
一、为什么要做 ChatGPT 私有化部署?
随着大语言模型在办公、研发、客服、知识管理、数据分析等场景中的普及,越来越多企业开始关注“私有化部署”。相比直接使用公网 AI 服务,私有化部署主要有以下优势。
1. 数据更安全
很多企业内部资料、客户信息、合同文档、研发代码、业务数据都不适合直接上传到公网服务。私有化部署可以把模型服务、对话记录、知识库文档都放在本地服务器或内网环境中,降低数据泄露风险。
2. 使用成本可控
如果团队成员较多,并且每天调用频率较高,长期使用第三方 API 的费用可能并不低。私有化部署虽然前期需要服务器和显卡投入,但后续边际成本更低,尤其适合固定场景、大量重复调用的企业。
3. 可深度定制
私有化部署可以根据业务需求定制模型、提示词、知识库、插件、API 接口、权限体系和日志策略。例如:
- 部署企业内部知识库问答系统;
- 接入公司 OA、CRM、ERP;
- 为客服系统提供智能回复;
- 为研发团队提供代码助手;
- 针对特定行业语料进行微调或 RAG 增强。
4. 网络环境更稳定
在内网或私有云中运行,可以减少公网访问不稳定、API 限流、外部服务不可用等问题。对于对稳定性要求较高的业务系统来说,这一点非常重要。
二、整体部署架构
本文推荐的基础架构如下:
用户浏览器
↓
Nginx 反向代理 / HTTPS
↓
Open WebUI 聊天界面
↓
Ollama 模型服务
↓
本地大语言模型,如 Qwen、Llama、DeepSeek、Mistral
各组件作用如下:
| 组件 | 作用 |
|---|---|
| Ollama | 本地大模型运行框架,负责下载、管理和运行模型 |
| Open WebUI | 类 ChatGPT 的网页聊天界面,支持多用户、知识库、模型管理 |
| Docker Compose | 统一编排服务,方便启动、停止、升级 |
| Nginx | 反向代理、域名访问、HTTPS 证书配置 |
| 大语言模型 | 实际提供对话能力的模型,如 Qwen、DeepSeek、Llama 等 |
如果你只是个人学习或小团队内部使用,Ollama + Open WebUI 已经足够。如果后续需要高并发推理、GPU 集群、OpenAI API 兼容接口,可以进一步使用 vLLM、Xinference、FastChat 等方案。
三、服务器配置建议
不同模型对硬件要求差异较大。一般来说,模型参数越大,效果越好,但显存占用和推理速度也越高。
1. 最低配置
适合个人测试、小模型运行:
CPU:4 核以上
内存:16GB
硬盘:100GB SSD
GPU:可无 GPU
系统:Ubuntu 22.04 LTS
可运行模型:
- qwen2.5:1.5b
- qwen2.5:3b
- llama3.2:3b
- deepseek-r1:1.5b
2. 推荐配置
适合小团队使用:
CPU:8 核以上
内存:32GB 或 64GB
硬盘:500GB SSD
GPU:NVIDIA 16GB 显存以上
系统:Ubuntu 22.04 LTS
可运行模型:
- qwen2.5:7b
- qwen2.5-coder:7b
- llama3.1:8b
- deepseek-r1:7b
3. 企业级配置
适合多人并发、知识库问答、API 服务:
CPU:16 核以上
内存:128GB
硬盘:1TB NVMe SSD
GPU:NVIDIA A10 / A100 / L40S / 4090 等
系统:Ubuntu 22.04 LTS
可运行模型:
- qwen2.5:14b
- qwen2.5:32b
- deepseek-r1:32b
- llama3.1:70b,需更高显存或多卡部署
四、安装基础环境
以下命令以 Ubuntu 22.04 为例。
1. 更新系统
sudo apt update && sudo apt upgrade -y
2. 安装常用工具
sudo apt install -y \
curl \
wget \
git \
vim \
unzip \
htop \
net-tools \
ca-certificates \
gnupg \
lsb-release
3. 设置服务器时区
sudo timedatectl set-timezone Asia/Shanghai
timedatectl
五、安装 Docker 和 Docker Compose
1. 卸载旧版本 Docker
sudo apt remove -y docker docker-engine docker.io containerd runc
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
sudo systemctl status docker
5. 验证 Docker
docker --version
docker compose version
sudo docker run hello-world
6. 将当前用户加入 Docker 用户组
sudo usermod -aG docker $USER
执行后建议重新登录服务器,或者执行:
newgrp docker
六、安装 NVIDIA 驱动和容器运行时
如果你的服务器没有 NVIDIA GPU,可以跳过本节。CPU 也能运行小模型,但速度会明显慢一些。
1. 查看显卡
lspci | grep -i nvidia
2. 安装推荐驱动
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 使用 NVIDIA 容器运行时:
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
七、部署 Ollama
Ollama 是当前非常流行的本地大模型运行工具,优点是简单、模型丰富、命令友好,非常适合作为私有化部署的基础。
1. 创建部署目录
sudo mkdir -p /opt/chatgpt-private
sudo chown -R $USER:$USER /opt/chatgpt-private
cd /opt/chatgpt-private
2. 编写 Docker Compose 文件
创建 docker-compose.yml:
vim docker-compose.yml
写入以下内容:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
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_NAME=Private ChatGPT
volumes:
- ./open-webui:/app/backend/data
depends_on:
- ollama
如果你的机器没有 NVIDIA GPU,请将 ollama 中的 deploy 部分删除,改成如下:
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ./ollama:/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_NAME=Private ChatGPT
volumes:
- ./open-webui:/app/backend/data
depends_on:
- ollama
3. 启动服务
docker compose up -d
查看容器状态:
docker ps
查看日志:
docker logs -f ollama
docker logs -f open-webui
八、下载并运行模型
Ollama 启动后,需要下载模型。可以进入 Ollama 容器执行命令。
1. 下载 Qwen 模型
docker exec -it ollama ollama pull qwen2.5:7b
运行测试:
docker exec -it ollama ollama run qwen2.5:7b
输入:
请用中文介绍一下你自己。
如果模型正常回复,说明部署成功。
2. 下载 DeepSeek R1 模型
docker exec -it ollama ollama pull deepseek-r1:7b
运行:
docker exec -it ollama ollama run deepseek-r1:7b
3. 下载代码模型
如果主要用于编程辅助,可以下载 Qwen Coder:
docker exec -it ollama ollama pull qwen2.5-coder:7b
测试:
docker exec -it ollama ollama run qwen2.5-coder:7b
4. 查看已安装模型
docker exec -it ollama ollama list
5. 删除模型
docker exec -it ollama ollama rm qwen2.5:7b
九、访问 Web 聊天界面
打开浏览器访问:
http://服务器IP:3000
首次访问时,需要创建管理员账号。Open WebUI 会将第一个注册用户作为管理员。
登录后,可以在模型列表中选择已经下载的模型,例如:
qwen2.5:7b
deepseek-r1:7b
qwen2.5-coder:7b
然后就可以像使用 ChatGPT 一样进行对话。
如果模型没有显示,可以检查 Open WebUI 是否正确连接 Ollama:
docker logs -f open-webui
也可以在服务器上测试 Ollama API:
curl http://127.0.0.1:11434/api/tags
如果返回模型列表,说明 Ollama 本身正常。
十、配置 Nginx 反向代理
生产环境不建议直接暴露 3000 端口,建议使用 Nginx 进行反向代理,并配置域名和 HTTPS。
1. 安装 Nginx
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx
2. 创建站点配置
假设你的域名是:
ai.example.com
创建配置文件:
sudo vim /etc/nginx/sites-available/chatgpt-private.conf
写入:
server {
listen 80;
server_name ai.example.com;
client_max_body_size 200m;
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 3600;
proxy_send_timeout 3600;
}
}
启用站点:
sudo ln -s /etc/nginx/sites-available/chatgpt-private.conf /etc/nginx/sites-enabled/
检查配置:
sudo nginx -t
重载 Nginx:
sudo systemctl reload nginx
此时可以访问:
http://ai.example.com
十一、配置 HTTPS 证书
推荐使用 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d ai.example.com
按照提示输入邮箱、同意协议即可。
3. 测试证书自动续期
sudo certbot renew --dry-run
申请成功后,就可以通过 HTTPS 访问:
https://ai.example.com
十二、开放防火墙端口
如果服务器启用了 UFW 防火墙,需要放行 HTTP、HTTPS 端口。
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
如果你只在内网使用,可以不开放公网端口,而是在公司 VPN 或内网网段中访问。
十三、配置 OpenAI 兼容 API
很多应用支持 OpenAI API 格式。如果想让内部业务系统调用本地模型,可以通过 Open WebUI 或 Ollama 暴露接口。
Ollama 本身提供 API,例如生成接口:
curl http://127.0.0.1:11434/api/generate \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5:7b",
"prompt": "请写一段关于企业知识库建设的介绍",
"stream": false
}'
聊天接口:
curl http://127.0.0.1:11434/api/chat \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5:7b",
"messages": [
{
"role": "system",
"content": "你是一个专业的企业知识库助手。"
},
{
"role": "user",
"content": "请解释什么是 RAG。"
}
],
"stream": false
}'
如果业务系统需要公网或内网调用,建议通过 Nginx 代理 API,并增加认证机制,不建议直接暴露 11434 端口。
十四、启用知识库能力
Open WebUI 支持文档上传和知识库功能,可以将企业内部文档上传后,让模型基于文档回答问题。
常见可上传资料包括:
PDF 文档
Word 文档
Markdown 文档
TXT 文档
内部制度
产品手册
客服话术
研发文档
FAQ
使用建议:
- 文档尽量结构清晰,标题层级明确;
- 不要一次上传过大的文档,可按部门或主题拆分;
- 对重要文档定期更新;
- 建议为不同团队建立不同知识集合;
- 敏感数据要设置权限访问。
如果对知识库准确率要求较高,可以进一步引入 RAG 系统,例如:
- Dify
- FastGPT
- AnythingLLM
- LangChain
- LlamaIndex
- Milvus
- Chroma
- Elasticsearch
基础流程一般是:
文档上传
↓
文本切分
↓
向量化
↓
写入向量数据库
↓
用户提问
↓
检索相关片段
↓
模型基于上下文回答
十五、服务维护常用命令
1. 查看服务状态
cd /opt/chatgpt-private
docker compose ps
2. 查看日志
docker logs -f ollama
docker logs -f open-webui
3. 停止服务
cd /opt/chatgpt-private
docker compose down
4. 启动服务
cd /opt/chatgpt-private
docker compose up -d
5. 重启服务
cd /opt/chatgpt-private
docker compose restart
6. 更新镜像
cd /opt/chatgpt-private
docker compose pull
docker compose up -d
7. 查看磁盘占用
du -sh /opt/chatgpt-private/*
docker system df
8. 清理无用 Docker 资源
谨慎执行:
docker system prune -a
如果不想删除模型数据,不要删除 /opt/chatgpt-private/ollama 目录。
十六、数据备份方案
私有化部署后,需要重点备份两类数据:
- Open WebUI 数据:用户、对话、知识库、配置;
- Ollama 模型数据:已下载模型文件。
创建备份目录:
sudo mkdir -p /backup/chatgpt-private
sudo chown -R $USER:$USER /backup/chatgpt-private
执行备份:
cd /opt
tar -czvf /backup/chatgpt-private/chatgpt-private-$(date +%F).tar.gz chatgpt-private
查看备份文件:
ls -lh /backup/chatgpt-private
恢复时可以执行:
cd /opt
tar -xzvf /backup/chatgpt-private/chatgpt-private-2025-01-01.tar.gz
然后重新启动服务:
cd /opt/chatgpt-private
docker compose up -d
建议将备份文件同步到 NAS、对象存储或异地服务器:
rsync -avz /backup/chatgpt-private/ user@backup-server:/data/backup/chatgpt-private/
十七、安全加固建议
私有化部署并不代表天然安全,尤其当服务暴露到公网时,必须做好安全控制。
1. 不要直接暴露 Ollama 端口
11434 是模型 API 端口,不建议公网开放。建议仅监听本地或内网,并通过受控网关访问。
可以在云服务器安全组中只开放:
22
80
443
不要开放:
11434
3000
2. 开启 HTTPS
如果涉及账号密码、文档上传、企业知识库,必须配置 HTTPS。
3. 设置强密码
Open WebUI 管理员账号必须使用强密码,并定期更换。
4. 限制注册
在 Open WebUI 后台关闭公开注册,仅允许管理员邀请用户。
5. 配置访问白名单
如果只给公司内部使用,可以在 Nginx 中限制 IP:
allow 192.168.0.0/16;
allow 10.0.0.0/8;
deny all;
6. 定期更新镜像
cd /opt/chatgpt-private
docker compose pull
docker compose up -d
7. 定期备份
至少每周备份一次 Open WebUI 数据和知识库文件。
十八、常见问题排查
1. Open WebUI 无法连接 Ollama
检查容器是否正常:
docker ps
检查 Ollama 日志:
docker logs -f ollama
检查 Open WebUI 环境变量:
docker inspect open-webui | grep OLLAMA_BASE_URL
正确值应类似:
http://ollama:11434
2. 模型回复很慢
可能原因包括:
- 没有 GPU,只使用 CPU 推理;
- 模型参数过大;
- 显存不足;
- 并发用户太多;
- 上下文长度设置过高。
查看 GPU 使用情况:
nvidia-smi
如果显存不足,可以换更小模型,例如:
docker exec -it ollama ollama pull qwen2.5:3b
3. 浏览器无法访问
检查端口监听:
sudo netstat -tulnp | grep 3000
检查防火墙:
sudo ufw status
检查 Nginx:
sudo nginx -t
sudo systemctl status nginx
4. Docker Compose 启动失败
查看详细日志:
docker compose logs
重新拉取镜像:
docker compose pull
docker compose up -d
十九、进阶方案:使用 vLLM 提升并发能力
如果你的场景是企业内部 API 服务,需要较高并发和更好的吞吐,可以考虑使用 vLLM。vLLM 更适合部署在 GPU 服务器上,并提供 OpenAI 兼容接口。
示例命令如下:
docker run -d \
--name vllm-qwen \
--restart unless-stopped \
--gpus all \
-p 8000:8000 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
vllm/vllm-openai:latest \
--model Qwen/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8000
测试接口:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [
{
"role": "user",
"content": "请用中文介绍 vLLM 的优势"
}
],
"temperature": 0.7
}'
vLLM 更适合以下场景:
- 多用户并发;
- 业务系统频繁调用 API;
- 需要 OpenAI API 兼容格式;
- 有较强 GPU 资源;
- 对吞吐量和响应速度要求较高。
但对于普通个人用户或小团队,Ollama 部署更简单,维护成本更低。
二十、总结
本文介绍了一套较完整的 ChatGPT 私有化部署方案。核心思路是使用开源大语言模型替代官方 ChatGPT,并通过 Ollama 提供模型运行能力,通过 Open WebUI 提供类 ChatGPT 的网页聊天体验,再配合 Docker Compose、Nginx、HTTPS、备份和安全策略,实现一套可长期运行的私有 AI 助手平台。
推荐落地路径如下:
第一阶段:Ollama + Open WebUI,完成基础聊天能力
第二阶段:接入企业知识库,实现文档问答
第三阶段:配置 HTTPS、权限、备份和日志
第四阶段:接入业务系统 API
第五阶段:根据并发需求升级到 vLLM 或多机部署
对于个人用户,可以从 qwen2.5:7b 或 deepseek-r1:7b 开始;对于企业团队,可以根据 GPU 显存和并发需求选择更大的模型或专用推理框架。只要做好权限控制、数据备份和服务监控,私有化部署的 AI 助手完全可以成为企业内部知识管理、办公自动化和研发效率提升的重要基础设施。