Dify极简部署手册

1、概述

众所周知的原因,dify cloud国内无法访问,国内使用dify需要自己搭建。本文主要介绍如同通过docker-compose快速部署生产版本(基于dify1.5.1版本),通过本文,你将获得:

  1. 基于官方项目版本优化的.env配置文件和docker-compose.yaml
  2. 如何配置域名,SSL证书以及添加自己服务
  3. 如何通过URL参数设置dify中的sys.user_id值

2、正文

1)配置域名及HTTPS

.env文件中配置域名和证书

NGINX_SERVER_NAME=xxx.yourdomain.com
NGINX_HTTPS_ENABLED=true
....
NGINX_SSL_CERT_FILENAME=your.crt
NGINX_SSL_CERT_KEY_FILENAME=your.key

SSL证书路径在dcoker-compose.yaml中的nginx镜像配置中:

另外,dify项目提供了certbot免费SSL证书功能,具体部署查看:https://github.com/langgenius/dify/blob/main/docker/certbot/README.md

2)上传文档大小限制

默认dify限制单文件最大是15M,这可能会限制掉很多文档(如构建知识库),建议改为:100M,在docker-compose环境变量修改:

NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-100M}

3)非结构化文档内容提取工具

文档内容的提取是十分常用的功能,改为unstructured.io兼容性更好,否则很多文档内容无法提取。.env文件中如下修改:

# ETL type, support: `dify`, `Unstructured`
# `dify` Dify's proprietary file extraction scheme
# `Unstructured` Unstructured.io file extraction scheme
ETL_TYPE=Unstructured

# Unstructured API path and API key, needs to be configured when ETL_TYPE is Unstructured
# Or using Unstructured for document extractor node for pptx.
# For example: http://unstructured:8000/general/v0/general
UNSTRUCTURED_API_URL= http://unstructured:8000/general/v0/general
UNSTRUCTURED_API_KEY=

4)Python插件配置修改

dify插件依赖Python运行环境,国内网络环境需修改python包为国内镜像以及超时时间的修改,否则可能会导致dify市场插件无法安装。docker-compose.yaml环境变量配置:

PLUGIN_PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-320}
PIP_MIRROR_URL: ${PIP_MIRROR_URL:-https://pypi.tuna.tsinghua.edu.cn/simple}

5)主系统与dify生成智能体打通

dify生成的智能体(chatbot,对话流,工作流等)是一个单独的应用实体,自部署dify的应用通常情况下需要其他系统打通才可应用落地。通过修改dify源码部署,可以实现系统之间的打通,但需要较大的开发和运维工作。

本着极简原则,本文提供一种不修改dify源码、传递dify sys.user_id参数的方案,实现系统用户id的打通,在dify智能体中通过用户id实现角色和权限的控制,具体如下:

方案背景

如下是dify应用将URL Params覆盖到dify环境变量参数的代码,通过源码可以看到是,将URL Params目标值使用decodeURIComponent()解码,然后base64解码,最后gzip解压,解码解压的值覆盖对应环境变量。

async function getProcessedSystemVariablesFromUrlParams(): Promise<Record<string, any>> {
  const urlParams = new URLSearchParams(window.location.search)
  const systemVariables: Record<string, any> = {}
  const entriesArray = Array.from(urlParams.entries())
  await Promise.all(
    entriesArray.map(async ([key, value]) => {
      if (key.startsWith('sys.'))
        systemVariables[key.slice(4)] = await decodeBase64AndDecompress(decodeURIComponent(value))
    }),
  )
  return systemVariables
}

具体方案

基于以上背景,方案实现如下:

  • 主系统用户id,通过gzip压缩,然后进行base64编码,最后encodeURIComponent()编码,生成用户id编码串(完整代码在本文附件下载中)
  • 将生成的户id编码串带在URL Params调用dify应用(如iframe的src url),dify应用中的sys.user_id则为主系统用户id
  • 在搭建dify应用是将sys.user_id带上调用自用http请求判断用户角色,则可以判断用户类型进行对用的权限和角色控制。

3、本文配置文件和源码下载

《dify部署docker-compose.yaml、.env文件,以及sys参数编码函数代码》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值