Dify离线安装包部署指南:tar.gz一键部署实战

发布时间:2026/10/20 11:42:01
Dify离线安装包部署指南:tar.gz一键部署实战 简介本资源为Dify开源低代码AI应用开发平台的官方安装包面向AI开发者、后端工程师及希望快速搭建LLM应用的中高级技术用户解决本地部署AI工作流平台、定制化开发智能体Agent与集成RAG能力的核心需求。压缩包为zip格式共2000个文件主体包含1337个Python源码文件核心服务逻辑与API模块、366个JSON/YAML配置文件环境变量、模型参数与工作流定义、116个CSS与84个JS前端资源管理控制台界面以及38个Markdown文档含快速启动指南与API说明整体大小20.25MB。目前已有2827人学习下载资源结构完整覆盖后端服务、前端界面、配置模板与说明文档四大模块解压即得可运行的dify-main主程序包配合官方文档可完成从环境准备、服务启动到知识库接入的全流程部署。1. Dify 官方安装包别急着 clone main 分支先看清这三类安装包的适用边界你是不是也试过在 GitHub 上搜dify点开仓库首页就直接git clone https://github.com/langgenius/dify.git然后照着 README 里那行docker-compose up -d就往下冲结果跑起来发现 UI 打不开、API 返回 502、或者连web容器都起不来——不是缺.env不是端口被占而是你根本没意识到Dify 官方 GitHub 仓库里压根不托管任何可直接运行的「安装包」。所谓“dify官方安装包”其实是社区对三种不同交付形态的统称源码需构建、Docker 镜像含预编译产物、以及 GitHub Releases 页上打包好的dify-x.x.x.tar.gz离线部署包。这三者定位完全不同源码适合二次开发调试Docker 镜像是生产环境主流选择而 tar 包才是真·开箱即用的「安装包」——它已内置 Nginx、预编译前端、初始化数据库脚本甚至自带install.sh。装错类型轻则浪费两小时重配环境重则因 Node.js 版本/Python 依赖冲突卡死在npm run build或pip install -r requirements.txt。本文专讲tar 包离线部署方案面向需要快速验证功能、无公网拉镜像条件、或需在国产化信创服务器如麒麟 V10 鲲鹏上落地的运维和交付工程师。不讲 Docker Compose 编排细节不讲 Kubernetes 部署只聚焦「下载 → 解压 → 配置 → 启动 → 验证」这一条最短路径。2. 下载与校验从 GitHub Releases 页面精准抓取 tar 包绕过源码陷阱Dify 的发布策略很明确所有正式版v1.0.0均通过 GitHub Releases 发布且每个版本提供至少两类二进制分发物dify-x.x.x.tar.gzLinux x86_64 离线包和dify-x.x.x-arm64.tar.gzARM64 架构包。注意不要下载Source code (tar.gz)或Source code (zip)——那是源码归档不是安装包解压后是pyproject.toml和frontend/目录不是bin/和conf/。下面分三步实操2.1 定位正确 Release 页面与文件名规则打开浏览器访问https://github.com/langgenius/dify/releases向下滚动至最新 Tag如v1.3.2找到 Assets 区域。你会看到类似以下文件名dify-1.3.2.tar.gz主安装包x86_64dify-1.3.2-arm64.tar.gzARM64适配飞腾、鲲鹏等dify-1.3.2-checksums.txt校验文件必下提示文件名不含linux、ubuntu等字样这是故意为之——该 tar 包为纯静态二进制Shell 脚本组合不绑定发行版CentOS 7、Ubuntu 22.04、openEuler 22.03 均可运行。2.2 使用 curl wget 安全下载推荐命令在目标服务器执行替换v1.3.2为实际版本# 创建专用目录 mkdir -p /opt/dify-install cd /opt/dify-install # 下载安装包x86_64 curl -L -O https://github.com/langgenius/dify/releases/download/v1.3.2/dify-1.3.2.tar.gz # 下载校验文件 curl -L -O https://github.com/langgenius/dify/releases/download/v1.3.2/dify-1.3.2-checksums.txt为什么用curl -L因为 GitHub Releases 的 URL 是重定向链接-L自动跟随跳转避免404。wget也可但需加--no-check-certificate部分内网环境证书链不全而curl更稳定。2.3 强制校验 SHA256防传输损坏与中间篡改校验不是形式主义。我见过两次因内网代理缓存导致 tar 包末尾字节丢失tar -xf解压后bin/start.sh权限异常报Permission denied。必须校验# 检查 checksum 文件是否完整应含 sha256 行 grep dify-1.3.2.tar.gz dify-1.3.2-checksums.txt # 输出示例e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 dify-1.3.2.tar.gz # 执行校验注意空格分隔 sha256sum -c (grep dify-1.3.2.tar.gz dify-1.3.2-checksums.txt) # 成功输出dify-1.3.2.tar.gz: OK # 失败则立即停止重新下载(grep ...)是 Bash 进程替换语法将grep结果当作文件传给sha256sum -c比先sed提取再cat更健壮。若提示command not found: sha256sum说明系统无 coreutils极少见用openssl dgst -sha256 dify-1.3.2.tar.gz替代手动比对值。2.4 解压并确认目录结构关键检查点校验通过后解压tar -xf dify-1.3.2.tar.gz ls -F # 应看到bin/ conf/ data/ frontend/ logs/ scripts/ start.sh*重点核对四个核心目录bin/含dify-apiGo 后端二进制、dify-web前端服务二进制conf/含application.yaml主配置、database.yamlDB 配置data/空目录启动后自动创建 SQLite 文件或挂载 PostgreSQL 数据卷start.sh入口脚本封装了权限检查、环境预检、服务启停逻辑若解压后出现dify/顶层目录即dify/dify-1.3.2/...说明你误下了源码包立刻rm -rf dify-1.3.2.tar.gz并重下正确 tar 包。3. 配置环境修改三个 YAML 文件避开 90% 的启动失败tar 包解压即得可运行结构但默认配置面向本地开发机SQLite 8080 端口生产环境必须调整。核心配置集中在conf/目录下三个 YAML 文件修改前务必备份cd /opt/dify-install cp -r conf conf.bak.$(date %Y%m%d)3.1conf/application.yaml服务端口、域名、基础安全这是 Dify 的主配置文件控制 API、Web 服务行为。需改三项# conf/application.yaml server: host: 0.0.0.0 # 必须设为 0.0.0.0否则仅 localhost 可访问 port: 8080 # 生产建议改为 80需 root或 8080普通用户 cors: enabled: true allow_origins: [*] # 开发期可设为 [*]生产务必填具体域名如 [https://ai.example.com] service: api_url: http://localhost:8080 # 前端调用后端的地址若前端与后端同机保持 localhost web_url: http://localhost:8080 # Web 服务自身地址用于生成邮件链接等 security: secret_key: your-32-byte-secret-key-here # 必须修改32 字节随机字符串 jwt: secret: your-jwt-secret-here # 必须修改同样 32 字节secret_key和jwt.secret是加密密钥绝不能留默认值。生成方法Linux# 生成 32 字节 Base64 字符串含大小写字母数字符号 openssl rand -base64 32 | tr -d \n; echo # 示例输出Xk9zQmFzZTY0RW5jb2RpbmdJc0Z1bkFzV2VsbA注意tr -d \n删除换行符确保单行输出。复制结果粘贴到 YAML 中前后不加引号YAML 字符串无需引号除非含空格或特殊字符。3.2conf/database.yaml数据库连接方式选择SQLite vs PostgreSQLDify 支持 SQLite默认单机轻量和 PostgreSQL生产推荐。二者不可混用选其一选项 A继续用 SQLite适合测试/POCtype: sqlite path: ../data/dify.db # 路径为相对 conf/ 目录指向 data/ 下无需额外安装数据库但注意SQLite 不支持并发写入高负载时可能锁表。选项 B切换 PostgreSQL生产必备type: postgresql host: 127.0.0.1 # 若 PG 在本机用 127.0.0.1非 localhost避免走 Unix socket port: 5432 database: dify username: dify_user password: your_strong_password ssl_mode: disable # 内网环境可 disable若 PG 启用 SSL设为 require提示PostgreSQL 需提前创建数据库和用户。执行以下 SQL以postgres用户登录CREATE DATABASE dify ENCODING UTF8 LC_COLLATEen_US.UTF-8 LC_CTYPEen_US.UTF-8; CREATE USER dify_user WITH PASSWORD your_strong_password; GRANT ALL PRIVILEGES ON DATABASE dify TO dify_user;3.3conf/llm.yaml大模型后端接入可选但强烈建议配置Dify 默认使用text-davinci-003已弃用启动后会报Model not found。必须配置可用 LLM# conf/llm.yaml provider: openai # 支持 openai, azure, anthropic, ollama 等 openai: api_key: sk-... # OpenAI API Key base_url: https://api.openai.com/v1 # 可选自建代理时改为此地址 model: gpt-3.5-turbo # 必须是有效模型名若无 OpenAI Key可临时用 Ollama本地运行 LLMprovider: ollama ollama: base_url: http://localhost:11434 # Ollama 默认地址 model: qwen:7b # 需先 ollama pull qwen:7b注意Ollama 必须在 Dify 启动前运行且base_url必须可被 Dify 进程访问若 Dify 在 Docker 内需用宿主机 IP 如http://172.17.0.1:11434。3.4 配置文件常见错误排查现象启动后logs/api.log报failed to connect to database原因database.yaml中host写成localhost而 PostgreSQL 监听的是127.0.0.1或反之或密码错误。解决用psql -h 127.0.0.1 -U dify_user -d dify手动测试连通性。现象Web 页面空白浏览器 Console 报Failed to load resource: net::ERR_CONNECTION_REFUSED原因application.yaml中service.api_url指向了错误地址如http://localhost:8080但服务监听0.0.0.0:8080Nginx 反向代理未配。解决确认api_url与实际访问域名一致如部署在https://ai.example.com则此处填https://ai.example.com。现象start.sh执行报permission denied原因start.sh或bin/下二进制文件无执行权限Windows 传文件可能丢权限。解决chmod x start.sh chmod x bin/*。4. 启动与守护用 systemd 管理服务告别 nohup 进程丢失解压、配置完成后切忌用./start.sh手动启动——它只是前台进程SSH 断开即终止。生产环境必须用systemd守护实现开机自启、崩溃自拉起、日志统一管理。4.1 编写 systemd service 文件创建/etc/systemd/system/dify.service[Unit] DescriptionDify AI Application Platform Afternetwork.target postgresql.service # 若用 PG添加此行依赖 StartLimitIntervalSec0 [Service] Typesimple Userroot # 或专用用户如创建 useradd -r -s /bin/false dify WorkingDirectory/opt/dify-install ExecStart/opt/dify-install/start.sh Restartalways RestartSec10 KillSignalSIGTERM TimeoutStopSec60 LimitNOFILE65536 # 环境变量可选覆盖 application.yaml 中的 env EnvironmentDIFY_ENVproduction [Install] WantedBymulti-user.target关键参数说明Userroot若用 SQLiteroot 即可若用 PostgreSQL建议创建专用用户dify并赋权data/和logs/目录。Restartalways进程退出即重启RestartSec10控制间隔。LimitNOFILE65536提高文件描述符上限避免高并发时too many open files。4.2 加载并启用服务# 重载 systemd 配置 systemctl daemon-reload # 启用开机自启 systemctl enable dify.service # 启动服务 systemctl start dify.service # 查看状态关键 systemctl status dify.service # 正常应显示 active (running)且无红色 error若status显示failed立即执行# 查看最近 100 行日志最有效排错手段 journalctl -u dify.service -n 100 -f # 或查看 Dify 自身日志 tail -n 50 /opt/dify-install/logs/api.log tail -n 50 /opt/dify-install/logs/web.log4.3 防火墙与端口放行CentOS/Ubuntu 通用Dify 默认监听8080端口需放行# CentOS 7/8 (firewalld) firewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload # Ubuntu (ufw) ufw allow 8080/tcp ufw reload若改用80端口需Userroot普通用户无法绑定 1-1023 端口且确保无 Nginx/Apache 占用。4.4 常见问题systemd 启动失败的三大玄学原因现象systemctl status显示codeexited, status203/EXEC原因start.sh路径错误或start.sh第一行#!/bin/bash损坏Windows 编辑器保存为 CRLF。解决file /opt/dify-install/start.sh检查行尾符用dos2unix start.sh修复确认ExecStart路径绝对准确。现象服务启动后立即退出journalctl显示cannot execute binary file原因CPU 架构不匹配。x86_64 服务器下载了arm64.tar.gz或反之。解决uname -m查架构file bin/dify-api确认二进制架构重下对应 tar 包。现象systemctl start成功但curl http://localhost:8080返回Connection refused原因application.yaml中server.host仍为127.0.0.1未改为0.0.0.0。解决修改配置后必须systemctl restart dify.servicereload不生效。5. 验证与连通性测试五步确认 Dify 真正跑通不止是页面能打开启动systemctl start dify.service后看到active (running)不代表成功。Dify 是多进程架构API Web Celery Worker需逐层验证。以下是我在某高校 AI 实验室部署时总结的五步黄金验证法每步失败都对应明确修复路径5.1 步骤一确认 API 服务 HTTP 健康检查Dify API 提供/health端点返回 JSONcurl -s http://localhost:8080/health | jq . # 正常输出 # { # status: ok, # timestamp: 2024-06-15T08:23:45.123Z, # version: 1.3.2 # }若返回curl: (7) Failed to connect to localhost port 8080: Connection refused说明dify-api进程未启动检查logs/api.log是否有panic或failed to bind。若返回{status:error}说明数据库连接失败或迁移未完成检查logs/api.log中Migrating database相关日志。5.2 步骤二验证 Web 服务静态资源加载Dify Web 服务dify-web负责提供前端 HTML/CSS/JS。直接请求根路径curl -I http://localhost:8080/ # 应返回 HTTP 200且 Header 含 # Content-Type: text/html; charsetutf-8 # X-Content-Type-Options: nosniff若返回HTTP 404检查conf/application.yaml中server.port是否与curl端口一致若返回HTTP 502说明dify-web进程崩溃查logs/web.log。5.3 步骤三检查数据库初始化状态Dify 启动时会自动执行数据库迁移migration。验证是否完成# 若用 SQLite sqlite3 /opt/dify-install/data/dify.db .tables | grep -E (account|app|dataset) # 应输出多个表名如 account, app, app_model_config # 若用 PostgreSQL psql -U dify_user -d dify -c \dt | grep -E (account|app|dataset)若无表说明迁移失败。常见原因database.yaml密码错误、PG 未启动、或dify-api进程因权限无法写data/目录。修复后必须重启服务systemctl restart dify.service。5.4 步骤四测试 LLM 接口连通性关键业务验证登录 Web 界面http://your-server-ip:8080注册账号后进入「Settings Model Providers」点击「Test Connection」。若失败按以下顺序排查conf/llm.yaml中provider和对应字段是否拼写正确openai非open_aiAPI Key 是否过期或配额用尽OpenAI 控制台查看服务器能否访问 LLM 服务curl -v https://api.openai.com/v1/models -H Authorization: Bearer sk-...若用 Ollamacurl http://localhost:11434/api/tags应返回模型列表。5.5 步骤五模拟真实对话流终极验证创建一个新应用App选择「Text Completion」模板输入提示词Prompt如你好请用中文介绍你自己点击「Run」。观察页面是否显示Thinking...后返回响应logs/api.log中是否有llm.invoke和llm.response日志logs/web.log中是否有200 POST /chat-messages。若卡在Thinking...大概率是 LLM 配置问题或网络超时llm.yaml中可加timeout: 300提高超时时间。从那以后我每次部署 Dify都强制走一遍这五步health→curl -I /→sqlite3 .tables→Test Connection→Run。少一步上线后半夜就会被电话叫醒。希望帮到你。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询