run
Dify 有三种常见运行方式,取决于你是「只想用起来」还是「要改代码开发」。
方式对比
| 方式 | 适合场景 | 访问地址 | 需要改代码 |
|---|---|---|---|
| 1. Docker Compose 全量部署 | 体验 / 自托管,不改源码 | http://localhost/install | 否 |
| 2. 本机源码开发 | 日常开发、调试 | http://localhost:3000 | 是 |
| 3. Dev Container | 统一环境、Codespaces、少配本机 | 同方式 2 | 是 |
方式 1:Docker Compose(最快跑起来)
前提:Docker + Docker Compose,建议 CPU ≥ 2 核、内存 ≥ 4GB。
cd docker
cp .env.example .env # 首次需要
docker compose up -d
浏览器打开:**http://localhost/install**,按向导完成初始化。
- 一次拉起 API、Web、数据库、Redis、向量库等
- 配置在
docker/.env(可从docker/envs/按需复制高级配置) - 改配置后:
docker compose up -d重新应用
方式 2:本机源码开发(官方推荐)
前提:uv、pnpm、Docker(只跑中间件)。
一次性准备
./dev/setup
会复制环境文件并安装依赖:
api/.env←api/.env.exampleweb/.env.local←web/.env.exampledocker/middleware.env←docker/envs/middleware.env.exampleuv sync(API)、pnpm install(根 workspace)
建议在 api/.env 里设置 SECRET_KEY(见 api/README.md)。
按顺序启动(多个终端)
| 步骤 | 命令 | 作用 |
|---|---|---|
| 1 | ./dev/start-docker-compose | PostgreSQL、Redis、Weaviate 等中间件 |
| 2 | ./dev/start-api | API(5001),会先跑数据库迁移 |
| 3 | ./dev/start-web | 前端(默认 3000) |
| 4 | ./dev/start-worker | Celery 异步任务(RAG、工作流等需要) |
| 5(可选) | ./dev/start-beat | 定时任务 |
访问:http://localhost:3000
默认 API 地址在 web/.env.local 里,例如 NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api。
仅启动中间件(不用 ./dev 脚本时)
cd docker
cp envs/middleware.env.example middleware.env
docker compose --env-file middleware.env -f docker-compose.middleware.yaml -p dify up -d
方式 3:Dev Container(你看到的 .devcontainer)
仓库在 .devcontainer/ 里配置了 Python 3.12 + Node LTS + Docker-in-Docker,用于 VS Code / Cursor 「在容器中重新打开」 或 GitHub Codespaces。
如何进入
- VS Code / Cursor:命令面板 →
Dev Containers: Reopen in Container - Codespaces:打开
.devcontainer/README.md里的 Codespaces 链接 - 也可点 README 里的 “Open in Dev Containers” 徽章
容器里会自动做什么
| 时机 | 脚本 | 内容 |
|---|---|---|
| 创建后 | post_create_command.sh | web 下 pnpm install、安装 uv、写入 shell 别名 |
| 每次启动 | post_start_command.sh | cd api && uv sync |
容器内常用别名(创建容器后可用)
| 别名 | 等价操作 |
|---|---|
start-containers | 启动 docker-compose.middleware.yaml 中间件 |
start-api | Flask API :5001 |
start-web | pnpm dev:inspect(前端) |
start-worker | Celery worker |
stop-containers | 停止中间件 |
典型流程(在 devcontainer 终端里,开多个 tab):
start-containers # 1. 中间件(依赖宿主机 Docker / DinD)
start-api # 2. API
start-web # 3. 前端
start-worker # 4. Worker
访问同样是 http://localhost:3000(端口会由 IDE 转发到本机)。
Dev Container 注意点
- 带 docker-in-docker,中间件要在容器里能访问 Docker;本机需已装 Docker Desktop 等。
- Codespaces 若登录
/signin异常,见.devcontainer/README.md的 workaround。 - Devcontainer 的
post_create不会跑./dev/setup,不会自动复制api/.env;首次开发建议在本机或容器里手动执行一次./dev/setup,或自己cp上述 env 文件。
架构示意(源码开发)
本机可能遇到的冲突
你机器上已有 5432 / 6379 上的 Postgres、Redis(例如 offer-ai-* 容器)。再启 Dify 中间件或全量 Compose 时可能 端口冲突。处理方式:
- 停掉占用端口的其他容器,或
- 在
docker/middleware.env/docker/.env里改掉DB_PORT、REDIS_PORT等映射。
怎么选
- 只想用 Dify、不改代码 → 方式 1(
docker compose up -d) - 在本机改 API / Web → 方式 2(
./dev/setup+ 各start-*) - 环境难配、团队要一致、或用 Codespaces → 方式 3(Dev Container)+ 仍要
start-containers/start-api/start-web/start-worker
如果你说一下更倾向哪种(全量 Docker / 本机开发 / Dev Container),我可以按那条路径一步步帮你执行并排查端口、env 等问题。