当前位置: 首页 > news >正文

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参数编码函数代码》

http://www.dtcms.com/a/289812.html

相关文章:

  • 30天打好数模基础-逻辑回归讲解
  • 7-大语言模型—指令理解:指令微调训练+模型微调
  • 【算法训练营Day15】二叉树part5
  • 编程研发工作日记
  • 050_Set接口(HashSet / TreeSet / LinkedHashSet)
  • 力扣面试150题--搜索插入位置
  • 某市公安局视频图像信息综合应用平台设计方案Word(446页)
  • AI产品经理面试宝典第40天:用户反馈处理与技术应用面试题与答法
  • 多校2+多校1的遗珠
  • 信道相关系数
  • 安装kali时出现“安装步骤失败“如何解决及后续软件安装
  • Python自动化测试项目实战
  • QT项目-仿QQ音乐的音乐播放器(第一节)
  • 什么是卡贴???
  • 国产电钢琴性价比实战选购指南
  • Python 虚拟环境与构建工具全景指南:功能介绍与对比分析
  • 基于Transformer的心理健康对话系统:从零构建AI心理咨询助手
  • 【全球甲烷估算模型】简化一箱模型(1-box model)
  • MySQL中的排序和分页
  • [simdjson] 实现不同CPU调度 | 自动硬件适配的抽象
  • C 语言经典编程题实战:从基础算法到趣味问题全解析
  • MybatisPlus-09.核心功能-IService开发复杂业务接口
  • 论文阅读:BLIP-2 (2023.4)
  • KOSMOS-2: 将多模态大型语言模型与世界对接
  • 第一章: 初识 Redis:背后的特性和典型应用场景
  • 你的created_time字段,用DATETIME还是TIMESTAMP?
  • brpc的安装与使用介绍以及channel的封装
  • spring-ai-alibaba 迭代字符分割器
  • RPG61.制作敌人攻击波数一
  • 30天打牢数模基础-AdaBoost讲解