Linux 服务器

Ollama + Open WebUI 本地部署大模型:纯 CPU 服务器配置选择、安装、HTTPS 与 API 调用

7 个步骤 10 分钟阅读 22 次阅读 0
本文目录

不需要 GPU,也能在自己的服务器上运行类似 ChatGPT 的私有 AI 助手。Ollama 可以下载并运行 Qwen、Llama、Gemma 等开放权重语言模型,并提供简洁的 API;Open WebUI 则在此基础上提供聊天界面,支持多用户、对话历史和文档上传。由于一切都在你的服务器上运行,提示词和文档不会离开服务器。本文介绍如何选择服务器配置、安装 Ollama、挑选适合在 CPU 上运行的模型、配置 Open WebUI 与 HTTPS,以及在自己的应用中调用 API。

Ollama API 没有任何身份验证。切勿将 11434 端口暴露到公网;请让它只监听本机或位于防火墙之后,并且只通过 HTTPS 和账号登录对外发布 Open WebUI。暴露在公网上的 Ollama 服务器正遭到大量扫描和滥用。

步骤 1:选择合适的服务器配置

使用 CPU 推理时,内存大小决定能加载哪些模型,CPU 核心数量和速度决定回答的生成速度。量化模型(Ollama 默认的 Q4 版本)大致需要以下内存:

模型规模模型所需内存推荐服务器配置典型用途
1–4B 参数约 1–3 GB4 核、8 GB 内存分类、简短回答、测试
7–8B 参数约 5–6 GB8 核以上、16 GB 内存聊天助手、内容摘要、内部知识库
14B 参数约 9–10 GB16 核以上、32 GB 内存推理和写作能力更强,但在 CPU 上较慢

在现代多核 CPU 上,7–8B 模型每秒大约只能输出几个词:供小团队或后台任务使用没有问题,但无法支撑数百名用户同时使用。如果使用量较大,请选择核心数和内存更多的独立服务器,而不是小型 VPS,并避免在同一台机器上运行其他占用大量内存的服务。

步骤 2:安装 Ollama

curl -fsSL https://ollama.com/install.sh | sh

systemctl status ollama --no-pager
ollama --version
ss -lntp | grep 11434        # should show 127.0.0.1:11434

安装程序会创建 ollama 系统用户,以及一个监听 127.0.0.1:11434 的 systemd 服务。模型保存在 /usr/share/ollama/.ollama/models,请确保该磁盘有足够空间(一个 7B 模型约 4–5 GB)。

步骤 3:下载并测试模型

# Strong multilingual model, good at Chinese and English
ollama pull qwen2.5:7b

# Smaller and faster alternative
ollama pull llama3.2:3b

ollama run qwen2.5:7b "Explain in three sentences what a reverse proxy is."
ollama list        # downloaded models
ollama ps          # loaded models and how much memory they use

可以在 ollama.com 的模型库中浏览其他模型和规格。建议先从 3B 或 7B 模型开始,确认速度后,只有在回答质量不够时再换更大的模型。

步骤 4:安装 Open WebUI

Open WebUI 运行在 Docker 中(参见 Docker 安装教程)。容器需要访问宿主机上的 Ollama,因此要让 Ollama 监听所有网卡,同时确保防火墙阻止外部访问 11434 端口。

# Let Ollama accept connections from Docker containers
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF2'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF2
systemctl daemon-reload && systemctl restart ollama

# Allow Docker networks to reach Ollama, block everyone else (ufw: rules are matched in order)
ufw allow from 172.16.0.0/12 to any port 11434 proto tcp
ufw deny 11434/tcp
# firewalld: simply do not open 11434; Docker's own zone already lets containers reach the host

# Start Open WebUI, reachable only from the server itself until Nginx is in front
docker run -d --name open-webui --restart always \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

从另一台机器确认 http://YOUR_SERVER_IP:11434 无法访问。如果能够访问,请先修复防火墙再继续。

步骤 5:通过 HTTPS 发布 Open WebUI

将 ai.example.com 这样的子域名解析到服务器,申请证书(参见使用 Certbot 或 acme.sh 申请免费 SSL 证书),然后反向代理到容器。Open WebUI 通过 WebSocket 流式输出回答,因此需要保留 Upgrade 请求头,并设置较长的读取超时时间。

server {
    listen 443 ssl;
    http2 on;
    server_name ai.example.com;

    ssl_certificate     /etc/letsencrypt/live/ai.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem;
    client_max_body_size 50m;      # document uploads

    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-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout 600s;
    }
}

打开网站并立即注册第一个账号,该账号会成为管理员。然后在管理员设置中关闭新用户注册,或者设为需要管理员审核,并由你亲自为团队成员创建账号。

步骤 6:在应用中调用 API

Ollama 既提供原生 API,也提供 OpenAI 兼容接口,因此很多工具和 SDK 只需修改 base URL 即可使用。可以在同一台服务器上调用,也可以从你的其他服务器通过内网或 SSH 隧道调用。

# Native API
curl http://127.0.0.1:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "Write a short product description for a Tokyo VPS.",
  "stream": false
}'

# OpenAI-compatible API (base URL http://127.0.0.1:11434/v1, any API key)
curl http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Hello"}]}'

Dify、n8n 等工作流工具可以将 Ollama 作为模型提供方接入,参见 Dify、n8n 与 AI Agent 服务器配置要求。

步骤 7:性能调优

  • 保持模型常驻内存:默认情况下,模型空闲 5 分钟后会被卸载。在 override 文件中设置 Environment="OLLAMA_KEEP_ALIVE=1h",可以避免首次回答过慢。
  • 并行请求:OLLAMA_NUM_PARALLEL=2 允许两个请求共用一个已加载的模型;每增加一个并行槽位,都需要更多内存。
  • 上下文长度:处理长文档需要更大的上下文窗口,也会占用更多内存。仅在需要时调大。
  • 预留空闲内存:一旦服务器开始使用 swap,回答就会变得极慢。可以用 ollama ps 和 free -h 检查。

常见问题

纯 CPU 服务器真的能用吗?

能用。使用 3B–8B 模型做内部工具、文档问答、写稿、翻译和批量任务都没有问题。如果有大量并发用户或要运行更大的模型,则需要更多的 CPU 核心和内存,或者使用 GPU 硬件。

哪个模型的中文效果最好?

Qwen(通义千问)系列使用了大量中英文语料训练,是很好的默认选择。建议先试用 qwen2.5:7b,再用你自己的实际问题与其他模型进行对比。

数据会离开服务器吗?

不会。Ollama 和 Open WebUI 在本地处理提示词和文档,只有下载模型和更新时才会访问互联网。

如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、系统版本、CPU 和内存配置、所用模型以及完整报错信息,方便工程师快速定位。

这篇文章有帮助吗?

相关教程