Dify在Ubuntu20.04系统的部署
文章目录
- 一、dify 介绍
- 1.核心功能优势
- 2.应用场景
- 二、dify 安装(docker方式)
- 1.代码库下载
- 2.配置文件修改
- 3.启动docker 容器
- 三、遇到问题与解决
- 1.使用`sudo docker compose up -d`报错
- 2.使用`service docker start`报错
一、dify 介绍
Dify 是一款开源的大语言模型(LLM)智能体开发平台,可以用于快速搭建个性化或具备商业价值的智能体。
1.核心功能优势
(1)丰富的功能组件
AI 工作流:通过可视化画布构建和测试强大的 AI 工作流
RAG 管道:支持从文档摄入到检索的完整流程,可从 PDF、PPT 等常见格式中提取文本
Agent 智能体:基于 LLM 的推理能力,可以自主规划任务、调用工具,完成复杂任务
模型管理:支持数百种专有和开源的 LLM,如GPT、 Deepseek r1、Llama3 等,并提供模型性能比较功能
(2)工具集成
Dify 提供了 50 多种内置工具(如谷歌搜索、DALL·E、Stable Diffusion 等),并允许自定义模型接入
2.应用场景
智能客服与对话助手:通过自然语言处理技术快速响应用户咨询,支持上下文记忆和多轮对话设计。
内容生成与文档处理:自动生成文章、摘要、代码,或解析长文档进行结构化提取。
商业智能与数据分析:结合企业数据库,生成数据报告或提供决策建议。
二、dify 安装(docker方式)
1.代码库下载
git clone https://github.com/langgenius/dify
下载后目录如下所示
drwxrwxr-x 11 allyoung allyoung 4096 Feb 24 03:33 ./
drwxrwxr-x 10 allyoung allyoung 4096 Feb 24 03:32 ../
drwxrwxr-x 22 allyoung allyoung 4096 Feb 24 03:33 api/
-rw-rw-r-- 1 allyoung allyoung 56 Feb 24 03:33 AUTHORS
-rw-rw-r-- 1 allyoung allyoung 9301 Feb 24 03:33 CONTRIBUTING_CN.md
-rw-rw-r-- 1 allyoung allyoung 12656 Feb 24 03:33 CONTRIBUTING_JA.md
-rw-rw-r-- 1 allyoung allyoung 9948 Feb 24 03:33 CONTRIBUTING.md
-rw-rw-r-- 1 allyoung allyoung 12341 Feb 24 03:33 CONTRIBUTING_VI.md
drwxrwxr-x 3 allyoung allyoung 4096 Feb 24 03:33 dev/
drwxrwxr-x 2 allyoung allyoung 4096 Feb 24 03:33 .devcontainer/
drwxrwxr-x 10 allyoung allyoung 4096 Feb 24 03:33 docker/
drwxrwxr-x 8 allyoung allyoung 4096 Feb 24 03:33 .git/
-rw-rw-r-- 1 allyoung allyoung 338 Feb 24 03:33 .gitattributes
drwxrwxr-x 7 allyoung allyoung 4096 Feb 24 03:33 .github/
-rw-rw-r-- 1 allyoung allyoung 3279 Feb 24 03:33 .gitignore
drwxrwxr-x 2 allyoung allyoung 4096 Feb 24 03:33 images/
-rw-rw-r-- 1 allyoung allyoung 2400 Feb 24 03:33 LICENSE
-rw-rw-r-- 1 allyoung allyoung 1304 Feb 24 03:33 Makefile
-rw-rw-r-- 1 allyoung allyoung 16631 Feb 24 03:33 README_AR.md
-rw-rw-r-- 1 allyoung allyoung 13488 Feb 24 03:33 README_CN.md
-rw-rw-r-- 1 allyoung allyoung 15162 Feb 24 03:33 README_ES.md
-rw-rw-r-- 1 allyoung allyoung 15345 Feb 24 03:33 README_FR.md
-rw-rw-r-- 1 allyoung allyoung 14846 Feb 24 03:33 README_JA.md
-rw-rw-r-- 1 allyoung allyoung 13519 Feb 24 03:33 README_KL.md
-rw-rw-r-- 1 allyoung allyoung 14279 Feb 24 03:33 README_KR.md
-rw-rw-r-- 1 allyoung allyoung 13736 Feb 24 03:33 README.md
-rw-rw-r-- 1 allyoung allyoung 14433 Feb 24 03:33 README_PT.md
-rw-rw-r-- 1 allyoung allyoung 13615 Feb 24 03:33 README_SI.md
-rw-rw-r-- 1 allyoung allyoung 14392 Feb 24 03:33 README_TR.md
-rw-rw-r-- 1 allyoung allyoung 15423 Feb 24 03:33 README_VI.md
drwxrwxr-x 5 allyoung allyoung 4096 Feb 24 03:33 sdks/
drwxrwxr-x 20 allyoung allyoung 4096 Feb 24 03:33 web/
2.配置文件修改
进入代码库下载目录dify中的docker目录
cd ./dify/docker
将.env.example改名为.env
cp .env.example .env
3.启动docker 容器
通过 $ docker compose version 命令检查版本,根据你系统上的 Docker Compose 版本,选择合适的命令来启动容器。
示例如下
$ docker compose version
Docker Compose version v2.20.3
本机Docker Compose 版本为v2,使用以下命令:
sudo docker compose up -d #Docker Compose 是 Docker 官方提供的一个工具,用于定义和运行多容器的 Docker 应用程序。借助一个 YAML 文件(通常命名为 `docker-compose.yml`),你可以对应用程序的服务、网络、卷等配置进行定义,然后使用 Docker Compose 命令一键式地启动、停止和管理整个应用程序。
这里如果版本是 Docker Compose V1,使用以下命令:
sudo docker-compose up -d
运行命令后,你应该会看到类似以下的输出,显示所有容器的状态和端口映射:
[+] Running 11/11✔ Network docker_ssrf_proxy_network Created 0.1s ✔ Network docker_default Created 0.0s ✔ Container docker-redis-1 Started 2.4s ✔ Container docker-ssrf_proxy-1 Started 2.8s ✔ Container docker-sandbox-1 Started 2.7s ✔ Container docker-web-1 Started 2.7s ✔ Container docker-weaviate-1 Started 2.4s ✔ Container docker-db-1 Started 2.7s ✔ Container docker-api-1 Started 6.5s ✔ Container docker-worker-1 Started 6.4s ✔ Container docker-nginx-1 Started 7.1s
最后检查是否所有容器都正常运行:
docker compose ps
在这个输出中,你应该可以看到包括 3 个业务服务 api / worker / web,以及 6 个基础组件 weaviate / db / redis / nginx / ssrf_proxy / sandbox 。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
docker-api-1 langgenius/dify-api:0.6.13 "/bin/bash /entrypoi…" api About a minute ago Up About a minute 5001/tcp
docker-db-1 postgres:15-alpine "docker-entrypoint.s…" db About a minute ago Up About a minute (healthy) 5432/tcp
docker-nginx-1 nginx:latest "sh -c 'cp /docker-e…" nginx About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp
docker-redis-1 redis:6-alpine "docker-entrypoint.s…" redis About a minute ago Up About a minute (healthy) 6379/tcp
docker-sandbox-1 langgenius/dify-sandbox:0.2.1 "/main" sandbox About a minute ago Up About a minute
docker-ssrf_proxy-1 ubuntu/squid:latest "sh -c 'cp /docker-e…" ssrf_proxy About a minute ago Up About a minute 3128/tcp
docker-weaviate-1 semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" weaviate About a minute ago Up About a minute
docker-web-1 langgenius/dify-web:0.6.13 "/bin/sh ./entrypoin…" web About a minute ago Up About a minute 3000/tcp
docker-worker-1 langgenius/dify-api:0.6.13 "/bin/bash /entrypoi…" worker About a minute ago Up About a minute 5001/tcp
然后即可在浏览器上输入http://<your_ip>进行登陆。效果如下

三、遇到问题与解决
1.使用sudo docker compose up -d报错
报错日志如下
$ sudo docker compose up -d
[sudo] password for allyoung:
[+] Running 10/10✘ web Error 15.0s ✘ worker Error 15.0s ✘ nginx Error 15.0s ✘ db Error 15.0s ✘ redis Error 15.0s ✘ ssrf_proxy Error 15.0s ✘ plugin_daemon Error 15.0s ✘ api Error 15.0s ✘ sandbox Error 15.0s ✘ weaviate Error 15.0s
Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
原因在于网络超时,无法获取到docker 镜像。
解决:增加docker镜像地址。
sudo vim /etc/docker/daemon.json
在daemon.json中写入如下内容
{"registry-mirrors": ["https://pull.loridocker.com","https://docker.hlmirror.com","https://dockerpull.cn"]}
注意修改镜像地址后,要重启docker 后生效。命令如下
systemctl daemon-reload
systemctl restart docker
然后重新执行sudo docker compose up -d即可。
2.使用service docker start报错
报错日志如下
# service docker start
Failed to start docker.service: Unit docker.service not found.
# docker -v
Docker version 27.2.0, build 3ab4256
原因在于docker 安装不完整。
解决:
curl -sSL https://get.docker.com/ |sh
相关文章:
Dify在Ubuntu20.04系统的部署
文章目录 一、dify 介绍1.核心功能优势2.应用场景 二、dify 安装(docker方式)1.代码库下载2.配置文件修改3.启动docker 容器 三、遇到问题与解决1.使用sudo docker compose up -d报错2.使用service docker start报错 一、dify 介绍 Dify 是一款开源的大语言模型(LL…...
第7天:结构体与联合体 - 复杂数据类型
第7天:结构体与联合体 - 复杂数据类型 一、📚 今日学习目标 🎯 掌握结构体(struct)的定义与使用🔧 理解联合体(union)的特性与适用场景💡 完成图书馆管理系统实战&…...
vue富文本 vue-quill-editor + 上传图片到阿里云服务器 + 修改富文本内容
前言 使用富文本编辑器,需要将图片上传到服务器,完成之后,还需要在修改页面完成修改富文本内容,使用的富文本插件是vue-quill-editor, 一 、安装 vue-quill-editor npm i vue-quill-editor npm install quill --save npm inst…...
Java常见设计模式(中):结构型模式
🌈 引言:设计模式就像乐高积木 适配器:让不同形状的积木完美拼接装饰器:给积木添加炫酷灯光效果代理:遥控积木完成复杂动作组合:将小积木搭建成宏伟城堡 结构型模式 主要用于描述对象之间的关系ÿ…...
DeepSeek R1 + 飞书机器人实现AI智能助手
效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1,项目为sanic和redis实现,利用httpx异步处理流式响应,同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…...
【论文详解】Transformer 论文《Attention Is All You Need》能够并行计算的原因
文章目录 前言一、传统 RNN/CNN 存在的串行计算问题二、Transformer 如何实现并行计算?三、Transformer 的 Encoder 和 Decoder 如何并行四、结论 前言 亲爱的家人们,创作很不容易,若对您有帮助的话,请点赞收藏加关注哦ÿ…...
51c嵌入式~电路~合集12
我自己的原文哦~ https://blog.51cto.com/whaosoft/12318429 一、单端、推挽、桥式拓扑结构变压器对比 单端正激式 单端:通过一只开关器件单向驱动脉冲变压器。 正激:脉冲变压器的原/付边相位关系,确保在开关管导通,驱动脉冲…...
php 获取head参数
php 获取head参数 在PHP中,获取HTTP头部(head)参数可以通过不同的方式实现,下面为你详细介绍几种常见的方法。 1. 使用$_SERVER超全局变量 $_SERVER 是PHP中的一个超全局变量,它包含了诸如头信息、路径、脚本位置等…...
蓝桥杯嵌入式备赛
前言 嘿,小伙伴们!备战蓝桥杯嵌入式比赛的号角已经吹响啦!如果你还在为如何入手STM32G431RB这块比赛板子而发愁,别担心,今天我就来给你全方位介绍这块板子,带你快速上手备赛,一起冲向蓝桥杯的赛…...
基于PyTorch实现的自适应注意力卷积网络(AACN)详解
目录 基于PyTorch实现的自适应注意力卷积网络(AACN)详解1. 引言2. 网络结构设计2.1 输入层2.2 初始特征提取层2.3 自适应注意力卷积块(AACB)2.4 下采样与高层特征提取层2.5 全局特征汇聚层2.6 输出层3. 模型优化策略4. 数据集介绍5. PyTorch实现代码详解5.1 完整代码实现5.…...
基于Javase的停车场收费管理系统
基于Javase的停车场收费管理系统 停车场管理系统开发文档 项目概述 1.1 项目背景 随着现代化城市的不断发展,车辆数量不断增加,停车难问题也日益突出。为了更好地管理停车场资 源,提升停车效率,需要一个基于Java SE的停车场管理…...
Cookie与Session:Web开发中的状态管理机制
引言 在Web开发中,HTTP协议是无状态的,这意味着服务器默认不会记住客户端的任何信息。然而,许多应用场景(如用户登录、购物车等)需要服务器能够识别客户端并保持状态。为了解决这个问题,开发者引入了 Cook…...
python量化交易——金融数据管理最佳实践——qteasy创建本地数据源
文章目录 qteasy金融历史数据管理总体介绍本地数据源——DataSource对象默认数据源查看数据表查看数据源的整体信息最重要的数据表其他的数据表 从数据表中获取数据向数据表中添加数据删除数据表 —— 请尽量小心,删除后无法恢复!!总结 qteas…...
手机放兜里,支付宝“碰一下”被盗刷?
大家好,我是小悟。 近期,网络上关于“支付宝‘碰一下’支付易被盗刷”的传言甚嚣尘上,不少用户对此心生疑虑。 首先,要明确一点:“碰一下”支付并不会像某些传言中所描述的那样容易被隔空盗刷。这一观点已经得到了支付…...
C/C++语言知识点一
目录 1. 请对这段代码进行解释:char *const *(*next)( ); 2. 函数指针数组:解释这个表达式char *(*c[10])(int **p); 3. 字符串常量:分析下面这段代码。 4. 访问指定内存地址 5. typedef 和 define 的区别 6. 函数返回局部变量地址问…...
前端面试题---在vue中为什么要用路由
在vue中为什么要用路由, 毕竟a标签可以直接跳转页面 在 Vue 中使用 Vue Router 的主要原因是提高 单页面应用(SPA) 的用户体验和性能。 相比传统的 <a> 标签跳转,Vue Router 提供了以下优势: 避免页面刷新: V…...
Three.js 快速入门教程【十】常见的纹理类型
系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六】相机控件 Or…...
文档识别-C#中英文文档识别接口-PDF文件内容识别API
文档识别接口可满足用户在数字化转型过程中对文档处理的高效、准确需求。翔云文档识别接口以成熟的文字识别技术、自然语言处理技术、图像识别技术为核心,能够将文档上的非可编辑文本转化为可编辑的数据,从而提升信息处理的速度与实现文档数字化管理的准…...
gRPG协议
gRPG协议是一种用于游戏开发的网络通信协议,全称为Game Real-time Protocol。它主要用于实现实时多人游戏中的数据传输和同步。gRPG协议的设计目标是提供低延迟、高可靠性的数据传输,以支持游戏中的实时互动和状态同步。 gRPG协议的特点 低延迟&#x…...
【maven打包错误】 无效的目标发行版:16
maven打包错误 错误截图 About 故事在一个风和日丽的下午,我一如往常的摸鱼,突如其来的事情打乱我的摸鱼节奏,“为什么测试不能用了” ,随着前端帅哥一声轻咦,故事便开始了,我检查发现是是磁盘满了&#x…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
