Dify私有化离线部署Plugin(插件)本地打包安装问题:以OpenAI-API-compatible为例
前几篇文章主要针对Dify最新版私有化离线部署的过程以及常遇到的问题进行了一系列的教程讲解,有兴趣的朋友可以去翻一下。Dify最新版在国产服务器ARM架构中部署~
今天为大家介绍Dify在离线部署环境中如何实现插件的本地打包与部署。我们以OpenAI-API-compatible插件为例进行演示(其他插件操作步骤相同),该插件是大模型配置的常用接口,具有典型代表性。
文章目录
前言
在Dify升级至1.0版本之后,整个Dify的架构进行了重构,针对业务流以及插件,Dify采用了分离式架构重组机制,将插件从业务中剥离了出来,用户可以自定义去安装和部署插件,使其整个业务流以及架构更加的灵活。
那针对这种业务与插件分离的模式,对于线上部署来说,其实并没有多大影响,可在marketplace中查询并直接安装。但是针对离线部署,由于网络相对隔离,无法在线安装。只能通过本地打包插件进行离线安装,如果没有掌握得当的方法,过程还是相当痛苦的。
一、遇到的问题
1. 直接安装报错,网络不通。

2. 从官网下载本地插件,直接安装(无法运行,后端报错)。
报错 runtime error: invalid memory address or nil pointer dereference空指针异常,即使前端可以通过本地安装将插件装上,但是添加的模型无法显示。
2025/08/18 02:14:37 [Recovery] 2025/08/18 - 02:14:37 panic recovered:
runtime error: invalid memory address or nil pointer dereference
/usr/local/go/src/runtime/panic.go:262 (0x8773f)
/usr/local/go/src/runtime/signal_unix.go:917 (0x8770c)
/app/internal/core/plugin_manager/local_runtime/stdio.go:85 (0x92e024)
/app/internal/core/plugin_manager/local_runtime/io.go:16 (0x92bcc7)
/app/internal/core/plugin_daemon/generic.go:27 (0xb36c57)
/app/internal/core/plugin_daemon/model.gen.go:161 (0xb624e7)
/app/internal/service/model.gen.go:210 (0xb624cc)
/app/internal/service/base_sse.go:116 (0xb6c297)
/app/internal/service/base_sse.go:44 (0xb6c4c3)
/app/internal/service/base_sse.go:114 (0xb6c1ef)
/app/internal/service/model.gen.go:208 (0xb6247b)
/app/internal/server/controllers/model.gen.go:163 (0x18cb497)
/app/internal/server/controllers/base.go:53 (0xb9336f)
/app/internal/server/controllers/base.go:31 (0xb9373b)
/app/internal/server/controllers/base.go:37 (0xb932ab)
/app/internal/server/controllers/model.gen.go:160 (0x18cb3ef)
二、解决步骤
1. 本地重新打包插件
(1)首先我们先下载
OpenAI-API-compatible插件到本地。

下载之后的插件

注意:我这边下载的不是最新的langgenius-openai_api_compatible_0.0.20.difypkg,而是0.19的版本,因为在0.20版本在执行命令报错:ERROR: No matching distribution found for regex==2025.7.34,regex的版本太高,目前还没有。

记得要选择一下版本:

(2)拉取github中Dify-plusgin开源打包工具:
dify-plugin-repackaging,将已经下载好的langgenius-openai_api_compatible_0.0.19.difypkg放在该目录下。

(3)执行命令
./plugin_repackaging.sh local langgenius-openai_api_compatible_0.0.19.difypkg。我们可以使用git bash或者wsl进行操作。这里就不介绍git bash 以及wsl的安装方式,本人使用的wsl。
/opt/dify-plugin-repackaging# ./plugin_repackaging.sh local langgenius-openai_api_compatible_0.0.19.difypkg
local
langgenius-openai_api_compatible_0.0.19.difypkg
Unziping ...
Archive: /opt/dify-plugin-repackaging/langgenius-openai_api_compatible_0.0.19.difypkg
inflating: README.md
inflating: _assets/audio.mp3
inflating: _assets/icon.svg
inflating: _assets/openai_api_compatible-01.png
inflating: main.py
inflating: manifest.yaml
inflating: models/common_openai.py
inflating: models/llm/llm.py
inflating: models/rerank/rerank.py
inflating: models/speech2text/speech2text.py
inflating: models/text_embedding/text_embedding.py
inflating: models/tts/tts.py
inflating: provider/openai_api_compatible.py
inflating: provider/openai_api_compatible.yaml
inflating: requirements.txt
inflating: .verification.dify.json
Unzip success.
Repackaging ...
Looking in indexes: https://mirrors.aliyun.com/pypi/simple
直到看见:[INFO]plugin packaged successfully, output path: /opt/dify-plugin-repackaging/langgenius-openai_api_compatible_0.0.19-offline.difypkg说明插件已经全部的重新打包好了。

在其目录下会有一个带有**offline**标识的插件。

2. 修改Dify的配置文件
由于Dify插件的安装默认是要经过官方审核的,因此本地无论是自己开发的插件还是从官方下载到本地的插件,在进行安装时可能会遇到无法上架的问题。
(1)配置文件通常位于服务器Dify默认源码安装的Docker目录
/work/dify-source/dify-1.7.2/docker中,其中包含一个.env.example示例文件。建议先将其重命名为.env再进行修改。
# 改名为正式环境使用
cp .env.example .env
# 编辑 .env
vi .env
(2)修改
.env中的FORCE_VERIFYING_SIGNATURE改为false,Dify 平台将允许安装所有未在 Dify Marketplace 审核的插件。

还有两个配置尽量也修改一下,主要是针对插件的大小以及nginx上传大小的设置,尽量设置的稍微大一些。
同样修改 .env 配置文件中的以下参数:
1. 将 PLUGIN_MAX_PACKAGE_SIZE 设置为 524288000,以支持安装最大 500MB 的插件
2. 将 NGINX_CLIENT_MAX_BODY_SIZE 设置为 500M,以允许上传最大 500MB 的文件内容在 .env
修改完成之后,记得重启Dify服务,重新加载配置!!!!
3. 重新加载插件
(1)从本地重新安装已经本地打包过的插件
langgenius-openai_api_compatible_0.0.19-offline.difypkg


安装完成之后,我们插件中看到。

三、验证
(1)在Dify的设置页面,我们可以通过【模型供应商】中的
OpenAI-API-compatible配置试下,模型是否可以正常保存。


(2)当前模型已经被添加,后续直接创建工作流就可以调用了。


五、补充
1. 实战遇到的问题(平台架构)
在实战过程中,有部分插件可能是依赖于生产环境的架构。比如我的生产环境就是
ARM架构,我在安装Text Embedding Inference的过程中,本地打包都很顺畅。但就是无法进行准确安装,一直包网络错误。
如下图所示:

服务器日志,提示版本不兼容。

2. 解决办法
查阅资料以及服务器日志发现:
你所在的环境是 aarch64 (ARM)(比如树莓派、AWS Graviton、Mac M 芯片跑 Docker)。
但是 gevent==24.11.1 没有对应的 aarch64 manylinux 的 wheel 文件。
dify-plugin==0.3.5 又强依赖这个版本的 gevent,所以整个插件环境初始化失败。
于是我就改了 本地打包的运行命令:./plugin_repackaging.sh -p manylinux2014_aarch64 -s linux-arm64 local langgenius-hug gingface_tei_0.1.0.difypkg,其实 从.plugin_repacking.sh命令的提示中也可以看到,是有这两个参数的。
usage: ./plugin_repackaging.sh [-p platform] [-s package_suffix] {market|github|local}
-p platform: python packages' platform. Using for crossing repacking.
For example: -p manylinux2014_x86_64 or -p manylinux2014_aarch64
-s package_suffix: The suffix name of the output offline package.
For example: -s linux-amd64 or -s linux-arm64
- 添加了
-p manylinux2014_aarch64的平台架构属性 - 添加了
-s linux-arm64输出离线包的后缀名
至此完美解决问题!!!又可以愉悦的玩耍了!!!
📌 关注我,获取更多 Dify 私有化部署实战技巧!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)