DeepSeek多平台本地部署实战:Ollama+Open WebUI打造私有AI服务

发布时间:2026/10/6 7:12:27
DeepSeek多平台本地部署实战:Ollama+Open WebUI打造私有AI服务
简介针对DeepSeek大规模模型的多环境部署此份15KB的docx文档提供了一套跨平台操作指南。资源面向希望将AI模型落地到本地电脑、手机或浏览器场景的开发者、研究者及技术爱好者覆盖Ollama本地部署、iPhone与Android移动端接入、DockerOpen WebUI浏览器访问三条路径。内容既包含macOS、Linux、Windows下Ollama从官网安装到终端拉取模型的完整命令也详解iPhone快捷指令绑定API Key的配置步骤以及Android在Termux中更新软件包、安装依赖、编译Ollama并运行DeepSeek R1模型的具体过程同时介绍基于Docker Desktop部署Open WebUI通过浏览器选择DeepSeek模型并开始对话的操作细节。文档以1个docx文件打包容量仅15KB结构紧凑、命令明确并附有相关官方链接便于查阅更新。目前已有3769人学习下载适合需要快速验证DeepSeek能力或搭建跨平台AI服务的专业人士也适合希望深入理解模型部署与运行机制的爱好者。1. 多平台 DeepSeek 部署到底在解决什么问题在云平台排队、页面转圈、请求被限流之后越来越多团队开始认真考虑把 DeepSeek 模型放到自己可控的环境里跑。最常见的诉求并不是“我要训模型”而是“我要在不同设备上稳定地用同一个模型”——公司电脑上随时问答、手机上出门也能用、浏览器里还要有完整的聊天界面。这其实就是标题里说的“多平台环境下 DeepSeek 部署”用 Ollama 做本地推理底座把模型装进一台主机再通过 Open WebUI 补上网页端最后让手机通过局域网甚至安全的外网入口访问。这篇文章适合两类人一类是想在办公网内部署私有模型、又不想被各家云平台接口绑定的工程师另一类是手里有 GPU 或高配主机、希望把 DeepSeek 变成“自己服务”的个人开发者。我会把选型理由、最小命令、参数细节和踩过的坑一起讲清楚照着走大概一小时能把三端全跑通。2. Ollama 本地部署选型、最小命令与存储调整2.1 为什么先选 Ollama 当本地底座而不是 vLLM 或 llama.cppDeepSeek 官方在部署建议里常提到 vLLM尤其在追求高并发、大批量请求的生产环境里这没有错。但 vLLM 的完整形态对工程要求不低你要理解 PagedAttention 这类显存优化机制要处理张量并行拆分还得自己设计模型加载队列。对于“团队内部几个人用”甚至“个人使用”的场景这一整套东西远远超出实际需求。llama.cpp 是另一条线适合纯 CPU 推理、嵌入式设备、或者你希望直接用 GGUF 单文件跑模型的场景。但它的多平台接入能力偏弱在移动端和 WebUI 生态里多半还得自己搭一层 API 壳。Ollama 真正占便宜的地方是两点。第一它把模型管理、量化选择、服务监听和 OpenAI 兼容接口全部封装好了一条命令拉模型、一条命令起服务实践成本极低。第二它在开发者和开源社区里的生态很拥挤Open WebUI、Dify、各类移动客户端几乎原生适配它这就省掉了“自己在手机端写协议适配”的大量工作。所以我的常见选择是个人开发者、中小团队、以及“把 DeepSeek 部署成公司内部服务”这类场景默认用 Ollama 当底座只有当并发量到几十甚至几百、必须上多卡推理管线时才转向 vLLM。下文的所有部署方案也都以 Ollama 作为唯一推理后端来展开。2.2 最小可用命令安装、拉模型、跑会话在 Linux 主机上Ollama 的安装非常省事。官方提供了一键脚本适用于绝大多数常见发行版。如果是 Windows 或 macOS也可以直接从官方站点下载对应安装包但后续所有命令和目录结构对得上没有本质区别。# 在线安装Linux/macOS 通用 curl -fsSL https://ollama.com/install.sh | sh # 启动服务默认监听 127.0.0.1:11434 ollama serve # 查看版本确认安装成功 ollama --version # 拉取 DeepSeek 蒸馏模型7B 量化版 ollama pull deepseek-r1:7b # 跑一句对话验证从拉取到推理的全链路 ollama run deepseek-r1:7b 用 Python 实现一个快速排序并解释关键行这段命令里ollama serve是核心。它会启动一个监听在11434端口的本地服务后续 Open WebUI、移动端、API 调用全部走这个端口。ollama pull里的deepseek-r1:7b表示拉取 7B 参数的蒸馏版默认量化格式对大多数消费级显卡友好显存占用大概在 46GB。如果你手里是 24GB 显存以上的机器可以换deepseek-r1:14b或更大参数版本推理质量会明显更好但响应速度也会成比例下降。这里有个新手容易忽略的点ollama run之后模型虽然已经加载但服务不会自动常驻后台。我用ollama serve 把它放到后台技能不够稳就交给 systemd 托管后面第五节会讲。第一次拉模型时如果发现下载速度很慢先别急着反复重试优先检查默认仓库的连通性或者直接走 2.3 节的离线包方案。2.3 模型存储路径迁移与离线包解决“C盘爆了”和“内网拉不动”ollama pull默认会把模型文件存到用户主目录下Linux 是~/.ollama/modelsmacOS 是~/.ollama/modelsWindows 在C:\Users\用户名\.ollama\models。模型动辄几个 GB系统盘空间很容易被吃尽。“修改模型存储路径”几乎是每个部署过的人都会遇到的需求在 Linux 系统里常见的做法是给 Ollama 的 systemd 服务注入一个环境变量。# 假设新增了一块数据盘 /data mkdir -p /data/ollama/models # 把已经下载的模型目录搬过去 mv ~/.ollama/models /data/ollama/models # 通过 systemd override 注入环境变量 sudo systemctl edit ollama在打开的编辑窗口里写入以下内容然后保存退出[Service] EnvironmentOLLAMA_MODELS/data/ollama/modelssudo systemctl daemon-reload sudo systemctl restart ollama # 验证新的存储路径是否生效 ollama list如果ollama list还能看到原有模型说明搬迁成功如果列表空了一截大概率是环境变量注入的位置不对或者旧目录没完全移动过去。另一种常见场景是完全离线的内网服务器没法直接访问模型仓库。应付这种情况我一般会在能联网的机器上拉好模型然后把整个models目录打包拷贝过去tar -czf ollama-models-backup.tar.gz ~/.ollama/models拿到目标机器后解压到对应位置再设置OLLAMA_MODELS指向它最后重启 Ollama。注意模型文件本身和目录结构要完整保留不要只拷单个.bin文件否则服务启动后可能读不到索引这个问题自己手动打包的人很容易踩到。3. 用 Open WebUI 把 DeepSeek 变成网页应用Docker 部署与联通3.1 WebUI 选型为什么优先考虑 Open WebUIOllama 本身只提供命令行交互真正面向日常使用的还得是网页界面。市面上接入 Ollama 的 WebUI 不少最常拿来做对比的是 Dify 和 LobeChat。Dify 的核心定位是“LLM 应用编排平台”更适合做知识库、工作流和 Agent 类的复杂应用部署结构也更重不仅依赖 API 服务还要配套数据库。LobeChat 偏 C 端体验界面漂亮、插件丰富适合个人玩具或展示项目但它对本地模型的深度控制弱一些很多高级配置要绕到设置项背后去改。Open WebUI有段时间叫 Ollama WebUI从一开始就是跟着 Ollama 的需求长起来的它最大的价值是和本地推理引擎的匹配度安装时只要指定 Ollama 的 API 地址就能直接对话页面里可以实时切换本地已下载的不同模型不需要改配置自带会话管理、附件上传、Markdown 渲染和权限控制默认模型列表通过 Ollama API 自动拉取不需要手填模型名。对大多数团队来说Open WebUI 是最省心的一条路精心装饰可能不如 LobeChat复杂编排能力不如 Dify但它覆盖了“把 DeepSeek 部署成多平台可访问服务”这个目标里最高的比例。如果后续要做知识库和 workflow再在其上叠加 Dify 也不迟。3.2 用 Docker 部署 Open WebUI 的最小配置Docker 方式部署 Open WebUI 是最常见的模式因为镜像环境相对干净升级也方便。如果目标机器没有 Docker先装好 Docker Engine 和 Docker Compose 插件再执行下面这套配置。# 创建一个 compose 文件 mkdir -p ~/open-webui cd ~/open-webui cat docker-compose.yml EOF services: open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui restart: always ports: - 3000:8080 volumes: - ./data:/app/backend/data environment: - OLLAMA_BASE_URLhttp://host.docker.internal:11434 extra_hosts: - host.docker.internal:host-gateway EOF docker compose up -d这里需要解释一个关键点容器内部无法直接用localhost访问宿主机的 Ollama因为localhost指向的是容器自己。OLLAMA_BASE_URL把它指到host.docker.internal这个 Docker 提供的特殊域名再由extra_hosts将它映射回宿主机的网络栈这样容器就能访问到宿主机的11434端口。./data卷用来持久化 Open WebUI 的配置、会话记录和上传文件。如果删掉容器重来只要这个目录还在聊天记录就不会丢。首次启动后浏览器访问http://服务器IP:3000填管理员账号完成初始化然后在设置里找到模型选择确认能看到本地已经拉取的 DeepSeek 模型。看不到模型的排查方法在 3.3 节和 5.2 节会专门讲。3.3 联通配置OLLAMA_BASE_URL、宿主监听地址与模型列表很多人在完成 Docker 安装后卡在“页面打不开”“模型列表是空的”这些环节大部分问题出在联通配置上。Open WebUI 通过两个维度感知模型一个是OLLAMA_BASE_URL指向的 API 地址另一个是 Ollama 自己的监听配置。先检查宿主机上 Ollama 是否监听了所有网卡地址。默认情况下Ollama 只绑定127.0.0.1:11434容器通过host.docker.internal访问时实际走的还是宿主机的回环接口所以通常没问题。但如果同一个 Open WebUI 要连接另一台机器上的 Ollama那么那台机器的 Ollama 必须改成监听指定局域网地址# 让 Ollama 监听所有网卡 OLLAMA_HOST0.0.0.0:11434 ollama serve注意不要漏掉模型列表的“模型开关”这一步。Open WebUI 默认会把 Ollama 里所有模型都拉进来但部分版本在模型选择时有“启用/停用”的隐藏逻辑。打开页面左上角模型选择器确认 DeepSeek 模型已经被勾选。如果仍然为空最简单的方法是看宿主机上ollama list是否有输出再确认OLLAMA_BASE_URL环境变量是否拼写正确、容器是否重新启动过。还有一个容易被忽略的细节Open WebUI 的OLLAMA_BASE_URL只负责后端调用前端浏览器的资源加载走的是3000端口同一台机器的防火墙需要放开3000端口对外访问否则从其他电脑或手机打开页面会卡在空白界面。这个坑很多人容易误判成 API 配置问题其实只是端口没有放行。4. 移动端接入 DeepSeek三种方案与局域网访问配置4.1 方案怎么选移动浏览器、原生 App 还是 API 直连移动端接入 DeepSeek 的方案落到实践层其实就是三选一直接打开手机浏览器访问 Open WebUI安装第三方 Ollama 客户端或者在自己的应用里调 Ollama/Open WebUI 的接口。三者的使用范围不同成本和体验也差别很大。移动浏览器访问是最省事、最稳的一条路。只要电脑上已经把 Open WebUI 跑起来手机和电脑在同一局域网内浏览器输入http://主机IP:3000就能用。所有会话、模型切换、文件上传能力都保留不需要额外装任何 App。适合团队内部快速验证、临时演示这种轻量场景。原生 App 的体验最好手机上有独立入口、消息推送、本地会话管理整体感觉更像一个“真正的应用”。但它需要依赖社区客户端对 Ollama API 的兼容程度不同客户端对模型能力的支持并不一致遇到问题也难以快速排查。适合个人长期使用但不太适合在企业内部统一推广。API 直连要留给有研发能力的团队。Ollama 提供了 OpenAI 兼容接口Open WebUI 也暴露了后端 API移动应用直接以/v1/chat/completions的格式请求即可。这样做的好处是完全掌控产品体验代价是需要自建鉴权、并发控制和服务端监控。如果团队目标是做出一个对外产品从第一天就该按这个路子设计WebUI 和本地客户端反而只适合做内部演示。4.2 让手机在同一局域网内访问 Ollama防火墙与端口准备手机能顺利访问的关键是“入口一致、端口畅通”。我推荐统一以 Open WebUI 的3000端口作为移动端的唯一入口而不是把 Ollama 的11434端口开放给手机。直接暴露 Ollama API 的问题在于它没有任何身份认证任何拿到端口的人都能发起对话请求在可控性上是灾难。# 查看宿主机在局域网里的 IPLinux ip -4 addr show # macOS 查 IP 的方式 # ipconfig getifaddr en0 # 如果开了 ufw放行 WebUI 端口 sudo ufw allow 3000/tcp # 如果用的是 firewalldCentOS/RHEL 系常见 sudo firewall-cmd --permanent --add-port3000/tcp sudo firewall-cmd --reload完成上述操作后手机和主机连同一个 Wi-Fi手机浏览器访问http://192.168.x.x:3000正常情况下会出现 Open WebUI 登录页。这一步里最常见的失败原因是“主机和手机不在同一网段”例如手机走的是 4G/5G 蜂窝网络或者路由器开启了 AP 隔离。验证方法很简单在手机浏览器里直接 ping 主机 IP 不现实看主机的 IP 网段和手机在路由器管理页里的 IP 是否属于同一段即可。如果公司网络有更严格的安全策略比如不同业务网段之间默认禁止互访那就需要找网络管理员给主机所在网段和移动网段之间放行端口这种情况下自己临时改防火墙往往踢到铁板。4.3 如果要出门也能用安全前置与常见习惯“移动端部署”到这里很多人的下一步是把服务暴露到公网期望手机在外网也能访问。这个需求合理但一定不要在公网裸奔 Ollama 或 Open WebUI尤其是直接做全端口映射。团队内部一般会采用两层结构外层是可信入口比如带访问控制的安全网关、云服务的安全组白名单内层才放 Open WebUIOllama 始终只监听内网不参与对外通信。安全组的配置逻辑是把3000端口只放行到你们办公室出口 IP 或已知可信 IP 段其他来源一律丢弃。这一步要配合 HTTPS 使用至少保证登录过程不经过明文否则管理员账号密码很容易在中间环节被截获。如果你只是个人使用最简单的办法是把访问限制在自家路由器内网外面有没有需求就提醒自己“没必要做的不做就不会坏”。5. 避坑清单从下载缓慢到 GPU 吃不满的 5 类现场问题5.1 模型一直卡在“拉取镜像”进度条不动现象执行ollama pull deepseek-r1:7b后长时间停在pulling manifest或显示极慢进度条几乎不动。原因默认仓库的连通性受网络环境影响很大。国内网络环境下访问外部镜像源经常出现连接不稳定内网服务器更是如此DNS 解析超时也比较常见。解决优先用离线包方案在公司内网里这是最稳的解法。如果你只是单机网络慢可以考虑更换可用的镜像仓库地址这是社区常见的做法但镜像地址的可用性和时效性都变化快不适合作为长期依赖。更稳妥的长期方案是找一台网络正常的机器把模型拉好按第二节的tar打包方式复制到目标主机。别反复重试同一个下载任务连续重试大概率还是同一个结果。5.2 Open WebUI 容器里连不上 Ollama现象Open WebUI 页面能打开但新建对话后直接提示 “connection refused” 或 “Ollama 服务不可用”。原因OLLAMA_BASE_URL被设置成了http://localhost:11434容器里访问的是容器自己的回环地址压根摸不到宿主机。解决确认 Dockerfile 里环境变量指向http://host.docker.internal:11434并补齐extra_hosts配置。如果使用--network host模式启动容器那反而可以直接用http://127.0.0.1:11434因为容器共享宿主机的网络命名空间。调整完毕后先重启容器再确认宿主机ollama list能正常输出最后回 WebUI 刷新页面。5.3 手机访问时白屏、超时或“拒绝连接”现象电脑上打开 Open WebUI 完全正常同一台主机换成手机访问就白屏或连接超时。原因最常见的是手机的网段与主机网段不一致其次是 3000 端口被防火墙拦截。还有一种情况是路由器的 AP 隔离或访客网络策略阻止了设备间互访。解决先核对主机 IP 与手机 IP 是否在同一网段例如都处于192.168.1.x。接着在手机上用http://主机IP:3000而不是http://localhost:3000。最后检查宿主机防火墙和路由器策略。如果是公司网络下的多网段场景不要试图自己改防火墙硬破直接找网络管理员开端口。5.4 GPU 没吃满生成速度上不去现象部署在带 N 卡的机器上却发现生成速度很慢CPU 占用很高GPU 利用率反而低。原因Ollama 对 NVIDIA GPU 支持依赖驱动版本和 CUDA 环境。如果显卡驱动太旧、显存不够或者 Ollama 启动时没识别到 GPU它会自动回退到 CPU 推理。解决先运行ollama ps查看当前模型是否标注为GPU或CPU/GPU再看输出里有没有明确提到100% GPU。如果显示 CPU 推理就检查驱动是否正常安装适配当前内核的 NVIDIA 驱动然后重启 Ollama。也可以临时设置OLLAMA_NUM_GPU1强制启用一张卡但这个参数要谨慎显存不足时反而会因为换页把性能拖垮。5.5 修改存储路径后模型全部“消失”现象给 systemd 服务注入了OLLAMA_MODELS环境变量重启后ollama list输出为空之前拉好的模型全不见了。原因新路径下是空的旧路径下虽然有模型文件但服务已经不再索引旧目录。解决在切换环境变量之前先把原~/.ollama/models完整移动到新目录。如果已经忘了一步直接ollama run触发重新下载等于把时间浪费在一次全量下载上。更好的做法是高危操作前先备份models目录。如果你是通过移动硬盘或挂载盘切换也确认新路径挂载正常、有读写权限systemctl edit注入环境变量的方式比直接改/usr/lib/systemd/system/ollama.service更不容易被升级覆盖。6. 把三端串起来一套能直接用的启动脚本与验收方法前面每个环节单独跑通后剩下的工作就是把这些碎片拼成一个可重复执行的部署脚本。下面这版脚本是我在类似环境下常用的收尾形态适合 Linux 主机加 Docker 的场景拆开每一步都能独立运行。#!/usr/bin/env bash set -e # 1. 指定模型存储路径避免系统盘爆掉 export OLLAMA_MODELS${OLLAMA_MODELS:-/data/ollama/models} export OLLAMA_HOST0.0.0.0:11434 # 2. 安装并启动 Ollama联网环境 if ! command -v ollama /dev/null; then curl -fsSL https://ollama.com/install.sh | sh fi ollama serve sleep 3 # 3. 拉取 DeepSeek 模型 ollama pull deepseek-r1:7b ollama list # 4. 部署 Open WebUI cd ~/open-webui docker compose up -d # 5. 验收 curl -s http://127.0.0.1:11434/v1/models验收时我有两个固定动作。第一个是确认curl http://127.0.0.1:11434/v1/models输出里包含 deepseek 模型名这代表 Ollama 侧正常。第二个是从手机浏览器打开http://主机IP:3000完整走一遍登录、选模型、发消息三个动作这代表整条链路真正通起来了而不是只看页面加载成功就急着收工。这套方案看起来简单但实际部署时真正占用时间的往往不是命令本身而是网络环境、防火墙策略和各类环境变量的细节。我自己的习惯是先把每个端口单独验证明白再组合成脚本避免把一次失败归因成复杂的多因素问题。如果你也跟着搭到一半卡住了回到对应章节对着现象找原因大概率比重新随机试配置要省时间。希望帮到你。本文还有配套的精品资源点击获取