总结 Dify 私有化部署中最典型的 8 个坑,包含完整的错误信息和修复步骤,帮你节省大量排查时间。
这篇是我自己踩坑的实录。第一次部署 Dify 花了 3 天,其中 2.5 天在排查本可避免的问题。现在把这些坑写下来,希望你能一天内搞定。
latest 标签而不是固定版本踩坑经过:拉取 langgenius/dify-api:latest,第二天更新后接口格式变了,前端报错。
正确做法:
# docker-compose.yml 使用固定版本
services:
api:
image: langgenius/dify-api:0.9.3 # 明确版本号
web:
image: langgenius/dify-web:0.9.3
升级前先阅读 GitHub Releases 的迁移说明。
报错现象:登录后跳转到错误域名,或者 API 请求跨域失败。
原因:Dify 有多个 URL 配置项,必须全部保持一致:
# 这四个必须同时修改,且与实际访问地址完全一致
CONSOLE_WEB_URL=https://dify.example.com
CONSOLE_API_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
APP_API_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
改完需要完整重启:docker compose down && docker compose up -d
报错现象:上传 PDF 后,知识库中的内容是乱码或空白。
原因:扫描件 PDF 没有文字层,Dify 无法直接提取文字。
解决方案:
# 方案一:使用 OCR 工具预处理
pip install pdf2image pytesseract
# 方案二:在 Dify 设置中开启 OCR
# 需要配置 OCR 服务(如 Azure Computer Vision)
# .env
PDF_PREVIEW=true
或者使用 百度 OCR 等服务预处理后转为可选中的 PDF。
报错现象:上传大文件(PDF > 10MB)时报 413 Request Entity Too Large。
# /etc/nginx/nginx.conf 或站点配置
http {
client_max_body_size 100M; # 默认是 1M,必须增大
}
同时修改 Dify 应用层配置:
UPLOAD_FILE_SIZE_LIMIT=50 # 单位 MB
UPLOAD_FILE_BATCH_LIMIT=10
踩坑经过:重启 Docker 后知识库全空了,原来向量数据库数据没有挂载 volume。
# docker-compose.yml 确认 weaviate 有 volume 挂载
weaviate:
volumes:
- ./volumes/weaviate:/var/lib/weaviate # 必须!
# 检查数据是否真的持久化
ls -la ./volumes/weaviate
# 应该能看到数据文件
风险:Workflow 中的 HTTP 请求节点如果没有 SSRF 防护,恶意用户可以让服务器发请求到内网地址。
检查配置:
# .env 确认以下配置存在
SSRF_PROXY_HTTP_URL=http://ssrf-proxy:3128
SSRF_PROXY_HTTPS_URL=http://ssrf-proxy:3128
# 确认 ssrf-proxy 容器在运行
docker compose ps ssrf-proxy
报错现象:用户提交 Workflow 后等待很久,日志里任务在队列里堆积。
原因:默认只有 1 个 Worker 进程。
# docker-compose.yml
worker:
command: celery -A app.celery worker -P gevent -c 10 --loglevel INFO
# -c 10 表示 10 个并发 worker,根据 CPU 核数调整
或者:
# 不修改配置,直接扩展 worker 实例数
docker compose up -d --scale worker=3
踩坑经过:某次 PostgreSQL 容器因为磁盘满了崩溃,过了半天才被反馈,服务中断了 6 小时。
最简监控方案:
#!/bin/bash
# health_check.sh - 加入 crontab 每 5 分钟执行
STATUS=$(curl -s -o /dev/null -w "%{http_code}" https://dify.example.com/api/health)
if [ "$STATUS" != "200" ]; then
# 发送告警(替换为你的 webhook)
curl -X POST "YOUR_DINGTALK_WEBHOOK" \
-H "Content-Type: application/json" \
-d '{"msgtype":"text","text":{"content":"Dify 服务异常!HTTP 状态码: '$STATUS}}'
fi
# crontab -e
*/5 * * * * /home/ubuntu/health_check.sh
部署前请核对:
如果不想独自踩这些坑,LocalClaw(insman.cn) 上有专业 Dify 服务商按最佳实践交付,避免这些问题从一开始发生。
总结 ComfyUI 新手最常犯的 10 个错误,包含模型放错位置、节点版本冲突、工作流卡死等,每条附具体解决步骤。
总结 Ollama 新手最常见的 9 个错误,从硬件评估失误到模型选错,每个错误附具体现象和解决方法。
从法务、HR、销售、运营、客服五个部门视角,分析 Dify 最适合解决的业务问题,含完整 Workflow 设计和预期收益。
全面对比 Dify(私有化开源)、Coze(字节国际版)、扣子(字节国内版),从功能、数据安全、成本三个维度帮你做出选择。