本文档涵盖了 Dify 平台的本地开发环境设置,包括 DevContainer 支持、GitHub Codespaces 和传统的本地设置。本页面侧重于开发工作流程和工具设置。有关生产部署配置,请参阅 Docker 部署。有关环境变量和配置管理,请参阅 环境配置。
Dify 支持多种开发环境方法,以适应不同的开发者偏好和限制。每种方法都提供了一个功能齐全的开发环境,支持热重载、调试功能和集成测试。
来源:.devcontainer/devcontainer.json1-52 api/README.md1-94 web/README.md1-119 .devcontainer/README.md1-38
开发环境需要特定版本的核心工具和运行时依赖。该平台使用现代包管理器和开发工具,以确保不同设置中的环境一致。
| 组件 | 版本 | 包管理器 | 配置文件 |
|---|---|---|---|
| Python | 3.11+ / 3.12 | UV 0.6.14 | api/pyproject.toml, api/uv.lock |
| Node.js | 22.11.x+ | pnpm 10.11.1 | web/package.json, web/pnpm-lock.yaml |
| Docker | 最新版 | Docker Compose v2 | docker/docker-compose.middleware.yaml |
来源:api/Dockerfile1-80 web/Dockerfile1-77 api/README.md43-56 web/README.md9-17
本地开发提供了最快的开发体验,可以直接访问主机系统工具并获得最大的性能。此方法需要手动安装依赖项,但提供了对开发环境的最大控制。
API 服务使用 UV 作为包管理器,取代了 1.3.0 版本之前的 Poetry 设置。开发服务器运行在端口 5001,并启用了热重载。
设置命令
启动中间件服务
配置 API 环境
安装依赖项并运行迁移
启动开发服务器
启动后台工作进程(可选)
来源:api/README.md11-78 api/docker/entrypoint.sh1-42
Web 前端使用 Next.js 和 pnpm 作为包管理器。开发服务器运行在端口 3000,并支持热模块重载。
设置命令
安装依赖项
配置环境
启动开发服务器
Web 服务连接到运行在端口 5001 的 API 服务。关键环境变量包括:
NEXT_PUBLIC_API_PREFIX:控制台 API 端点(默认为 http://:5001/console/api)NEXT_PUBLIC_PUBLIC_API_PREFIX:公共 API 端点(默认为 http://:5001/api)来源:web/README.md13-49 web/next.config.js16-67
DevContainers 提供了一个一致的、容器化的开发环境,可与 VS Code 和 GitHub Codespaces 配合使用。该设置会自动配置所有依赖项和开发工具。
DevContainer 特性
mcr.microsoft.com/devcontainers/python:3.12设置过程
自动安装依赖项(.devcontainer/post_create_command.sh1-15)
开发别名(.devcontainer/post_create_command.sh7-12)
start-api:启动 Flask 开发服务器start-worker:启动 Celery 工作进程start-web:启动 Next.js 开发服务器start-containers:启动 Docker 中间件运行时同步(.devcontainer/post_start_command.sh1-4)
来源:.devcontainer/devcontainer.json1-52 .devcontainer/Dockerfile1-5 .devcontainer/post_create_command.sh1-15 .devcontainer/post_start_command.sh1-4
GitHub Codespaces 提供基于云的开发环境,使用相同的 DevContainer 配置。此选项无需本地设置,即可在浏览器中提供完全配置的开发环境。
访问方法
Codespaces 配置
已知问题
来源:.devcontainer/README.md4-37
开发环境包括全面的测试和代码质量工具,这些工具会在 CI/CD 流水线中自动运行,并可以在开发过程中在本地执行。
API 测试命令
单元测试
配置测试
代码格式化
Web 测试命令
单元测试
代码 Linting
提交前钩子:存储库包含提交前钩子,可自动对修改的文件运行 linting 和测试
来源: .github/workflows/api-tests.yml47-94 dev/reformat1-19 web/.husky/pre-commit1-79 dev/pytest/pytest_vdb.sh1-22
开发环境与 GitHub Actions 集成,实现持续集成,为所有代码更改提供自动化测试和验证。
CI/CD集成
开发命令摘要
| 任务 | 命令 | 描述 |
|---|---|---|
| 启动 API | uv run flask run --host 0.0.0.0 --port=5001 --debug | 带热重载的开发服务器 |
| 启动 Worker | uv run celery -A app.celery worker -P gevent -c 1 | 后台任务处理 |
| 启动 Web | pnpm run dev | Next.js 开发服务器 |
| 运行测试 | uv run bash dev/pytest/pytest_all_tests.sh | 完整的测试套件 |
| 格式化代码 | dev/reformat | 自动修复 linting 问题 |
| 类型检查 | dev/mypy-check | 静态类型验证 |
来源: .github/workflows/api-tests.yml1-94 .github/workflows/style.yml1-184 .github/workflows/vdb-tests.yml1-84 api/docker/entrypoint.sh30-41