简介:DeepSeek作为开源大模型,如何在多种设备上高效部署是许多开发者关注的问题。这份文档以图文形式系统梳理了基于Ollama的本地部署、iOS与Android移动端部署,以及借助Open WebUI的云端界面配置流程,适合希望将DeepSeek落地到桌面系统、手机或Web界面的技术开发者、研究人员和AI爱好者。资源共1个文件,为docx格式,整体压缩包大小仅15KB,内容精炼且步骤完整,便于快速查阅与实操。已有4126人学习下载。文档不仅给出Ollama安装、模型拉取与交互命令,还针对iPhone快捷指令配置API Key、Android端通过Termux编译运行Ollama等典型场景提供了可复现的详细指引,并对Open WebUI与Docker Desktop的配合使用给出了明确说明,可显著降低初次接触者的配置门槛,提升跨平台部署的成功率。
1. 先把部署路线理清:三套方案分别适合谁
DeepSeek 的部署,很多人第一步就卡在“不知道到底装哪个”。照网上教程装完 Ollama,模型没下下来;想在手机上跑,又搞不清快捷指令和 Termux 哪个靠谱。我最近把三套方案完整走了一遍:Ollama 本地终端、iPhone/Android 手机端、Docker 里的 Open WebUI 网页服务。这套资源把三条路的手工步骤、启动参数和失败日志都整理在一份指南里,新手能照着命令敲,熟手能直接翻第五章的高频报错。适合想在本地跑大模型、做实验或自建 AI 工具链的开发者、研究人员和 AI 爱好者。
2. 基于 Ollama 的本地部署:从拉模型到跑通第一段对话
2.1 为什么选 Ollama:模型格式、量化与选型
Ollama 是我见过的把大模型“Docker 化”做得最顺手的工具。它把模型文件、运行参数和 API 服务封装成一条命令,本地起一个常驻进程,之后所有模型统一走http://localhost:11434这个入口。对深度学习模型部署来说,这意味着你不用关心模型原始权重放哪、依赖怎么装,只要拉镜像一样把模型 tag 拉下来就行。
DeepSeek 这个系列给 Ollama 提供了多个尺寸的量化版本,常见 tag 有deepseek-r1:1.5b、deepseek-r1:7b、deepseek-r1:8b、deepseek-r1:14b、deepseek-r1:32b。这里的 b 是参数量级,7b 代表 70 亿参数。真正影响你能不能跑起来的是量化精度,Ollama 默认拉取的版本一般已经做了 4-bit 量化,模型文件体积大幅缩小,推理时的显存和内存占用也随之下降。
| 模型 Tag | 量化后体积(约) | 内存建议 | 适用场景 |
|---|---|---|---|
| deepseek-r1:1.5b | 1.1 GB | 4 GB | 低配机器验证链路 |
| deepseek-r1:7b | 4.7 GB | 16 GB | 日常对话、代码生成 |
| deepseek-r1:14b | 9.0 GB | 32 GB | 更高推理质量 |
我一般会在只有 CPU 的机器上先用 1.5b 把整条链路跑通,确认网络和配置没问题,再换 7b。一上来直接拉 7b,万一网络抖动或磁盘不足,排错成本会高很多。
2.2 安装 Ollama:三个系统分别怎么装
安装就一条命令,但不同系统细节不一样。macOS 和 Linux 都可以用安装脚本,Windows 则走图形化安装包。安装完成后建议先确认版本号,避免后续命令报错时分不清是环境问题还是命令问题。
# macOS / Linux 一体安装脚本 curl -fsSL https://ollama.com/install.sh | sh # Windows:下载 OllamaSetup.exe,双击下一步完成安装 # 安装完成后验证版本 ollama --version第一行命令会下载一个安装脚本并交给 shell 执行,-fsSL里的f表示失败时不输出多余错误,S表示显示进度,L表示跟随重定向。Windows 安装包装完后,Ollama 会注册成后台服务,终端里直接能用ollama命令。如果 macOS 上提示“无法打开”,去系统设置-隐私与安全性里点“仍要打开”即可,这是系统对未签名脚本的常规拦截,不是安装包问题。
2.3 拉取并运行 DeepSeek 模型:核心命令逐一拆解
安装完就能拉模型了。我建议第一次运行直接用ollama run,它会自动完成拉取、加载和进入对话三步。模型文件会存到本地的~/.ollama/models目录,Linux 和 macOS 都是这个路径,Windows 则在用户目录下的.ollama文件夹里。
# 首次运行会自动拉取模型,等待时间取决于网络 ollama run deepseek-r1:7b # 进入交互模式后,直接输入问题即可 # 退出交互模式用 /bye # 查看本机已有模型 ollama list # 只下载不进入对话 ollama pull deepseek-r1:7b # 删除模型 ollama rm deepseek-r1:7bollama run做了三件事:检查本地有没有这个 tag,没有就拉取;加载模型到内存;启动一个交互式 REPL。/bye退出后模型并不会立即卸载,会常驻内存等待下一次请求。如果机器内存紧张,把OLLAMA_KEEP_ALIVE环境变量设短一些,比如OLLAMA_KEEP_ALIVE=5m,模型空闲 5 分钟后自动释放。
服务起来之后,Ollama 默认监听 11434 端口,这个端口也是后面手机端和 Open WebUI 对接的入口。可以用 curl 直接测一下:
curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:7b", "prompt": "用一句话介绍你自己", "stream": false }'这里的stream: false表示等完整回答生成后再一次性返回,调试阶段建议关闭流式输出,方便看 JSON 结构。model字段必须和ollama list里的 tag 完全一致,大小写、冒号都不能错,否则会返回model not found。能拿到 JSON 响应,说明本地模型服务已经可以对外提供服务了,这一步是后面所有跨平台接入的基础。
3. 手机端部署:iPhone 快捷指令与 Android Termux 两套路线
3.1 先想清楚:手机端是调远程 API 还是本地编译
手机端部署其实有两条完全不同性质的路。iPhone 那条快捷指令方案,本质是调远程 API,手机本身不做推理,只是一个带输入框的转发壳。Android 那条 Termux 方案,才是真的在手机 CPU 上跑本地模型。选哪条,取决于你要不要离线可用,以及能不能接受发热和速度。
我的判断是:iPhone 用户日常使用优先走快捷指令加 API Key 的组合,省电、响应快,但每次请求都要联网,而且 API Key 如果泄露,别人可以盗刷你的额度。Android 上有折腾精神、想体验纯离线推理的,才值得在 Termux 里从源码编译 Ollama。8B 模型在旗舰手机上生成速度大约每秒几个 token,当玩具可以,当生产力工具会把人急死。
3.2 iPhone:快捷指令加 API Key 配置
iPhone 这条方案,核心是把“发请求、拿结果、展示”封装成一个快捷指令。安装方式是从分享链接导入,iOS 系统默认会拦截未受信任的快捷指令,需要先到“设置-快捷指令”里打开“允许不受信任的快捷指令”。首次运行时系统弹窗问“允许访问”,这里必须选允许,否则后续每次执行都会卡在授权弹窗。
操作步骤按顺序来:
- 用 Safari 打开资源包里的快捷指令 iCloud 链接,点击“获取快捷指令”完成导入。
- 到提供 API Key 的服务商页面创建一个 Key,建议创建时就把权限限制为“仅可调用对话接口”,不要给管理员权限。
- 在快捷指令编辑页里找到“文本”参数,把 Key 粘贴进去,替换掉原来的示例内容。
- 回到桌面运行这条快捷指令,输入“你好”,能收到回复就算通了。
配置里最容易翻车的是复制 Key 时带上了换行符或空格。我习惯先粘到备忘录里,确认首尾没有多余字符,再复制进快捷指令。另一点是,不同服务商的 API 地址可能不一样,如果快捷指令里的请求地址还是默认值,需要手动改成你实际购买的接口地址,这一步在指令的“URL”参数里能看到。
3.3 Android:Termux 环境搭建与 Ollama 编译
Android 的部署比 iPhone 重很多,核心是在 Termux 这个终端模拟器里手动编译 Ollama。Termux 相当于 Android 上的 Linux 环境,有包管理器,能装 git、golang、cmake 这些工具链。原版指南里git clone depth 1是个笔误,正确写法是--depth 1,意思是只克隆最近一次提交,能省掉大量 Git 历史数据,对手机流量很友好。
# 设置存储权限,允许 Termux 访问手机文件 termux-setup-storage # 更新软件包索引并升级已有包,首次运行必须做 pkg update && pkg upgrade -y # 安装编译 Ollama 需要的依赖 pkg install git cmake golang libjpeg-turbolibjpeg-turbo是处理图片数据的依赖,不装的话后面编译可能报找不到头文件的错。golang是 Ollama 的主语言,版本太老会导致编译失败,装完可以用go version确认。如果 Termux 官方源里的 Go 版本不够新,需要从源码安装新版,这一步我建议直接看go.dev的安装指引,不要指望pkg install能给你最新版。
依赖装完后开始克隆仓库和编译:
# 克隆 Ollama 源码,--depth 1 只拉最新提交 git clone --depth 1 https://github.com/ollama/ollama.git cd ollama # 生成必要的代码文件,会跑一会儿 go generate ./... # 编译主程序,输出文件在当前目录 go build .go generate ./...会扫描代码里的生成指令,把内嵌的资源文件生成到对应目录。go build .默认编译当前包,产物是一个名为ollama的可执行文件。编译过程比较吃内存,如果 Termux 报signal: killed,多半是内存不足被系统杀了,可以先关掉其他 App 再重试。编译完成后启动服务:
# 后台启动 Ollama 服务 ./ollama serve & # 验证服务是否存活,返回 Ollama is running 即成功 curl http://localhost:11434 # 拉取并运行 DeepSeek 模型 ./ollama pull deepseek-r1:8b ./ollama run deepseek-r1:8bserve默认只监听localhost,意味着只有手机自己可以访问。如果你希望用电脑或另一台手机通过局域网访问这台手机上的模型,需要改成./ollama serve --host 0.0.0.0:11434。注意,&符号把进程放到后台,Termux 一旦被系统回收,后台进程也会被杀死,想长期挂着还得配合termux-wake-lock保持屏幕常驻。
4. 基于 Open WebUI 的 Web 部署:用 Docker 把界面和模型串起来
4.1 Open WebUI 是什么,为什么必须用 Docker
Ollama 本身只有命令行和 API,没有现代聊天界面。Open WebUI 是跑在浏览器里的对话前端,支持多用户登录、会话历史、模型参数调节,还能直接对接本地 Ollama 服务。这一层是很多人部署 DeepSeek 时的刚需,毕竟不是每个人都能习惯黑乎乎的终端。
用 Docker 而不是直接用 Python 装 Open WebUI,是因为它依赖非常多,Python 版本、Node 构建、数据库迁移一个不对就起不来。Docker 容器把运行时、代码、配置全部打成一个镜像,宿主机只要装一个 Docker Desktop,其他全是容器内部的事情。升级也方便,删掉旧容器、拉新镜像、重新跑一遍同样的命令就行。
4.2 Docker Desktop 安装与基础检查
Docker Desktop 在 macOS 和 Windows 上都是图形化安装包,Linux 则是通过 apt 安装 docker-ce 套件。装完后先确认守护进程起来了:
# 确认 Docker 客户端和服务端都正常 docker --version docker psdocker ps如果报错 “Cannot connect to the Docker daemon”,说明 Docker Desktop 没有启动,去应用列表里点开等它完成初始化。另外确认一下docker compose是否可用,后面如果要按 YAML 方式编排 Open WebUI 会用到。Docker Desktop 的资源设置里,建议把内存调到 4 GB 以上,否则 Open WebUI 和 Ollama 同时跑可能互相挤内存。
4.3 部署 Open WebUI:一条命令起一个服务
Open WebUI 官方发布的容器镜像可以直接从 GitHub Container Registry 拉取。部署命令需要把宿主机的 3000 端口映射到容器的 8080 端口,同时挂载一个数据卷保存用户账号和会话记录。最关键的是告诉容器 Ollama 服务在哪,也就是OLLAMA_BASE_URL这个环境变量。
docker run -d \ --name open-webui \ -p 3000:8080 \ -v open-webui:/app/backend/data \ -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \ ghcr.io/open-webui/open-webui:main-d表示后台运行。-v open-webui:/app/backend/data创建了一个命名卷,容器删了数据还在。host.docker.internal是 Docker 提供的一个特殊域名,在容器内部解析到宿主机 IP,Windows 和 macOS 默认支持。Linux 环境下 Docker Desktop 没有这个域名,需要在命令末尾加一段--add-host=host.docker.internal:host-gateway,否则容器找不到 Ollama。
浏览器打开http://localhost:3000,第一次访问会要求创建管理员账号,这是 Open WebUI 自己的用户体系,和 Ollama 无关。登录后进左下角设置,找到“模型管理”,在输入框里填deepseek-r1:7b,点下载。下载完成后回到对话页,顶部模型下拉菜单里选 DeepSeek 就能开始聊天。
如果你想把 Ollama 和 Open WebUI 分到两台机器,OLLAMA_BASE_URL改成 Ollama 所在机器的局域网 IP,比如http://192.168.1.100:11434,前提是 Ollama 启动时加了--host 0.0.0.0。这个变量支持 HTTP 地址,不推荐直接暴露到公网,因为 Open WebUI 本身没有内置限流和鉴权,公网裸奔很容易被扫到然后被别人白嫖算力。
5. 避坑与排查:四类高频报错的处理记录
5.1 模型拉取卡住:Pulling 进度不走
现象:执行ollama run deepseek-r1:7b后,终端停在 “Pulling manifest” 或进度条长时间不动,有时直接显示 0%。
原因:Ollama 拉模型走的是官方模型仓库,这个仓库在部分网络环境下访问很慢或直接超时。另一个可能原因是本地磁盘空间不足,模型文件下到一半写不进去,但 Ollama 不会明确提示。
解决:先确认磁盘,执行df -h ~/.ollama,看看剩余空间够不够模型体积的 1.2 倍。空间没问题的话,拉取时加--verbose看详细日志,能直接看到是连接超时还是下载中断。最简单粗暴的办法是ollama rm删掉半截模型,换个时间重新拉,断点续传在 Ollama 里表现不稳定,与其等一个不确定的状态,不如重来。
5.2 Termux 编译 Ollama 时 go build 报错
现象:go build .中途退出,报错信息包含undefined: unix.Stat_t,或者整个进程直接被系统杀死。
原因:第一种是 Go 版本太老,Ollama 依赖新版 Go 的系统调用接口,Termux 默认源里的 Go 版本往往滞后。第二种是内存不足,手机编译大型 Go 项目时峰值占用可能超过系统限制,进程被杀没有任何错误日志。
解决:先执行go version,如果低于 1.22,去 Go 官网下载新版 tarball 手动安装。内存问题优先关后台应用释放内存,再执行go build -p 2 .限制并行编译数为 2,降低峰值占用。如果还不行,把GOMAXPROCS也设成 2。别指望一次性成功,我在手机上编译至少试了三次才过,前两次都是内存被杀。
5.3 容器里的 Open WebUI 连不上 Ollama
现象:Open WebUI 页面打开后,新建对话直接报错,后台日志显示could not connect to ollama。
原因:容器里的localhost指的是容器自己,不是宿主机。Open WebUI 容器内部去访问localhost:11434,自然找不到宿主机的 Ollama 服务。Linux 用户用host.docker.internal还会报解析不了,因为这个域名默认只在 Docker Desktop 的 VM 里生效。
解决:容器启动命令里把OLLAMA_BASE_URL改成http://host.docker.internal:11434,Linux 再加--add-host=host.docker.internal:host-gateway。改完删掉旧容器重新跑,不要docker exec进去改环境变量,改了也不会生效。还有一个隐蔽坑:Ollama 默认只监听 127.0.0.1,如果 Ollama 跑在另一台机器,必须用--host 0.0.0.0启动,否则即使网络通,服务本身拒绝外部连接。
5.4 快捷指令首次运行一直要授权
现象:iPhone 上运行快捷指令,弹窗提示“允许访问 xxx”,每次都点允许,但下一次运行还是会弹。
原因:iOS 对快捷指令访问网络的授权机制就是这样,首次必须手动允许。如果一直弹,是因为指令里有多个网络请求,每个请求都要单独授权一次。还有一种情况是 API Key 填错,服务端返回 401,快捷指令就判定为请求失败,看起来也像授权问题。
解决:以最快路径验证 Key 是否有效:在电脑上用 curl 直接请求一次对话接口,能返回内容就说明 Key 没问题。如果 Key 没问题,建议删掉快捷指令重新导入一次,导入时不要改任何参数,先跑通再改。改过 URL 参数后,快捷指令会被视为新指令,需要重新授权,这个现象很容易让人误判成系统故障。
6. 进阶:把 Ollama 接进自己的 Python 脚本
6.1 用 requests 调用本地 API 构建简单工具
部署和 Web UI 都跑通之后,下一个自然需求是让代码调用模型。Ollama 的 API 是纯 HTTP,因此只要requests就能接入。我常用的是api/generate接口,它会生成一个完整答案。把stream改成true则按流式返回,适合做流式输出的聊天应用。
import requests payload = { "model": "deepseek-r1:7b", "prompt": "用三句话解释什么是跨平台部署", "stream": False, "options": { "temperature": 0.7, "num_predict": 512 } } r = requests.post("http://localhost:11434/api/generate", json=payload) data = r.json() print(data["response"])temperature控制随机性,值越低回答越稳定,代码生成建议 0.2,闲聊可以开到 0.8。num_predict限制生成的最大 token 数,不设的话模型可能一直写到上下文耗尽。如果 Ollama 跑在手机上或另一台服务器,把 URL 换成对应的 IP 即可,前提是服务启动时绑定了0.0.0.0。
6.2 用 /api/chat 实现多轮对话
api/generate每次请求只认一段 prompt,不适合做多轮对话。换成api/chat接口,把历史消息按列表传进去,Ollama 会自己维护上下文。
import requests messages = [ {"role": "system", "content": "你是一个熟悉 Docker 的运维工程师"}, {"role": "user", "content": "容器里访问不到宿主机服务怎么办"} ] r = requests.post("http://localhost:11434/api/chat", json={ "model": "deepseek-r1:7b", "messages": messages, "stream": False }) print(r.json()["message"]["content"])system角色的消息用来设定身份和行为准则,不属于用户对话内容。需要注意,这条路不会自动截断历史,对话轮数多了,上下文超过模型窗口后,早期内容会被截断,这时需要手动删掉messages列表前几项。
从那以后,我每次换环境部署 Ollama,都强制自己走一遍完整验证:版本、模型列表、一次生成、一次对话,四步全过才算部署完成。这套资源里的完整命令清单和报错速查表,能帮你把这几步压缩到半个小时以内。希望帮到你。
本文还有配套的精品资源,点击获取