本地源码启动

前置条件

安装 Dify 之前, 请确保你的机器已满足最低安装要求:

  • CPU >= 2 Core
  • RAM >= 4 GiB
操作系统 软件 说明
macOS 10.14 or later Docker Desktop 将 Docker 虚拟机(VM)设置为使用至少 2 个虚拟 CPU(vCPU)和 8 GB 的初始内存。否则,安装可能会失败。有关更多信息,请参阅在 Mac 上安装 Docker Desktop
Linux platforms

Docker 19.03 or later
Docker Compose 1.25.1 or later

请参阅安装 Docker安装 Docker Compose 以获取更多信息。
Windows with WSL 2 enabled Docker Desktop 我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。有关更多信息,请参阅使用 WSL 2 后端在 Windows 上安装 Docker Desktop

若需要使用 OpenAI TTS,需要在系统中安装 FFmpeg 才可正常使用,详情可参考:Link

Clone Dify 代码:

  1. git clone https://github.com/langgenius/dify.git

在启用业务服务之前,我们需要先部署 PostgreSQL / Redis / Weaviate(如果本地没有的话),可以通过以下命令启动:

  1. cd docker
  2. cp middleware.env.example middleware.env
  3. docker compose -f docker-compose.middleware.yaml up -d

服务端部署

  • API 接口服务
  • Worker 异步队列消费服务

安装基础环境

服务器启动需要 Python 3.11 或 3.12。建议使用 pyenv 快速安装 Python 环境。

要安装其他 Python 版本,请使用 pyenv install

  1. pyenv install 3.11

要切换到 “3.11” Python 环境,请使用以下命令:

  1. pyenv global 3.11

启动步骤

  1. 进入 api 目录

    1. cd api
  2. 复制环境变量配置文件

    1. cp .env.example .env
  3. 生成随机密钥,并替换 .envSECRET_KEY 的值

    1. awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env
  4. 安装依赖包

    Dify API 服务使用 Poetry 来管理依赖。你可以执行 poetry shell 来激活环境。

    1. poetry env use 3.11
    2. poetry install
  5. 执行数据库迁移

    将数据库结构迁移至最新版本。

    1. poetry shell
    2. flask db upgrade
  6. 启动 API 服务

    1. flask run --host 0.0.0.0 --port=5001 --debug

    正确输出:

    1. * Debug mode: on
    2. INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    3. * Running on all addresses (0.0.0.0)
    4. * Running on http://127.0.0.1:5001
    5. INFO:werkzeug:Press CTRL+C to quit
    6. INFO:werkzeug: * Restarting with stat
    7. WARNING:werkzeug: * Debugger is active!
    8. INFO:werkzeug: * Debugger PIN: 695-801-919
  7. 启动 Worker 服务

    用于消费异步队列任务,如数据集文件导入、更新数据集文档等异步操作。 Linux / MacOS 启动:

    1. celery -A app.celery worker -P gevent -c 1 -Q dataset,generation,mail,ops_trace --loglevel INFO

    如果使用 Windows 系统启动,请替换为该命令:

    1. celery -A app.celery worker -P solo --without-gossip --without-mingle -Q dataset,generation,mail,ops_trace --loglevel INFO

    正确输出:

    1. -------------- celery@TAKATOST.lan v5.2.7 (dawn-chorus)
    2. --- ***** -----
    3. -- ******* ---- macOS-10.16-x86_64-i386-64bit 2023-07-31 12:58:08
    4. - *** --- * ---
    5. - ** ---------- [config]
    6. - ** ---------- .> app: app:0x7fb568572a10
    7. - ** ---------- .> transport: redis://:**@localhost:6379/1
    8. - ** ---------- .> results: postgresql://postgres:**@localhost:5432/dify
    9. - *** --- * --- .> concurrency: 1 (gevent)
    10. -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
    11. --- ***** -----
    12. -------------- [queues]
    13. .> dataset exchange=dataset(direct) key=dataset
    14. .> generation exchange=generation(direct) key=generation
    15. .> mail exchange=mail(direct) key=mail
    16. [tasks]
    17. . tasks.add_document_to_index_task.add_document_to_index_task
    18. . tasks.clean_dataset_task.clean_dataset_task
    19. . tasks.clean_document_task.clean_document_task
    20. . tasks.clean_notion_document_task.clean_notion_document_task
    21. . tasks.create_segment_to_index_task.create_segment_to_index_task
    22. . tasks.deal_dataset_vector_index_task.deal_dataset_vector_index_task
    23. . tasks.document_indexing_sync_task.document_indexing_sync_task
    24. . tasks.document_indexing_task.document_indexing_task
    25. . tasks.document_indexing_update_task.document_indexing_update_task
    26. . tasks.enable_segment_to_index_task.enable_segment_to_index_task
    27. . tasks.generate_conversation_summary_task.generate_conversation_summary_task
    28. . tasks.mail_invite_member_task.send_invite_member_mail_task
    29. . tasks.remove_document_from_index_task.remove_document_from_index_task
    30. . tasks.remove_segment_from_index_task.remove_segment_from_index_task
    31. . tasks.update_segment_index_task.update_segment_index_task
    32. . tasks.update_segment_keyword_index_task.update_segment_keyword_index_task
    33. [2023-07-31 12:58:08,831: INFO/MainProcess] Connected to redis://:**@localhost:6379/1
    34. [2023-07-31 12:58:08,840: INFO/MainProcess] mingle: searching for neighbors
    35. [2023-07-31 12:58:09,873: INFO/MainProcess] mingle: all alone
    36. [2023-07-31 12:58:09,886: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6379/1.
    37. [2023-07-31 12:58:09,890: INFO/MainProcess] celery@TAKATOST.lan ready.

前端页面部署

Web 前端客户端页面服务

安装基础环境

Web 前端服务启动需要用到 Node.js v18.x (LTS)NPM 版本 8.x.x Yarn

  • 安装 NodeJS + NPM

进入 https://nodejs.org/en/download,选择对应操作系统的 v18.x 以上的安装包下载并安装,建议 stable 版本,已自带 NPM。

启动步骤

  1. 进入 web 目录

    1. cd web
  2. 安装依赖包

    1. npm install
  3. 配置环境变量。在当前目录下创建文件 .env.local,并复制.env.example中的内容。根据需求修改这些环境变量的值:

    1. # For production release, change this to PRODUCTION
    2. NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
    3. # The deployment edition, SELF_HOSTED
    4. NEXT_PUBLIC_EDITION=SELF_HOSTED
    5. # The base URL of console application, refers to the Console base URL of WEB service if console domain is
    6. # different from api or web app domain.
    7. # example: http://cloud.dify.ai/console/api
    8. NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
    9. # The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
    10. # console or api domain.
    11. # example: http://udify.app/api
    12. NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api
    13. # SENTRY
    14. NEXT_PUBLIC_SENTRY_DSN=
    15. NEXT_PUBLIC_SENTRY_ORG=
    16. NEXT_PUBLIC_SENTRY_PROJECT=
  4. 构建代码

    1. npm run build
  5. 启动 web 服务

    1. npm run start
    2. # or
    3. yarn start
    4. # or
    5. pnpm start

正常启动后,终端会输出如下信息:

  1. ready - started server on 0.0.0.0:3000, url: http://localhost:3000
  2. warn - You have enabled experimental feature (appDir) in next.config.js.
  3. warn - Experimental features are not covered by semver, and may cause unexpected or broken application behavior. Use at your own risk.
  4. info - Thank you for testing `appDir` please leave your feedback at https://nextjs.link/app-feedback

访问 Dify

最后,访问 http://127.0.0.1:3000 即可使用本地部署的 Dify。