Dify 插件离线打包完整指南(Windows + Docker 版)

问题背景

将 Dify 从外网迁移到内网后,发现一个令人困惑的问题:明明在外网下载好的插件(.difypkg 文件),导入内网 Dify 后却"消失"了,刷新页面就找不到。

根本原因:Dify v1.x 的插件机制发生了重大变化。插件不再是一个独立的 Docker 镜像,而是一个 Python 应用。安装时需要联网从 PyPI 下载依赖包。内网环境无法访问公网,依赖安装失败,插件自然无法加载。

解决方案:在外网将插件及其所有 Python 依赖打包成一个完整的离线安装包。

🎯 最终成功的命令

直接复制以下命令到 PowerShell 执行(确保 Docker Desktop 已启动):

bash 复制代码
docker run --rm -it -v "${PWD}:/app" -e DEBIAN_FRONTEND=noninteractive ubuntu:24.04 bash -c "cd /app && apt-get update && apt-get install -y unzip python3 python3-pip tzdata && ln -sf /usr/bin/python3 /usr/bin/python && chmod +x plugin_repackaging.sh && ./plugin_repackaging.sh local ./langgenius-openai_api_compatible_0.0.42.difypkg"

执行成功后输出示例

🧩 准备工作

1. 环境要求

项目 要求
操作系统 Windows 10/11(专业版/企业版,或家庭版 + WSL2)
Docker Docker Desktop for Windows(已启动)
网络 需要能访问外网(下载镜像和 Python 依赖)

2. 下载打包工具(推荐使用增强版

理由:原版没成功(对 Python 版本兼容性更好):

bash 复制代码
git clone https://github.com/xjl456852/dify-plugin-repackaging-plus.git
cd dify-plugin-repackaging-plus

3. 准备插件文件

从 Dify 插件市场下载需要打包的插件(如 langgenius-openai_api_compatible_0.0.42.difypkg),放入上述目录。

🔧 命令参数详解

参数 作用
docker run --rm 运行容器,执行完毕后自动删除
-it 交互式终端,可以看到打包过程
-v "${PWD}:/app" 将当前目录挂载到容器的 /app 目录
-e DEBIAN_FRONTEND=noninteractive 关键:禁止交互式提示(解决 tzdata 时区选择问题)
ubuntu:24.04 使用 Ubuntu 24.04(自带 Python 3.12,无需额外配置)

🐛 踩坑记录与解决方案

坑1:路径格式问题

错误unzip: cannot find or open .\xxx.difypkg

原因 :在 Git Bash 中使用了 Windows 风格路径 .\

解决 :使用 Unix 风格路径 ./

坑2:Python 版本不兼容

错误error: metadata-generation-failedjiter

原因:本地 Python 3.14 太新,某些包没有兼容版本

解决:使用 Docker 容器中的 Python 3.12(Ubuntu 24.04)

坑3:Ubuntu 22.04 找不到 python3.12

错误E: Unable to locate package python3.12

原因:Ubuntu 22.04 默认源没有 Python 3.12

解决:改用 Ubuntu 24.04(自带 Python 3.12)

📦 打包前后对比

对比项 原文件 离线包
文件名 xxx.difypkg xxx-offline.difypkg
大小 ~50 KB ~50 MB
内容 仅插件代码 代码 + 所有 Python 依赖
安装方式 需要联网 直接安装

🖥️ 内网安装步骤

1. 修改 Dify 配置

在 Dify 部署目录 dify/docker/.env 中添加:

bash 复制代码
# 允许安装未签名的本地插件(必须)
FORCE_VERIFYING_SIGNATURE=false

# 调整上传文件大小限制(离线包可能较大)
PLUGIN_MAX_PACKAGE_SIZE=524288000
NGINX_CLIENT_MAX_BODY_SIZE=500M

2. 重启 Dify 使配置生效

bash 复制代码
cd /path/to/dify/docker
docker compose down
docker compose up -d

3. 安装离线插件

  1. 登录 Dify 管理界面

  2. 点击右上角头像 → 「插件」「管理」

  3. 点击 「安装插件」「本地安装」

  4. 选择打包好的 xxx-offline.difypkg 文件

  5. 等待安装完成

4. 验证安装

进入 「设置」「模型供应商」,应该能看到新安装的插件选项。

💡 常见问题 FAQ

Q1:打包后的文件能直接改名吗?

A :可以,但建议保留 -offline 标识,方便区分。

Q2:内网安装时提示"插件签名验证失败"?

A :检查 .env 中是否设置了 FORCE_VERIFYING_SIGNATURE=false

Q3:打包时提示 Docker 连接失败?

A :确保 Docker Desktop 已启动,执行 docker ps 验证。

🔗 参考资料

如果这篇文章对你有帮助,欢迎点赞收藏!

相关推荐
小七-七牛开发者13 小时前
Coding Agent 规则管理:CLAUDE.md、Skills、Hooks、Subagents 到底怎么选?
ai·大模型·agent·claude·token·loop·mcp·claudecode·ai coding
doiito19 小时前
左脚踩右脚:让 LLM 自进化的 Agent 轨迹训练法——为什么它能补上主流范式的最后一块拼图
ai·系统设计
带刺的坐椅1 天前
从 Claude Code 隐私争议,看 SolonCode 的设计选择
ai·llm·agent·claudecode·soloncode·codingplan
lincats1 天前
Claude Code项目越写越乱?这套清理流程能救你
ai·ai agent·claude code
云燕实验室CloudLab2 天前
《AI开始"抱团"思考了!多智能体 + 思维图到底有多强?》
ai·学习工具·智慧学伴
小七-七牛开发者2 天前
论文解读:DeepSeek DSpark 在真实高并发推理服务中,如何保证 Token 生成又好又快?
ai·大模型·编程·ai coding
lichenyang4532 天前
Docker 学习笔记(五):Docker Compose,用一个 YAML 启动前端、后端和 MongoDB
docker
lichenyang4532 天前
Docker 学习笔记(四):Dockerfile,把项目打成自己的镜像
docker·容器
lichenyang4532 天前
Docker 学习笔记(三):Docker 网络、bridge、子网和容器互通
docker·容器
lichenyang4532 天前
Docker 学习笔记(二):docker run 的参数到底在控制什么?
docker·容器