feat(M1): Docker部署配置 - docker-compose、环境变量模板、.gitignore、部署文档
This commit is contained in:
+44
@@ -0,0 +1,44 @@
|
|||||||
|
# 环境变量(含密码和密钥)
|
||||||
|
docker/.env
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Docker 数据卷
|
||||||
|
docker/data/
|
||||||
|
docker/volumes/
|
||||||
|
|
||||||
|
# SSL 证书
|
||||||
|
docker/nginx/ssl/*.pem
|
||||||
|
docker/nginx/ssl/*.key
|
||||||
|
docker/nginx/ssl/*.crt
|
||||||
|
|
||||||
|
# IDE
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*.egg-info/
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
|
||||||
|
# Node
|
||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
.next/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
|
||||||
|
# 临时文件
|
||||||
|
*.tmp
|
||||||
|
*.bak
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
# ============================================================
|
||||||
|
# Dify Docker 内部服务通信环境变量
|
||||||
|
# 此文件由 docker-compose.yml 的 env_file 引用
|
||||||
|
# 请勿提交到 Git,已在 .gitignore 中排除
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# 内部服务间通信不需要修改以下值
|
||||||
|
# DB/Redis 等地址使用 docker-compose 中的服务名
|
||||||
|
|
||||||
|
EDITION=SELF_HOSTED
|
||||||
|
CONF_GIT_SYNC_ENABLED=false
|
||||||
|
|
||||||
|
# 知识库检索配置
|
||||||
|
INDEXING_MAX_SEGMENTATION_TOKENS=500
|
||||||
|
INDEXING_MAX_SEGMENTATION_CHUNKS_PER_FILE=10
|
||||||
|
INDEXING_SEGMENTATION_SEPARATOR=['\n','\n\n',' ','。','!','?',';',';']
|
||||||
|
|
||||||
|
# 批量处理配置
|
||||||
|
BATCH_PROCESSING_ENABLED=true
|
||||||
|
|
||||||
|
# 多模态配置
|
||||||
|
MULTIMODAL_ENABLED=true
|
||||||
|
|
||||||
|
# 文件上传限制
|
||||||
|
UPLOAD_FILE_SIZE_LIMIT=50
|
||||||
|
UPLOAD_IMAGE_FILE_SIZE_LIMIT=20
|
||||||
|
|
||||||
|
# Celery 队列配置
|
||||||
|
CELERY_QUEUES=dataset,generation,mail
|
||||||
|
|
||||||
|
# 文档解析配置
|
||||||
|
DOCUMENT_PARSERS=pdf,txt,md,csv,xlsx,pptx,docx
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
# ============================================================
|
||||||
|
# Dify 环境变量配置模板
|
||||||
|
# 西安云美电子科技有限公司 - 企业知识库
|
||||||
|
#
|
||||||
|
# 使用方法:cp .env.example .env && 编辑 .env 填写实际值
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
# ====================== 基础配置 ======================
|
||||||
|
|
||||||
|
# 运行模式:api(默认)/ worker
|
||||||
|
DIFY_MODE=api
|
||||||
|
|
||||||
|
# 日志级别:DEBUG / INFO / WARNING / ERROR
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
|
||||||
|
# 安全密钥(必须修改!用于加密 Token 等敏感数据)
|
||||||
|
# 生成方法:openssl rand -hex 32
|
||||||
|
SECRET_KEY=请替换为随机生成的密钥
|
||||||
|
|
||||||
|
# 应用端口(API 服务内部端口)
|
||||||
|
HTTP_APP_PORT=5001
|
||||||
|
|
||||||
|
# ====================== 数据库配置 ======================
|
||||||
|
|
||||||
|
POSTGRES_USER=postgres
|
||||||
|
POSTGRES_PASSWORD=请替换为强密码
|
||||||
|
POSTGRES_DB=dify
|
||||||
|
|
||||||
|
# ====================== Redis 配置 ======================
|
||||||
|
|
||||||
|
REDIS_PASSWORD=请替换为强密码
|
||||||
|
REDIS_DB=0
|
||||||
|
|
||||||
|
# ====================== 存储配置 ======================
|
||||||
|
|
||||||
|
# 存储类型:local / s3
|
||||||
|
STORAGE_TYPE=local
|
||||||
|
STORAGE_LOCAL_PATH=/app/api/storage
|
||||||
|
|
||||||
|
# ====================== 向量数据库配置 ======================
|
||||||
|
|
||||||
|
# 向量数据库类型:qdrant / weaviate / elasticsearch
|
||||||
|
VECTOR_STORE=qdrant
|
||||||
|
|
||||||
|
# Qdrant 配置
|
||||||
|
QDRANT_PORT=6333
|
||||||
|
QDRANT_API_KEY=
|
||||||
|
|
||||||
|
# ====================== DeepSeek 模型配置 ======================
|
||||||
|
|
||||||
|
# DeepSeek API 地址(国内可直连)
|
||||||
|
DEEPSEEK_API_BASE=https://api.deepseek.com
|
||||||
|
DEEPSEEK_API_KEY=请替换为你的DeepSeek API Key
|
||||||
|
|
||||||
|
# ====================== Web 前端配置 ======================
|
||||||
|
|
||||||
|
# 如果使用 Nginx 反向代理且前后端同域名,留空即可
|
||||||
|
NEXT_PUBLIC_API_BASE_URL=
|
||||||
|
NEXT_PUBLIC_DEPLOY_ENV=PRODUCTION
|
||||||
|
|
||||||
|
# ====================== Nginx 配置 ======================
|
||||||
|
|
||||||
|
NGINX_PORT=80
|
||||||
|
NGINX_SSL_PORT=443
|
||||||
|
|
||||||
|
# ====================== SSRF 代理配置 ======================
|
||||||
|
|
||||||
|
SSRF_PROXY_PORT=3128
|
||||||
|
|
||||||
|
# ====================== Sandbox 配置(可选)======================
|
||||||
|
|
||||||
|
SANDBOX_API_KEY=
|
||||||
|
SANDBOX_URL=
|
||||||
|
SANDBOX_WORKER_TIMEOUT=15
|
||||||
|
SANDBOX_ENABLE_NETWORK=true
|
||||||
|
|
||||||
|
# ====================== S3 存储配置(可选)======================
|
||||||
|
|
||||||
|
S3_USE_CUSTOM_DOMAIN=true
|
||||||
|
S3_ENDPOINT=
|
||||||
|
S3_BUCKET_NAME=
|
||||||
|
S3_ACCESS_KEY=
|
||||||
|
S3_SECRET_KEY=
|
||||||
|
S3_REGION=
|
||||||
@@ -0,0 +1,147 @@
|
|||||||
|
# Dify 部署指南
|
||||||
|
|
||||||
|
> 西安云美电子科技有限公司 - 企业知识库
|
||||||
|
|
||||||
|
## 前置要求
|
||||||
|
|
||||||
|
| 项目 | 最低要求 | 推荐配置 |
|
||||||
|
|------|---------|---------|
|
||||||
|
| CPU | 4 核 | 8 核+ |
|
||||||
|
| 内存 | 8 GB | 16 GB+ |
|
||||||
|
| 磁盘 | 50 GB SSD | 100 GB+ SSD |
|
||||||
|
| Docker | ≥ 20.10 | 最新稳定版 |
|
||||||
|
| Docker Compose | ≥ 2.0 | 最新稳定版 |
|
||||||
|
| 操作系统 | Ubuntu 20.04+ | Ubuntu 22.04 LTS |
|
||||||
|
|
||||||
|
## 快速部署
|
||||||
|
|
||||||
|
### 1. 克隆项目
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone http://git.xayunmei.com/yunmei/dify-app.git
|
||||||
|
cd dify-app
|
||||||
|
git checkout feature/dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 配置环境变量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd docker
|
||||||
|
cp .env.example .env
|
||||||
|
|
||||||
|
# 必须修改以下配置:
|
||||||
|
# - SECRET_KEY(安全密钥,用 openssl rand -hex 32 生成)
|
||||||
|
# - POSTGRES_PASSWORD(数据库密码)
|
||||||
|
# - REDIS_PASSWORD(Redis 密码)
|
||||||
|
# - DEEPSEEK_API_KEY(DeepSeek API 密钥)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 配置 Nginx(可选)
|
||||||
|
|
||||||
|
如果使用自定义域名,编辑 `nginx/nginx.conf`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p nginx
|
||||||
|
# 将 SSL 证书放入 nginx/ssl/ 目录
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 启动服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 拉取镜像
|
||||||
|
docker compose pull
|
||||||
|
|
||||||
|
# 后台启动所有服务
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# 查看服务状态
|
||||||
|
docker compose ps
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
docker compose logs -f
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 初始化
|
||||||
|
|
||||||
|
启动完成后,打开浏览器访问:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://<服务器IP>:80
|
||||||
|
```
|
||||||
|
|
||||||
|
首次访问会要求设置管理员账号和密码。
|
||||||
|
|
||||||
|
## 服务端口说明
|
||||||
|
|
||||||
|
| 服务 | 容器端口 | 映射端口 | 说明 |
|
||||||
|
|------|---------|---------|------|
|
||||||
|
| Nginx | 80/443 | 80/443 | 主入口 |
|
||||||
|
| Dify API | 5001 | 内部 | API 服务 |
|
||||||
|
| Dify Web | 3000 | 内部 | 前端 |
|
||||||
|
| PostgreSQL | 5432 | 内部 | 数据库 |
|
||||||
|
| Redis | 6379 | 内部 | 缓存 |
|
||||||
|
| Qdrant | 6333 | 6333 | 向量数据库 |
|
||||||
|
|
||||||
|
## 常用命令
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 停止所有服务
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# 停止并清除数据卷(危险!)
|
||||||
|
docker compose down -v
|
||||||
|
|
||||||
|
# 重启单个服务
|
||||||
|
docker compose restart api
|
||||||
|
docker compose restart worker
|
||||||
|
|
||||||
|
# 查看单个服务日志
|
||||||
|
docker compose logs -f api
|
||||||
|
docker compose logs -f worker
|
||||||
|
|
||||||
|
# 更新镜像
|
||||||
|
docker compose pull
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
## 备份与恢复
|
||||||
|
|
||||||
|
### 数据库备份
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose exec db pg_dump -U postgres dify > backup_$(date +%Y%m%d).sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### 数据库恢复
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose exec -T db psql -U postgres dify < backup_20260606.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
### 数据卷备份
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm -v dify-app_api_storage:/data -v $(pwd):/backup alpine tar czf /backup/api_storage_$(date +%Y%m%d).tar.gz -C /data .
|
||||||
|
```
|
||||||
|
|
||||||
|
## 故障排查
|
||||||
|
|
||||||
|
| 问题 | 排查方法 |
|
||||||
|
|------|---------|
|
||||||
|
| 服务启动失败 | `docker compose logs <service>` |
|
||||||
|
| 数据库连接失败 | 检查 `.env` 中密码是否一致 |
|
||||||
|
| 知识库索引失败 | 检查 Worker 日志,确认 Celery 队列正常 |
|
||||||
|
| 模型调用失败 | 检查 DeepSeek API Key 是否有效 |
|
||||||
|
| 端口冲突 | 修改 `.env` 中对应端口号 |
|
||||||
|
|
||||||
|
## 安全注意事项
|
||||||
|
|
||||||
|
1. **SECRET_KEY 必须使用随机值**,不要使用默认值
|
||||||
|
2. **生产环境关闭 Qdrant 外部端口**(注释掉 ports 映射)
|
||||||
|
3. **定期更换数据库密码**
|
||||||
|
4. **配置 Nginx SSL 证书**,不要在公网裸跑 HTTP
|
||||||
|
5. **.env 文件不要提交到 Git**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_最后更新: 2026-06-06_
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
# Docker Compose for Dify Self-Hosted
|
||||||
|
# 西安云美电子科技有限公司 - 企业知识库
|
||||||
|
# 版本:基于 Dify v1.x 社区版
|
||||||
|
#
|
||||||
|
# 使用方法:
|
||||||
|
# cp .env.example .env
|
||||||
|
# 编辑 .env 填写实际值
|
||||||
|
# docker compose up -d
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
### ======================== 基础设施 ========================
|
||||||
|
|
||||||
|
# PostgreSQL 数据库
|
||||||
|
db:
|
||||||
|
image: postgres:15-alpine
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||||
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||||
|
POSTGRES_DB: ${POSTGRES_DB:-dify}
|
||||||
|
volumes:
|
||||||
|
- db_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
# Redis 缓存
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
restart: always
|
||||||
|
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]
|
||||||
|
interval: 10s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
### ======================== Dify 核心服务 ========================
|
||||||
|
|
||||||
|
# Dify API 后端
|
||||||
|
api:
|
||||||
|
image: langgenius/dify-api:latest
|
||||||
|
restart: always
|
||||||
|
env_file:
|
||||||
|
- .env.docker
|
||||||
|
environment:
|
||||||
|
# 基础配置
|
||||||
|
- MODE=${DIFY_MODE:-api}
|
||||||
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||||
|
- LOG_FILE=${LOG_FILE:-}
|
||||||
|
- SECRET_KEY=${SECRET_KEY}
|
||||||
|
# 数据库配置
|
||||||
|
- DB_USERNAME=${POSTGRES_USER:-postgres}
|
||||||
|
- DB_PASSWORD=${POSTGRES_PASSWORD}
|
||||||
|
- DB_HOST=db
|
||||||
|
- DB_PORT=5432
|
||||||
|
- DB_DATABASE=${POSTGRES_DB:-dify}
|
||||||
|
# Redis 配置
|
||||||
|
- REDIS_HOST=redis
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||||
|
- REDIS_DB=${REDIS_DB:-0}
|
||||||
|
# 存储配置
|
||||||
|
- STORAGE_TYPE=${STORAGE_TYPE:-local}
|
||||||
|
- STORAGE_LOCAL_PATH=/app/api/storage
|
||||||
|
# 向量数据库
|
||||||
|
- VECTOR_STORE=${VECTOR_STORE:-qdrant}
|
||||||
|
- QDRANT_URL=http://qdrant:6333
|
||||||
|
- QDRANT_API_KEY=${QDRANT_API_KEY:-}
|
||||||
|
# S3 配置(可选)
|
||||||
|
- S3_USE_CUSTOM_DOMAIN=${S3_USE_CUSTOM_DOMAIN:-true}
|
||||||
|
- S3_ENDPOINT=${S3_ENDPOINT:-}
|
||||||
|
- S3_BUCKET_NAME=${S3_BUCKET_NAME:-}
|
||||||
|
- S3_ACCESS_KEY=${S3_ACCESS_KEY:-}
|
||||||
|
- S3_SECRET_KEY=${S3_SECRET_KEY:-}
|
||||||
|
- S3_REGION=${S3_REGION:-}
|
||||||
|
# SandBox 配置
|
||||||
|
- CODE_EXECUTION_API_KEY=${SANDBOX_API_KEY:-}
|
||||||
|
- CODE_EXECUTION_API_URL=${SANDBOX_URL:-}
|
||||||
|
# 模型配置(DeepSeek)
|
||||||
|
- DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
|
||||||
|
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
|
||||||
|
# 其他
|
||||||
|
- HTTP_APP_PORT=5001
|
||||||
|
- CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
|
||||||
|
- CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
|
||||||
|
volumes:
|
||||||
|
- api_storage:/app/api/storage
|
||||||
|
- app_data:/app/data
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
redis:
|
||||||
|
condition: service_healthy
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
# Dify Web 前端
|
||||||
|
web:
|
||||||
|
image: langgenius/dify-web:latest
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- NEXT_PUBLIC_API_BASE_URL=${NEXT_PUBLIC_API_BASE_URL:-}
|
||||||
|
- NEXT_PUBLIC_DEPLOY_ENV=${NEXT_PUBLIC_DEPLOY_ENV:-PRODUCTION}
|
||||||
|
volumes:
|
||||||
|
- web_config:/app/config
|
||||||
|
depends_on:
|
||||||
|
- api
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
# Dify Worker(异步任务处理)
|
||||||
|
worker:
|
||||||
|
image: langgenius/dify-api:latest
|
||||||
|
restart: always
|
||||||
|
env_file:
|
||||||
|
- .env.docker
|
||||||
|
environment:
|
||||||
|
# 基础配置
|
||||||
|
- MODE=${DIFY_MODE:-worker}
|
||||||
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||||
|
- SECRET_KEY=${SECRET_KEY}
|
||||||
|
# 数据库配置
|
||||||
|
- DB_USERNAME=${POSTGRES_USER:-postgres}
|
||||||
|
- DB_PASSWORD=${POSTGRES_PASSWORD}
|
||||||
|
- DB_HOST=db
|
||||||
|
- DB_PORT=5432
|
||||||
|
- DB_DATABASE=${POSTGRES_DB:-dify}
|
||||||
|
# Redis 配置
|
||||||
|
- REDIS_HOST=redis
|
||||||
|
- REDIS_PORT=6379
|
||||||
|
- REDIS_PASSWORD=${REDIS_PASSWORD}
|
||||||
|
- REDIS_DB=${REDIS_DB:-0}
|
||||||
|
# 存储配置
|
||||||
|
- STORAGE_TYPE=${STORAGE_TYPE:-local}
|
||||||
|
- STORAGE_LOCAL_PATH=/app/api/storage
|
||||||
|
# 向量数据库
|
||||||
|
- VECTOR_STORE=${VECTOR_STORE:-qdrant}
|
||||||
|
- QDRANT_URL=http://qdrant:6333
|
||||||
|
- QDRANT_API_KEY=${QDRANT_API_KEY:-}
|
||||||
|
# 模型配置(DeepSeek)
|
||||||
|
- DEEPSEEK_API_BASE=${DEEPSEEK_API_BASE:-https://api.deepseek.com}
|
||||||
|
- DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:-}
|
||||||
|
# Celery
|
||||||
|
- CELERY_BROKER_URL=redis://:${REDIS_PASSWORD}@redis:6379/1
|
||||||
|
- CELERY_RESULT_BACKEND=redis://:${REDIS_PASSWORD}@redis:6379/1
|
||||||
|
volumes:
|
||||||
|
- api_storage:/app/api/storage
|
||||||
|
- app_data:/app/data
|
||||||
|
depends_on:
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
redis:
|
||||||
|
condition: service_healthy
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
### ======================== 向量数据库 ========================
|
||||||
|
|
||||||
|
# Qdrant 向量数据库(默认)
|
||||||
|
qdrant:
|
||||||
|
image: qdrant/qdrant:latest
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- qdrant_data:/qdrant/storage
|
||||||
|
environment:
|
||||||
|
- QDRANT_API_KEY=${QDRANT_API_KEY:-}
|
||||||
|
ports:
|
||||||
|
- "${QDRANT_PORT:-6333}:6333"
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
### ======================== 安全与代理 ========================
|
||||||
|
|
||||||
|
# Nginx 反向代理
|
||||||
|
nginx:
|
||||||
|
image: nginx:alpine
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "${NGINX_PORT:-80}:80"
|
||||||
|
- "${NGINX_SSL_PORT:-443}:443"
|
||||||
|
volumes:
|
||||||
|
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||||
|
- ./nginx/ssl:/etc/nginx/ssl:ro
|
||||||
|
- nginx_logs:/var/log/nginx
|
||||||
|
depends_on:
|
||||||
|
- api
|
||||||
|
- web
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
# SSRF 代理(安全防护)
|
||||||
|
ssrf-proxy:
|
||||||
|
image: ubuntu/squid:latest
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./ssrf-proxy/squid.conf.template:/etc/squid/squid.conf.template:ro
|
||||||
|
environment:
|
||||||
|
- HTTP_PROXY_PORT=${SSRF_PROXY_PORT:-3128}
|
||||||
|
ports:
|
||||||
|
- "${SSRF_PROXY_PORT:-3128}:3128"
|
||||||
|
networks:
|
||||||
|
- dify-network
|
||||||
|
|
||||||
|
### ======================== 可选服务 ========================
|
||||||
|
|
||||||
|
# Sandbox 代码执行环境(可选,按需启用)
|
||||||
|
# sandbox:
|
||||||
|
# image: langgenius/dify-sandbox:latest
|
||||||
|
# restart: always
|
||||||
|
# environment:
|
||||||
|
# - API_KEY=${SANDBOX_API_KEY}
|
||||||
|
# - GIN_MODE=release
|
||||||
|
# - WORKER_TIMEOUT=${SANDBOX_WORKER_TIMEOUT:-15}
|
||||||
|
# - ENABLE_NETWORK=${SANDBOX_ENABLE_NETWORK:-true}
|
||||||
|
# volumes:
|
||||||
|
# - sandbox_data:/data
|
||||||
|
# networks:
|
||||||
|
# - dify-network
|
||||||
|
|
||||||
|
# Elasticsearch(可选,替代 Qdrant)
|
||||||
|
# elasticsearch:
|
||||||
|
# image: elasticsearch:8.11.0
|
||||||
|
# restart: always
|
||||||
|
# volumes:
|
||||||
|
# - es_data:/usr/share/elasticsearch/data
|
||||||
|
# environment:
|
||||||
|
# - discovery.type=single-node
|
||||||
|
# - xpack.security.enabled=false
|
||||||
|
# - ES_JAVA_OPTS=-Xms512m -Xmx512m
|
||||||
|
# networks:
|
||||||
|
# - dify-network
|
||||||
|
|
||||||
|
# Weaviate(可选,替代 Qdrant)
|
||||||
|
# weaviate:
|
||||||
|
# image: semitechnologies/weaviate:latest
|
||||||
|
# restart: always
|
||||||
|
# volumes:
|
||||||
|
# - weaviate_data:/var/lib/weaviate
|
||||||
|
# environment:
|
||||||
|
# - QUERY_DEFAULTS_LIMIT=25
|
||||||
|
# - AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
|
||||||
|
# - PERSISTENCE_DATA_PATH=/var/lib/weaviate
|
||||||
|
# ports:
|
||||||
|
# - "8080:8080"
|
||||||
|
# networks:
|
||||||
|
# - dify-network
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db_data:
|
||||||
|
redis_data:
|
||||||
|
api_storage:
|
||||||
|
app_data:
|
||||||
|
qdrant_data:
|
||||||
|
nginx_logs:
|
||||||
|
# sandbox_data:
|
||||||
|
# es_data:
|
||||||
|
# weaviate_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
dify-network:
|
||||||
|
driver: bridge
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# 企业知识库项目 - 任务清单
|
||||||
|
|
||||||
|
> 项目:西安云美电子科技有限公司 企业知识库
|
||||||
|
> 技术栈:Dify 社区版(Docker)+ DeepSeek 模型
|
||||||
|
> 分支:feature/dev
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## M1: 环境搭建与 Docker 部署配置
|
||||||
|
|
||||||
|
- [x] M1.1.1 创建 `docker/` 目录结构
|
||||||
|
- [x] M1.1.2 编写 `docker/docker-compose.yml`(Dify 完整服务编排:api、web、worker、db、redis、nginx、ssrf-proxy 等)
|
||||||
|
- [x] M1.1.3 编写 `docker/.env.example`(所有环境变量模板,含数据库密码、Secret Key、API 端口等占位符)
|
||||||
|
- [x] M1.1.4 编写 `docker/.env.docker`(Docker 内部服务通信专用变量)
|
||||||
|
- [x] M1.1.5 编写 `docker/README.md`(部署步骤说明)
|
||||||
|
- [x] M1.2.1 编写 `.gitignore`(排除 .env、node_modules、data 卷等)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## M2: 知识库结构设计与文档编写
|
||||||
|
|
||||||
|
- [ ] M2.1.1 调研云美电子科技典型知识库分类(产品手册、技术规范、管理制度、培训资料等)
|
||||||
|
- [ ] M2.1.2 编写 `docs/knowledge-base-structure.md`(知识库分类结构设计)
|
||||||
|
- [ ] M2.1.3 设计知识库分段策略(文档分块大小、重叠策略)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## M3: 系统提示词设计
|
||||||
|
|
||||||
|
- [ ] M3.1.1 编写 `prompts/system-prompt.md`(Dify 知识库助手的系统提示词)
|
||||||
|
- [ ] M3.1.2 设计开场白与推荐问题
|
||||||
|
- [ ] M3.1.3 设计下一步问题建议策略
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## M4: 测试用例与性能基线
|
||||||
|
|
||||||
|
- [ ] M4.1.1 编写 `tests/test-cases.md`(功能测试用例:知识检索、问答质量、多轮对话等)
|
||||||
|
- [ ] M4.1.2 编写 `docs/performance-baseline.md`(性能基线指标:响应时间、准确率等)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## M5: API 集成文档
|
||||||
|
|
||||||
|
- [ ] M5.1.1 编写 `docs/api-integration.md`(Dify API 集成指南:对话、知识库管理接口)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## M6: 应用配置导出与最终整理
|
||||||
|
|
||||||
|
- [ ] M6.1.1 编写 `dsl/app-config.yaml`(Dify 应用 DSL 配置模板)
|
||||||
|
- [ ] M6.1.2 编写 `docs/deployment-guide.md`(完整部署指南)
|
||||||
|
- [ ] M6.1.3 创建项目 README.md
|
||||||
|
- [ ] M6.1.4 整理最终目录结构,确保所有文件就绪
|
||||||
|
- [ ] M6.1.5 创建最终 Tag(v1.0.0)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
_创建时间: 2026-06-06_
|
||||||
Reference in New Issue
Block a user