香港服务器本地部署大语言模型:Ollama + Open WebUI搭建私有ChatGPT完整教程

香港服务器本地部署大语言模型:Ollama + Open WebUI搭建私有ChatGPT完整教程

将公司数据发给 ChatGPT 存在合规风险,API 调用费用随使用量快速增长,且需要科学上网。在香港服务器上自托管开源大语言模型,数据完全不出境,无 API 调用费,团队成员直接通过浏览器使用。Ollama 让大模型部署简化到一条命令,Open WebUI 提供完整的 ChatGPT 风格界面,支持多用户、对话历史、文件上传和模型切换。


一、硬件要求与模型选型

模型参数量最低内存推荐配置生成速度(CPU)
Qwen2.5:3b30亿4GB RAM4核8G约 8~15 tokens/s
Llama3.2:3b30亿4GB RAM4核8G约 10~18 tokens/s
Qwen2.5:7b70亿8GB RAM8核16G约 4~8 tokens/s
Llama3.1:8b80亿8GB RAM8核16G约 4~7 tokens/s
Qwen2.5:14b140亿16GB RAM16核32G约 2~4 tokens/s
Llama3.3:70b700亿40GB RAMGPU服务器需要 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 人团队时即可回本。

Telegram