Win10环境使用Dockerdesktop部署Dify集成Deepseek

Win10环境借助Dockerdesktop部署Dify集成Deepseek

前言

之前笔者已经部署了基于Ollama的Deepseek:

https://lizhiyong.blog.csdn.net/article/details/145505686

安装官方指示,还可以集成很多组件拓展玩法:

https://github.com/deepseek-ai/awesome-deepseek-integration/blob/main/README_cn.md

在集成了ChatBox后:

https://lizhiyong.blog.csdn.net/article/details/145524481

再来试一下集成Dify,实现一户一码的多租户访问。

已经部署了DockerDesktop:

https://lizhiyong.blog.csdn.net/article/details/145580868

和一个open webui:

https://lizhiyong.blog.csdn.net/article/details/145582453

现在可以尝试下更复杂的玩法。。。

部署

参考官方文档:

https://docs.dify.ai/getting-started/install-self-hosted/docker-compose

官方给出的quick-start方法是使用docker-compose方式部署。查看其它部署方式,可以发现Dify依赖的组件很多:

https://docs.dify.ai/getting-started/install-self-hosted/local-source-code

要部署python的后端及npm部署前端。可以配置的参数很多,还可以集成很多组件:

https://docs.dify.ai/getting-started/install-self-hosted/environments

涉及NginxTiDB等数据库、redis缓存。。。折腾起来还是比较麻烦的。笔者为了更快捷体验,当然是选择Docker方式。

下载源码

git clone https://github.com/langgenius/dify.git

新机器没有安装git就http方式下载解压,也是一样的。

Docker-compose版本确认

PS C:\Users\zhiyong> docker compose version
Docker Compose version v2.31.0-desktop.2
PS C:\Users\zhiyong>

可以看到DockerDesktop自带了新版本的Compose,可以直接编排容器了。。。什么时候可以有个Windows环境的K8S界面端就好了。。。

准备配置文件.env

接着准备配置文件,当然不能让Docker容器的服务霸占掉宝贵的80端口,否则后续对外暴露租给别人使用会徒增很多不便。。。

复制一个,然后修改配置:

EXPOSE_NGINX_PORT=3010

就会覆盖掉docker-compose.yaml的:

  EXPOSE_NGINX_PORT: ${EXPOSE_NGINX_PORT:-80}nginx:image: nginx:latestrestart: alwaysports:- '${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}'- '${EXPOSE_NGINX_SSL_PORT:-443}:${NGINX_SSL_PORT:-443}'

默认80端口,从而可以使用3010端口访问!!!

拉起容器

PS E:\> cd E:\dockerData\volume\dify\dify-main\docker
PS E:\dockerData\volume\dify\dify-main\docker> ls目录: E:\dockerData\volume\dify\dify-main\dockerMode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2025-02-12     18:04                couchbase-server
d-----        2025-02-12     18:04                nginx
d-----        2025-02-12     18:04                ssrf_proxy
d-----        2025-02-12     18:04                startupscripts
d-----        2025-02-12     18:04                tidb
d-----        2025-02-12     18:04                volumes
-a----        2025-02-12     18:04          31233 .env
------        2025-02-12     18:04          31233 .env.example
------        2025-02-12     18:04          20247 docker-compose-template.yaml
------        2025-02-12     18:04           5057 docker-compose.middleware.yaml
------        2025-02-12     18:04          63694 docker-compose.png
------        2025-02-12     18:04          42595 docker-compose.yaml
------        2025-02-12     18:04           4097 generate_docker_compose
------        2025-02-12     18:04           3057 middleware.env.example
------        2025-02-12     18:04           6605 README.mdPS E:\dockerData\volume\dify\dify-main\docker> docker compose ps
NAME      IMAGE     COMMAND   SERVICE   CREATED   STATUS    PORTS
PS E:\dockerData\volume\dify\dify-main\docker> docker compose up -d
[+] Running 74/9✔ weaviate Pulled                                                      109.8s ✔ sandbox Pulled                                                       125.1s ✔ db Pulled                                                             72.9s ✔ web Pulled                                                            94.0s ✔ ssrf_proxy Pulled                                                    204.3s ✔ api Pulled                                                           370.2s ✔ redis Pulled                                                         101.6s ✔ worker Pulled                                                        370.2s ✔ nginx Pulled                                                         130.3s 
[+] Running 11/11✔ Network docker_default             Created                             0.1s ✔ Network docker_ssrf_proxy_network  Created                             0.1s ✔ Container docker-redis-1           Started                             4.1s ✔ Container docker-weaviate-1        Started                             4.1s ✔ Container docker-web-1             Started                             4.3s ✔ Container docker-db-1              Started                             4.3s ✔ Container docker-sandbox-1         Started                             4.1s ✔ Container docker-ssrf_proxy-1      Started                             4.3s ✔ Container docker-worker-1          Started                             3.1s ✔ Container docker-api-1             Started                             3.1s ✔ Container docker-nginx-1           Started                             3.7s 
PS E:\dockerData\volume\dify\dify-main\docker>

此时自动下载了相关的镜像:

在这里插入图片描述

并且拉起了一组容器:

在这里插入图片描述

但是这组容器叫docker就很魔幻。。。好在一次成功,可以直接打开:

http://localhost:3010/install

集成DeepSeek

参考官网:

https://docs.dify.ai/development/models-integration/ollama

在这里插入图片描述

从右上角设置添加Ollama部署过的DeepSeek模型。由于是容器内部部署的,需要使用Docker的网关地址:

http://host.docker.internal:11434

配置聊天机器人

在这里插入图片描述

创建一个空白应用:

在这里插入图片描述

然后右上角发布、更新、运行素质三联:

在这里插入图片描述

失效信息不用管,由于改了网页的端口,可能部分接口失效了,但是Docker内部网关和外部Ollama是通畅的。在运行中修改端口后:

在这里插入图片描述

即可正常使用本地部署的DeepSeek负载。

一户一码访问API

在访问API中,修改端口号:

http://localhost:3010/app/2eff5e09-b8fd-4758-be4c-9e905b051dce/develop

在这里插入图片描述

给出了如何使用接口访问。在右上角设置密钥后,就可以测试接口:

在这里插入图片描述

请求报文:

{"inputs": {},"query": "虎鲸是鱼吗?","mode": "chat","conversation_id": "","user": "admin"
}

响应报文:

{"event": "message","task_id": "11a5d6a9-8e77-4986-9e2e-4b9aeb15a3f9","id": "bab60527-134d-4247-89fd-e9a27d1f1c25","message_id": "bab60527-134d-4247-89fd-e9a27d1f1c25","conversation_id": "5082a97d-6bba-4312-840e-efe9e39bf8af","mode": "chat","answer": "<think>\n嗯,用户问:“虎鲸是鱼吗?”这个问题看起来好像简单,但其实可能涉及到一些知识。首先,我知道虎鲸是一种大型海洋动物,它们经常在电影和纪录片中出现,比如《海豚湾》里的那些。但是,我不是很确定它们是否属于鱼类。\n\n让我先想想,鱼的定义是什么呢?一般来说,鱼是指用鳃呼吸、生活在水中的脊椎动物,通常有鳞片覆盖身体,没有四肢。而虎鲸有没有这些特征呢?首先,虎鲸确实在水中生活,但它们不是用鳃而是用肺呼吸,这意味着它们需要定期浮出水面换气。这一点就和鱼类不同。\n\n接下来,虎鲸的外形看起来像鱼,但是它们的身体结构和鱼类有所不同。鱼类通常有鳍状的四肢,而虎鲸则更像是哺乳动物,拥有更像四足动物的身体结构,比如胸鳍和背鳍等。此外,虎鲸的生殖方式也是胎生,母亲通过乳房喂养幼崽,这与卵生的鱼类完全不同。\n\n我还记得之前看过一些资料,提到虎鲸属于齿鲸科,是一种海洋哺乳动物,而不是鱼。它们和其他鲸类一样,需要呼吸空气,并且具有高度发达的大脑,展现出复杂的社交行为和捕猎技巧。这些特征都更符合哺乳动物的定义,而不仅仅是鱼类。\n\n不过,有时候人们可能会把鲸鱼误认为是鱼,因为它们体型庞大,生活在水中。但事实上,鲸鱼、海豚和鼠海豚等都是属于哺乳纲的,虽然它们的生活环境与其他陆地哺乳动物不同,但在生物分类上,它们与我们更接近。\n\n再想想,鱼类的进化路径和哺乳动物有所不同。鱼类起源于古生代,而哺乳动物则是在中生代之后逐渐发展起来的。虎鲸作为哺乳动物的一员,与鱼在进化上有很大的区别。此外,从生理结构上看,鱼类的心脏是两腔心,而哺乳动物的心脏是三腔心,这进一步证明了它们的不同。\n\n总结一下,尽管虎鲸看起来像鱼,并且生活在水中,但它们实际上是海洋中的哺乳动物,属于鲸类。因此,严格来说,虎鲸不是鱼,而是哺乳动物。\n</think>\n\n虎鲸并不是鱼,而是海洋中的哺乳动物。尽管它们在外观上与鱼类相似,但由于其用肺呼吸、胎生以及复杂的社交行为等特征,虎鲸被归类为鲸类,属于哺乳纲。","metadata": {"usage": {"prompt_tokens": 9,"prompt_unit_price": "0","prompt_price_unit": "0","prompt_price": "0E-7","completion_tokens": 514,"completion_unit_price": "0","completion_price_unit": "0","completion_price": "0E-7","total_tokens": 523,"total_price": "0E-7","currency": "USD","latency": 29.452981514001294}},"created_at": 1739376060
}

这样就做到了基于多租户的一户一码!!!

在这里插入图片描述

可以看到丽台A4000显卡的Token生成速度只有18.863/s,灰常慢!!!

后续再开发一个用户管理模块和计费模块,就可以在内网租给别人使用了!!!对公网暴露服务就可以牟利。。。

甚至还可以搞更多特训AI提供更加优质的服务!!!

这就是云服务厂商的本质,还是在出租GPU算力。。。但是生产可就要自己用代码/K8S部署来提升性能了。。。

转载请注明出处:https://lizhiyong.blog.csdn.net/article/details/145602366

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23、深度学习-自学之路-激活函数relu、tanh、sigmoid、softmax函数的正向传播和反向梯度。

在使用这个非线性激活函数的时候&#xff0c;其实我们重点还是学习的是他们的正向怎么传播&#xff0c;以及反向怎么传递的。 如下图所示&#xff1a; 第一&#xff1a;relu函数的正向传播函数是&#xff1a;当输入值&#xff08;隐藏层&#xff09;值大于了&#xff0c;就输出…

cameralib 安装

目录 linux安装&#xff1a; 测试安装是否成功&#xff1a; linux安装&#xff1a; pip install githttps://github.com/isarandi/cameralib.git pip install githttps://github.com/isarandi/boxlib.git pip install githttps://github.com/isarandi/poseviz.git githttps…

ML.NET库学习005:基于机器学习的客户细分实现与解析

文章目录 ML.NET库学习005&#xff1a;基于机器学习的客户细分实现与解析项目主要目的和原理目的原理 项目概述实现的主要功能主要流程步骤使用的主要函数方法关键技术 主要功能和步骤功能详细解读详细步骤解析 数据集及其处理步骤数据集处理步骤关键处理步骤原理1. 数据清洗与…

webpack打包优化策略

1. 减少打包体积 减少打包文件的大小是为了提高加载速度&#xff0c;降低网络带宽消耗&#xff0c;提升用户体验。常见的减少打包体积的优化策略包括&#xff1a; 代码分割&#xff08;Code Splitting&#xff09;&#xff1a;将代码拆分成多个小文件&#xff0c;让浏览器按需…

RocketMQ与kafka如何解决消息积压问题?

前言 消息积压问题简单来说&#xff0c;就是MQ存在了大量没法快速消费完的数据&#xff0c;造成消息积压的原因主要在于“进入的多&#xff0c;消费的少”&#xff0c;或者生产的速度过快&#xff0c;而消费速度赶不上&#xff0c;基于这一问题&#xff0c;我们主要介绍如何通过…

RISC-V平台编译 state-thread x264 ffmpeg zlog

1.state-threads 源码下来之后 直接 make linux-debug 目录下生成了对应的.a 和 .h文件 gcc test.c -o test -l st -L . #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h&g…

用easyExcel如何实现?

要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能&#xff0c;需要结合 EasyExcel 库来读取 Excel 数据。具体来说&#xff0c;可以使用 EasyExcel.read() 方法来读取 Excel 文件&#xff0c;并指定 ExcelModelListener 作为事件监听器。 下面是…

BUU37 [DASCTF X GFCTF 2024|四月开启第一局]web1234【代码审计/序列化/RCE】

Hint1&#xff1a;本题的 flag 不在环境变量中 Hint2&#xff1a;session_start&#xff08;&#xff09;&#xff0c;注意链子挖掘 题目&#xff1a; 扫描出来www.zip class.php <?phpclass Admin{public $Config;public function __construct($Config){//安全获取基…

Mysql中使用sql语句生成雪花算法Id

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

Go框架面试突击!30道高频题解析

前言 有粉丝朋友问我能不能整理Go主流框架方面的面试题&#xff0c;安排&#xff01; 这篇文章分享了gRPC、GoFrame、GoZero、GoMicro、GORM、Gin等主流框架的30道面试题和详解。 需要大厂面经的朋友们也可以直接加我好友&#xff0c;私信我。 gRPC 1.gRPC是什么&#xff…

@JsonRawValue 注解

这里写目录标题 1. 问题2. JsonRawValue 注解说明 1. 问题 在实际开发中我遇到这样一个问题&#xff0c;查询数据库的结果返回的content内容是含有转移符的JSON字符串&#xff0c;但是我需要返回的不包含转移的String字符串。经过我一顿折腾并未发现解决办法&#xff0c;直到J…

node.js+兰空图床实现随机图

之前博客一直用的公共的随机图API&#xff0c;虽然图片的质量都挺不错的&#xff0c;但是稳定性都比较一般&#xff0c;遂打算使用之前部署的兰空图床&#xff0c;自己弄一个随机图 本文章服务器操作基于雨云——新一代云服务提供商的云服务器进行操作&#xff0c;有兴趣的话可…

MySQL binlog的三种模式

MySQL 的 binlog&#xff08;Binary Log&#xff09; 默认的模式是 STATEMENT&#xff0c;即 语句模式。在这种模式下&#xff0c;MySQL 会记录所有对数据库执行的数据修改操作&#xff08;如 INSERT、UPDATE、DELETE 等&#xff09;的 SQL 语句。 1. binlog 的三种模式 MySQL…

25农村发展研究生复试面试问题汇总 农村发展专业知识问题很全! 农村发展复试全流程攻略 农村发展考研复试真题汇总

农村发展复试当然有好的建议&#xff01;前提是复试重点面试题背好&#xff01; 你是不是也在为农村发展考研复试发愁&#xff1f;担心自己准备不充分、表现不好&#xff1f;别急&#xff01;今天&#xff0c;学姐——复试面试拿下90分成功上岸的学姐&#xff0c;来给大家分享…

读取本地excel并生成map,key为第一列,value为第二列

添加依赖&#xff1a;在 pom.xml 文件中添加以下依赖&#xff1a; <dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency&…

代码随想录算法【Day44】

Day44 1143.最长公共子序列 class Solution { public:int longestCommonSubsequence(string text1, string text2) {vector<vector<int>> dp(text1.size() 1, vector<int>(text2.size() 1, 0));for (int i 1; i < text1.size(); i) {for (int j 1; …

【transformers.Trainer填坑】在自定义compute_metrics时logits和labels数据维度不一致问题

问题描述 我在使用 transformers.Trainer 训练我的模型时&#xff0c;我自定义了 compute_loss 函数和compute_metrics函数&#xff0c;我的模型是一个简单的二分类模型。 在自定义 compute_loss 时这样写的&#xff1a; def compute_loss(self, model, inputs, return_outp…

论文学习记录之《CLR-VMB》

目录 一、基本介绍 二、介绍 三、方法 3.1 FWI中的数据驱动方法 3.2 CLR-VMB理论 3.3 注意力块 四、网络结构 4.1 网络架构 4.2 损失函数 五、实验 5.1 数据准备 5.2 实验设置 5.3 训练和测试 5.4 定量分析 5.5 CLR方案的有效性 5.6 鲁棒性 5.7 泛化性 六、讨…

【STM32】舵机SG90

1.舵机原理 舵机内部有一个电位器&#xff0c;当转轴随电机旋转&#xff0c;电位器的电压会发生改变&#xff0c;电压会带动转一定的角度&#xff0c;舵机中的控制板就会电位器输出的电压所代表的角度&#xff0c;与输入的PWM所代表的角度进行比较&#xff0c;从而得出一个旋转…

算法刷题-链表系列-移除链表、设计链表、翻转列表

题目要求 所有主要考察对链表的增删查改的功能 总结 对于有些从头遍历到尾的方法&#xff0c;创建一个头结点使得所有的结点能以统一的方式且全部被遍历到&#xff0c;不会出现头结点不被遍历的问题。对于遍历的条件&#xff0c;有的时候curNode ! nullptr&#xff0c;有的时…