AIGC系列之Dify的搭建部署

前言

Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。

Dify都有什么功能以及怎么使用这里就不细说了,可以参考官方文档地址:docs.dify.ai/v/zh-hans/g...

也可以通过它的官网进行在线试用,如下: Dify 在线使用:cloud.dify.ai/

本文主要讲一讲Dify如何搭建部署的。

安装docker

Dify需要很多应用支持,包括redis、nginx、postgres等等,一个个安装配置很麻烦。所以Dify提供了docker快速部署的方案,所以首先要安装docker和docker-compose。

使用wsl在windows上安装docker

我的环境是Windows+WSL,所以选用了下面的方案来进行安装。

docs.docker.com/desktop/wsl...

1、下载Docker Desktop最新版本地址

2、安装,注意安装的时候要选择WSL 2

3、安装完打开Docker,可以不用登录。打开设置Setting,在General下选中Use the WSL 2 based engine,然后apply$restart

4、打开设置Setting,在Resources -> WSL integration下选择要使用docker的虚拟机,然后apply$restart

5、打开虚拟机,检查一下docker和docker-compose的版本

复制代码
docker -v
docker-compose -v

如果都正常,就可以在这个虚拟机中使用docker了。

CentOS安装docker

我的环境是CentOS7,官方文档是docs.docker.com/engine/inst...

首先卸载以前安装的docker,如下:

arduino 复制代码
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

然后配置仓库

arduino 复制代码
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

但是国内无法访问这个仓库,所以可以使用阿里云镜像仓库

arduino 复制代码
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

然后安装docker

lua 复制代码
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

都选yes即可。

安装完成需要启动Docker服务,使用命令sudo systemctl start docker

可以使用命令sudo systemctl status docker查看docker服务的状态。

其他环境安装docker

大家直接参考官方文档:docs.dify.ai/v/zh-hans/g...即可。

部署

安装完docker后就可以开始部署了,这部分需要代理,提前准备好就不细说了。

克隆代码仓库

克隆 Dify 源代码至本地。

bash 复制代码
git clone https://github.com/langgenius/dify.git

也可以自己fork后再克隆。

启动容器

接着第一步,目录不变,执行

bash 复制代码
cd dify/docker
cp .env.example .env
docker compose up -d

注意:如果没有.env.example文件,有可能是分支不对,切换到主分支main即可。

就开始自动进行部署了,这个过程非常慢,因为需要下载很多应用,有些还需要代理才可以,而且速度很慢。所以在执行这一步之前先代理,然后执行过程中耐心等待。如果速度特别慢,就换了路线试试。

执行完成后,就自动启动了。

这时候在docker desktop中就可以看到一个名为docker的容器了,状态是running。

开始使用

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

第一次进入的时候会要求你创建一个管理员账户。

如果要自定义配置,注意修改.env.example文件后,还需要同步修改.env文件,这个文件才是最终生效的配置。

这时候虚拟机关了也不影响服务。dify的容器在docker desktop中管理即可,所以如果彻底关闭了docker desktop,服务会停止。不过重新打开后会自动启动,但是进入平台会发现数据都没了,所以需要重新进入虚拟机关闭docker再重新启动即可

复制代码
docker-compose down
docker-compose up -d

修改端口

默认dify使用了80和443端口,所以访问的时候不需要加端口。但是我们部署可能不希望使用默认端口,那么就需要改变一下端口。

首先要修改.env文件,如下:

ini 复制代码
# ------------------------------
# Docker Compose Service Expose Host Port Configurations
# ------------------------------
EXPOSE_NGINX_PORT=80
EXPOSE_NGINX_SSL_PORT=443

将80和443改成其他端口。

注意NGINX_PORT和NGINX_SSL_PORT不要改,不要弄混了,如果都改了确实可以通过新端口访问,但是这个nginx还会占用80端口,因为内部80端口没有被映射到其他端口,默认就会占用外部的80端口。

然后还需要修改docker-compose.yaml文件中的nginx部分:

bash 复制代码
  nginx:
    ...
    environment:
      NGINX_SERVER_NAME: ${NGINX_SERVER_NAME:-_}
      NGINX_HTTPS_ENABLED: ${NGINX_HTTPS_ENABLED:-false}
      NGINX_SSL_PORT: ${NGINX_SSL_PORT:-443}
      NGINX_PORT: ${NGINX_PORT:-80}
      ...
    ports:
      - "${EXPOSE_NGINX_PORT:-80}:${NGINX_PORT:-80}"
      - "${EXPOSE_NGINX_SSL_PORT:-443}:${NGINX_SSL_PORT:-443}"

同样只修改EXPOSE_NGINX_PORT和EXPOSE_NGINX_SSL_PORT。NGINX_PORT和NGINX_SSL_PORT不要改。这样nginx容器的内部80和443端口就可以映射到外部的其他端口,就不会占用外部的80和443端口了。

然后重启docker就可以了。

修改数据库连接数

dify中数据库PostgreSQL的连接数默认设置成了30,如果并发多的话,链接池就不够了。我们可以增加这个连接数,在.env中

  • SQLALCHEMY_POOL_SIZE就是连接数,默认30个
  • SQLALCHEMY_POOL_RECYCLE是连接池回收时间,默认3600秒
  • POSTGRES_MAX_CONNECTIONS是PostgreSQL数据库的最大连接数,默认100

这个连接数也不能修改太大,因为PostgreSQL数据库本身有最大连接数的限制,默认是100,所以最好不要超过这个限制。

PostgreSQL数据库默认的最大连接数限制也可以修改,进入docker通过命令就行修改。但是如果增加最大连接数,可能需要同时增加shared_buffers和kernel.shmmax的值,以提高数据库的缓存能力和性能,同时可能影响系统性能。所以要谨慎修改,除非对系统非常了解。

常见问题

这个过程中可能遇到一些问题,下面是我遇到过的问题

ERROR [flask_migrate] Error: Can't locate revision identified by 'xxxx'

这个问题是因为数据库版本不对,我是在docker完整部署后停掉,又去掉dify部分部署并且本地部署dify,官方文档中本地部署的时候中间有一个步骤是更新数据库。

然后停掉本地部署,再完整的进行docker部署的时候就会报这个错误。在api和worker两个容器中都会报这个错误,导致worker无法工作,知识库训练等异步操作就卡住了,一直是排队中。

目前怀疑就是更新数据库那一步导致的,出问题的是postgres这个数据库,即docker-db-1这个容器里运行的。

我试了很多都不起作用,最终只好先把这个数据库彻底删掉,它的路径在dify项目的docker/volumes/db/data下,有一个pgData文件夹,把它删掉再重新docker部署即可。

但是注意这样的话之前的所有数据就会丢失,一定要慎重。我如果找到其他方法再更新。

所以各位注意!如果要在一台机器上即进行docker部署也进行本地部署,最好clone两套代码,别用一套代码,容易出问题。

商业模型无法使用

比如文心模型,使用的时候可以看到api的后台日志提示key错误,这时候查看配置中的key发现不是我们设置的,自动变成了 "SFlCUk************==" 和 "SFlCUk************7p"。

这是因为该错误可能是由于更换了部署方式,导致api/storage/privkeys改变了,这个文件是用来加密大模型密钥的,这里讨论的是Docker compose 部署,所以使用如下命令进行重置加密公私钥:

python 复制代码
docker exec -it docker-api-1 flask reset-encrypt-key-pair
相关推荐
哪吒编程2 小时前
o3、o4-mini重磅发布,多模态+深度思考,再次登顶最强模型
aigc·openai
berryyan9 小时前
ComfyUI 问题解决指南:FFmpeg6报错 和 Git 错误全面解决方案
aigc
祯民10 小时前
AI 时代前端进阶:10分钟入门基于 HuggingFace Transformers 库开源模型私有化部署
前端·aigc
前端花园12 小时前
前端开发AI Agent之Memory理论篇
前端·aigc·trae
程序员X小鹿12 小时前
腾讯放大招,微信重磅更新!元宝AI正式入驻微信,第一个AI好友出现了!6大隐藏玩法(附添加方法)
aigc
charles_vaez14 小时前
开源模型应用落地-Podcastfy-从文本到声音的智能跃迁-Gradio(一)
深度学习·aigc·agi
哪吒编程14 小时前
GPT‑4.1重磅发布,专为开发者设计,百万token上下文,ChatGPT4o的全面升级
aigc·openai
几米哥16 小时前
Google Cloud最新报告:全球领先企业AI应用案例与智能体落地方向探索
google·aigc
墨风如雪16 小时前
Kling AI 2.0 炸场!快手这次不光“秀肌肉”,还要改写视频生成游戏规则?
aigc
Goboy16 小时前
你听说过 DeepLearning4J吗 · 属于我们Java Coder深度学习框架
llm·aigc·ai编程