香港服务器本地部署大语言模型:Ollama + Open WebUI搭建私有ChatGPT完整教程
将公司数据发给 ChatGPT 存在合规风险,API 调用费用随使用量快速增长,且需要科学上网。在香港服务器上自托管开源大语言模型,数据完全不出境,无 API 调用费,团队成员直接通过浏览器使用。Ollama 让大模型部署简化到一条命令,Open WebUI 提供完整的 ChatGPT 风格界面,支持多用户、对话历史、文件上传和模型切换。
一、硬件要求与模型选型
| 模型 | 参数量 | 最低内存 | 推荐配置 | 生成速度(CPU) |
|---|---|---|---|---|
| Qwen2.5:3b | 30亿 | 4GB RAM | 4核8G | 约 8~15 tokens/s |
| Llama3.2:3b | 30亿 | 4GB RAM | 4核8G | 约 10~18 tokens/s |
| Qwen2.5:7b | 70亿 | 8GB RAM | 8核16G | 约 4~8 tokens/s |
| Llama3.1:8b | 80亿 | 8GB RAM | 8核16G | 约 4~7 tokens/s |
| Qwen2.5:14b | 140亿 | 16GB RAM | 16核32G | 约 2~4 tokens/s |
| Llama3.3:70b | 700亿 | 40GB RAM | GPU服务器 | 需要 GPU |
新手推荐:4核8G 服务器跑 Qwen2.5:7b(中文能力强),CPU 推理每秒约 4~8 个词,日常问答完全可用。追求更快速度需要带 GPU 的服务器。
二、安装 Ollama
<code"># 一键安装(自动检测 CPU/GPU) curl -fsSL https://ollama.com/install.sh | sh # 验证安装 ollama --version systemctl status ollama # Ollama 默认只监听 localhost:11434 # 如果需要远程访问,修改 systemd 服务环境变量: systemctl edit ollama # 在弹出的编辑器中添加: # [Service] # Environment="OLLAMA_HOST=0.0.0.0:11434" systemctl daemon-reload && systemctl restart ollama
三、下载并运行模型
<code"># 下载并运行 Qwen2.5 7B(推荐中文场景) ollama run qwen2.5:7b # 首次运行自动下载模型文件(约 4.7GB),之后秒启动 # 退出交互式对话 # 输入 /bye 或按 Ctrl+D # 后台服务方式运行(无需交互) ollama pull qwen2.5:7b # 只下载不运行 ollama serve # 确保服务在运行 # 其他有用的模型命令 ollama list # 查看已下载的模型 ollama ps # 查看当前加载的模型 ollama rm qwen2.5:7b # 删除模型(释放磁盘) # 常用中文友好模型 ollama pull qwen2.5:7b # 阿里千问(中文强) ollama pull deepseek-r1:7b # DeepSeek 推理模型 ollama pull llama3.2:3b # Meta Llama(轻量快速) ollama pull nomic-embed-text # 文本向量化(RAG用)
四、Open WebUI 部署(Docker)
<code"># 安装 Docker(已装可跳过) curl -fsSL https://get.docker.com | sh # 启动 Open WebUI docker run -d \ --name open-webui \ --restart unless-stopped \ -p 127.0.0.1:3000:8080 \ -v open-webui:/app/backend/data \ -e OLLAMA_BASE_URL=http://host-gateway:11434 \ --add-host=host-gateway:host-gateway \ ghcr.io/open-webui/open-webui:main # 查看启动日志 docker logs -f open-webui | grep -E "started|error|port" # 首次访问 http://localhost:3000(通过 Nginx 反代后为 https://ai.yourdomain.com) # 注册第一个账号自动成为管理员
五、Nginx 反向代理(HTTPS 访问)
<code"># /etc/nginx/sites-available/ai.yourdomain.com
server {
listen 443 ssl http2;
server_name ai.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/ai.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ai.yourdomain.com/privkey.pem;
# 限制访问(可选:只允许内部 IP)
# allow 公司办公室IP/32;
# deny all;
# 允许大文件上传(图片、PDF 分析)
client_max_body_size 100M;
proxy_read_timeout 300s; # LLM 推理可能需要较长时间
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# SSE(流式输出)必须关闭缓冲
proxy_buffering off;
proxy_cache off;
}
}六、Ollama API 直接调用(兼容 OpenAI 格式)
<code">import requests
# Ollama 兼容 OpenAI API 格式,现有代码几乎不需要改动
def chat_with_local_llm(messages: list, model: str = "qwen2.5:7b") -> str:
"""调用本地 Ollama API(OpenAI 兼容格式)"""
response = requests.post(
"http://localhost:11434/v1/chat/completions",
json={
"model": model,
"messages": messages,
"stream": False,
"temperature": 0.7,
},
timeout=120
)
return response.json()["choices"][0]["message"]["content"]
# 使用示例
result = chat_with_local_llm([
{"role": "system", "content": "你是一个专业的跨境电商顾问。"},
{"role": "user", "content": "帮我分析一下在亚马逊销售蓝牙耳机的竞争态势。"}
])
print(result)<code">from openai import OpenAI
# 或者使用 openai 官方 SDK,只改 base_url
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # Ollama 不需要真实的 API Key
)
response = client.chat.completions.create(
model="qwen2.5:7b",
messages=[{"role": "user", "content": "用 Python 写一个快速排序函数"}]
)
print(response.choices[0].message.content)七、Modelfile 自定义系统提示(企业专属助手)
<code"># 创建企业专属助手(限定在公司业务范围内回答) cat > /opt/ollama/company-assistant.modelfile << 'EOF' FROM qwen2.5:7b # 设置系统提示(角色定义) SYSTEM """ 你是后浪云(IDC.Net)的智能客服助手,专门解答关于香港服务器、VPS、独立服务器的问题。 你的职责: - 解答服务器选型、配置、定价问题 - 帮助用户排查服务器连接、网络、性能问题 - 介绍产品特性(CN2 GIA线路、香港机房、免备案等) 回答原则: - 用中文回答,语言友好专业 - 不确定的问题引导用户联系人工客服 - 不讨论与服务器业务无关的话题 """ # 模型参数 PARAMETER temperature 0.3 # 降低温度,使回答更准确 PARAMETER top_k 40 PARAMETER repeat_penalty 1.1 EOF # 从 Modelfile 创建自定义模型 ollama create company-assistant -f /opt/ollama/company-assistant.modelfile # 在 Open WebUI 中选择 company-assistant 模型即可使用
八、RAG 本地知识库(基于 Open WebUI 内置功能)
<code"> Open WebUI 内置 RAG(检索增强生成)功能配置: 1. 设置 → 文档 → 配置向量数据库 - Embedding 模型:选择 nomic-embed-text(本地运行) - 先运行:ollama pull nomic-embed-text 2. 创建知识库 工作区 → 知识库 → 创建 → 上传公司内部文档(PDF/Word/TXT) 3. 在对话中引用知识库 → 点击"+"→ 选择知识库 → 提问时 LLM 会先搜索知识库,再生成答案 适合场景: - 公司产品手册问答 - 内部规章制度查询 - 技术文档智能搜索
九、性能监控与资源控制
<code"># 监控 Ollama 资源占用
htop # 查看 CPU/内存
ollama ps # 查看当前加载的模型和内存占用
# Ollama 模型加载超时设置(节省内存)
# 设置模型在空闲 5 分钟后自动卸载(释放内存)
OLLAMA_KEEP_ALIVE=5m systemctl restart ollama
# 或者在 API 请求中指定:
curl http://localhost:11434/api/generate \
-d '{"model":"qwen2.5:7b","prompt":"hello","keep_alive":"5m"}'
# 如果服务器内存不足,强制卸载当前模型
curl http://localhost:11434/api/generate \
-d '{"model":"qwen2.5:7b","keep_alive":0}'十、总结
香港服务器自托管 Ollama + Open WebUI 的核心优势:数据不出境(满足合规要求)、无 API 调用费(团队越大越省钱)、可联网访问(香港服务器无访问限制)。4核8G 服务器运行 7B 参数模型,日常问答、代码辅助、文档总结完全可用,月均成本仅约 ¥200,对比 ChatGPT Plus(约 ¥140/人/月)在 3~4 人团队时即可回本。