文章目录
一、背景说明
我真的服了,搞了好几天,差点崩溃。终于解决了较新版本Dify的离线插件打包和安装的问题。
早期打包脚本(即网上90%的资料都说的打包插件Dify-plugin-repacking)产出的离线插件包,在旧版 Dify 上可以正常安装使用。
但 Dify 新版本(应该是1.10.0之后),不知道为什么,官方引入了uv包管理器,新增了uv.lock锁严格冻结依赖校验机制,老方式打包出来的离线包直接安装会报错,无法正常使用。具体表现就是,依旧会联网搜索依赖,尽管该依赖早已经离线下载好。
经过多方面的搜索以及调研,终于在Github找到了解决办法,生成真正适配内网、不联网的离线插件包。
⚠️ 适用版本:Dify 1.10.0之后,私有化内网离线场景,无外网,无法在线拉取 Python 依赖
二、Dify 环境变量配置
打开 Dify 根目录下的 .env 文件,追加下面配置:
bash
# ===== 离线插件专项配置 =====
# 跳过 uv.lock --frozen 严格校验,优先使用插件包内预先打包好的本地wheels离线解析依赖
PLUGIN_IGNORE_UV_LOCK=true
# 关闭插件签名校验,允许安装未上架官方市场、自己打包的私有插件包
FORCE_VERIFYING_SIGNATURE=false
# 插件包最大限制:500MB,适配MinerU、文档解析等依赖较多的重型插件
PLUGIN_MAX_PACKAGE_SIZE=524288000
# 配套Nginx上传限制,和上面插件大小保持一致,避免上传413 Request Entity Too Large
NGINX_CLIENT_MAX_BODY_SIZE=500M
重点坑点:
docker compose restart不会重新加载.env环境变量!restart 只是重启容器,不会重新读取 env 文件,必须使用
--force-recreate重建容器才能加载新变量
执行重建 plugin-daemon 命令:
bash
docker compose up -d --force-recreate plugin_daemon
三、下载插件
提前去dify官方提供的插件市场下载所需插件:点击前往插件市场
下载好的插件后缀为 difypkg

四、离线重打包工具
该工具专门用来重新处理 difypkg 插件包,自动预下载所有依赖 whl,打包进插件内部,同时处理uv.lock锁,实现纯离线安装,部署时不再访问外网 pip 源
bash
git clone https://github.com/kurokobo/dify-plugin-offline-packager.git
切换目录
bash
cd dify-plugin-repackaging-python
同时给打包工具赋权
bash
chmod 755 ./bin/dify-plugin-cli-0.6.1-linux-amd64
将需要打包的插件放入到difypkg目录下,执行命令打包。其中langgenius-agent_0.0.51.difypkg替换为需要打包的插件名称
bash
docker compose run --rm packager --local "difypkg/langgenius-agent_0.0.51.difypkg"
等待打包,出现成功字样即可。生成的文件在difypkg目录下,以offline.difypkg结尾

在Dify页面上选择本地插件安装即可