Back to skills
SKILL.md
04 Security
BSecurityDify 安全实践和部署运维完整指南,涵盖SSRF防护、代码沙箱、Docker/Kubernetes部署、监控告警和故障恢复
- 35 stars
- 0 votes
- 0 copies
- 4 views
- Added September 1, 2026
Works with
Security analysis
84/100- Uses curl or wget to download content
- Exfiltrates credentials via HTTP — exact pattern from Snyk ToxicSkills study
Pro scans all 7 files and shows the line behind each finding
npx -y skills add SystemTce/dify-skills --skill 04-security --agent claude-codeAre you the author of 04 Security?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/systemtce-04-security)---
skill_name: dify-security-deployment
version: 1.0.0
parent_skill: dify-master
description: Dify 安全实践和部署运维完整指南,涵盖SSRF防护、代码沙箱、Docker/Kubernetes部署、监控告警和故障恢复
category: security-operations
tags:
- security
- deployment
- docker
- kubernetes
- monitoring
- ssrf
- sandbox
dependencies: []
last_updated: 2026-03-04
---
# Dify 安全和部署 SKILL
## 概述
本 SKILL 提供 Dify 平台的安全实践和部署运维完整指南,帮助开发者和运维人员构建安全、稳定、高性能的生产环境。
### 触发场景
使用本 SKILL 当你需要:
- 🚀 **部署 Dify 到生产环境** (Docker/Kubernetes)
- 🔒 **配置安全防护机制** (SSRF、沙箱、加密)
- 🔧 **解决部署问题** (容器启动失败、网络配置、性能瓶颈)
- 📊 **优化生产环境** (监控告警、高可用、故障恢复)
- ✅ **进行安全审计** 和配置验证
### 核心能力
- **安全防护**: SSRF 防护、代码沙箱、数据加密、权限管理
- **Docker 部署**: 快速部署、生产配置、网络架构、资源优化
- **Kubernetes 部署**: 高可用架构、自动扩展、Helm 部署
- **监控告警**: OpenTelemetry、Sentry、日志聚合、性能监控
- **故障恢复**: 问题诊断、恢复流程、备份策略
---
## 快速开始
### 最小部署配置
```bash
# 1. 克隆仓库
git clone https://github.com/langgenius/dify.git
cd dify/docker
# 2. 复制环境变量
cp .env.example .env
# 3. 修改关键安全配置
# 编辑 .env 文件:
SECRET_KEY=$(openssl rand -base64 42)
DB_PASSWORD=your-strong-password
REDIS_PASSWORD=your-redis-password
SANDBOX_API_KEY=$(openssl rand -base64 32)
# 4. 启动服务
docker compose up -d
# 5. 验证部署
docker compose ps
curl http://localhost/health
```
### 安全检查清单
#### 部署前检查
- [ ] **SECRET_KEY** 已更改为强密钥 (使用 `openssl rand -base64 42`)
- [ ] **数据库密码** 已修改默认值
- [ ] **Redis 密码** 已设置
- [ ] **SSRF Proxy** 已配置并阻止内网访问
- [ ] **Sandbox 沙箱** 已启用网络代理
- [ ] **HTTPS/TLS** 证书已配置 (生产环境)
- [ ] **API Key 管理** 机制已启用
- [ ] **文件上传限制** 已设置 (UPLOAD_FILE_SIZE_LIMIT)
- [ ] **敏感环境变量** 已加密存储
#### 运行时检查
- [ ] **容器权限** 以非 root 用户运行
- [ ] **网络隔离** ssrf_proxy_network 正常工作
- [ ] **健康检查** 所有服务健康状态正常
- [ ] **日志记录** 已启用并正常输出
- [ ] **监控告警** 已配置 (OpenTelemetry/Sentry)
- [ ] **备份策略** 已实施 (数据库、文件存储)
- [ ] **资源限制** CPU/内存限制已配置
- [ ] **SSL 证书** 有效期检查和自动续期
---
## 目录结构
```
04-security/
├── SKILL.md # 本文件 - 安全和部署总览
├── security/ # 安全实践
│ ├── ssrf-protection.md # SSRF 防护配置
│ ├── sandbox.md # 代码沙箱隔离
│ ├── encryption.md # 数据加密和 TLS
│ └── auth.md # 认证和权限管理
├── deployment/ # 部署指南
│ ├── docker-compose.md # Docker Compose 部署
│ ├── kubernetes.md # Kubernetes 部署
│ ├── serverless.md # Serverless 部署
│ └── high-availability.md # 高可用架构
├── operations/ # 运维实践
│ ├── monitoring.md # 监控和告警
│ ├── logging.md # 日志管理
│ ├── backup.md # 备份和恢复
│ └── troubleshooting.md # 故障排查
└── best-practices.md # 最佳实践总结
```
---
## 一、安全防护机制
### 1.1 SSRF 防护
Dify 使用 Squid 代理实现 SSRF (Server-Side Request Forgery) 防护,阻止访问内网地址。
**核心配置**:
```conf
# squid.conf - 内网地址黑名单
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl localnet src 127.0.0.0/8
# 拒绝访问内网
http_access deny localnet
# 允许的端口
acl Safe_ports port 80 443 1025-65535
http_access deny !Safe_ports
```
**验证方法**:
```bash
# 测试内网访问被阻止
docker compose exec api curl -x http://ssrf_proxy:3128 http://127.0.0.1
# 应返回 403 Forbidden
# 测试外部访问正常
docker compose exec api curl -x http://ssrf_proxy:3128 https://api.openai.com
# 应正常返回
```
📖 **详细文档**: [security/ssrf-protection.md](security/ssrf-protection.md)
### 1.2 代码沙箱
Sandbox 服务提供安全的代码执行环境,隔离用户代码。
**核心配置**:
```yaml
# config.yaml
app:
key: dify-sandbox # 修改为强密钥
max_workers: 4
worker_timeout: 15
enable_network: true # 通过 SSRF Proxy 访问外部
proxy:
http: 'http://ssrf_proxy:3128'
https: 'http://ssrf_proxy:3128'
```
**安全特性**:
- ✅ 系统调用白名单限制
- ✅ 资源配额管理 (CPU、内存、超时)
- ✅ 网络访问通过 SSRF Proxy
- ✅ 文件系统隔离
📖 **详细文档**: [security/sandbox.md](security/sandbox.md)
### 1.3 数据加密
**传输加密 (TLS/HTTPS)**:
```bash
# .env 配置
NGINX_HTTPS_ENABLED=true
NGINX_SSL_CERT_FILENAME=fullchain.pem
NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
NGINX_SSL_PROTOCOLS=TLSv1.2 TLSv1.3
```
**数据库连接加密**:
```bash
# PostgreSQL SSL
DB_HOST=db_postgres
POSTGRES_SSL_MODE=require
# Redis SSL
REDIS_USE_SSL=true
REDIS_SSL_CERT_REQS=CERT_REQUIRED
```
📖 **详细文档**: [security/encryption.md](security/encryption.md)
### 1.4 权限管理
**API Key 管理**:
```bash
# 生成强密钥
SECRET_KEY=$(openssl rand -base64 42)
PLUGIN_DAEMON_KEY=$(openssl rand -base64 42)
PLUGIN_DIFY_INNER_API_KEY=$(openssl rand -base64 42)
```
**OAuth 2.0 集成**:
- 支持第三方服务授权
- 访问令牌自动刷新
- 权限范围控制
📖 **详细文档**: [security/auth.md](security/auth.md)
---
## 二、Docker 部署
### 2.1 快速部署
**一键启动**:
```bash
cd dify/docker
cp .env.example .env
# 编辑 .env 修改密码和密钥
docker compose up -d
```
**服务架构**:
```
nginx (80/443)
├── web (3000) - 前端 UI
├── api (5001) - 业务逻辑
├── worker - 后台任务
├── beat - 定时任务
├── plugin_daemon (5002) - 插件管理
└── sandbox (8194) - 代码执行
基础服务:
├── db_postgres (5432) - 主数据库
├── redis (6379) - 缓存和队列
├── weaviate (8080) - 向量数据库
└── ssrf_proxy (3128) - SSRF 防护
```
📖 **详细文档**: [deployment/docker-compose.md](deployment/docker-compose.md)
### 2.2 生产级配置
**资源限制**:
```yaml
# docker-compose.yaml
services:
api:
deploy:
resources:
limits:
cpus: '2'
memory: 4G
reservations:
cpus: '1'
memory: 2G
```
**健康检查**:
```yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5001/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
```
**日志管理**:
```yaml
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
```
📖 **详细文档**: [deployment/docker-compose.md](deployment/docker-compose.md)
### 2.3 网络架构
**网络隔离**:
```yaml
networks:
# 内部网络 - 无法访问外部
ssrf_proxy_network:
driver: bridge
internal: true
# 默认网络 - 可访问外部
default:
driver: bridge
```
**服务通信**:
- API/Worker/Sandbox → ssrf_proxy → 外部 API
- Nginx → API/Web (反向代理)
- API → Database/Redis (内部通信)
📖 **详细文档**: [deployment/docker-compose.md](deployment/docker-compose.md)
---
## 三、Kubernetes 部署
### 3.1 Helm 快速部署
```bash
# 添加 Helm 仓库
helm repo add dify https://borispolonsky.github.io/dify-helm
helm repo update
# 安装 Dify
helm install my-dify dify/dify \
--set postgresql.enabled=true \
--set redis.enabled=true \
--set weaviate.enabled=true
# 查看状态
kubectl get pods -l app.kubernetes.io/name=dify
```
### 3.2 高可用架构
**多副本部署**:
```yaml
# values.yaml
api:
replicaCount: 3
resources:
limits:
cpu: 2000m
memory: 4Gi
requests:
cpu: 1000m
memory: 2Gi
worker:
replicaCount: 2
autoscaling:
enabled: true
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 80
```
**Pod 反亲和性**:
```yaml
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- dify-api
topologyKey: kubernetes.io/hostname
```
📖 **详细文档**: [deployment/kubernetes.md](deployment/kubernetes.md)
### 3.3 托管服务集成
**使用云厂商托管服务**:
```yaml
# 使用 RDS PostgreSQL
postgresql:
enabled: false
externalDatabase:
host: your-rds-endpoint.rds.amazonaws.com
port: 5432
database: dify
username: dify
password: your-password
# 使用 ElastiCache Redis
redis:
enabled: false
externalRedis:
host: your-redis.cache.amazonaws.com
port: 6379
password: your-password
```
**优势**:
- ✅ 自动备份和恢复
- ✅ 高可用和故障转移
- ✅ 性能监控和优化
- ✅ 减少运维负担
📖 **详细文档**: [deployment/high-availability.md](deployment/high-availability.md)
---
## 四、监控和告警
### 4.1 OpenTelemetry 配置
```bash
# .env
ENABLE_OTEL=true
OTLP_BASE_ENDPOINT=http://otel-collector:4318
OTEL_SAMPLING_RATE=0.1
OTEL_BATCH_EXPORT_SCHEDULE_DELAY=5000
OTEL_MAX_QUEUE_SIZE=2048
OTEL_METRIC_EXPORT_INTERVAL=60000
```
**监控指标**:
- 请求延迟和吞吐量
- 错误率和成功率
- 资源使用 (CPU、内存、磁盘)
- 数据库连接池状态
- 队列深度和处理速度
### 4.2 Sentry 错误追踪
```bash
# .env
API_SENTRY_DSN=https://your-key@sentry.io/project-id
API_SENTRY_TRACES_SAMPLE_RATE=1.0
WEB_SENTRY_DSN=https://your-key@sentry.io/project-id
PLUGIN_SENTRY_ENABLED=true
```
### 4.3 日志聚合
```bash
# 日志配置
LOG_LEVEL=INFO
LOG_OUTPUT_FORMAT=json
LOG_FILE=/app/logs/server.log
LOG_FILE_MAX_SIZE=20
LOG_FILE_BACKUP_COUNT=5
```
**日志查看**:
```bash
# Docker
docker compose logs -f api
docker compose logs --tail=100 worker
# Kubernetes
kubectl logs -f deployment/dify-api
kubectl logs -l app=dify-worker --tail=100
```
📖 **详细文档**: [operations/monitoring.md](operations/monitoring.md)
### 4.4 队列监控
```bash
# .env
QUEUE_MONITOR_THRESHOLD=200
QUEUE_MONITOR_ALERT_EMAILS=admin@example.com,ops@example.com
QUEUE_MONITOR_INTERVAL=30
ENABLE_DATASETS_QUEUE_MONITOR=true
```
---
## 五、故障排查
### 5.1 常见问题
#### 容器启动失败
**症状**: 容器反复重启或无法启动
**诊断**:
```bash
# 查看容器状态
docker compose ps
# 查看日志
docker compose logs api
# 检查健康状态
docker compose exec api curl http://localhost:5001/health
```
**常见原因**:
1. **数据库连接失败**
```bash
# 检查数据库
docker compose exec db_postgres pg_isready
# 验证连接
docker compose exec api env | grep DB_
```
2. **依赖服务未就绪**
```yaml
# 检查 depends_on 配置
depends_on:
db_postgres:
condition: service_healthy
```
3. **环境变量配置错误**
```bash
# 验证必需变量
docker compose config | grep -E "SECRET_KEY|DB_PASSWORD"
```
#### 网络连接问题
**症状**: 无法访问外部 API 或内部服务
**诊断**:
```bash
# 测试 SSRF Proxy
docker compose exec api curl -x http://ssrf_proxy:3128 https://api.openai.com
# 测试内部服务
docker compose exec api curl http://redis:6379
docker compose exec api curl http://db_postgres:5432
```
#### 性能问题
**症状**: 响应慢、超时、资源耗尽
**诊断**:
```bash
# 查看资源使用
docker stats
# 查看数据库连接
docker compose exec db_postgres psql -U postgres -d dify -c "SELECT count(*) FROM pg_stat_activity;"
# 查看 Redis 内存
docker compose exec redis redis-cli INFO memory
```
📖 **详细文档**: [operations/troubleshooting.md](operations/troubleshooting.md)
### 5.2 故障恢复流程
#### 数据库故障
```bash
# 1. 检查状态
docker compose ps db_postgres
# 2. 查看日志
docker compose logs db_postgres
# 3. 重启服务
docker compose restart db_postgres
# 4. 验证连接
docker compose exec db_postgres pg_isready
# 5. 检查数据完整性
docker compose exec db_postgres psql -U postgres -d dify -c "SELECT count(*) FROM accounts;"
```
#### 服务重启顺序
```bash
# 1. 基础服务
docker compose restart db_postgres redis
# 2. 核心服务
docker compose restart api worker beat
# 3. 前端服务
docker compose restart web nginx
# 4. 验证
docker compose ps
curl http://localhost/health
```
📖 **详细文档**: [operations/backup.md](operations/backup.md)
---
## 六、最佳实践
### 6.1 安全最佳实践
1. **定期更新密钥**
- 每 90 天轮换 SECRET_KEY
- 使用密钥管理服务 (AWS KMS, HashiCorp Vault)
2. **最小权限原则**
- 容器以非 root 用户运行
- 数据库用户仅授予必需权限
3. **网络隔离**
- 使用内部网络隔离敏感服务
- 通过 SSRF Proxy 控制外部访问
4. **审计日志**
- 启用详细日志记录
- 定期审查访问日志和错误日志
### 6.2 部署最佳实践
1. **环境分离**
- 开发、测试、生产环境独立
- 使用不同的配置和密钥
2. **自动化部署**
- 使用 CI/CD 流水线
- 自动化测试和验证
3. **版本控制**
- 配置文件版本化 (排除敏感信息)
- 使用 Git 管理基础设施代码
4. **监控和告警**
- 配置全面的监控指标
- 设置合理的告警阈值
### 6.3 运维最佳实践
1. **备份策略**
- 每日自动备份数据库
- 定期测试恢复流程
2. **容量规划**
- 监控资源使用趋势
- 提前扩容避免性能问题
3. **文档维护**
- 记录配置变更
- 维护运维手册
4. **应急响应**
- 建立故障响应流程
- 定期演练恢复场景
📖 **详细文档**: [best-practices.md](best-practices.md)
---
## 七、配置模板
### 7.1 开发环境模板
```bash
# .env.development
DEBUG=true
LOG_LEVEL=DEBUG
MIGRATION_ENABLED=true
# 使用默认密码 (仅开发环境)
DB_PASSWORD=difyai123456
REDIS_PASSWORD=difyai123456
# 禁用 HTTPS
NGINX_HTTPS_ENABLED=false
```
### 7.2 生产环境模板
```bash
# .env.production
DEBUG=false
LOG_LEVEL=INFO
DEPLOY_ENV=PRODUCTION
# 强密钥 (必须修改)
SECRET_KEY=$(openssl rand -base64 42)
DB_PASSWORD=<strong-password>
REDIS_PASSWORD=<strong-password>
# 启用 HTTPS
NGINX_HTTPS_ENABLED=true
NGINX_SSL_CERT_FILENAME=fullchain.pem
NGINX_SSL_CERT_KEY_FILENAME=privkey.pem
# 启用监控
ENABLE_OTEL=true
API_SENTRY_DSN=<your-sentry-dsn>
```
### 7.3 高可用模板
```yaml
# docker-compose.ha.yaml
services:
api:
deploy:
replicas: 3
resources:
limits:
cpus: '2'
memory: 4G
restart_policy:
condition: on-failure
max_attempts: 3
worker:
deploy:
replicas: 2
resources:
limits:
cpus: '4'
memory: 8G
```
---
## 八、参考资料
### 官方文档
- [Dify 官方文档](https://docs.dify.ai/)
- [Docker 部署指南](https://docs.dify.ai/getting-started/install-self-hosted/docker-compose)
- [环境变量参考](https://docs.dify.ai/getting-started/install-self-hosted/environments)
### 社区资源
- [Dify GitHub](https://github.com/langgenius/dify)
- [Dify Helm Chart](https://github.com/BorisPolonsky/dify-helm)
- [阿里云 ACK 部署实践](https://alibabacloud.com/blog/high-availability-and-performance-best-practices-for-deploying-dify-based-on-ack_601874)
### 相关 SKILL
- [01-workflow](../01-workflow/SKILL.md) - 工作流设计
- [02-plugin](../02-plugin/SKILL.md) - 插件开发
- [03-performance](../03-performance/SKILL.md) - 性能优化
---
## 快速命令参考
```bash
# Docker 部署
docker compose up -d # 启动所有服务
docker compose ps # 查看服务状态
docker compose logs -f api # 查看 API 日志
docker compose restart api # 重启 API 服务
docker compose down # 停止所有服务
# 健康检查
curl http://localhost/health # 检查服务健康
docker compose exec db_postgres pg_isready # 检查数据库
docker compose exec redis redis-cli ping # 检查 Redis
# 日志查看
docker compose logs --tail=100 api # 查看最近 100 行日志
docker compose logs -f worker # 实时查看 worker 日志
# 数据库操作
docker compose exec db_postgres psql -U postgres -d dify # 连接数据库
docker compose exec db_postgres pg_dump -U postgres dify > backup.sql # 备份
# Kubernetes
kubectl get pods -l app=dify # 查看 Pod 状态
kubectl logs -f deployment/dify-api # 查看日志
kubectl describe pod <pod-name> # 查看 Pod 详情
kubectl exec -it <pod-name> -- /bin/bash # 进入容器
```
---
**版本**: 1.0.0
**最后更新**: 2026-03-04
**维护者**: Dify SKILL Team
Files in this skill
- SKILL.md
- best-practices.md
- deployment/docker-compose.md
- operations/monitoring.md
- operations/troubleshooting.md
- security/sandbox.md
- security/ssrf-protection.md
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.