简介:面向希望在本地电脑、手机或Docker环境中快速启用DeepSeek模型的开发者和技术爱好者,这份指南系统梳理了四条部署路径:基于Ollama的本地部署、iPhone快捷指令API接入、Android Termux源码编译,以及Open WebUI容器化方式。内容从安装Ollama开始,逐步演示命令行拉取模型、配置iOS端Key、编译Android依赖、启动服务并验证等关键操作,步骤具体,适合初学者跟随执行。资源采用docx格式单文件封装,压缩包约15KB,篇幅精炼但覆盖完整流程,便于离线阅读与打印对照。文中对移动端与Web端差异做了分别说明,并给出了权限设置、依赖安装、服务启动失败等常见问题的排错思路,帮助不同环境下的读者少走弯路。当前已有1521人学习下载,对于关注自然语言处理模型落地、正在评估跨端部署方案的技术人员,这份资料可直接作为操作手册使用。
1. DeepSeek 多平台部署:先把三条路选对,再动手敲命令
第一次看到这份 DeepSeek 多平台部署指南时,我下意识想直接照抄命令,结果发现三条路对应三种完全不同的使用场景:Ollama 本地部署适合在电脑上把模型跑成离线服务,手机端部署解决的是碎片时间随手查的需求,基于 Open WebUI 的部署则是把模型、历史记录和对话界面统一管起来。路线选错,后面每一步都会觉得别扭。这篇文章把三种部署方式拆开讲清楚,包括每条路的安装步骤、参数含义和踩坑点,适合想把 DeepSeek 落到自己电脑、手机或局域网环境里的开发者和技术爱好者。
2. 本地部署:基于 Ollama 的安装、模型拉取与运行参数
2.1 为什么选 Ollama:模型运行时与部署形态
本地跑大模型,最现实的问题是环境依赖。GPU 驱动、Python 版本、CUDA 工具链、transformers 版本,任何一个不匹配都能让部署变成玄学现场。Ollama 把这一层封装掉了:它负责模型文件管理、推理进程调度和本地 API 暴露,用户只需要下载安装包、执行一条命令,剩下的交给了运行时。
我的观点是,如果你只是想验证 DeepSeek 在本地能不能跑起来,优先用 Ollama 而不是手动搭深度学习框架。Ollama 的模型以 GGUF 量化格式分发,7B 级别的模型量化后大约占用 4 到 6GB 内存,这个量级在多数开发机上是可以接受的。相比直接用原始权重跑推理,量化格式牺牲了一点点精度,换来了显存占用的大幅下降,这个取舍在个人部署场景里非常划算。
2.2 安装与验证:macOS、Linux、Windows 的差异
安装 Ollama 只有三步:访问官方网站下载对应操作系统的安装包,完成安装后在终端确认版本。macOS 直接拖入应用程序目录,Linux 执行安装脚本,Windows 用安装引导程序走一遍。装完以后第一件事不是去拉模型,而是验证可执行文件是否进入了系统 PATH。
# 验证安装版本,三个平台通用 ollama --version # 查看默认模型存储目录,macOS 和 Linux 默认在用户目录下 ls ~/.ollama/models第一行命令用于确认安装是否完整,版本号能打出来说明可执行文件已经加入 PATH。第二行查看模型目录,目的是提前知道模型文件落地在哪里。后面排查磁盘占用或想把模型迁移到其他盘时,直接操作这个路径就行,不用满硬盘找。
Windows 上我建议用 PowerShell 而不是 CMD 来跑 Ollama 相关命令,交互式对话、环境变量设置对 PowerShell 的兼容性更好。另外,Ollama 在 Windows 上默认会把模型放到用户目录的.ollama文件夹,如果你 C 盘空间紧张,建议提前通过环境变量OLLAMA_MODELS把模型目录指到其他分区,避免模型下到一半磁盘写满。
# macOS/Linux 自定义模型存储路径 export OLLAMA_MODELS=/data/ollama/models ollama serveOLLAMA_MODELS是 Ollama 的模型目录环境变量,设置后再启动ollama serve,新拉取的模型都会落到这个路径。Windows 上则在系统环境变量里新增同名变量,值为目标目录的完整路径。这个参数在 Docker 部署 Open WebUI 时也会用到,因为容器和宿主机共用模型文件时路径必须一致。
2.3 拉取与运行 deepseek-r1:7b:单条命令背后的两个动作
正文里提到的ollama run deepseek-r1:7b实际上拆成两个阶段:先ollama pull下载模型到本地,再ollama run加载模型并启动交互式对话。省略 pull 阶段时,Ollama 会自动先完成下载,再进入对话模式。
# 单独拉取模型,适合先下载再断网使用的场景 ollama pull deepseek-r1:7b # 直接进入交互对话 ollama run deepseek-r1:7b # 查看本地已经拉取的所有模型列表 ollama listollama pull的参数是模型名称deepseek-r1:7b,冒号后面是标签。7b 指 70 亿参数规模,1.5b 和 3b 是更小的版本,如果设备内存紧张可以先拉这些。ollama run支持追加--verbose参数打印推理耗时和 token 消耗量,方便观察模型的响应性能。ollama list则用来确认模型真的落到了本地,还能看到模型文件大小和最后修改时间。
交互模式下可以直接在终端输入问题,模型生成回复后执行/bye退出。如果开发的程序要通过 HTTP 调用模型,不需要进入交互模式——Ollama 默认在11434端口提供 OpenAI 兼容的 API,这个放到第 6 章展开。
2.4 资源占用与并发参数:内存、并行数与模型保持时间
7B 模型的资源占用是多数人部署前最关心的。以deepseek-r1:7b为例,量化后的模型文件大约 4GB 左右,推理时需要把权重加载到内存里,加上上下文窗口的开销,建议电脑预留至少 8GB 内存再跑。低于这个配置会出现对话卡顿,甚至服务被系统杀掉。
| 参数 | 建议值 | 作用 |
|---|---|---|
| 物理内存 | 8GB 以上 | 加载 7B 模型权重及上下文 |
| OLLAMA_NUM_PARALLEL | 2 | 同时处理 2 个请求,多用户时提吞吐 |
| OLLAMA_KEEP_ALIVE | 30(分钟) | 模型闲置 30 分钟内不卸载 |
# 限制并行请求数,调大会增加内存占用 OLLAMA_NUM_PARALLEL=2 ollama serve # 设置模型保持加载的时间,单位是分钟 OLLAMA_KEEP_ALIVE=30 ollama serveOLLAMA_NUM_PARALLEL控制同一个模型同时处理几个请求,并发调大将增加内存占用,但能提升多用户场景的吞吐。OLLAMA_KEEP_ALIVE表示模型在闲置多久后从内存卸载,默认值较小会导致连续对话时重复加载模型,设成 30 分钟可以明显缓解这个问题。这几项参数在本地部署时未必需要调整,到了第 4 章 Open WebUI 多人访问的场景里就变得很关键。
3. 手机端部署:iPhone 快捷指令与 Android Termux 的实战细节
3.1 iPhone 路线的核心:快捷指令与 API Key 的配合
iPhone 部署的本质,不是把模型塞进手机本地,而是通过快捷指令把文本输入转发到一个 API 服务,再把返回结果拼接成对话。这一步的难点不在快捷指令本身,而在 API Key 的获取和权限配置。
打开 iPhone 的 Safari 浏览器访问快捷指令中心,下载对应的 DeepSeek 快捷指令并安装。安装完成后先别急着跑,先到服务商提供的 API Key 管理页面申请一个 Key,通常是sk-开头的一串字符。打开快捷指令的编辑界面,找到“文本”或“字典”动作里的 API Key 字段,把刚才申请的 Key 粘贴进去。
// 快捷指令中的 API Key 变量示意,实际填入时不需要引号 const apiKey = "sk-填入你的密钥"; // 请求体采用 OpenAI 兼容结构 { "model": "deepseek-chat", "messages": [{"role": "user", "content": "你好"}] }代码块里的结构对应快捷指令中 HTTP 请求动作的 JSON 请求体。model字段指定使用的模型名称,messages数组按 OpenAI 格式传递对话记录。官方快捷指令模板里这些参数已经预置,用户只需要替换apiKey变量,不要随意改动消息格式,否则模型可能不按预期回复。
第一次运行快捷指令时,iOS 会弹窗询问是否允许访问,要点“允许”。如果输入完文字没反应,大概率是 API Key 配置错误,或者账号在服务端没有可用配额。而且 iOS 的快捷指令自动化权限有时候会在系统更新后被重置,出现过之前能跑、突然不能跑的情况,这个失败现象的排查思路放在第 5 章统一讲。
3.2 Android 路线的基础:Termux 安装与依赖准备
Android 端的部署思路和电脑端类似,只是把 Ollama 源码拿到 Android 的 Termux 环境里编译,跑一个本地推理服务。Termux 是一个运行在 Android 上的终端模拟器,提供了类 Linux 的环境,需要先做基础初始化。
# 允许 Termux 访问手机共享存储 termux-setup-storage # 更新软件源和已安装的包 pkg update && pkg upgrade # 安装编译 Ollama 需要的依赖 pkg install git cmake golang libjpegturbotermux-setup-storage会在手机存储里创建专用目录,用于后续存放模型文件。pkg update更新软件源索引,pkg upgrade升级已有包。第三行安装的是编译工具链和运行依赖:git拉代码、cmake构建 C++ 组件、golang编译 Ollama 主程序、libjpegturbo是图像处理库,Ollama 部分依赖在构建时会用到。
这里的坑在于 Android 设备的内存。编译大型 Go 项目非常吃内存,如果手机只有 4GB RAM,建议编译前关掉其他后台应用,否则go build很容易被系统杀掉,闪退回桌面。
3.3 编译 Ollama:go generate 与 go build 的分工
依赖装好后开始拉代码和编译:
# 拉取 Ollama 源码,只保留最新版本,不拉历史记录 git clone --depth 1 https://github.com/ollama/ollama.git # 进入源码目录 cd ollama # 生成必要的内嵌资源文件 go generate ./... # 编译当前平台的可执行文件 go build .--depth 1是浅克隆,只下载最新一次提交,节省流量和时间。go generate ./...的作用是扫描代码中的go:generate指令,生成一些内嵌的静态资源文件。在 Ollama 项目中,这一步通常用于准备特定平台的依赖描述,跳过后直接go build不一定报错,但生成的二进制可能缺文件,我建议按顺序执行。go build .会输出一个名为ollama的可执行文件,这就是之后用来启动服务的本体。
编译完成后,用启动命令验证:
# 后台启动 Ollama 服务 ./ollama serve & # 验证服务是否正常运行,有版本信息返回即正常 curl http://localhost:11434&把服务放到后台运行,这样同一个终端还能继续输入其他命令。curl访问本地11434端口,服务正常会返回一个包含版本信息的 JSON 字符串。别急着往下走,先确认这里通了——后续所有的模型拉取和对话都建立在这个服务基础上。
3.4 模型拉取与运行:Android 端的命令差异
服务启动后,拉取并运行 DeepSeek R1 模型。注意 Android 这条路的模型命名与电脑端不同:
# 拉取 DeepSeek R1 8B 模型到手机 ./ollama pull deepseekr1:8b # 运行模型进入对话模式 ./ollama run deepseekr1:8b模型文件在手机端默认存在当前用户目录下。手机端跑 8B 模型比较吃力,实测 6GB 运存的机器只能勉强响应,8GB 及以上会流畅很多。如果手机配置一般,建议改用更小参数的模型版本,响应速度差异体感很明显,日常问答的答案质量差距不大。
3.5 手机端两条路线的选型建议
iPhone 路线本质上是云调用,依赖 API Key 服务端的算力,手机本身只负责发请求和展示,所以对硬件没有要求。Android 路线是本地推理,模型和数据都留在手机上,断网也能用,但对手机性能要求高,而且 Termux 的调试对不熟悉命令行的朋友不太友好。
我一般这样建议:如果主要用手机偶尔问几个问题,选 iPhone 的快捷指令路线,省事、不占存储;如果希望完全离线使用 DeepSeek、对数据隐私要求高,Android Termux 路线值得折腾一次,但一定先确认手机运存在 8GB 以上。
4. Open WebUI 部署:用 Docker 把 Ollama 包装成可视化服务
4.1 Open WebUI 解决的问题与部署形态
终端里的交互模式只适合单人、临时使用。聊天记录、多用户访问、可视化管理,终端都给不了。Open WebUI 是一个自托管的 Web 界面,通过 Docker 容器运行,后端连接 Ollama,把模型管理、对话历史、用户权限和参数调整集中到一个浏览器页面里。
选择 Docker 部署的原因是隔离性。Open WebUI 的更新节奏快,直接装在本机要处理 Node.js 版本、Python 依赖,折腾一圈不如docker run一条命令干净。Docker Desktop 在 macOS 和 Windows 上都有图形化安装包,Linux 上则需要装 Docker Engine。
4.2 Docker Desktop 安装与启动检查
部署前先确认机器装了 Docker Desktop,并且 Docker 引擎处于运行状态。Windows 安装后如果遇到 WSL 2 相关的报错,要去控制面板打开适用于 Linux 的 Windows 子系统功能,重启后一般能解决。
# 验证 Docker 是否安装成功 docker --version # 检查 Docker 引擎是否正在运行 docker psdocker --version能打印版本号说明命令行工具安装成功。docker ps会列出当前运行中的容器,如果输出报错提示无法连接 Docker daemon,说明 Docker Desktop 还没启动,或者 Windows 的 WSL 2 集成没有打开。这种时候先去图形界面确认引擎状态,再回到终端重试。
4.3 启动容器并与宿主机 Ollama 联动
Open WebUI 官方镜像的默认端口是8080,启动时映射到本机的3000端口,避免和其他本地服务冲突。如果宿主机上的 Ollama 已经以服务形式在运行,容器内通过host.docker.internal:11434访问宿主机的 Ollama 服务。
# 拉取并启动 Open WebUI 容器 docker run -d -p 3000:8080 \ --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ openwebui/open-webui:main启动后浏览器访问http://localhost:3000,在首次进入时完成的账号注册会成为管理员账号。界面左下角进入管理面板,在模型设置里选择 DeepSeek 系列模型,Open WebUI 会请求后端 Ollama 拉取并加载模型,完成后就能在新建对话里选择模型开始测试。
参数说明:-p 3000:8080是端口映射,左侧是宿主机访问端口,右侧是容器内服务端口;--add-host的作用是让容器内能解析到宿主机的 Docker 网关地址;-v open-webui:/app/backend/data创建命名卷持久化用户数据,容器删除后聊天记录还在;--restart always让容器在 Docker 重启后自动拉起,省去手动启动的麻烦。
4.4 模型下载失败时先查容器日志
Open WebUI 界面里点击模型下载,如果等很久没有任何进度,第一件事不是反复点按钮,而是去终端看容器日志:
# 查看 Open WebUI 容器日志,只看最后 100 行 docker logs open-webui --tail 100日志里常见的失败原因包括:容器内访问不到host.docker.internal、宿主机 Ollama 未启动、网络无法连接模型仓库、磁盘空间不足。确认是网络问题就检查仓库连通性,确认是宿主机 Ollama 的问题就先单独跑一次ollama pull deepseek-r1:7b,验证宿主机侧的下载链路通畅,再来排查容器内的问题。
4.5 多用户管理与模型权限
Open WebUI 自带用户体系,管理员账号可以在管理面板里创建普通用户,并设置每个人能访问的模型列表。这个能力在团队内部共享模型时很实用,比直接开放 Ollama 端口安全很多。普通用户不需要知道任何命令行参数,打开浏览器就能用。
如果不想开放注册,可以在管理面板里关闭用户自助注册,只保留管理员创建账号。这一步是我之前部署后踩过的一个坑——忘记关注册,导致团队之外的未知设备也能访问对话界面,虽然模型跑在本地没有数据外泄风险,但并发请求把机器负载拉满,影响正常使用。
5. 部署避坑指南:五条踩坑记录与排查思路
部署 DeepSeek 的过程里,决定成败的往往不是教程里写出来的步骤,而是没写出来的容错。下面这张对照表汇总了最常见的五类问题,后面逐条展开现象、原因和解决步骤。
| 现象 | 关键原因 | 解决方向 |
|---|---|---|
| run 时 connection refused | Ollama 服务未启动 | 先启动ollama serve |
| 模型下载中断 | 网络不稳定 | 设置代理或重试 |
| Android 编译被杀 | 内存不足 | 清理后台,换小模型 |
| 快捷指令无响应 | API Key 错误 | 检查 Key 和权限 |
| Open WebUI 连不上后端 | 容器网络问题 | 加 host 映射或 host 网络 |
5.1 坑一:启动 ollama run 提示 connection refused
现象:终端执行ollama run deepseek-r1:7b后报connection refused或failed to connect to service。
原因:Ollama 的服务端没有处于运行状态。ollama run执行时会去连接本机11434端口,服务端进程如果因为手动 kill、开机没启动等原因不在后台,命令就直接失败。
解决:先执行ollama serve单独启动服务端,再开一个新终端执行ollama run。如果ollama serve本身启动失败,检查环境变量OLLAMA_HOST是否被设置成了别的地址,重置为127.0.0.1:11434再试。我一般会在启动后执行curl http://localhost:11434确认端口真的在监听,而不是只看进程列表。
5.2 坑二:模型下载到一半中断
现象:拉取模型时进度条长时间不动,或者到 90% 左右报错,重新执行又从头下载。
原因:Ollama 默认从官方模型仓库拉取文件,网络波动或代理配置会导致长连接中断。部分情况下模型分片下载完但文件校验失败,也会表现为进度停住。
解决:设置代理环境变量后重启 Ollama,或更换镜像仓库地址。也可以先执行ollama pull deepseek-r1:7b单独重试,Ollama 对已下载的分片有缓存,重试不会完全从头开始。这个坑在第一次部署时最容易让人误判成存储空间不足,先看报错文本再决定清理缓存还是切换网络。
5.3 坑三:Android 编译 ollama 时进程被系统杀掉
现象:在 Termux 里执行go build .进行到一半,终端直接闪退或提示 Killed。
原因:手机内存不足。编译大型 Go 项目需要大量内存,Android 系统在资源紧张时优先回收后台进程,编译进程首当其冲。
解决:编译前关闭所有后台应用,清理手机缓存。如果还不行就在 Termux 里用free -h查看剩余内存,低于 1GB 时不要尝试编译,换用电脑部署或选择更小的模型。另一种思路是在电脑上交叉编译出 Android 可执行文件再 push 到手机,但要注意 CPU 架构差异,需要单独指定目标平台编译参数。
5.4 坑四:iPhone 快捷指令运行后没有任何输出
现象:在快捷指令里输入问题后,转了一圈没有结果返回。
原因:常见是 API Key 填错、Key 格式不正确、账号下没有可用配额。也有部分是快捷指令的网络访问权限没开,请求被系统拦截。
解决:先打开快捷指令编辑界面检查 API Key 有没有多余空格或隐形换行;然后到服务商后台确认 Key 状态及账户配额;最后在系统设置里找到快捷指令,确认网络访问权限是允许状态。排掉这三层后,绝大多数问题都能定位到 Key 本身。我之前遇到过 Key 复制时把空格带进去的情况,整整排查了半个小时,从那以后填任何 Key 都会先粘贴到记事本里清一遍格式。
5.5 坑五:Open WebUI 界面无法连接 Ollama 后端
现象:打开 Open WebUI 页面,对话时一直转圈,控制台提示无法连接后端模型服务。
原因:Open WebUI 容器运行在隔离网络里,要访问宿主机的 Ollama,需要依赖host.docker.internal这个特殊域名解析到宿主机。Docker Desktop 默认支持这个解析,但某些 Linux 环境下没有自动写入 hosts,或者宿主机 Ollama 根本没启动。
解决:先确认宿主机执行curl http://localhost:11434有返回;再检查docker run命令里有没有加--add-host=host.docker.internal:host-gateway。如果反复排查仍不通,另一种做法是把容器网络模式改成 host 模式,直接用localhost:11434访问宿主机服务,牺牲少量隔离性换稳定性。
6. 部署完成后的验证与进阶:用 API 把 DeepSeek 跑成可服务化接口
部署完成不代表交付完成,能稳定服务才是终点。手动对话验证的只是模型本身,真正要确认的是 API 接口的可用性。我每次部署完都会强制走一遍固定验证流程:先确认端口返回的 JSON 结构符合预期,再写一个最短的脚本,模拟真实客户端的连续两次对话,确认上下文没有被重置。
# 验证 Ollama 服务的模型列表接口 curl http://localhost:11434/v1/models返回的 JSON 里会列出当前 Ollama 认识的所有模型,能正常返回说明 API 层已经可用。这一步对本地部署和 Open WebUI 部署都是通用检查。如果想验证模型的实际响应内容,用下面的 Python 片段调一次对话接口:
import requests resp = requests.post( "http://localhost:11434/v1/chat/completions", json={ "model": "deepseek-r1:7b", "messages": [{"role": "user", "content": "用一句话介绍你自己"}], "stream": False } ) print(resp.json()["choices"][0]["message"]["content"])代码里/v1/chat/completions是 OpenAI 兼容接口,可以在不改业务代码的情况下直接接入现有项目。stream设为 False 表示等完整回复生成后一次返回,调试方便;接入生产环境时可以改成 True 走流式输出,首字延迟明显降低。如果要做更完整的验证,可以再发一条带历史记录的请求,确认messages数组里传两轮的对话记录,模型能结合上文回答。
如果要在局域网里让其他设备通过浏览器访问 Open WebUI,启动 Ollama 时把OLLAMA_HOST设为0.0.0.0:11434,然后在确认内网安全的前提下通过宿主机 IP 访问。手机端如果不想依赖第三方 API,也可以让手机和电脑处于同一局域网,把手机快捷指令或 Termux 里的请求地址改成电脑的局域网 IP,这样就把本地部署、手机端和 Open WebUI 串成了一套完整的个人 AI 基础设施。
从第一次部署翻车到现在,我已经习惯了每换一台机器、每装一次环境,都强制走一遍ollama serve启动、curl http://localhost:11434验证、ollama list确认模型的固定流程。这套流程不聪明,但至少保证下次部署时不会在黑匣子里瞎猜。希望这篇部署笔记能帮你在 DeepSeek 多平台落地时少踩几个坑,把时间省下来做真正有价值的应用。
本文还有配套的精品资源,点击获取