dify离线插件打包步骤
目录
- 背景
- 步骤
- 总结
背景
Dify 是一个开源的 AI 应用开发平台 ,让你能轻松搭建各种智能应用,比如聊天机器人、客服助手、文档分析工具等,而不用从零开始写复杂的代码。
步骤
- 下载 Dify 插件
登录 Dify 界面,进入插件市场,找到要安装的插件
进入详情,点下载。这里下载的插件包一般之后几十KB,直接安装的话,会联网下载依赖包,所以离线服务器不能在这里直接安装。
- 下载打包工具
下载地址:https://github.com/junjiem/dify-plugin-repackaging
这个工具用于重新打包 Dify 插件,它会拉取插件所需的所有第三方库,并重新整合成完整的 Dify 插件包。安装插件时,直接从该包内加载依赖,避免联网下载。
注:工具支持 Linux 和 MacOS,打包机器和目标机器的架构要一样。
- 重新打包插件
进入打包工具目录下
cd dify-plugin-repackaging-mainchmod a+x plugin_repackaging.sh# 重新打包 ollama 插件./plugin_repackaging.sh local ./langgenius-ollama_0.0.6.difypkg
打包完成后会自动生成离线插件包 langgenius-ollama_0.0.6-offline.difypkg,一般有几十到上百兆
4、修改 Dify 配置
Dify 默认只能安装官方的插件,需要关闭这个校验,同时修改 Nginx 上传文件大小上限,修改完重建 Dify 容器。
FORCE_VERIFYING_SIGNATURE=falsePLUGIN_MAX_PACKAGE_SIZE=52428800NGINX_CLIENT_MAX_BODY_SIZE=500M
5、安装离线包
登录 Dify 界面,进入插件中心,本地安装
选择我们打包的插件安装即可
安装完成,插件右下角会显示本地安装
遇见的一些小问题,如ssl的问题
#!/bin/bashset -ePYTHON_VERSION=3.11.9OPENSSL_VERSION=1.1.1wecho \"🔧 安装构建依赖...\"yum install -y gcc make wget tar \\ zlib-devel libffi-devel bzip2-devel xz-devel \\ readline-devel sqlite-devel ncurses-devel tk-devel gdbm-devel \\ git patchecho \"📥 下载并安装 OpenSSL ${OPENSSL_VERSION}...\"cd /usr/local/srcwget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gztar xzvf openssl-${OPENSSL_VERSION}.tar.gzcd openssl-${OPENSSL_VERSION}./config --prefix=/usr/local/openssl-${OPENSSL_VERSION} --openssldir=/usr/local/openssl-${OPENSSL_VERSION}make -j$(nproc)make installecho \"✅ OpenSSL 安装完成\"# 设置环境变量(当前 shell 生效)export LD_LIBRARY_PATH=/usr/local/openssl-${OPENSSL_VERSION}/lib:$LD_LIBRARY_PATHexport CFLAGS=\"-I/usr/local/openssl-${OPENSSL_VERSION}/include\"export LDFLAGS=\"-L/usr/local/openssl-${OPENSSL_VERSION}/lib\"echo \"📥 下载并安装 Python ${PYTHON_VERSION}...\"cd /usr/local/srcwget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgztar xzf Python-${PYTHON_VERSION}.tgzcd Python-${PYTHON_VERSION}./configure \\ --prefix=/usr/local/python-${PYTHON_VERSION} \\ --enable-optimizations \\ --with-openssl=/usr/local/openssl-${OPENSSL_VERSION}make -j$(nproc)make altinstallecho \"✅ Python ${PYTHON_VERSION} 安装完成: /usr/local/python-${PYTHON_VERSION}/bin/python3.11\"# 测试 SSL 模块/usr/local/python-${PYTHON_VERSION}/bin/python3.11 -m ssl || { echo \"❌ SSL 模块测试失败\" exit 1}echo \"✅ SSL 模块导入成功\"/usr/local/python-${PYTHON_VERSION}/bin/python3.11 -c \"import ssl; print(ssl.OPENSSL_VERSION)\"
ln -sf /usr/local/python-3.11.9/bin/python3.11 /usr/bin/pythonln -sf /usr/local/python-3.11.9/bin/pip3.11 /usr/bin/pip
python -V # 应该是 Python 3.11.9pip -V # 应该显示 pip 对应 Python 3.11
导入dify插件需要的依赖(可以先下载whl文件,然后pip install *.whl)
https://pypi.org/project/dify_plugin/0.3.5/
这样再执行打包命令的时候就没问题了
./plugin_repackaging.sh local ./langgenius-ollama_0.0.6.difypkg
大功告成!生成offline 文件就可以倒到内网使用啦~
总结
为什么不能外网直接下载直接导入内网使用呢?产品这样设计的目的是什么呢?所有现象都要打一问号“?”
插件包含 Python 源码 + 第三方依赖(如 openai、pandas 等)Dify 无法只靠一份 .py 下载就让插件在内网跑起来如果 Dify 下载了插件代码,还得自动处理依赖(这就需要联网或本地 PyPI 镜像),这一步平台目前不做。
插件打包时,你自己知道要用哪个版本的依赖、是否需要额外的 wheel 文件
如果平台来帮你打包,就必须有编译环境 + PyPI 镜像 + 模型支持 + 安全沙箱
这对平台来说是一个巨大的维护负担,也会让插件安全性不可控。
未来思考:
官方可以未来提供「插件商店 + 离线导出 .difypkg」