dify离线插件打包步骤
目录
- 背景
- 步骤
- 总结
背景
Dify 是一个开源的 AI 应用开发平台 ,让你能轻松搭建各种智能应用,比如聊天机器人、客服助手、文档分析工具等,而不用从零开始写复杂的代码。
今天我们就来看看如何在离线环境安装 Dify 插件。
步骤
- 下载 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=false
PLUGIN_MAX_PACKAGE_SIZE=52428800
NGINX_CLIENT_MAX_BODY_SIZE=500M
5、安装离线包
登录 Dify 界面,进入插件中心,本地安装
选择我们打包的插件安装即可
安装完成,插件右下角会显示本地安装
遇见的一些小问题,如ssl的问题
#!/bin/bash
set -ePYTHON_VERSION=3.11.9
OPENSSL_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/src
wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz
tar xzvf openssl-${OPENSSL_VERSION}.tar.gz
cd 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_PATH
export CFLAGS="-I/usr/local/openssl-${OPENSSL_VERSION}/include"
export LDFLAGS="-L/usr/local/openssl-${OPENSSL_VERSION}/lib"echo "📥 下载并安装 Python ${PYTHON_VERSION}..."
cd /usr/local/src
wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz
tar xzf Python-${PYTHON_VERSION}.tgz
cd 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/python
ln -sf /usr/local/python-3.11.9/bin/pip3.11 /usr/bin/pip
python -V # 应该是 Python 3.11.9
pip -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」