NAS装上Dify:文档不出门,模型随你选
你的笔记、工作文档、客户资料,平时散落在飞书、本地 PDF、微信群聊天记录里。想查某个信息,得翻来翻去;更头疼的是,这些资料里有很多不能外传的内容,交给云端 AI 处理,心里总不踏实。
Dify 就是一个解决方案:把它部署在 NAS 上,24 小时运行,你的文档永远留在本地,模型可以是云端的 DeepSeek、通义千问,也可以是本地跑的 Ollama——数据不出 NAS,问答靠的是你选择的「大脑」。
下面就来一步步讲解在 NAS 上部署 Dify,以及它能为你带来什么价值。

Dify 是什么?
Dify 是一个 开源的 AI 应用开发平台,GitHub 上已突破 6 万星,社区非常活跃。把它想象成「AI 乐高」——它把各种 AI 能力模块化,你无需写代码,通过拖拽就能搭出各种 AI 应用。
它最核心的能力有三项:
1. RAG 知识库 把文档丢进去,Dify 会自动切分、向量化,接着 AI 能基于你的私有文档回答问题。产品手册、项目文档、读书笔记,都能变成一个「懂你」的知识库。
2. Agent 工作流 可以把多个 AI 操作串成一条流水线——例如「读取文档 → 提取关键信息 → 生成摘要 → 发送到邮箱」,一条流程自动跑完,中间不用你插手。
3. 文档分析 把 PDF、Word 文档拖进去,AI 直接帮你总结、提取要点、回答相关问题,比自己一页页翻阅高效太多。
而 Dify 最核心的优势是 模型接入的灵活性:它不是某个模型的专属客户端,而是一个模型调度中心。云端可以接 DeepSeek、通义千问、智谱 ChatGLM 等国内主流模型;本地也能通过 Ollama 对接开源模型。同一个 Dify 实例可以同时配置多种模型,不同场景自由切换。

为什么要在 NAS 上部署?
Dify 有云版本,为什么还要折腾在 NAS 上?
第一,24 小时在线。 NAS 本来就是常年不关机的设备,部署在上面,Dify 也随之 7×24 小时运行。半夜想查个文档、问个问题,随时打开就能用,不用等云服务排队。
第二,数据本地化处理。 你的文档存在 NAS 的硬盘里,知识库的构建、文档的拆分向量化全部在本地完成。只有在提问时才会把文本发送给模型 API。客户资料、公司文档、个人隐私,原始数据一个字节都不会离开你的 NAS。

手把手 Docker 部署教程
下面是在 NAS 上部署 Dify 的完整步骤,跟着走就行。
第一步:环境准备
- NAS 已经安装了容器管理套件(如 Docker、Container Station 等),7.x 自带,6.x 需要在应用中心或套件中心手动安装
- NAS 至少有 8GB 内存(Dify 全家桶很吃内存,4GB 根本不够用,8GB 起步比较稳)
- 确保 NAS 能正常访问外网(用于拉取镜像)
登录 NAS 后台,打开容器管理套件,确认 Docker 服务正常运行。

第二步:创建项目目录、配置文件并修改配置
通过 SSH 登录 NAS(或用 NAS 自带的终端),执行:
# 创建 Dify 的目录
mkdir -p /volume1/docker/dify
# 进入目录
cd /volume1/docker/dify
然后在 /volume1/docker/dify/ 目录下创建两个文件:
docker-compose.yaml:
services:
api:
image: langgenius/dify-api:latest
restart: always
environment:
MODE: api
env_file: .env
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
volumes:
- ./volumes/app/storage:/app/api/storage
ports:
- 「5002:5001」
networks:
- default
web:
image: langgenius/dify-web:latest
restart: always
environment:
CONSOLE_API_URL: http://api:5001
APP_API_URL: http://api:5001
ports:
- 「3000:3000」
networks:
- default
worker:
image: langgenius/dify-api:latest
restart: always
environment:
MODE: worker
env_file: .env
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
volumes:
- ./volumes/app/storage:/app/api/storage
networks:
- default
db:
image: postgres:15-alpine
restart: always
environment:
POSTGRES_USER: ${DB_USERNAME:-postgres}
POSTGRES_PASSWORD: ${DB_PASSWORD:-difyai123456}
POSTGRES_DB: ${DB_DATABASE:-dify}
volumes:
- ./volumes/db/data:/var/lib/postgresql/data
healthcheck:
test: [「CMD」, 「pg_isready」, 「-U」, 「${DB_USERNAME:-postgres}」]
interval: 1s
timeout: 3s
retries: 60
networks:
- default
redis:
image: redis:6-alpine
restart: always
volumes:
- ./volumes/redis/data:/data
command: redis-server --requirepass ${REDIS_PASSWORD:-difyai123456}
healthcheck:
test: [「CMD-SHELL」, 「redis-cli -a ${REDIS_PASSWORD:-difyai123456} ping | grep -q PONG」]
networks:
- default
weaviate:
image: weaviate/weaviate:1.27.0
restart: always
volumes:
- ./volumes/weaviate:/var/lib/weaviate
environment:
QUERY_DEFAULTS_LIMIT: 25
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 「false」
PERSISTENCE_DATA_PATH: /var/lib/weaviate
DEFAULT_VECTORIZER_MODULE: none
CLUSTER_HOSTNAME: 「node1」
ports:
- 「8080:8080」
networks:
- default
networks:
default:
driver: bridge
.env:
# 核心服务 URL
CONSOLE_API_URL=http://api:5001
APP_API_URL=http://api:5001
SERVICE_API_URL=http://api:5001
# 注意:请将以下地址修改为你的 NAS 实际局域网 IP(例如 http://192.168.1.100:3000)
CONSOLE_WEB_URL=http://<你的 NAS 内网 IP>:3000
APP_WEB_URL=http://<你的 NAS 内网 IP>:3000
# 数据库
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
DB_DATABASE=dify
DB_HOST=db
DB_PORT=5432
# Redis
REDIS_PASSWORD=difyai123456
REDIS_HOST=redis
REDIS_PORT=6379
# 密钥(必须填写,不能为空。在终端执行 openssl rand -base64 42 生成)
SECRET_KEY=your_secret_key_here
# 向量数据库
VECTOR_STORE=weaviate
WEAVIATE_ENDPOINT=http://weaviate:8080
# 日志
LOG_LEVEL=INFO
注意:以上配置文件是简化版,仅包含 Dify 运行所需的核心服务(API、Web、Worker、PostgreSQL、Redis、Weaviate)。Dify 官方完整版还支持 MySQL、Qdrant、Milvus 等多种数据库,以及代码沙箱(sandbox)、Nginx 反向代理、HTTPS 自动证书等功能。NAS 资源有限,推荐用这个精简配置即可。如果你后续需要代码执行类工作流节点或插件功能,请参考官方完整 docker-compose。
然后请打开 .env 文件,根据你的实际情况修改以下参数:
DB_PASSWORD和REDIS_PASSWORD:改成你自己的强密码SECRET_KEY:在终端执行openssl rand -base64 42生成随机密钥后填入(必须填写,不能为空)CONSOLE_WEB_URL和APP_WEB_URL:如果你要从局域网其他设备访问,把<你的 NAS 内网 IP>改成你的 NAS 内网 IP(比如http://192.168.1.100:3000)
第三步:启动服务
配置改好之后,一条命令启动:
cd /volume1/docker/dify
docker compose up -d
第一次启动需要拉取镜像,大概需要 10‑20 分钟,取决于你的网速。耐心等一等,喝杯咖啡。
启动完成后,检查一下所有容器是否正常运行:
docker compose ps
你应该能看到以下几个核心服务都是 Up 状态:
- api — API 服务(Flask 后端)
- web — 前端界面(Next.js)
- worker — 后台异步任务处理
- db — PostgreSQL 数据库
- redis — 缓存服务
- weaviate — 向量数据库(用于知识库)
如果某个容器状态是 Exited 或 Restarting,用 docker compose logs [服务名] 查看日志排查。
第四步:访问 Web 界面
打开浏览器,输入 http://你的 NAS 内网 IP:3000(比如 http://192.168.1.100:3000)。
第一次访问会让你创建管理员账号,按提示填好用户名、邮箱、密码就行了。
登录之后,你会看到 Dify 的主界面。到这里,部署就全部完成了!

第五步:配置模型供应商
部署完成后进 Dify 界面,第一件事就是配置模型供应商。点击右上角头像 → 设置 → 模型供应商,这里可以添加各种模型:
云端模型(推荐先用这个):
- 选择你要用的模型供应商(DeepSeek、通义千问、智谱 ChatGLM 等)
- 填入对应的 API Key
- 保存后即可在创建应用时使用
本地模型(需要 NAS 配置较高):
- 如果你已经在 NAS 上部署过 Ollama,在 Dify 中添加 Ollama 供应商
- API 基础地址填:
http://你的 NAS 内网 IP:11434 - 保存后选择要用的模型
注意:NAS 跑本地模型会比较吃力。4GB 内存的机型基本跑不动 7B 以上参数的模型,16GB 内存的机型跑 7B 也只能勉强跑。建议主力使用云端模型,本地模型作为备选或用于轻量级嵌入向量。

三个实用场景
部署好了,能干啥?给你三个马上就能用起来的场景。
场景一:私有知识库问答
这是我日常用得最多的功能。
比如你有一堆产品文档、操作手册、会议纪要,在 Dify 里创建一个「知识库」,把这些文档批量上传上去。Dify 会自动帮你拆分、建立索引。
然后创建一个「聊天助手」类型的应用,关联这个知识库。以后你就可以直接问它:「XX 产品的安装步骤是什么?」「上次会议讨论的那个方案具体内容是啥?」
它会从你的文档里找到相关内容,组织好语言回答你。比起自己翻文档找答案,效率提升不止一个档次。
重点是——这些文档始终在 NAS 本地,没有上传到任何第三方。
场景二:家庭学习知识库——错题本与课程知识的智能管理
有了 Dify,你可以为孩子建立一个专属的学习知识库,把课本笔记、错题本、课堂讲义、甚至课外阅读笔记都统一存放在 NAS 上。当孩子遇到不会的题目或有疑问时,只需在 Dify 中提问:「这道数学题怎么解?」或「这个生词是什么意思?」——Dify 会从你上传的资料中快速定位相关内容,并给出易于理解的讲解。
你还可以让 Dify 帮忙自动整理错题:每次考试后,将错题扫描或拍照上传,Dify 通过 OCR(需额外配置)或直接文本输入,将错题归类到知识库中,并标注所属章节和错误原因。复习时,直接调出「错题本」进行有针对性的练习,大幅提升学习效率。
此外,你可以设置定期复习提醒(通过工作流或简单的提示),让孩子在周末自动回顾当周的错题和重点知识,形成闭环学习。
场景三:自动化工作流
这个稍微进阶一点,但一旦搭好,能省不少重复劳动。
举个例子:我每周都要处理一堆周报。在 Dify 里搭一个工作流:
- 输入节点 — 接收我上传的原始素材
- LLM 节点 1 — 提取关键数据和进展
- LLM 节点 2 — 按照固定模板格式化
- 输出节点 — 生成完整的周报文档
以后每周只需要把素材丢进去,一键就能生成格式统一的周报。
你还可以搭更复杂的:自动翻译、自动分类邮件、批量处理图片描述、定期汇总某个领域的新闻等等。Dify 的可视化工作流编辑器,拖拖拽拽就能搭出来,不需要写代码。

Dify 能接哪些模型?
Dify 最核心的卖点不是「本地跑模型」,而是 模型接入的灵活性。同一个 Dify 实例里,你可以同时配置多种模型供应商,根据不同场景选用不同的模型。
云端模型(需要 API Key):
- DeepSeek — 推理能力强,中文理解出色,适合高质量对话和复杂任务
- 通义千问(DashScope) — Qwen-Max、Qwen-Plus,中文能力最强,日常问答一把好手
- 智谱 ChatGLM — 国产大模型代表,API 调用稳定,性价比高
- Kimi(Moonshot) — 擅长长文本分析,8K‑200K 上下文,读合同、研报很合适
- 百度文心一言 — ERNIE 系列,中文理解和生成能力强
本地模型(不需要 API Key,数据完全不出门):
- Ollama — 对接本地运行的开源模型,如 Qwen、Llama、InternLM 等
- OpenAI 兼容接口 — 任何支持 OpenAI API 格式的本地模型服务(比如 vLLM、LM Studio)
关键用法:
- 知识库的 embedding 模型可以用轻量级的本地模型(便宜、快速)
- 对话推理用 DeepSeek 或通义千问 Max(中文效果好)
- 长文档摘要用 Kimi(上下文窗口大)
- 敏感数据用本地模型,不敏感的用云端模型
不同场景用不同的模型,Dify 就是那个调度中心。
注意:NAS 跑本地模型会比较吃力。4GB 内存的机型基本跑不动 7B 以上参数的模型,16GB 内存的机型跑 7B 也只能勉强跑。如果你 NAS 配置不高,建议把本地模型作为备选,主力用云端模型。

一些踩坑提醒
最后分享几个部署过程中可能遇到的问题:
1. 内存不够 Dify 全家桶(API + Web + Worker + 数据库 + Redis + 向量数据库)运行时占用约 4‑6GB 内存。考虑到 NAS 系统本身和其他套件、向量构建时的内存峰值,建议 8GB 起步,16GB 更稳妥。如果你的 NAS 只有 4GB 且还在跑其他服务,大概率会卡。
2. 首次启动慢 第一次拉镜像需要下载好几个 GB 的数据,耐心等。如果网速慢,可以考虑提前手动拉镜像。
3. 端口冲突 群晖 DSM 默认 HTTP 管理端口是 5000,HTTPS 是 5001。Dify 的 API 服务默认监听 5001 端口,所以配置文件里已经把宿主机映射改成了 5002(「5002:5001」),避免了冲突。如果你的 NAS 上其他服务占用了 3000 或 8080 端口,也需要相应调整。
4. Ollama 连接问题 如果 Dify 容器连不上 Ollama,注意用 NAS 的内网 IP 而不是 localhost(因为容器内的 localhost 是容器自己,不是宿主机)。如果 Ollama 也以容器方式部署在同一台 NAS 上,建议将 Dify 和 Ollama 加入同一个 docker network,直接用容器名访问。
5. 向量数据库选择 简化版配置默认使用 Weaviate。如果 NAS 内存紧张(8GB 以下),更推荐将向量数据库换成 Qdrant,资源占用约为 Weaviate 的一半。需要在 .env 中修改 VECTOR_STORE=qdrant,并相应调整 docker-compose.yaml。
写在最后
Dify 跑在 NAS 上最大的好处是:文档本地处理,模型随你选,数据控制权在自己手里。
文档存在 NAS 里,知识库的构建、文档的拆分向量化全在本地完成。提问时把文本发给 DeepSeek、通义千问或本地 Ollama,模型负责思考,原始数据不需要离开你的 NAS。
如果你也有一台 NAS,强烈建议花一个下午把 Dify 部署上去。搭一个知识库,做两个简单的自动化工作流,你会发现——折腾 NAS 这么多年,这一次可能是最实用的一次。
觉得有用的话,点个关注不迷路👆
家里有没有在用知识库或者 AI 文档问答的场景?用的什么模型?欢迎在评论区晒出来 👇

夜雨聆风