找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

SAP顾问的AI探索:零基础学习人工智能,实战避坑之Dify私有化部署

热度 1已有 3257 次阅读2024-10-19 16:20 |个人分类:AI探索|系统分类:公开分享| AI人工智能, Dify

Dify官网提供2种部署方式:Docker Compose和本地源码启动。我们已经成功安装了Docker,接下来就采用Docker compose方式本地部署Dify

Docker compose部署主要是两个步骤:

步骤一、克隆Dify 代码仓库

克隆 Dify 源代码至本地。执行如下Git命令:

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

步骤二、启动 Dify

进入 Dify 源代码的 docker目录,执行一键启动命令:

cd dify/docker

cp .env.example .env

docker compose up -d

安装只需上述两个步骤即可,但在尝试安装Dify的过程中,遇到了不少棘手的问题,搞得整个安装过程变得颇为艰难。原本以为这将是一个简单的任务,但随着安装的继续,发现远没有想象中那么顺利。

在尝试拉取镜像清单时,Docker总是镜像拉取失败。尝试手动指定镜像源,每次修改一批,每次运行docker pull命令时,总是出现新的报错,最终以失败告终。这种反反复复的失败挺让人感到挫败的。

过程中遇到的问题和挑战,为了找解决方案,我查阅了大量的文档和论坛帖子,通过AI助手等,希望得到一些专业的帮助。一次一次的尝试和调整,一次一次的添加和试错,最终才有了一个稳定的镜像源清单,成功拉取了所需的镜像,那一刻,所付出的努力终于看到了回报。

当然,在技术领域,遇到问题是常有的事,关键是要保持耐心和毅力,不断寻找解决方案,面对任何问题时都能够从容不迫的应对。

好了,为了朋友们不再重蹈覆辙,我将安装过程及避坑情况整理了出来;

1Git克隆Dify代码

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

成功完成Git克隆:

2、启动 Dify

进入 Dify 源代码的 docker目录,执行一键启动命令:

cd dify/docker

cp .env.example .env

docker compose up -d

如果您的系统安装了 Docker Compose V2 而不是 V1,请使用 docker compose 而不是 docker-compose。通过命令$ docker compose version检查是否为此情况。

避坑一:

以管理员身份运行PowerShell,执行命令出现如下报错:

报错信息:“unexpected character "." in variable name near "TLSv1.2 TLSv1.3";”

这个错误通常出现在使用某些编程语言或脚本语言中,可能在代码中使用了不正确的变量名。在这个特定例子中,错误信息指出在变量名中出现了意外的字符 “.”,这通常意味着在某些上下文中点是不被允许的。解决这个问题需要检查代码,找到导致错误的变量名,并将其修改为合法的变量名。变量名通常只能包含字母、数字和下划线,并且不能以数字开头。

找到文件的路径如下:

Visual Studio Code直接打开docker-compose.yaml进行修改;

我是将TLSv1.1 TLSv1.2 TLSv1.3这三个名称之间的空格替换为逗号,这样就可以避免使用非法字符作为变量名的一部分。如下图所示:

保存后再次运行,可以正常执行了:

避坑二:

由于无法链接到服务器,也无法拉取镜像清单,所以会出现如下报错:

对于这种情况,我们可以采取两种方法:

1、 通过修改daemon.json文件添加镜像地址,具体步骤如下:

解决的步骤如下:

1打开daemon.json文件

vim /etc/docker/daemon.json

2将其镜像地址进行替换

"registry-mirrors": [    "https://docker.m.daocloud.io",    "https://dockerproxy.com",    "https://registry.docker-cn.com",    "https://docker.mirrors.ustc.edu.cn",    "https://hub-mirror.c.163.com",    "https://hub.uuuadc.top",    "https://docker.anyhub.us.kg",    "https://dockerhub.jobcher.com",    "https://dockerhub.icu",    "https://docker.ckyl.me",    "https://docker.awsl9527.cn",    "https://mirror.baidubce.com"  ]

3).重启docker服务

systemctl daemon-reloadsystemctl restart docker

2、 通过在docker的设置中直接添加镜像地址,具体如下:

”registry-mirrors”:[ ]的中括号里填写如下的镜像地址,这些是我测试后可用的,如果有新的添加,每次最好添加一条测试没问题,再添加下一条,避免docker出问题;

"https://docker.m.daocloud.io",

"https://dockerproxy.com",

"https://registry.docker-cn.com",

"https://docker.mirrors.ustc.edu.cn",

"https://hub-mirror.c.163.com",

"https://hub.uuuadc.top",

"https://docker.anyhub.us.kg",

"https://dockerhub.jobcher.com",

"https://dockerhub.icu",

"https://docker.ckyl.me",

"https://docker.awsl9527.cn",

"https://mirror.baidubce.com",

"https://nrbewqda.mirror.aliyuncs.com",

"https://dmmxhzvq.mirror.aliyuncs.com",

"https://docker.chenby.cn",

"https://docker.hpcloud.cloud",

"https://atomhub.openatom.cn"

再次执行后,成功运行:

正如前文所讲到的,上述镜像地址的服务器清单我也不是一次收集齐的,所以中间拉取的时候也是出现各类问题,期间重复多次执行命令,并陆续添加镜像地址才最终完成。

期间一些报错问题如下:

当出现:“Error response from daemon: Head "https://registry-1.docker.io/v2/langgenius/dify-web/manifests/0.7.2": EOF”这类报错时,查看Docker情况,可以发现陆续有Images拉取成功,如下图:

所以,出现此类报错,继续执行如下命令:

cd dify/docker

cp .env.example .env

docker compose up -d

但由于我们修改了docker-compose.yaml,所以cp .env.example .env并不需要再次执行,如下图两条命令即可:

可以看到进度:

期间由于网络稳定性或者服务器访问等各类特殊情况,耗时比较久一点,直到如下才最终完成:

查看Docker可以看到拉取结果,全部成功:

避坑三:

再次执行命令:

docker compose up -d

出现报错信息:“Error response from daemon: mkdir C:\Windows\system32\dify\docker\volumes\db: Access is denied.

经查,需要以管理员权限运行 Docker才能解决。我是 Windows 用户,通过右键点击 Docker 图标选择以管理员身份运行来启动 Docker Desktop。再次执行后如下图正常:

可以查看到DockerImages的运行情况:

避坑四:

在浏览器中输入 http://localhost 访问 Dify

Dify设置管理员账号时,一直在如下这个界面,没有跳到正常界面;

这个问题需要在 docker-compose.yaml 文件中添加:privileged: true代码,执行如下命令:

docker compose down

然后修改文件:

再次执行:docker compose up -d

重新登录Dify,这样就可以用刚才设置的管理员账号成功登录了;

避坑五:

在经历了重重困难后,终于完成了Dify的安装,可以正常使用。然而,在Docker中查看container时,我发现 docker-sandbox-1 容器一直在 running  restarting 状态之间快速切换,最终停留在了 restarting 状态。这个问题显得非常奇怪,一时还难以解决。

我首先尝试使用 docker attachdocker exec 命令进入容器内部,希望能够找出一些线索。当我进入容器后,执行一些诊断命令来进一步排查问题。检查了容器的日志文件,希望从中找到一些有用的提示,但是日志文件中的信息也非常有限,除了显示容器立即停止后再启动外,并没有太好的有效手段。

考虑到可能是端口冲突导致的问题,我还尝试使用 netstat 命令检查本机上的端口占用情况。我逐一检查了所有相关的端口,确保没有其他进程占用这些端口。但是,即便如此地毯式搜索,也没有排查由于端口导致的问题。

在技术论坛的文档中,提到可能是配置文件中的某些参数设置不当导致的,于是我仔细检查了所有相关的配置文件,包括 docker-compose.yml  Dockerfile,但并没有发现明显的错误或异常配置。

在多次尝试未果后,我开始怀疑可能是某些深层次的系统问题。检查了系统的日志文件,包括 syslog  journalctl 输出的信息,希望能够找到一些线索。

此外,我还尝试了以下几种方法:

  1. 清理缓存:我清理了 Docker 的缓存,并重新启动了容器。

  2. 修改权限:我检查了容器的文件权限,并确保有正确的权限设置。

  3. 环境变量:我检查了容器启动时使用的环境变量,并确认它们都是正确的。

尽管前前后后采取了多种措施,但问题依旧没有得到解决。这个容器就像一个谜一样,始终无法恢复到稳定正常运行,一度很沮丧。

再次打开Docker中该容器的log分析;

出现的报错信息是:runtime/cgo: pthread_create failed: Operation not permitted

SIGABRT:abort

PC=0x7faa594183acm=0 sigcode=18446744073709551610

由于之前对:PostgreSQL 启动容器出错 – mkdir: 权限被拒绝进行过修改操作;

当时是在 docker-compose. yaml 文件中,使用以下语法设置用户和组的权限:

services:

postgres:

image: postgres

user: postgres:postgres

只是没有起到作用,又恢复回去了。

想到既然又是权限相关问题,于是我干脆在 docker-compose.yaml 文件中余下几处都添加上:privileged: true代码;

以及其他几处:

保存后再次执行;

同时在Docker中查看,如下图所示:

由此,已没有之前的问题,全部运行成功。

到这里,恭喜朋友们,现在,可以愉快地玩耍了。朋友们如果还遇到问题,请在SAP亦橙网(SAPeclub.com)的AI人工智能论坛留言,我们一起解决。

造船过河不如借船过河,这也正是我们SAP顾问所擅长的专注于应用。Dify 这个强大的智能体开发和搭建平台,我们可以自由搭建工作流和 Agent 的实操,通过利用 Dify 的强大功能和丰富资源,可以参与到 AI 应用的定义和数据运营中,逐步深入了解 AI 领域。

存网盘

路过

雷人

握手
1

鲜花

鸡蛋

刚表态过的朋友 (1 人)

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

返回顶部