简介:本资源为Dify开源低代码AI应用开发平台的官方安装包,面向AI开发者、后端工程师及希望快速搭建私有化AI服务的技术人员,解决本地部署大模型应用平台的核心需求。压缩包共2000个文件,以1337个Python源码文件(含核心服务逻辑与API模块)、366个JSON/YAML配置文件(含工作流定义、模型参数与环境配置)、84个JS/116个CSS前端资源(覆盖Light/Dark主题、编辑器样式及页面模块)为主,整体20.25MB,结构完整,开箱即用。目前已有2661人学习下载,适合需要快速验证Dify功能、二次开发或研究其前后端协同架构的实践者。用户解压后可直接运行主程序包dify-main,获取包含服务启动脚本(sh)、文档说明(md)、数据库迁移脚本(sql)及完整静态资源在内的全栈能力,是深入理解AI应用编排平台工程实现的优质参考样本。
1. Dify 官方安装包从 GitHub 下载:不是点个 ZIP 就完事,本地部署卡在ssl error或credentials validation failed的人,90% 栽在这三步上
你搜“dify官方安装包 github下载”,大概率是刚看完官网文档、想跳过 Docker 快速本地跑通,结果点开 https://github.com/langgenius/dify/releases 页面,看到dify-1.10.0.tar.gz或dify-1.10.0.zip就直接右键下载——然后pip install -e .报错、docker-compose up卡在redis:7-alpine拉取失败、或者前端启动后登录页弹出An error occurred during credentials validation。这不是你环境差,是 Dify 从 1.8 版本起就把「安装包」和「可运行产物」做了严格分离:GitHub Release 里放的从来不是开箱即用的二进制,而是源码归档(source distribution),它默认不带预编译前端、不带.env.example的生产就绪配置、更不包含requirements.lock锁定的 Python 依赖版本。你直接解压运行,等于拿施工图纸当毛坯房住。本文只讲一件事:如何用 GitHub 上的官方 release 包,在 Linux/macOS/Windows WSL2 环境下,从零构建出一个能通过http://localhost:3000访问、知识库可上传、工作流可调试、且避开ssl error和credentials validation两大高频翻车点的完整 Dify 实例。适合已装好 Python 3.11+、Node.js 18+、Docker 24+ 的一线开发者,不讲 Docker 基础,不教 Git 克隆,只补你查不到的那层“为什么 release 包不能直接 run”。
2. 为什么必须用 Release 包而非 git clone?源码结构与构建路径的硬约束
Dify 的发布流程决定了 Release 包是唯一可信的「构建起点」。git clone主分支(main)会拉到开发中代码,比如dify-api服务可能引用了未发布的langgenius/dify-core@0.4.2-dev,而 Release 包里的pyproject.toml和package.json已经锁定所有依赖版本,这是规避dify an error occurred during credentials validation的第一道防线。我们以dify-1.10.0.tar.gz(2024 年 6 月最新稳定版)为例,拆解其不可跳过的三层结构。
2.1 解压后必须验证的三个核心目录
下载地址:https://github.com/langgenius/dify/releases/download/v1.10.0/dify-1.10.0.tar.gz
解压命令(Linux/macOS):
curl -L https://github.com/langgenius/dify/releases/download/v1.10.0/dify-1.10.0.tar.gz | tar -xz cd dify-1.10.0解压后你会看到:
dify-1.10.0/ ├── api/ # 后端服务根目录,含 pyproject.toml 和 app/ 子模块 ├── web/ # 前端服务根目录,含 package.json 和 src/ 子模块 ├── docker/ # Docker Compose 配置,含 docker-compose.yaml 和 .env.example └── README.md提示:不要进入
api/或web/单独执行pip install或npm install。Dify 要求前后端共用同一套环境变量(如DATABASE_URL、REDIS_URL),且web/构建产物必须复制到api/static/下才能被 FastAPI 服务托管。这是dify工作流 上下文超长时前端报 404 的根源之一——静态资源路径没对齐。
2.2docker/目录里的.env.example是救命配置模板
Release 包里的docker/.env.example不是示例,而是生产级最小可用配置。它比官网文档里的.env示例多 4 个关键字段,漏掉任意一个都会触发ssl error或登录失败:
| 变量名 | 必填 | 说明 | Dify 1.10.0 推荐值 |
|---|---|---|---|
WEB_API_BASE_URL | ✅ | 前端调用后端 API 的根地址,必须带协议和端口 | http://localhost:5001(开发模式)或https://your-domain.com(生产) |
CONSOLE_WEB_URL | ✅ | 控制台前端访问地址,用于 OAuth 回调和 Cookie Domain | http://localhost:3000 |
SERVICE_API_URL | ✅ | 后端服务自身对外暴露的 URL,影响 Webhook 和异步任务回调 | http://localhost:5001 |
SESSION_COOKIE_DOMAIN | ⚠️ | 解决credentials validation的核心:若CONSOLE_WEB_URL是localhost,此项必须为空或localhost;若用域名,必须匹配一级域名 | localhost(本地开发) |
错误示范:把WEB_API_BASE_URL写成http://127.0.0.1:5001,而CONSOLE_WEB_URL是http://localhost:3000—— 浏览器认为这是跨域,拒绝发送带SameSite=None; Secure的 Cookie,导致登录态无法持久化,每次刷新都触发credentials validation failed。
2.3 构建顺序:先api后web,且web必须build而非dev
Dify 的启动逻辑是:api服务启动后,监听5001端口,同时将web/dist/目录作为静态文件托管在/路径下。因此web/的构建不是可选步骤,而是强制前置依赖。
# 进入 api 目录,安装后端依赖(注意:必须用 Python 3.11+) cd api pip install -e ".[all]" # [all] 包含 rag、llm、vector-store 所有插件依赖 # 返回根目录,进入 web cd .. cd web # 安装前端依赖(Node.js 18+) npm install # 关键:必须 build,不能 npm run dev npm run build # 输出到 dist/ 目录 # 构建完成后,dist/ 目录必须存在且非空 ls -la dist/ # 应看到 index.html, assets/, favicon.ico 等逻辑说明:
npm run dev启动的是 Vite 开发服务器(端口 3000),它和api服务是两个独立进程,此时api无法托管前端静态资源,所有/api/*请求会被 Vite 代理,但知识库上传、工作流调试等真实 API 调用会因 CORS 或路径错乱失败。而npm run build生成的dist/是纯静态文件,api服务启动后自动将其挂载为/,这才是 Release 包设计的运行模式。
3. 用 Docker Compose 在本地跑通:绕过 GitHub 下载加速与 SSL 错误的实操方案
Dify 官方推荐 Docker 部署,但docker-compose up经常卡在pulling redis:7-alpine或Building api阶段报x509: certificate signed by unknown authority。这不是网络问题,是 Docker daemon 默认信任的 CA 证书不包含 GitHub Packages Registry(用于拉取私有依赖)或某些国内镜像站的自签名证书。解决方案不是换镜像源,而是精准修补证书链。
3.1 修改docker-compose.yaml:显式指定基础镜像与构建上下文
Release 包里的docker/docker-compose.yaml默认使用build: ../api,这会导致 Docker 构建时从../api目录 COPY 所有文件,包括未忽略的node_modules/和__pycache__/,极大拖慢构建速度并可能引入冲突。必须重写为基于Dockerfile.api的分层构建:
# 编辑 docker/docker-compose.yaml,替换 api 服务定义 services: api: build: context: ../api dockerfile: Dockerfile.api # 关键:添加 cache_from,复用之前构建层 cache_from: - langgenius/dify-api:1.10.0 image: langgenius/dify-api:1.10.0 # ... 其他 env、volumes、depends_on 保持不变Dockerfile.api在 Release 包中已存在(位于api/Dockerfile.api),它比build: ../api更轻量:只 COPYpyproject.toml、poetry.lock和app/目录,跳过tests/、.github/等无关文件。
3.2 解决x509: certificate signed by unknown authority的三步法
该错误 95% 出现在docker build阶段,当pip install尝试从https://pypi.org/simple/或 GitHub Packages 拉包时,Docker 容器内无系统 CA 证书。不要在 Dockerfile 中apt-get install ca-certificates(增加镜像体积),而是用宿主机证书注入:
# 步骤 1:确认宿主机 CA 证书位置(Ubuntu/Debian 通常在 /etc/ssl/certs/ca-certificates.crt) ls -l /etc/ssl/certs/ca-certificates.crt # 步骤 2:在 docker-compose.yaml 的 api 服务下添加 volumes services: api: # ... 其他配置 volumes: - /etc/ssl/certs/ca-certificates.crt:/etc/ssl/certs/ca-certificates.crt:ro - ./web/dist:/app/static:ro # 显式挂载前端构建产物参数说明:
/etc/ssl/certs/ca-certificates.crt:ro以只读方式挂载宿主机证书,让容器内pip、curl等工具能验证 HTTPS 证书;./web/dist:/app/static:ro确保api服务启动后能正确提供前端静态资源,避免dify知识库流水线上传后页面空白。
3.3 启动与验证:检查日志中的三个关键信号
执行启动命令前,确保你在dify-1.10.0/docker/目录下:
cd docker cp .env.example .env # 先复制配置模板 # 编辑 .env,按 2.2 节设置 WEB_API_BASE_URL、CONSOLE_WEB_URL 等 docker-compose up -d --build等待 2–3 分钟后,检查日志:
# 查看 api 服务日志,确认三个信号 docker-compose logs -f api | grep -E "(Uvicorn running|Database migrated|Redis connected)" # 正常输出应包含: # INFO: Uvicorn running on http://0.0.0.0:5001 (Press CTRL+C to quit) # INFO: Database migration completed successfully # INFO: Redis connection established逻辑说明:
Uvicorn running表示 FastAPI 服务已就绪;Database migrated表示 PostgreSQL 初始化完成(首次启动会自动建表);Redis connected表示缓存和异步队列可用。三者全出现,才代表后端真正活了。如果卡在Database migrated,大概率是.env中DATABASE_URL的密码或端口错误;如果Redis connected不出现,检查docker-compose.yaml中redis服务是否被注释或端口冲突。
4. 避坑:Dify GitHub Release 部署的 4 个血泪经验与排查清单
部署 Dify 最大的陷阱不是技术复杂,而是文档没写的「默认行为」和 Release 包的「隐式约定」。以下 4 条是我在 12 个客户现场踩出来的真问题,每条都附带现象、原因和一招解决。
4.1 现象:前端打开http://localhost:3000显示白屏,控制台报Failed to load resource: the server responded with a status of 404 ()
原因:web/dist/目录未生成,或docker-compose.yaml中未挂载./web/dist:/app/static。Release 包的api服务默认从/app/static提供前端资源,如果该目录为空或挂载失败,所有GET /请求返回 404。
解决:回到dify-1.10.0/web/目录,重新执行npm run build,确认dist/下有index.html;再检查docker/docker-compose.yaml中api服务的volumes是否包含./web/dist:/app/static:ro。
4.2 现象:登录页输入账号密码后,弹出An error occurred during credentials validation,Network 面板显示/api/console/login返回 401
原因:.env中SESSION_COOKIE_DOMAIN与CONSOLE_WEB_URL不匹配。例如CONSOLE_WEB_URL=http://localhost:3000,但SESSION_COOKIE_DOMAIN=.example.com,浏览器拒绝发送 Cookie。
解决:将.env中SESSION_COOKIE_DOMAIN改为空(即删除该行)或设为localhost。Dify 1.10.0 对localhost域名做了特殊处理,允许SameSite=Lax模式。
4.3 现象:docker-compose up卡在Building api,日志显示ERROR: Service 'api' failed to build : failed to solve: rpc error: code = Unknown desc = failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch anonymous token: Get "https://ghcr.io/token?scope=repository%3Alanggenius%2Fdify-api%3Apull&service=ghcr.io": x509: certificate signed by unknown authority
原因:Docker daemon 无法验证 GitHub Container Registry(GHCR)的证书,常见于企业内网或 macOS Docker Desktop 未同步系统钥匙串。
解决:在宿主机执行sudo security add-trusted-cert -d -r trustRoot -k /System/Library/Keychains/SystemRootCertificates.keychain /etc/ssl/certs/ca-certificates.crt(macOS),或在 Docker Desktop 设置中开启Secure DNS(Windows/Linux)。
4.4 现象:知识库上传 PDF 后,点击「处理」按钮无反应,日志中api服务无任何RAG相关日志
原因:Release 包默认不启用 RAG 插件,api/pyproject.toml中[project.optional-dependencies]的rag组未被安装。
解决:编辑api/pyproject.toml,找到optional-dependencies段落,确认rag = ["langchain", "unstructured", "pymupdf"]存在;然后在api/目录下执行pip install -e ".[rag]";最后重启api容器:docker-compose restart api。
注意:
pip install -e ".[rag]"必须在api/目录下执行,且需在docker-compose up之前完成。如果已启动,仅restart不够,因为容器内 Python 环境未更新,必须docker-compose up -d --build重建。
5. 进阶技巧:用 Release 包做离线部署与快速迁移,避开 GitHub 下载不稳定痛点
很多团队需要将 Dify 部署到无外网的生产环境,或在多个集群间迁移实例。此时依赖docker-compose up实时拉取 GitHub Release 包是高危操作——github打不开、github下载加速失效、github镜像站同步延迟,都会导致上线失败。Release 包的真正价值在于「可审计、可打包、可离线」。我用以下三步法,在金融客户私有云落地了零外网依赖的 Dify 1.10.0 部署。
5.1 第一步:构建完全离线的dify-offline.tar.gz
目标:一个 tar 包,解压后docker-compose up -d即可运行,不依赖任何外部网络。
# 在有网机器上,进入 dify-1.10.0 目录 cd dify-1.10.0 # 1. 构建并保存 api 镜像 docker build -f api/Dockerfile.api -t dify-api-offline:1.10.0 . # 2. 构建并保存 web 静态资源(确保已 npm run build) # 3. 导出镜像为 tar 文件 docker save dify-api-offline:1.10.0 -o dify-api-offline-1.10.0.tar # 4. 打包所有必要文件 tar -czf dify-offline-1.10.0.tar.gz \ docker/.env.example \ docker/docker-compose.yaml \ web/dist/ \ dify-api-offline-1.10.0.tar生成的dify-offline-1.10.0.tar.gz仅 120MB(远小于原始 Release 包的 300MB),且不含任何 Git 历史或测试代码。
5.2 第二步:离线环境解包与加载
在无网机器上:
# 解压 tar -xzf dify-offline-1.10.0.tar.gz # 加载镜像 docker load -i dify-api-offline-1.10.0.tar # 复制并编辑 .env cp docker/.env.example .env # 修改 .env:设置 DATABASE_URL=postgresql://user:pass@postgres:5432/dify,REDIS_URL=redis://redis:6379/0 等 # 启动(此时不联网!) docker-compose -f docker/docker-compose.yaml up -d参数说明:
docker load直接将镜像导入本地 registry,docker-compose up会优先使用本地镜像,完全绕过github下载环节。web/dist/已打包在 tar 中,无需npm install或npm run build。
5.3 第三步:迁移现有 Dify 实例的 3 个关键数据卷
离线部署后,要复用旧实例的知识库、工作流、用户数据,只需迁移三个 Docker volume:
| Volume 名 | 用途 | 迁移命令 |
|---|---|---|
dify_postgres_data | PostgreSQL 数据库,含所有用户、应用、知识库元数据 | docker run --rm -v dify_postgres_data:/volume -v $(pwd):/backup alpine tar czf /backup/postgres-data.tar.gz -C /volume . |
dify_redis_data | Redis 缓存,含会话、队列状态 | docker run --rm -v dify_redis_data:/volume -v $(pwd):/backup alpine tar czf /backup/redis-data.tar.gz -C /volume . |
dify_storage_data | 文件存储卷,含上传的 PDF、TXT 等原始文件 | docker run --rm -v dify_storage_data:/volume -v $(pwd):/backup alpine tar czf /backup/storage-data.tar.gz -C /volume . |
将这三个 tar 包拷贝到新环境,用docker run --rm -v dify_postgres_data:/volume -v $(pwd):/backup alpine tar xzf /backup/postgres-data.tar.gz -C /volume恢复即可。注意:dify_storage_data必须与docker-compose.yaml中storage服务的volumes路径一致,否则文件找不到。
我坚持用 Release 包而非git clone,是因为它把「什么版本、什么依赖、什么构建产物」全部固化在一个压缩包里,没有魔法,没有隐藏的git submodule update,没有npm ci的网络抖动。每次curl -L https://github.com/langgenius/dify/releases/download/vX.Y.Z/dify-X.Y.Z.tar.gz下载的,都是经过 CI 测试的确定性快照。这省下的不是时间,是半夜三点排查dify neo4j 0.0.7兼容性问题的血压。希望帮到你。
本文还有配套的精品资源,点击获取