5-3 Dify+Ollama本地部署实战(Docker部署)
1. Dify平台概述
1.1 核心功能
Agent构建
- 功能详解:通过Dify可以创建智能代理(Agent),这些代理能够自主完成特定任务,比如自动回复、数据分类或决策支持。
- 应用场景:
- 客服机器人:自动处理用户咨询
- 数据分析代理:实时分析并生成报告
- 技术实现:基于LangChain等框架,支持多轮对话和上下文记忆。
💡 提示:Agent可以结合知识库实现更精准的回答。
工作流编排
- 功能详解:提供可视化界面(如拖拽式设计器)来编排复杂的AI业务流程。
- 典型用例:
- 多模型协作:如先用GPT生成文本,再用Stable Diffusion生成配图
- 条件分支:根据用户输入动态选择处理路径
- 优势:无需编写代码即可实现复杂逻辑。
💡 提示:支持自定义节点扩展功能。
RAG检索
- 功能详解:检索增强生成(Retrieval-Augmented Generation)技术,结合本地知识库提升回答准确性。
- 实现步骤:
- 上传文档(PDF/Word等)构建知识库
- 查询时先检索相关片段,再生成回答
- 效果对比:比纯生成模型减少50%以上的事实性错误。
💡 提示:适合法律、医疗等专业领域。
模型管理
- 功能详解:统一管理多个模型提供商(如OpenAI、DeepSeek、Ollama等)的API和本地模型。
- 核心能力:
- 密钥轮换管理
- 用量监控和计费
- 模型性能对比测试
- 扩展性:支持自定义模型接入插件。
💡 提示:可通过/v1/completions
兼容OpenAI API标准。
1.2 部署价值
本地化运行
- 隐私保护:敏感数据无需上传云端,符合GDPR等法规要求。
- 案例:某医院使用Dify本地部署处理患者病历,避免第三方数据泄露风险。
- 性能对比:局域网内延迟<100ms,比云API快3倍以上。
避免云服务限制
- 常见限制:
- 每分钟调用次数限制(如OpenAI的RPM限制)
- 地域不可用(如某些地区无法访问特定API)
- 解决方案:通过本地模型(如Ollama+Llama2)完全自主可控。
💡 提示:可混合使用云API和本地模型平衡成本与性能。
学习与扩展基础
- 教学价值:
- 理解AI应用开发生命周期
- 实践Prompt工程和模型微调
- 企业应用:快速原型开发→生产部署的全流程支持。
💡 提示:后续可扩展接入AutoML工具(如Hugging Face的AutoTrain)。
1.3 技术架构(扩展内容)
组件说明:
- 向量数据库:默认使用Milvus/Pinecone存储知识库嵌入
- 节点库:预置常见处理节点(如文本清洗、API调用)
- 监控模块:实时跟踪请求耗时和错误率
1.4 竞品对比
功能 | Dify | LangFlow | Hugging Face Spaces |
---|---|---|---|
可视化工作流 | ✅ | ✅ | ❌ |
本地模型支持 | ✅ | ❌ | ❌ |
多租户管理 | ✅ | ❌ | ✅ |
开源协议 | Apache 2.0 | MIT | 专有 |
1.5 学习资源推荐
- 官方文档:Dify Docs(含API参考和案例库)
- 社区论坛:GitHub Discussions中的实战问题讨论
- 进阶课程:《基于Dify的AI Agent开发》(本课程第7章将涉及)
2. 环境准备
2.1 硬件要求
详细配置说明
组件 | 最低配置 | 推荐配置 | 性能影响说明 |
---|---|---|---|
CPU | ≥2核 | ≥4核 | 多核可显著提升模型推理并行能力,4核可流畅运行7B参数模型 |
内存 | ≥4GB | ≥8GB | 大内存支持更多并发请求,8GB可同时处理3-5个聊天会话 |
存储 | 10GB | 20GB | SSD硬盘可加速镜像拉取和知识库检索,建议预留50%空间 |
场景化建议:
- 开发测试环境:4核CPU/8GB内存/20GB SSD
- 生产环境:8核CPU/16GB内存/100GB SSD(支持知识库+多模型部署)
- 边缘设备:2核CPU/4GB内存(需关闭非必要服务)
💡 使用docker stats
命令可实时监控资源占用
2.2 软件依赖
2.2.1 Docker安装
Windows平台详细步骤:
- 访问Docker Desktop下载页
- 根据架构选择:
- Intel/AMD芯片:下载
Docker Desktop Installer.exe
- ARM芯片(如Surface Pro X):下载
Docker Desktop for ARM
- Intel/AMD芯片:下载
- 安装时勾选:
- 启用WSL 2后端(性能提升40%)
- 添加桌面快捷方式
- 安装后执行验证:
wsl --list # 确认WSL子系统状态 docker run hello-world # 测试基础功能
powershell
macOS优化方案:
# 安装后配置(提升性能)
brew install docker-credential-helper
echo 'export DOCKER_BUILDKIT=1' >> ~/.zshrc # 启用BuildKit加速
bash
Linux特殊说明:
# Ubuntu快速安装
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER # 避免每次sudo
bash
2.2.2 镜像加速配置
全平台配置指南:
- 阿里云加速(需注册账号):
# 获取专属加速地址后 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://<your-id>.mirror.aliyuncs.com"] } EOF sudo systemctl restart docker
bash - 多源备份方案(防止单点故障):
{ "registry-mirrors": [ "https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn", "https://hub-mirror.c.163.com" ] }
json
验证加速效果:
time docker pull nginx:latest # 对比配置前后下载时间
bash
常见问题解决:
- 证书错误:在daemon.json添加
"insecure-registries": ["mirror.aliyuncs.com"]
- 配置不生效:执行
docker info | grep Mirrors
确认配置加载
2.3 网络要求(新增)
指标 | 最低要求 | 建议配置 |
---|---|---|
带宽 | 5Mbps | 50Mbps |
延迟 | <200ms | <50ms |
防火墙规则 | 开放80/443端口 | 全通Docker网段 |
跨境访问优化:
# 使用proxychains加速国际镜像
sudo apt install proxychains4
echo "socks5 127.0.0.1 1080" >> /etc/proxychains.conf
proxychains docker pull pytorch/pytorch
bash
2.4 环境检查清单
- 确认CPU支持虚拟化(BIOS中开启VT-x/AMD-V)
- 内存swap分区≥4GB(
free -h
查看) - 磁盘格式为NTFS/exFAT(FAT32不支持大文件)
- 关闭杀毒软件实时监控(防止误拦截)
检测脚本(Linux/macOS):
curl -sSL https://dify.ai/env-check.sh | bash
bash
3. Dify部署流程
3.1 获取部署文件
详细操作指南
- 解压部署包:
- Windows右键选择"解压到dify-main"
- Linux/macOS终端执行:
unzip dify-main.zip -d dify-main && cd dify-main
bash
- 项目目录结构:
dify-main/ ├── docker/ # Docker部署文件 │ ├── .env.example # 配置文件模板 │ └── docker-compose.yml ├── backend/ # 后端服务代码 └── frontend/ # 前端界面代码
text - 开发工具推荐:
- VSCode插件:
- Docker(管理容器)
- Remote-Containers(直接在容器内开发)
- YAML(编辑docker-compose文件)
- VSCode插件:
常见问题
- 解压失败:使用7-Zip等工具重新下载解压
- 目录缺失:检查zip包完整性
unzip -t dify-main.zip
3.2 配置文件设置
关键参数详解
# 安全配置
SECRET_KEY=5up3r_S3cr3t! # 用于加密会话的密钥
INITIAL_PASSWORD=Admin@2023 # 首次登录密码
# 网络配置
NGINX_HTTP_PORT=8080 # 避免80端口冲突
DOCKER_NETWORK=172.28.0.0/16 # 自定义Docker网络
# 性能调优
WORKER_PROCESSES=auto # 根据CPU核心数自动调整
ini
安全增强建议
- 使用OpenSSL生成高强度密钥:
openssl rand -base64 32 | tr -d '/+' | cut -c1-32
bash - 密码策略:
- 长度≥12位
- 包含大小写字母+数字+特殊符号
- 定期轮换(修改后需重启服务)
💡 生产环境建议将密码存入Vault等密钥管理系统
3.3 启动容器服务
高级启动选项
# 带日志查看的启动方式
docker-compose up -d && docker-compose logs -f
# 资源限制启动(生产环境推荐)
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
bash
容器状态检查
# 详细状态查看
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
# 健康检查
curl -s http://localhost:8080/api/health | jq
bash
服务管理命令
命令 | 作用 | 适用场景 |
---|---|---|
docker-compose restart | 重启服务 | 配置修改后 |
docker-compose down -v | 彻底清除 | 重新部署时 |
docker system prune | 清理缓存 | 磁盘空间不足 |
3.4 部署验证流程
完整验证步骤
自动化验证脚本
#!/bin/bash
# deploy_verify.sh
if curl -s http://localhost:8080/api/health | grep -q "healthy"; then
echo "✅ 后端服务运行正常"
else
echo "❌ 服务异常,请检查日志"
docker-compose logs --tail=50
fi
bash
3.5 生产环境部署建议
高可用方案
- 负载均衡:
upstream dify { server 172.28.0.2:8080; server 172.28.0.3:8080 backup; }
nginx - 数据库分离:
# docker-compose.prod.yml services: postgres: image: postgres:14-alpine deploy: replicas: 2
yaml
监控配置
- Prometheus监控指标端点:
# .env 追加 METRICS_ENABLED=true PROMETHEUS_PORT=9091
ini - Grafana看板导入:
- 使用ID 1860导入官方监控看板
3.6 故障排查手册
常见错误解决方案
错误现象 | 排查命令 | 解决方案 |
---|---|---|
端口冲突 | netstat -tulnp | 修改.env中的NGINX_HTTP_PORT |
数据库连接失败 | docker logs dify-postgres | 检查POSTGRES_PASSWORD配置 |
镜像拉取超时 | `docker info | grep Mirrors` |
日志分析技巧
# 实时查看错误日志
docker-compose logs -f | grep -E "ERR|WARN"
# 生成诊断报告
docker inspect $(docker ps -q) > inspect_report.json
bash
4. 初始化配置
4.1 访问控制台
详细操作指南
- 浏览器访问:
- 推荐使用Chrome/Firefox最新版
- 若修改过端口,访问
http://localhost:<自定义端口>
- 首次加载可能需要30-60秒(服务初始化)
- 安全登录:
- 初始密码输入后强制要求修改
- 密码强度检测:需包含大小写字母+数字+特殊符号
- 登录失败3次触发15分钟锁定
- 多因素认证(可选):
# 在.env中启用 MFA_ENABLED=true
bash
支持Google Authenticator或短信验证
常见问题排查
- 无法访问:
- 检查防火墙
sudo ufw allow 80/tcp
- 验证服务状态
docker-compose ps
- 检查防火墙
- 密码错误:
- 重置密码:
docker exec -it dify-backend python manage.py changepassword admin
bash
- 重置密码:
4.2 工作区设置
核心配置项详解
- 工作空间命名:
- 命名规则:3-20字符,支持中文
- 系统标识符:自动生成
ws_<hash>
用于API调用 - 修改限制:创建后不可重命名(需重建)
- 时区语言:
配置项 选项 影响范围 时区 Asia/Shanghai等 日志时间戳 语言 中/英/日等 控制台界面 日期格式 YYYY-MM-DD等 数据显示 - 存储路径:
- 默认路径:
/var/lib/dify/data
- 自定义示例:
# docker-compose.yml volumes: - /mnt/nas/dify_data:/var/lib/dify/data
yaml
- 默认路径:
高级设置
- 审计日志:
# .env 配置 AUDIT_LOG_ENABLED=true LOG_RETENTION_DAYS=30
ini - 自动备份:
# 每日3AM备份 0 3 * * * docker exec dify-backend ./backup.sh
bash
4.3 安全加固(新增)
关键安全措施
- HTTPS强制:
# nginx配置 server { listen 80; return 301 https://$host$request_uri; }
nginx - IP白名单:
# .env ALLOWED_CIDR=192.168.1.0/24,10.0.0.1/32
ini
用户权限模型
4.4 初始化检查清单
- 确认管理员邮箱已验证
- 设置SMTP服务(密码重置用)
- 导出初始配置备份
- 创建至少两个测试用户(管理员/普通用户)
验证脚本
#!/bin/bash
# init_check.sh
curl -X POST http://localhost/api/check_init \
-H "Authorization: Bearer $TOKEN" | jq
bash
4.5 故障恢复方案
密码丢失处理
- 通过SMTP邮件重置
- 数据库直接更新:
UPDATE auth_user SET password='<new_hash>' WHERE username='admin';
sql - 使用备份的初始化令牌
数据迁移步骤
# 旧环境导出
docker exec dify-backend ./export.sh backup.zip
# 新环境导入
docker exec -i dify-backend ./import.sh < backup.zip
bash
5. 模型供应商对接
5.1 配置路径详解
多入口访问方式
- 图形化路径:
- 控制台右上角齿轮图标 → 工作区设置 → 模型供应商 → 添加提供商
- API直连:
POST /api/model_providers Headers: {"Authorization": "Bearer <API_KEY>"} Body: { "name": "DeepSeek", "credentials": {"api_key": "sk-xxxx"} }
bash
权限控制
- 需要
管理员
或模型管理员
角色 - 操作日志会记录修改历史(包括IP地址和时间戳)
5.2 对接DeepSeek全流程指南
步骤分解
- API Key获取:
- 登录DeepSeek控制台
- 进入「API Keys」→ 点击「Create New Key」
- 建议命名规则:
dify_prod_<日期>
- 权限选择:勾选
chat:completion
和embeddings
- 密钥安全存储:
# 使用Vault加密存储示例 vault kv put secret/dify deepseek_key=sk-xxxx
bash - Dify配置验证:
- 测试连接按钮即时验证
- 成功标志:显示"剩余额度"和"QPS限制"
高级配置项
# 高级参数示例
rate_limit: 10 # 每秒最大请求数
fallback_model: gpt-3.5-turbo # 主模型不可用时自动切换
yaml
5.3 模型类型深度解析
系统模型
特性 | 说明 |
---|---|
推理能力 | 支持流式响应(SSE)、支持function calling |
性能指标 | 平均延迟<500ms (P99<1s) |
特殊参数 | temperature=0.7 , max_tokens=2048 |
适用场景 | 通用对话、代码生成 |
Embedding模型
- 最佳实践:
- 中文推荐
text-embedding-3-large
- 分块大小:512 tokens(适合大多数RAG场景)
- 中文推荐
Rerank模型
- 工作原理:
- 初步检索返回100个结果
- 基于语义相关性重排序Top 10
- 效果对比:
指标 无Rerank 有Rerank 首结果准确率 62% 89% 前3命中率 78% 97%
5.4 多供应商对比(新增)
供应商 | 免费额度 | 中文优化 | 最大上下文 |
---|---|---|---|
DeepSeek | 1000次/月 | ✅ | 128K |
OpenAI | 无 | ❌ | 32K |
Moonshot | 500次/月 | ✅ | 64K |
5.5 故障排查手册
常见错误代码
错误码 | 含义 | 解决方案 |
---|---|---|
429 | 速率限制 | 调整rate_limit 参数 |
401 | 密钥失效 | 检查密钥是否包含sk- 前缀 |
503 | 模型不可用 | 启用fallback_model 备用方案 |
性能优化技巧
# 并发测试命令
ab -n 100 -c 10 -H "Authorization: Bearer $KEY" \
http://localhost/api/v1/completions
bash
5.6 自动化管理脚本
密钥轮换脚本
# rotate_keys.py
import requests
def update_key(new_key):
resp = requests.patch(
"http://dify/api/model_providers/deepseek",
json={"credentials": {"api_key": new_key}},
headers={"Authorization": f"Bearer {ADMIN_TOKEN}"}
)
assert resp.status_code == 200
python
用量监控看板
# Prometheus指标
dify_api_requests_total{provider="deepseek"}
dify_api_latency_seconds{quantile="0.95"}
bash
6. 创建聊天助手
6.1 创建流程详解
1. 新建助手入口
- 路径导航:
- 左侧菜单栏「应用」→ 右上角「+ 新建聊天助手」
- 快捷入口:
Ctrl+Alt+N
(支持快捷键调出)
2. 命名规范建议
命名类型 | 示例 | 适用场景 |
---|---|---|
功能描述型 | 客服助手-电商版 | 业务场景明确的助手 |
模型标识型 | GPT-4-知识库增强版 | 突显技术特性 |
版本控制型 | 法律顾问-v2.1 | 迭代升级场景 |
3. 系统提示词高级配置
# 增强版提示词模板
角色设定:
- 身份:专业级AI助手
- 语言:简体中文(优先)/英文(用户指定时)
- 风格:友好但专业,避免网络俚语
交互规则:
1. 不确定答案时需声明"根据现有知识"
2. 涉及敏感话题回复"该问题超出我的能力范围"
3. 复杂问题分步骤解答并标注「推理过程」
知识库约束:
- 数据来源:2023年后公开资料
- 引用格式:[1] 根据XX资料...
markdown
调试技巧:
- 使用
/simulate
命令测试不同提示词效果 - 实时预览变量渲染结果:
{{user_name}}您好...
6.2 功能验证方法论
标准化测试用例
测试类型 | 输入示例 | 预期输出特征 | 通过标准 |
---|---|---|---|
基础认知 | "你是谁?" | 包含助手名称和核心功能 | 响应时间<2s |
多轮对话 | "上一个问题的第三点是什么?" | 能关联上下文 | 准确率100% |
边界测试 | "如何制作危险品?" | 触发安全拦截 | 返回预设拒绝话术 |
自动化测试脚本
# test_assistant.py
import requests
def test_identity_query():
resp = requests.post(
"http://localhost/api/chat",
json={"message": "你是谁?"},
headers={"Authorization": "Bearer <API_KEY>"}
)
assert "全能助手" in resp.text
assert resp.json()["latency"] < 2000
python
6.3 性能优化配置(新增)
对话参数调优
# 高级参数配置
conversation:
memory_window: 10 # 记忆轮次
temperature: 0.3 # 创造性控制
max_tokens: 1024 # 响应长度限制
yaml
缓存策略
- 本地缓存:最近10组对话的Embedding结果
- Redis配置:
CACHE_TYPE=redis REDIS_URL=redis://localhost:6379/1
ini
6.4 监控与改进
关键指标看板
持续改进流程
- 收集用户反馈(内置「评价」按钮)
- 分析错误日志:
grep "ERROR" /var/log/dify/chat.log | awk '{print $4}' | sort | uniq -c
bash - 每月更新提示词库
6.5 安全合规检查
内容过滤规则
- 关键词屏蔽:
(毒品|暴力|赌博)\b
regex - 语义检测:
- 使用
llm-guard
进行意图分析 - 可疑对话自动转人工审核
- 使用
审计日志示例
2023-11-20 14:30:23 | 用户ID:U123 | 拦截敏感词:"违禁药品" | 动作:终止会话
log
6.6 扩展应用场景
企业级集成方案
- CRM对接:
def sync_to_crm(query): salesforce.create_case( subject="AI助手转交", description=query )
python - 客服工单系统:
- 自动分类:
/classify "我的订单没收到"
- 优先级标记:
紧急/普通
- 自动分类:
硬件设备支持
# 树莓派部署命令
docker run -d --device /dev/gpiomem dify-arm64
bash
7. 常见问题排查
7.1 端口冲突解决
深度排查方法
- 冲突检测命令:
sudo lsof -i :80 # 查看80端口占用进程 sudo netstat -tulnp | grep 80
bash - 多服务共存方案:
# .env 分服务配置 FRONTEND_PORT=8080 BACKEND_PORT=8081 REDIS_PORT=63790 # 避免与宿主机Redis冲突
ini - 端口映射原理:
高级场景处理
- Kubernetes环境:通过NodePort或Ingress解决
- 云服务器:需同步修改安全组规则
💡 使用ss -tulw
命令可查看更详细的端口状态
7.2 服务重启流程
全生命周期管理
命令 | 作用 | 适用场景 |
---|---|---|
docker-compose pause | 暂停服务 | 临时维护 |
docker-compose unpause | 恢复服务 | 故障恢复后 |
docker-compose rm -fsv | 彻底删除 | 重建环境 |
优雅重启方案
# 分步重启保证可用性
docker-compose restart nginx # 先重启代理层
sleep 5
docker-compose restart backend # 再重启核心服务
bash
状态验证脚本
#!/bin/bash
# check_restart.sh
services=("nginx" "backend" "redis")
for svc in "${services[@]}"; do
if ! docker-compose ps | grep "$svc.*Up"; then
echo "❌ $svc 服务未正常启动"
exit 1
fi
done
echo "✅ 所有服务运行正常"
bash
7.3 镜像拉取失败
全面诊断流程
- 网络检测:
ping registry-1.docker.io curl -I https://index.docker.io
bash - 多源拉取策略:
# 尝试多个镜像源 for registry in registry.cn-hangzhou.aliyuncs.com docker.mirrors.ustc.edu.cn; do docker pull $registry/library/nginx:latest done
bash - 离线解决方案:
# 导出导入镜像 docker save -o nginx.tar nginx:latest docker load -i nginx.tar
bash
企业级配置模板
// /etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror1.example.com",
"https://mirror2.example.com"
],
"insecure-registries": [
"192.168.1.100:5000"
]
}
json
7.4 磁盘空间不足(新增)
清理策略
# 一键清理命令
docker system prune -af --volumes
# 按类型清理
docker image prune -a --filter "until=24h"
docker volume prune --filter "label!=keep"
bash
空间监控看板
7.5 容器启动失败(新增)
错误日志分析
# 获取最后50行日志
docker logs --tail 50 <container_name> 2>&1 | grep -E "ERR|WARN|Exception"
# 交互式调试
docker exec -it <container_name> /bin/sh
bash
常见错误码处理
错误码 | 原因 | 解决方案 |
---|---|---|
137 | OOM | 增加-m 2g 内存限制 |
139 | 段错误 | 检查JVM/Native库版本 |
125 | 命令错误 | 验证ENTRYPOINT路径 |
7.6 性能问题排查(新增)
基准测试工具
# 压力测试
docker run --rm loadimpact/k6 run -e HOST=http://localhost script.js
# 资源监控
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
bash
优化案例
- 高CPU问题:限制CPU份额
--cpus=1.5
- 内存泄漏:添加
--memory-swap=-1
7.7 网络连接问题(新增)
诊断命令集
# 容器网络测试
docker exec -it <container> ping 8.8.8.8
docker exec -it <container> curl -v http://service:port
# 网络拓扑检查
docker network inspect bridge
bash
典型解决方案
- 跨主机通信:改用overlay网络
- DNS解析失败:配置
--dns 223.5.5.5
8. 数据持久化机制
8.1 持久化原理详解
存储架构设计
关键目录说明
容器路径 | 数据类型 | 备份频率 |
---|---|---|
/app/data/uploads | 用户上传文件 | 实时同步 |
/app/data/logs | 应用日志 | 每日压缩 |
/var/lib/postgresql | 数据库主文件(PGDATA) | 每小时WAL |
高级配置示例
# docker-compose.yml 片段
services:
backend:
volumes:
- type: volume
source: dify_data
target: /app/data
volume:
nocopy: true # 禁止容器修改volume元数据
volumes:
dify_data:
driver_opts:
type: nfs
o: addr=192.168.1.100,rw
device: ":/mnt/nas/dify"
yaml
8.2 升级注意事项
标准化升级流程
- 预升级检查清单:
- 确认磁盘剩余空间≥升级包大小的3倍
- 停止所有写入操作
docker-compose pause
- 验证备份完整性
sha256sum backup.tar
- 网络配置保持:
# 导出网络配置 docker network inspect dify_net > network_config.json # 升级后恢复 docker network create \ --config-from network_config.json \ dify_net
bash - 灰度升级策略:
# 分批升级示例 docker-compose up -d --no-deps --scale backend=3 backend
bash
灾难恢复方案
场景:升级后数据库不兼容
解决步骤:
- 回退到旧版本镜像
docker-compose pull dify-backend:v1.2
- 恢复数据卷:
docker run --rm -v dify_data:/restore -v $(pwd):/backup \ alpine tar xzf /backup/dify_data.tar -C /restore
bash - 重建索引
docker exec dify-db psql -U postgres -c "REINDEX DATABASE dify;"
8.3 性能优化(新增)
存储驱动选择
驱动类型 | 适用场景 | 性能指标(IOPS) |
---|---|---|
overlay2 | 常规场景(默认) | 15,000 |
btrfs | 需要快照功能 | 12,000 |
zfs | 大数据量+压缩需求 | 18,000 |
数据库调优参数
# postgresql.conf 追加
shared_buffers = 4GB
effective_cache_size = 12GB
maintenance_work_mem = 1GB
ini
8.4 监控告警(新增)
Prometheus监控指标
# docker-compose-monitor.yml
services:
exporter:
image: prom/node-exporter
volumes:
- /:/host:ro,rslave
command:
- '--path.rootfs=/host'
yaml
关键告警规则
# alert.rules
groups:
- name: storage
rules:
- alert: VolumeSpaceCritical
expr: 100 - (node_filesystem_avail_bytes{mountpoint="/var/lib/docker"} * 100 / node_filesystem_size_bytes{mountpoint="/var/lib/docker"}) > 90
for: 10m
yaml
8.5 多云存储方案(新增)
AWS S3集成配置
# .env 追加
STORAGE_TYPE=s3
AWS_ACCESS_KEY_ID=AKIAXXXX
AWS_SECRET_ACCESS_KEY=XXXX
AWS_REGION=ap-northeast-1
S3_BUCKET=dify-backup
ini
跨云迁移脚本
# migrate_storage.py
import boto3
from google.cloud import storage
def s3_to_gcs():
s3 = boto3.client('s3')
gcs = storage.Client()
bucket = gcs.get_bucket('dify-gcs')
for obj in s3.list_objects(Bucket='dify-backup')['Contents']:
s3.download_file('dify-backup', obj['Key'], '/tmp/tempfile')
blob = bucket.blob(obj['Key'])
blob.upload_from_filename('/tmp/tempfile')
python
8.6 安全加固(新增)
加密存储方案
- LUKS加密卷:
cryptsetup luksFormat /dev/sdb1 cryptsetup open /dev/sdb1 dify_encrypted mkfs.ext4 /dev/mapper/dify_encrypted
bash - TLS传输加密:
# nginx.conf ssl_protocols TLSv1.3; ssl_ciphers 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256';
nginx
审计日志配置
# 记录所有数据访问
auditctl -w /var/lib/docker/volumes/ -p rwxa -k docker_volumes
bash
↑