← 返回教程

Dify 本地部署前要想清楚的六件事

Dify 的部署文档写得不错,跟着走大概率能装起来。所以这篇不重复讲怎么装——讲装之前该定什么。

我们见过太多情况:环境搭起来了,跑了两周发现方向不对,推倒重来。问题不在部署命令,在部署之前的六个决定。

具体的部署命令、配置项和版本要求请以 Dify 官方文档为准,它们会随版本变化。这篇讲的是决策,不是操作步骤。

一、先定:你到底为什么要自部署

这个问题看起来多余,但答错的人不少。

如果答案是「数据不能出内网」——那你要接着回答第二个问题:模型用什么?这两件事必须一起定,理由下一节讲。

如果答案是「省钱」——先算清楚。自部署省掉的是平台的服务费,但换来了服务器成本、运维人力、升级维护的时间。用量小的时候,这笔账往往是不划算的。

如果答案是「要改代码」——那要确认你打算改的部分是否真的需要改源码。很多需求通过 API 对接就能解决,动源码会让后续升级变得痛苦。

如果答案是「甲方要求」——那要问清楚甲方到底在要求什么。「私有化部署」这四个字在不同甲方嘴里含义差很远,有的只是要求装在他们的服务器上,有的要求全链路不能碰公网。这两种的成本差好几倍。

二、最要紧的一条:自部署 ≠ 数据不出网

这是整篇里最重要的一段。

自部署解决的是「应用跑在哪」,不解决「数据去哪」。

你把 Dify 装在自己的服务器上,但在里面配置的是在线大模型的 API。那么每一次用户提问、以及从知识库里检索出来的那些文档片段,都会打包发送给模型厂商。

你的服务器只是个中转站。数据照样出网。

要做到真正的全链路不出内网,模型也必须是本地部署的开源模型。这意味着:

  • 需要 GPU,显存要够跑得动你选的模型
  • 要按并发人数估算硬件规模
  • 模型效果通常不如顶尖的在线模型,这是要接受的代价

所以第二个决定是:你是「应用私有化 + 在线模型」,还是「全链路私有化」。 前者硬件投入低,但严格来说数据是出网的;后者才是甲方合规部门想要的那个东西。

在方案阶段就要把这两条路摆给客户看,让他们知道各自的代价。等到验收时被问「你们调的哪家 API」,就很被动了。

三、硬件怎么估

没有一个放之四海的配置表,因为它取决于三个变量:

要不要跑本地模型。 这是最大的分水岭。只跑 Dify 本身(应用层),资源需求相对温和;要在同一批机器上跑大模型推理,那就是完全另一个量级,GPU 是硬门槛。

多少人同时用。 十个人内部试用和几百人日常使用,需要的资源差别很大。而且要按峰值估,不是按平均。

知识库有多大。 文档量决定了向量存储的规模和检索时的资源消耗。几百份文档和几十万份文档,不是一个方案。

建议的做法:先按最小可用配置搭一套验证需求,把真实的使用模式摸清楚,再根据实测数据扩容。一上来就按想象中的峰值采购硬件,浪费的概率很高。

四、版本怎么选、怎么升

自部署项目最容易被忽视的长期成本,是升级。

别默认追最新版。 开源项目迭代快,最新版可能带着还没被充分验证的问题。生产环境用稍微滞后一点的稳定版本,通常更省心。

升级前一定要看变更说明。 涉及数据库结构变化的版本,升级路径可能不是简单地换个镜像。

升级窗口要提前和客户约。 这一点在做项目时特别重要:交付的时候要说清楚,后续升级是否包含在服务范围内、怎么安排。不说清楚的话,一年后甲方觉得你该免费管,你觉得那是额外工作,矛盾就来了。

数据备份要在升级之前。 这句是废话,但每年都有人因为没做而重来。

五、许可这一条不能跳过

Dify 的许可是改版 Apache 2.0,在标准条款外加了附加条件。要点:

  • 明确允许商业化使用,包括作为应用开发平台交付给企业——对做项目的人来说这是好消息
  • 运营多租户环境移除或修改前端控制台的 LOGO 与版权信息这两种情况,需要单独获得商业授权

所以:给甲方部署一套他们内部用的系统,正常收项目费,这条路是通的;但想把它白牌化成自己公司的产品去卖,就得先跟官方谈。

这跟 n8n 的许可差别很大——后者只允许自己内部使用。同样是能自部署的工具,能不能拿去接活完全不同。详细对比见开源 Agent 平台的许可证差别

六、想清楚谁来维护

自部署把运维责任接到了自己手上。

服务器挂了谁处理、磁盘满了谁清、安全补丁谁打、模型 API key 过期了谁换——这些在托管服务里是别人的活,自部署之后就是你的活了。

如果是给客户做项目,这件事必须写进合同:运维范围是什么、响应时间怎么算、超出范围怎么收费。含糊过去的结果通常是:出了任何问题客户都找你,而你没法收钱。

如果是自己团队用,那要确认团队里真的有人愿意管这件事,而不是「先装上再说」。

部署之后最容易被忽略的三件事

环境搭好、跑通了,项目看起来完成了。但下面三件事不做,麻烦会在几个月后集中出现。

一、备份要包含三样东西,缺一不可。

应用的配置、数据库、以及知识库的向量数据。很多人只备份了数据库,恢复的时候发现知识库还得重新导入一遍——如果原始文档还在手上,那是重跑一次的事;如果原始文档也丢了,那就真没了。

备份还要验证能恢复。没试过恢复的备份,等于没有备份,这句老话在这里同样成立。

二、要能看出「它还活着」。

服务挂了、容器没起来、磁盘满了——这些情况下系统不会报错给你看,它只是不响应了。而如果这套系统是甲方内部用的,你可能要等到甲方打电话来才知道。

最低限度做一个定时的可用性检查,挂了发个消息到群里。这件事成本很低,能避免的尴尬很大。

三、模型 API key 的有效期和额度。

用在线模型的话,key 会过期、额度会用完。这两件事发生时,表现是「系统突然答不上来了」,而不是一个清晰的报错。

如果是给客户部署的,这件事要提前约定清楚:key 是谁的、额度谁充、用完了谁负责。这是最容易扯皮的地方之一——甲方觉得系统是你交付的所以你该管,你觉得调用费用本来就该甲方出。方案阶段写清楚,比事后解释容易得多。

一个建议的推进顺序

  1. 先用云端版验证需求。 花很少的时间确认这个方案到底能不能解决问题,别一上来就搭环境。
  2. 需求确认后,再定部署形态。 这时候你已经知道要多少人用、知识库多大、效果够不够。
  3. 先搭最小环境跑真实数据。 用真实文档、真实问题测,而不是用理想化的样例。
  4. 摸清资源消耗后再定最终配置。
  5. 上线前把运维和升级的约定写清楚。

跳过第一步直接搭环境,是我们见过最常见的浪费。

如果你在判断这个项目该用平台还是该定制开发,可以先看低代码 Agent 平台的能力边界,或者直接找我们聊