DeepSeek 本地部署全攻略:Ollama、手机端与 Open WebUI 三条路线

简介:这份文档面向希望在个人设备上落地大模型的开发者、研究人员与技术爱好者,系统梳理了多平台环境下DeepSeek模型的部署路径。内容覆盖基于Ollama的macOS、Linux、Windows本地部署,从环境安装到命令行拉取模型并进入终端交互;针对移动端分别给出iPhone快捷指令与Android Termux的完整操作流程;同时介绍借助Docker容器化集成Open WebUI,通过浏览器访问和管理模型。资源包为1个docx文档,约15KB,结构紧凑、命令与官方网址齐全,便于按平台快速检索对照。已有3770人学习下载,读者可据此掌握不同硬件条件下的模型配置方法,理解大模型运行机制,并将NLP服务能力迁移到实际工作与业务流程中,提升效率与体验。

1. 多平台部署 DeepSeek:从终端到浏览器的三条落地路线

第一次在本地跑 DeepSeek 是在一台 16GB 内存的 MacBook 上,当时想当然地拉了个 14b 的模型,结果加载到一半内存直接飙红,风扇狂转,终端卡死。后来换成 7b 量化版才顺利跑起来。这个坑让我意识到,模型部署不是「下载完就能用」那么简单,硬件、量化等级、运行方式三者必须匹配。DeepSeek 目前主流的本地部署路线有三条:Ollama 命令行、手机端 Termux 或快捷指令、以及 Open WebUI 浏览器方案。每条路对硬件和操作习惯的要求完全不同。如果你手头只有一台普通笔记本,或者想在地铁上用手机跑个推理,又或者想给团队搭一个浏览器就能访问的对话入口,下面这几套方案基本能覆盖。接下来我会按「装什么、怎么装、坏了怎么救」的顺序,把每一步的命令和参数都拆开讲清楚。

2. Ollama 本地部署:从安装到拉取 DeepSeek-R1 的完整链路

2.1 安装 Ollama 与版本选择

Ollama 的安装本身不复杂,但版本选择有个容易被忽略的点:不同操作系统对 Ollama 的最低版本要求不一样。macOS 需要 12 以上,Linux 内核建议 5.15 以上,Windows 则要求 Win10 21H2 之后的版本。我一般会先去 Ollama 官网下载对应系统的安装包,macOS 直接拖进 Applications,Linux 用一条脚本搞定:

# Linux 一键安装脚本,会自动检测架构并下载最新稳定版 curl -fsSL https://ollama.com/install.sh | sh # 安装完成后验证版本,确认 ollama 命令已加入 PATH ollama --version

Windows 用户下载.exe安装包后双击即可,安装程序会自动把ollama加入系统环境变量。这里有个细节:如果你之前装过旧版 Ollama,建议先卸载再装新版,否则可能出现ollama serve端口被占用但版本不匹配的情况。安装完成后,Ollama 默认会在11434端口启动一个本地服务,这个端口后面在 Open WebUI 和手机端都会用到,记一下。

2.2 拉取 DeepSeek-R1 模型与参数取舍

Ollama 安装好之后,拉模型就是一条命令的事,但选哪个 tag 直接决定了你能不能跑起来。DeepSeek-R1 在 Ollama 库里有多个尺寸,常见的有deepseek-r1:1.5b、7b、8b、14b、32b等。我的经验是:8GB 内存选 1.5b 或 7b 的量化版,16GB 内存可以上 8b,32GB 以上再考虑 14b。别看着参数大就冲动,跑不动的模型等于没装。

# 拉取并运行 7b 版本,Ollama 会自动下载模型文件到本地 ollama run deepseek-r1:7b # 如果只想下载不立即运行,可以用 pull 命令 ollama pull deepseek-r1:7b # 查看本地已下载的模型列表 ollama list

ollama run的逻辑是:先检查本地有没有这个模型,没有就去官方模型库拉取,下载完成后自动进入交互式对话模式。你可以在终端里直接输入问题,模型会流式输出回复。如果想退出对话,输入/bye即可。这里有个常见误区:很多人以为ollama run每次都会重新下载,其实它只会在本地缺失时才触发下载。模型文件默认存在~/.ollama/models目录下,7b 量化版大约 4-5GB,提前留好磁盘空间。

2.3 配置 Ollama 服务与远程访问

默认情况下,Ollama 只监听127.0.0.1:11434,也就是只有本机能访问。如果你想让同一局域网内的其他设备也能调用,需要改一下服务配置。Linux 下用 systemd 管理的话,编辑/etc/systemd/system/ollama.service,在[Service]段里加一行环境变量:

# 让 Ollama 监听所有网卡,允许局域网访问 Environment="OLLAMA_HOST=0.0.0.0:11434" # 改完后重载配置并重启服务 sudo systemctl daemon-reload sudo systemctl restart ollama

macOS 下则通过launchctl setenv OLLAMA_HOST "0.0.0.0:11434"设置,然后重启 Ollama 应用。改完之后用curl http://localhost:11434验证一下,返回Ollama is running就说明服务正常。注意,开放到0.0.0.0意味着同网络下任何人都能访问你的模型,测试完建议改回127.0.0.1,或者至少加个防火墙规则限制来源 IP。

3. 手机端部署:Termux 编译 Ollama 与快捷指令方案

3.1 Android Termux 环境准备与依赖安装

Android 上跑 Ollama 属于「能跑但别指望太快」的方案,适合应急或轻量测试。核心工具是 Termux,一个 Android 终端模拟器。安装 Termux 时要注意:不要从应用商店下,那个版本太旧,直接去 GitHub Releases 页面找termux-app_v0.119.0beta.1+apt-android-7-github-debug_universal.apk这个包。装好后先做两件事:设置存储权限和更新软件包。

# 请求存储权限,Termux 会弹出系统授权对话框 termux-setup-storage # 更新包管理器并升级已安装的包 pkg update && pkg upgrade -y # 安装编译 Ollama 所需的依赖 pkg install git cmake golang libjpeg-turbo -y

termux-setup-storage是为了让 Termux 能访问手机存储,后面下载模型文件会用到。pkg update更新的是 Termux 自己的包索引,不是 Android 系统更新。golang是编译 Ollama 源码必需的,libjpeg-turbo则是处理图像相关依赖。这几步在手机上执行会比较慢,建议连上 WiFi 再操作。

3.2 编译 Ollama 并启动服务

Termux 里没有现成的 Ollama 二进制包,需要从源码编译。这个过程在手机上大概需要 5-10 分钟,取决于手机性能。

# 克隆 Ollama 仓库,--depth 1 只拉最新一次提交,节省时间和空间 git clone --depth 1 https://github.com/ollama/ollama.git cd ollama # 生成必要的代码文件 go generate ./... # 编译,生成可执行文件 go build . # 后台启动 Ollama 服务 ./ollama serve &

go generate ./...会跑一遍代码生成逻辑,有些平台相关的文件需要这一步才能正确编译。go build .在当前目录生成ollama可执行文件。启动服务时加&让它后台运行,否则终端会被占用。启动后用curl http://localhost:11434验证,返回版本信息就说明服务起来了。如果编译报错,大概率是 Go 版本太旧,用pkg install golang确保是最新的。

3.3 拉取模型与手机端运行限制

服务起来之后,拉模型的命令和桌面端一样:

# 拉取 8b 版本,手机端建议不要超过 8b ./ollama pull deepseek-r1:8b # 运行模型进入对话 ./ollama run deepseek-r1:8b

但这里必须说清楚:手机端跑 8b 模型,推理速度大概在每秒几个 token,响应会比较慢。如果手机内存小于 8GB,建议换成deepseek-r1:1.5b,虽然效果打折扣,但至少能跑完。另外 Termux 后台容易被 Android 系统杀掉,长时间运行建议用termux-wake-lock保持唤醒。iPhone 用户走的是另一条路——快捷指令加 API Key 的方式,不需要本地跑模型,而是调用远程接口。在 Safari 里下载快捷指令后,打开快捷指令应用,把获取到的 API Key 填进去,首次运行会弹出网络访问授权,点允许即可。这种方式对手机性能没要求,但依赖网络和外部服务。

4. Open WebUI 部署:Docker 容器化与浏览器访问配置

4.1 Docker 环境准备与 Ollama 联动

Open WebUI 解决的是「不想在终端里敲命令,想要一个浏览器界面」的需求。它的部署依赖 Docker,所以先把 Docker Desktop 装好。Windows 和 macOS 去 Docker 官网下载安装包,Linux 用包管理器装docker-ce和docker-compose-plugin。装完后确认 Docker 服务在运行:

# 检查 Docker 版本和运行状态 docker --version docker info # 拉取 Open WebUI 镜像 docker pull ghcr.io/open-webui/open-webui:main

docker info如果报错说连不上 daemon,说明 Docker 服务没启动,Windows 下打开 Docker Desktop 即可,Linux 下用sudo systemctl start docker。Open WebUI 的镜像在 GitHub Container Registry 上,国内拉取可能会慢,耐心等或者配置镜像加速。

4.2 启动 Open WebUI 容器并连接 Ollama

Open WebUI 需要和 Ollama 通信,所以启动容器时要指定 Ollama 的地址。如果 Ollama 跑在宿主机上,用host.docker.internal这个特殊域名来访问:

# 启动 Open WebUI 容器,映射 3000 端口,并指定 Ollama 地址 docker run -d \ -p 3000:8080 \ --add-host=host.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ --restart always \ ghcr.io/open-webui/open-webui:main

-p 3000:8080把容器内的 8080 端口映射到宿主机的 3000,浏览器访问http://localhost:3000即可。--add-host让容器内能解析host.docker.internal到宿主机 IP。-v open-webui:/app/backend/data把对话记录和配置持久化到 Docker 卷,删容器不丢数据。--restart always保证 Docker 重启后容器自动拉起。启动后打开浏览器,首次访问需要注册一个管理员账号,注册完进入设置页面,在「连接」里填http://host.docker.internal:11434,保存后就能在模型列表里看到 Ollama 已下载的 DeepSeek 模型。

4.3 模型管理与对话测试

Open WebUI 的模型管理界面比较直观:左下角设置里点「模型」,可以看到 Ollama 里已有的模型,也可以直接在这里拉取新模型。选择deepseek-r1:7b后新建对话,输入测试问题,如果能看到流式回复,说明整条链路通了。这里有个容易翻车的点:如果 Ollama 服务没启动,或者地址填错,Open WebUI 会显示「无法连接到 Ollama」,但不会告诉你具体原因。排查顺序是:先curl http://localhost:11434确认 Ollama 活着,再docker exec -it open-webui curl http://host.docker.internal:11434确认容器内能访问宿主机,最后检查 Open WebUI 设置里的地址有没有写错。

5. 避坑与排查:部署 DeepSeek 时最容易翻车的五个点

5.1 模型拉取卡住或超时

现象是ollama pull进度条长时间不动,最后报 timeout。原因通常是模型文件较大,网络波动导致下载中断。解决方法是先检查磁盘空间,然后重试;如果反复失败,可以手动设置OLLAMA_MODELS环境变量把模型目录指向空间更大的分区,或者换个时间段再拉。我一般会在拉大模型之前先df -h看一眼剩余空间,7b 留 10GB,14b 留 20GB,别等下载到 90% 才报磁盘满。

5.2 内存不足导致模型加载失败

现象是ollama run后终端卡死,或者系统弹出内存不足警告。原因是模型尺寸超过了物理内存。解决方法是换更小的量化版本,比如从7b降到1.5b,或者关闭其他占内存的应用。在 Linux 下可以用free -h看可用内存,macOS 用活动监视器。经验值是:模型文件大小乘以 1.5 大约就是运行时的内存占用,比如 4GB 的模型需要至少 6GB 可用内存。

5.3 Termux 编译 Ollama 报错

现象是go build .过程中出现编译错误,提示缺少头文件或链接失败。原因通常是依赖没装全,或者 Go 版本不匹配。解决方法是先pkg install golang确保 Go 是最新版,然后重新执行pkg install git cmake libjpeg-turbo,再go clean -cache清掉编译缓存后重试。如果还是不行,检查 Termux 是不是从 GitHub Releases 下载的版本,应用商店的旧版会有兼容性问题。

5.4 Open WebUI 无法连接 Ollama

现象是浏览器里 Open WebUI 显示模型列表为空,或者提示连接失败。原因可能是 Ollama 没启动、地址填错、或者容器网络不通。解决方法是按顺序排查:宿主机curl http://localhost:11434确认 Ollama 正常;docker ps确认 Open WebUI 容器在运行;docker exec -it open-webui curl http://host.docker.internal:11434确认容器内能访问宿主机。如果容器内访问不了,检查启动命令里有没有加--add-host=host.docker.internal:host-gateway。

5.5 端口冲突导致服务起不来

现象是 Ollama 或 Open WebUI 启动时报address already in use。原因是 11434 或 3000 端口被其他程序占用。解决方法是lsof -i :11434或netstat -ano | findstr 11434找到占用进程,杀掉或者换个端口。Ollama 换端口用OLLAMA_HOST=0.0.0.0:11435,Open WebUI 换端口改-p参数里的宿主机端口即可。我习惯在部署前先跑一遍端口检查,省得装到一半才发现冲突。

6. 装完怎么验证:三条命令确认 DeepSeek 真的跑通了

部署完成后,别急着关终端。我一般会用三条命令做最终验证,确保模型、服务、界面三层都正常。第一条,确认 Ollama 服务在监听:

# 检查 Ollama 服务是否响应,返回版本信息即正常 curl http://localhost:11434/api/version

第二条,直接调用 API 发一个推理请求,不经过任何界面,验证模型本身能出结果:

# 向 DeepSeek 模型发送一个简单请求,观察返回的 JSON 结构 curl http://localhost:11434/api/generate -d '{ "model": "deepseek-r1:7b", "prompt": "用一句话说明什么是机器学习", "stream": false }'

返回的 JSON 里response字段如果有内容,说明模型加载和推理都正常。stream: false表示一次性返回完整结果,方便脚本处理;如果设成true,会像终端里那样流式输出。第三条,如果你部署了 Open WebUI,打开浏览器访问http://localhost:3000,新建对话,输入同样的问题,看界面是否能正常返回。三条都通过,这套环境才算真正落地。

有个细节值得注意:/api/generate这个接口在 Ollama 不同版本间参数名有过变化,早期版本用prompt,后来有些版本推荐用messages数组。如果你用的是较新版本,可以改成:

# 新版 API 格式,用 messages 数组传对话历史 curl http://localhost:11434/api/chat -d '{ "model": "deepseek-r1:7b", "messages": [{"role": "user", "content": "用一句话说明什么是机器学习"}], "stream": false }'

两种格式在多数版本里都能用,但/api/chat更适合多轮对话场景。验证的时候如果返回model not found,说明模型名字写错了,用ollama list看一眼实际拉下来的 tag 是什么,照着填就行。

从那以后我每次部署完模型,都会强制走一遍这三条验证命令,不管终端里看着多正常。因为终端交互模式有时候会掩盖服务配置的问题,比如端口监听正常但 API 路由没起来,只有直接打接口才能暴露。希望这套流程能帮你少走点弯路,一次把 DeepSeek 跑通。

本文还有配套的精品资源,点击获取

相关新闻

微调基座模型选型:同参数量下代际差异如何决定项目成败

微调基座模型选型:同参数量下代际差异如何决定项目成败

在做微调项目的模型选型时,我吃过一次哑巴亏:同一套数据、同一份LoRA配置,只因为基座模型的新旧不同,最终效果差了不止一个档次。那次之后我才真正理解,微调基座模型的选型不能只盯着参数量,同参数量级别下…

2026/10/20 9:55:37 阅读更多 →
支付宝支付接入实战:从异步通知到订单状态同步的避坑指南

支付宝支付接入实战:从异步通知到订单状态同步的避坑指南

1. 支付接入这件事,坑都在文档之外做过支付接入的兄弟应该都有同感:官方文档写得四平八稳,照着走一遍好像也能跑通,但真到了线上环境,各种回调丢失、签名报错、订单状态对不上、异步通知重复处理的问题就全冒出来了。我…

2026/10/20 9:55:37 阅读更多 →
iOS电影选座座位图开发:Swift+UIKit+MVVM 完整实现拆解

iOS电影选座座位图开发:Swift+UIKit+MVVM 完整实现拆解

简介:面向iOS开发者的“类似猫眼电影选座”功能完整实现,涵盖从座位图展示、手势交互到数据同步的整套流程,适合有UIKit基础、希望快速复刻选座场景或用于课程设计与项目原型的移动端工程师。压缩包共110个文件,约906KB&#xff0…

2026/10/20 9:55:37 阅读更多 →

最新新闻

大模型入门必读:从深度学习原理到工程实战的系统书单

大模型入门必读:从深度学习原理到工程实战的系统书单

最近这半年,总有人在后台问我:“我想入门大模型,该看什么书?”老实说,每次被问到这个问题,我都挺为难的。现在网上关于大模型的书单五花八门,有讲算法的、有讲应用的、有讲产业趋势的&#xff0…

2026/10/20 17:54:48 阅读更多 →
拆解DeepSeek Agent框架:插件化架构的设计与实战踩坑记录

拆解DeepSeek Agent框架:插件化架构的设计与实战踩坑记录

我一直有个习惯:拿到一个开源项目,先不看 README 也不看官方博客,直接把仓库 clone 到本地,先翻目录结构、再读接口定义,最后才回去对照文档验证自己的猜想。这次拆 DeepSeek 开源的 Agent 框架,起初只是好…

2026/10/20 17:54:48 阅读更多 →
AI助理代登录的权限设计:Poppy草案的四层授权关卡与落地实践

AI助理代登录的权限设计:Poppy草案的四层授权关卡与落地实践

你有没有想过,有一天你的AI助理会替你登录各种账号?不是那种简单的“帮我查一下天气”,而是真的拿着你的身份,去另一个平台做事情——比如帮你把昨天的报销单提交到财务系统,帮你把一个长邮件回复整理好并发送出去&…

2026/10/20 17:54:48 阅读更多 →
腾讯云AI语音识别:自动生成会议纪要的实践与调优

腾讯云AI语音识别:自动生成会议纪要的实践与调优

我们每次开会一小时,纪要却要整理半小时,这句话我从不止一个团队嘴里听到过。会议内容总要有人记,记完还要提炼待办、确认负责人,稍微复杂一点的讨论,光靠人工回忆很容易漏掉关键信息。所以这两年我一直建议有条件的团…

2026/10/20 17:54:48 阅读更多 →
Kubernetes资源清单实战:从YAML编写到Pod、Service与ConfigMap

Kubernetes资源清单实战:从YAML编写到Pod、Service与ConfigMap

1. 资源清单是什么,为什么是Kubernetes的第一道门槛很多刚接触Kubernetes的开发者,第一个卡住的地方往往不是Pod、Deployment这些概念本身,而是搞不懂"资源清单"到底是个什么东西、为什么要写这么一长串YAML。我最早学K8s的时候也踩…

2026/10/20 17:54:48 阅读更多 →
Qt课程进度导航栏G03:从数据模型到自绘渲染的完整实践

Qt课程进度导航栏G03:从数据模型到自绘渲染的完整实践

做教育类桌面客户端的时候,课程导航一直是个绕不开的活儿。用户要在一个窗口里看到章、节、课时的层级关系,要清楚自己学到哪了,还得能一键跳回上次退出的位置。市面上的现成组件大多只解决“展示目录”这一层,进度状态、学习记忆…

2026/10/20 17:53:47 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →