企业内网大模型公网访问方案:Ollama + OpenWebUI + ZeroNews 实战部署记录

企业想把大模型用起来,数据安全是第一道坎。把模型部署在内网没问题,但同事和外部应用要调用时,要么拉 VPN 体验差,要么买公网服务器成本高,直接暴露端口更是不敢想。我最近帮团队落地了一套 Ollama + OpenWebUI + ZeroNews 的组合方案,四步就能把内网大模型安全映射到公网,还能叠加 IP 白名单和地址围栏做加固。本文从 Docker 部署到隧道配置再到安全策略,完整记录整个落地过程。

第一步,本机部署 Ollama

安装 Ollama

按 Ollama官网 指引安装,常见环境如下。

在线安装方式:

macOS / Windows: 下载安装包,一路下一步。装完菜单栏或系统托盘里会有 Ollama 图标,服务默认已在后台跑。

Linux:

复制代码
curl -fsSL https://ollama.com/install.sh | sh

装完后一般会自动注册 systemd 服务:

复制代码
sudo systemctl enable ollama
sudo systemctl start ollama
sudo systemctl status ollama

docker 安装方式

用 docker 安装,不侵入主机环境,做为调试/测试环境安装方式

复制代码
services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    restart: unless-stopped
    user: "root" 
    ports:
      - 11434:11434
    volumes:
      - ./ollama:/root/ollama

我们测试部署,就以 docker 的方式安装

拉模型并交互测试

进入到 ollama 容器中

复制代码
docker exec -it ollama bash

选一个在显存/内存里跑得动的模型,例如 7qwen3.5:9b :

复制代码
ollama pull qwen3:4b
ollama run qwen3:4b  # 交互测试,Ctrl+D 退出

ollama list 能看到本地已有模型。

生产环境更推荐交给 systemd / 系统服务常驻,不要只靠一个前台终端窗口。

确认 API 正常

复制代码
curl -s http://127.0.0.1:11434/api/tags

返回 JSON 模型列表,说明 HTTP API 已就绪。

本地对话接口自测:

复制代码
curl -s http://127.0.0.1:11434/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen3.5:9b ",
    "messages": [{"role": "user", "content": "你好,回复两个字:收到"}]
  }'

能收到模型回复,就可以进入下一步。

第二步,Ollama 常用 API

Ollama 默认监听:

复制代码
http://127.0.0.1:11434

常用接口(兼容 OpenAI 风格):

复制代码
# 列出本地模型
curl http://127.0.0.1:11434/api/tags

# OpenAI 兼容对话
curl http://127.0.0.1:11434/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen2.5:7b",
    "messages": [{"role": "user", "content": "你好"}]
  }'

# 向量嵌入(RAG 场景常用)
curl http://127.0.0.1:11434/v1/embeddings \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen2.5:7b",
    "input": "一段需要向量化的文本"
  }'

vLLM、llama.cpp server 等也多是 HTTP API,只是端口不同(如 8000、8080)。本文以 Ollama 11434 为例,换端口即可套用。

注意Ollama 默认没有 API Key 鉴权 。谁连上端口,谁就能调模型、拉模型列表。映射到公网时必须在 ZeroNews 层做 IP 白名单、Basic 认证、路由白名单等------不能只靠穿透把端口裸放出去。

第三步,安装 ZeroNews Client

Client 必须和 Ollama 跑在同一台机器上(或至少能访问 127.0.0.1:11434 的同网段机器)。以下步骤都在 Ollama 所在主机执行。

安装 Client

ZeroNews 文档 · 安装客户端 选择对应系统的一键脚本或安装包。Linux 示例:

复制代码
curl -fsSL https://download.zeronews.cc/install.sh | bash

装完后终端里应有 zeronews 命令。

绑定 AuthToken

  1. 登录 ZeroNews 控制台快速开始 ,复制 AuthToken。

  2. 在 Ollama 所在机器执行:

    zeronews authtoken {TOKEN}

绑定成功后,控制台 客户端 页面应出现一台在线设备(主机名与当前机器一致)。

ZeroNews client 以系统服务常驻后台

以后台服务运行 ZeroNews client

复制代码
zeronews service install
zeronews service start
zeronews service status

开发机临时联调可以用 zeronews start 前台跑,关终端前记得 Ctrl+C 或 zeronews service stop。

确认 Client 在线

在命令行提示 Session Connect 就说明客户端已经连接成功

在用户控制台中可以看到已经在线的客户端

第四步,根据应用场景建立 公网访问隧道

给公司员工办公使用,我可以采用 openwebui+ollama的方式直接提供 AI 服务

给公司员工办公使用,建议采用企业的自有域名来创建隧道,同时搭建部署 openwebui+ollama,来说实现 可视化的 AI 交互

我们采用 docker 方式部署 openwebui

复制代码
services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - 8002:8080
    volumes:
      - ./data:/app/backend/data 
    environment:
      - OLLAMA_BASE_URL=http://192.168.31.149:11434

OLLAMA_BASE_URL 为 Ollama 容器的内网IP访问URL地址,openwebui 启动完成,同内网IP地址就可以正常访问了

接下来在 ZeroNews 控制台上,添加 企业自有域名,并通过 ZeroNews 自动申请证书

自有域名添加完后, 就可以添加隧道,添加完成后,就可以在互联网上正常 OpenwebUI 了

考虑员工的访问范围,设计到外出出差,我们加一个 地址围栏 的访问策略,拒绝海外的用户访问

直接提供 Ollama API 服务 给第三方服务

当我们是以算力资源提供给第三方时,我们直接提供 ollama 的 API 接口给第三方

同样采用自有域名,添加一个二级域名, ZeroNews 自动申请证书

然后添加 Ollama 的 API 隧道,添加完成后, Ollama API 已经给公网调用

因为是给第三方调用,我们给隧道添加IP访问白名单的控制策略,要求用户添加固定的公网IP,只允许白名单内IP的方可以调用 API

同时,在添加 路由白名单,添加给用户提供的 API 路由地址, 将 ollama 暴露面限制到特定的 API 接口

因为 Ollama API 不提供 api key,所以我们再给 API 添加一个 BasicAuth 认证

从多个维度保障 Ollama 的访问安全

内部系统跟 ollam 之间的联调测试

对于 联调测试,我们主要随用随键,用完即删的一个使用策略,生命周期短,快速应用,用zeronews 的域名即可

直接添加随机域名隧道, zeronews 会自动分配随机访问地址

收尾

这套方案的核心价值不在于技术有多新,而在于【够用且安全】------Ollama 负责模型运行、OpenWebUI 负责交互体验、ZeroNews 负责安全穿透,三者各司其职,组合起来刚好解决了企业内网大模型对外访问的痛点。数据不出内网、访问有白名单管控、异常有健康检查告警,用起来心里踏实。如果你也在为类似场景发愁,建议照着步骤走一遍,部署过程中有任何问题欢迎评论区交流,后续我也会继续分享 RAG 对接和多模型管理的进阶玩法。

相关推荐
敢敢のwings1 小时前
类OpenClaw 网络深度解析:AI Agent 自动化的新范式
运维·人工智能·自动化
IPdodo_1 小时前
代理 IP 服务商 SLA 怎么验?7 项指标与 Python 探测脚本实战
运维·python·网络协议·网络安全·代理ip
云飞云共享云桌面1 小时前
智能装备工厂研发团队如何利用单台服务器承载 10 路 SolidWorks 并发?
运维·服务器·3d·自动化·制造
王琦03181 小时前
haproxy
运维·云原生
辻弋2011 小时前
手动关服务会自动重启、组策略家庭版用不了——Windows Update Blocker用“禁用+锁定”双保险,让Win10/11自动更新彻底闭嘴
服务器·人工智能·windows·电脑·开源软件
发量惊人的中年网工1 小时前
如何验证DDoS高防真的生效?从源站隐藏到正常访问的完整验收方法
运维·网络·数据库·ddos
艾伦_耶格宇2 小时前
【ELK】-8 logstash的filter模块详解
运维·elk·filter
躺不平的理查德2 小时前
OpenSSL 的异步 TLS 1.3 加密
linux·运维·服务器
tedcloud1232 小时前
Awesome DSH Plugin 怎么用?给 DeepSeek Harness 搭建自己的插件生态
大数据·linux·服务器·人工智能·音视频
楷哥爱开发2 小时前
IPFoxy爬虫代理配置指南:从0搭建Crawl4AI网页爬虫教程
大数据·运维·人工智能·爬虫