windows系统本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI
本文将手把手教您使用Ollama+Docker+OpenWebUI三件套在本地部署DeepSeek-R1大语言模型,实现私有化AI服务搭建。
一、环境准备
1.1 硬件要求
CPU:推荐Intel i7及以上(需支持AVX2指令集)
内存:最低16GB,推荐32GB+ (其实内存8GB也可以)
显卡:非必需,但使用NVIDIA GPU可加速(需CUDA 11.8+)
存储:至少20GB可用空间
1.2 系统要求
操作系统:Linux(Ubuntu 22.04推荐)/ Windows WSL2 / macOS 12+
Docker版本:24.0+
Python版本:3.10+
二、安装部署流程
2.1 下载安装ollama https://ollama.com/
Ollama 是一个用于运行和管理 AI 模型的开源平台,特别是在本地环境中使用 AI 模型。它旨在通过简化本地部署和管理 AI 模型的过程,使开发者能够更容易地在自己的机器上运行各种大型语言模型(LLMs)。


2.2检查ollama是否安装成功
cmd命令,然后输入ollama如果出现以下内容则表示ollama安装成功
ollama

2.3 根据自己的电脑情况选择模型,这里为了快速演示选择了一个最小的模型1.5b的,点击右边复制命令。
这里注意,如果下载速度变慢了可以ctrl+c停止后重新输入命令后回车,速度会变快
ollama run deepseek-r1:1.5b


2.4安装完成效果图
使用命令:到这里基本的就算完成了就可以使用了
ollama run deepseek-r1:1.5b


2.5现在来安装docker,这里我们后面会使用docker来安装openwebui
进入docker官网 https://www.docker.com/ 进行下载。这里根据自己的系统下载安装。


安装成功后输入命令,如果出现版本信息表示安装成功
docker --version

2.6拉取OpenWebUI镜像
docker pull ghcr.io/open-webui/open-webui:main
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui-new --restart always ghcr.io/open-webui/open-webui:main
2.7 拉取OpenWebUI可能遇到的一些问题的排查方式
- 检查 Docker 镜像
确保你已经成功拉取了 open-webui 镜像。你可以通过以下命令检查镜像是否存在:
docker images
如果你看到 ghcr.io/open-webui/open-webui:main 镜像列表中,那么说明镜像已经成功拉取
2. 查看日志(可选)
如果容器运行有问题,可以通过以下命令查看容器的日志:
docker logs open-webui
- 停止和删除容器
停止容器
docker stop open-webui
删除容器
docker rm open-webui
确认容器是否运行
首先确认容器已经成功启动。你可以使用以下命令查看容器的状态:
docker ps
2.8 最终效果图
如果关机后下次开机还想使用的话,需要打开docker desktop 即可。然后访问上次配置的地址。这里我配置的是localhost:3000即可通过openwebui来进行使用了。

数据持久化
检查当前 OpenWebUI 的部署方式
首先,确认你是如何部署 OpenWebUI 的。如果你是通过命令行使用 Docker 启动的 OpenWebUI,那么它很可能并没有配置持久化存储(例如数据挂载到本地目录)。
停止当前 OpenWebUI 容器
如果你已经通过 Docker 启动了 OpenWebUI,首先停止当前正在运行的容器:
docker ps # 查看正在运行的容器
docker stop <容器ID或容器名称> # 停止当前的 OpenWebUI 容器
docker rm <容器ID或容器名称> # 删除容器
创建一个 docker-compose.yml 文件 。这里我是放在D盘的
创建一个专门的目录用于管理 OpenWebUI 容器。
假设你在用户目录下创建一个新目录:openweui
然后在该目录下创建 docker-compose.yml 文件:
配置 docker-compose.yml 文件
version: '3'
services:openwebui:image: ghcr.io/open-webui/open-webui:main # 使用最新的 OpenWebUI 镜像container_name: openwebuiports:- "3000:3000" # 将容器的3000端口映射到本地的3000端口environment:- PORT=3000 # 配置 OpenWebUI 启动时监听的端口volumes:- ./data:/app/data # 将本地的 ./data 文件夹挂载到容器的 /app/data 文件夹restart: always # 容器异常退出时自动重启
这将 OpenWebUI 配置为通过 localhost:3000 进行访问。
同时,容器内部的 /app/data 目录会挂载到本地的 ./data 目录,确保数据持久化存储。
启动 OpenWebUI 容器
在创建并保存好 docker-compose.yml 文件后,运行以下命令来启动 OpenWebUI 容器:
docker-compose up -d
访问 OpenWebUI
容器启动后,你可以通过浏览器访问 http://localhost:3000 来查看 OpenWebUI 是否正常运行。
验证数据是否持久化
在容器运行一段时间后,尝试在 OpenWebUI 中进行一些操作(例如上传文件或保存数据),然后停止容器并重启。检查本地的 ./data 目录,确保数据文件保存到本地磁盘。
docker-compose down # 停止并删除容器
docker-compose up -d # 重新启动容器
重新访问 localhost:3000,确认数据是否仍然存在。
总结
通过 docker-compose 配置 OpenWebUI,确保数据存储在本地。
使用 volumes 将容器内的 /app/data 目录挂载到本地的 ./data 目录,以保证数据持久化。
通过 localhost:3000 访问 OpenWebUI,并在容器重启后验证数据是否丢失。
这样,你就能够在本地通过 Docker 部署 OpenWebUI 并保持数据的持久化了。

相关文章:
windows系统本地部署DeepSeek-R1全流程指南:Ollama+Docker+OpenWebUI
本文将手把手教您使用OllamaDockerOpenWebUI三件套在本地部署DeepSeek-R1大语言模型,实现私有化AI服务搭建。 一、环境准备 1.1 硬件要求 CPU:推荐Intel i7及以上(需支持AVX2指令集) 内存:最低16GB,推荐…...
当C#邂逅Deepseek, 或.net界面集成deepseek
最近,我开发了一个C#界面,并集成了Deepseek的接口功能,实现了本地化部署和流模式读取。 过程充满了挑战和乐趣,也让我深刻体会到Deepseek的强大之处。今天,我想和大家分享这段经历,希望能激发你对Deepseek的…...
Cursor实战:Web版背单词应用开发演示
Cursor实战:Web版背单词应用开发演示 需求分析自行编写需求文档借助Cursor生成需求文档 前端UI设计后端开发项目结构环境参数数据库设计安装Python依赖运行应用 前端代码修改测试前端界面 测试数据生成功能测试Bug修复 总结 在上一篇《Cursor AI编程助手不完全指南》…...
Kotlin Lambda
Kotlin Lambda 在探索Kotlin Lambda之前,我们先回顾下Java中的Lambda表达式,Java 的 Lambda 表达式是 Java 8 引入的一项强大的功能,它使得函数式编程风格的代码更加简洁和易于理解。Lambda 表达式允许你以一种更简洁的方式表示实现接口&…...
V4L2驱动之UVC
以下是关于V4L2摄像头驱动框架与UVC协议的关联分析,从内核驱动到用户空间的完整视角: 1. V4L2驱动框架核心架构 关键组件: 核心层 (V4L2 Core) v4l2_device:设备的总入口,管理所有子组件video_device:对应…...
numpy(01 入门)
前面内容:pandas(01 入门) 目录 一、numpy 简介 1.1 Numpy 应用场景 1.2 Numpy 优点 1.3 Numpy 缺点 1.4 相关链接 二、Numpy环境安装配置 2.1 Python自带包 2.2 Numpy 安装 三、NumPy.Ndarray 3.1 ndarray特点: 3.2 ndarray()参数&…...
Chatgpt论文润色指令整理
1. 内容润色 这个来自文章《three ways ChatGPT helps me in my academic writing》。 在输入你要润色的内容前,先输入以下内容来驯化chatgpt的身份: I’m writing a paper on [话题] for a leading [学科/杂志] academic journal. What I tried to s…...
vscode复制到下一行
linux中默认快捷键是ctrl shift alt down/up 但是在vscode中无法使用,应该是被其他的东西绑定了,经测试,可以使用windows下的快捷键shift alt down/up { “key”: “shiftaltdown”, “command”: “editor.action.copyLinesDownAction”…...
Python天梯赛刷题-五分题(上)
蓝桥杯题刷的好累,感觉零帧起手、以题带学真的会很吃力,打算重新刷一点天梯的题目巩固一下,我本人在算法非常不精通的情况下,自认为天梯的L1的题是会相对容易一些的,可能有一些没有脑子光靠力气的“硬推”hhhh。 从头…...
【优先级队列】任务分配
任务分配问题,有n个任务,每个任务有个达到时间。将这些任务分配给m个处理器,进行处理。每个处理器的处理时间不一样。处理器的任务列表有最大任务数限制。 分配任务的策略是:当前待分配的任务的处理时刻最小。如果处理时刻相同&am…...
设计模式之适配模式是什么?以及在Spring AOP中的拦截器链的使用源码解析。
前言 本文涉及到适配模式的基本用法,以及在Spring AOP中如何使用,首先需要了解适配模式的工作原理,然后结合Spring AOP的具体实现来详细详细解析源码。 首先,适配模式,也就是Adapter Pattern,属于结构型设计…...
Python 库自制 Cross-correlation 算法
Python 库自制 Cross-correlation 算法 引言正文引言 虽然 Scipy 库中包含了成熟的 Cross-correlation 算法,但是有些时候我们无法使用现成的库进行数据处理。这里介绍如何使用 Python 基础函数自制 Cross-correlation 算法。后续读者可以将该算法转换为其他各类语言。 正文…...
C++(23):为类成员函数增加this参数
C23允许指定类成员函数的第一个参数的this类型,从而更加便于函数重载: #include <iostream> using namespace std;class A{ public:void func(this A&){cout<<"in func1"<<endl;}void func(this const A&){cout<…...
javaSE学习笔记23-线程(thread)-总结
创建线程的三种方式 练习代码 package com.kuang.thread;import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask;//回顾总结线程的创建 public class ThreadNew {public static void main(String[…...
【DeepSeek服务器部署全攻略】Linux服务器部署DeepSeek R1模型、实现API调用、搭建Web页面以及专属知识库
DeepSeek R1模型的Linux服务器搭建、API访问及Web页面搭建 1,引言2,安装Ollama工具3,下载DeepSeek R1 模型4,DeepSeek命令行对话5,DeepSeek API接口调用6,DeepSeek结合Web-ui实现图形化界面远程访问6.1&…...
【JAVA工程师从0开始学AI】,第四步:闭包与高阶函数——用Python的“魔法函数“重构Java思维
副标题:当严谨的Java遇上"七十二变"的Python函数式编程 历经变量战争、语法迷雾、函数对决,此刻我们将踏入Python最迷人的领域——函数式编程。当Java工程师还在用接口和匿名类实现回调时,Python的闭包已化身"智能机器人"…...
算法日记20:SC72最小生成树(prim朴素算法)
一、题目: 二、题解 2.1:朴素prim的步骤解析 O ( n 2 ) O(n^2) O(n2)(n<1e3) 0、假设,我们现在有这样一个有权图 1、我们随便找一个点,作为起点开始构建最小生成树(一般是1号),并且存入intree[]状态数组中…...
玩转SpringCloud Stream
背景及痛点 现如今消息中间件(MQ)在互联网项目中被广泛的应用,特别是大数据行业应用的特别的多,现在市面上也流行这多个消息中间件框架,比如ActiveMQ、RabbitMQ、RocketMQ、Kafka等,这些消息中间件各有各的优劣,但是想…...
嵌入式经常用到串口,如何判断串口数据接收完成?
说起通信,首先想到的肯定是串口,日常中232和485的使用比比皆是,数据的发送、接收是串口通信最基础的内容。这篇文章主要讨论串口接收数据的断帧操作。 空闲中断断帧 一些mcu(如:stm32f103)在出厂时就已经在…...
iOS App的启动与优化
App的启动流程 App启动分为冷启动和热启动 冷启动:从0开始启动App热启动:App已经在内存中,但是后台还挂着,再次点击图标启动App。 一般对App启动的优化都是针对冷启动。 App冷启动可分为三个阶段: dyld:…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
