发布时间:2024-11-08 人气:147次
Docker私有化部署Dify
云服务和私有化部署
使用Dify的云服务版,云服务版就是在Dify官网(https://dify.ai/zh)编排应用。
很多小伙伴身处金融、政府这样对数据高度敏感的行业,直接使用云服务不符合他们的需求。数据安全性是他们最为看重的,于是私有化部署应运而生。Dify当然也提供私有化部署的方式,顾名思义,私有化部署是指在自己的服务器或者桌面电脑上部署Dify。
Dify提供两种私有化部署的方式:
DockerCompose部署
源码启动
我们推荐DockerCompose部署的方式,DockerCompose部署方式快速、简单,几行命令就能搞定。
源码启动步骤相对繁琐,不推荐。
什么是Docker?
我先跟你讲一个场景,原先没有Docker的时候,我们想要在服务器上部署一个JavaWeb应用,除了Jar包本身,还需要在服务器上安装JDK、MySQL、Redis、Nginx等,然后配置好各种配置文件,最后启动Jar包。如果你是部署1台服务器还不算麻烦,那如果部署100台服务器呢?并且如果服务器的Linux版本不一样,或者JDK版本不一样,你的JavaWeb应用部署在A服务器上可以运行,也许部署在B服务器上就会报错。这些问题是不是很头疼?于是Docker应运而生。有了Docker之后,你只需要创建一个包含JavaWeb应用程序、JDK、MySQL、Redis、Nginx等的容器镜像,并将其部署到任何支持Docker的环境中,无需担心版本冲突或环境不一致的问题。Docker就是一个包含了所有依赖的容器,我的理解就是他是一个小型系统,不受系统环境限制,可以独立运行。
安装Docker
Mac和Windows
在Mac和Windows上安装Docker非常简单,只需要到Docker官网下载DockerDesktop,双击安装即可。
本站是docker官方中国独家代理,如需购买docker软件请联系本站客服。
DockerDesktop安装完成打开后的界面如下:
可以在设置打开Docker开机自启动。
我们在Mac终端执行命令docker--version查看Docker版本:
Linux服务器
对于无桌面环境的Linux服务器,RedHat、Ubuntu、CentOS等都是参照官网安装指南进行安装,这里不作过多介绍。
下载Dify源码
使用gitclone命令下载Dify源码:
gitclonehttps://github.com/langgenius/dify.git
启动Dify
Docker启动Dify
进入Dify源代码的docker目录,执行一键启动命令:
cddify/docker
dockercomposeup-d
如果您的系统安装了DockerComposeV2而不是V1,请使用dockercompose而不是docker-compose。通过$dockercomposeversion检查版本号:
部署结果
[+]Running7/7
✔Containerdocker-web-1Started1.0s
✔Containerdocker-redis-1Started1.1s
✔Containerdocker-weaviate-1Started0.9s
✔Containerdocker-db-1Started0.0s
✔Containerdocker-worker-1Started0.7s
✔Containerdocker-api-1Started0.8s
✔Containerdocker-nginx-1Started
检查容器是否正常运行
dockercomposeps
包括3个业务服务api/worker/web,以及4个基础组件weaviate/db/redis/nginx,都要处于启动状态。注意下面每一个服务的status都要是Up状态才算真正启动成功。
NAMEIMAGECOMMANDSERVICECREATEDSTATUSPORTS
docker-api-1langgenius/dify-api:0.3.2"/entrypoint.sh"api4secondsagoUp2seconds80/tcp,5001/tcp
docker-db-1postgres:15-alpine"docker-entrypoint.s…"db4secondsagoUp2seconds0.0.0.0:5432->5432/tcp
docker-nginx-1nginx:latest"/docker-entrypoint.…"nginx4secondsagoUp2seconds0.0.0.0:80->80/tcp
docker-redis-1redis:6-alpine"docker-entrypoint.s…"redis4secondsagoUp3seconds6379/tcp
docker-weaviate-1semitechnologies/weaviate:1.18.4"/bin/weaviate--hos…"weaviate4secondsagoUp3seconds
docker-web-1langgenius/dify-web:0.3.2"/entrypoint.sh"web4secondsagoUp3seconds80/tcp,3000/tcp
docker-worker-1langgenius/dify-api:0.3.2"/entrypoint.sh"worker4secondsagoUp2seconds80/tcp,5001/tcp
访问Dify
在浏览器中输入http://localhost即可访问Dify。
升级Dify
进入Dify源代码的docker目录,按顺序执行以下命令:
cddify/docker
gitpulloriginmain
dockercomposedown
dockercomposepull
dockercomposeup-d
常见问题
Dify启动失败
我是在Ubuntu系统中,Docker版本相对较低的情况下遇到如下问题:在浏览器中输入http://localhost访问Dify,首页正常显示,当点击设置管理员用户页面一直在加载中,如下图所示:
打开浏览器控制台,发现报错:
/console/api/setup502
看起来是DifyApi服务报错了,使用如下命令查看容器是否启动成功:
dockercomposeps
果然发现有几个服务的状态status栏并不是Up状态,而是处于Restarting状态。
通过dockerlogsdocker-api-1命令查看DifyApi服务的日志,发现报错信息如下:
这是由于Docker运行权限不够,需要被赋予更高的权限。
解决方法:
在docker-compose.yaml文件中,给services下每一个service最后一行都加上privileged:true
然后重新启动Dify即可。
在Ubuntu系统下,升级Dify
由于在第一个问题中,Ubuntu系统中,本地修改了docker-compose.yaml文件,在使用gitpulloriginmain会提示本地有文件没有提交:
error:Yourlocalchangestothefollowingfileswouldbeoverwrittenbymerge:
docker/docker-compose.yaml
Please,commityourchangesorstashthembeforeyoucanmerge.
解决方法:
gitadddocker-compose.yaml
gitcommit-m"localchange"
执行gitcommit时,需要配置Git的用户信息。Git需要知道提交是由谁进行的。
这里用户名和邮箱随便写即可
gitconfig--globaluser.email"xxx"
gitconfig--globaluser.name"xxx"
提交本地修改之后,再执行gitpulloriginmain,由于本地修改了docker-compose.yaml文件,此时会提示文件有冲突,需要手动解决冲突。
vidocker-compose.yaml
手动解决冲突后,保存docker-compose.yaml文件,然后再本地commit修改。
gitadddocker-compose.yaml
gitcommit-m"解决docker-compose.yaml的冲突"
冲突解决后再按照如下步骤进行Dify升级
cddify/docker
gitpulloriginmain
dockercomposedown
dockercomposepull
dockercomposeup-d
升级到指定Tag版本
cddify/docker
dockercomposedown
//查看当前分支
gitbranch
gitfetch--all
//查看所有tag版本
gittag
//拉取指定分支
gitcheckout0.6.11
dockercomposepull
dockercomposeup-d
Docker无法拉取镜像
修改Docker镜像源,寻找新的可以的Docker镜像源。
//daemon.json可能会不存在,直接vi/etc/docker/daemon.json可以创建
sudovi/etc/docker/daemon.json
{
"registry-mirrors":["新的镜像源地址"]
}
systemctlrestartdocker//重启docker
dockerinfo//查看镜像源有没有配置成功