Dify v0.6.9源码部署

news2024/12/25 16:02:05

一.前置条件

克隆Dify v0.6.9代码:

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

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

cd docker
docker compose -f docker-compose.middleware.yaml up -d

增加数据卷db_data_postgres:

version: '3'
services:
  # The postgres database.
  db:
    image: postgres:15-alpine
    restart: always
    environment:
      # The password for the default postgres user.
      POSTGRES_PASSWORD: difyai123456
      # The name of the default postgres database.
      POSTGRES_DB: dify
      # postgres data directory
      PGDATA: /var/lib/postgresql/data/pgdata
    volumes:
      - db_data_postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
volumes:
  db_data_postgres: 

PyCharm界面如下所示:

Docker Desktop界面如下所示:

Portainer界面如下所示:

二.服务端部署

1.进入 api 目录

cd api

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

cp .env.example .env

3.生成随机密钥,并替换 .envSECRET_KEY 的值

openssl rand -base64 42
sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env

4.安装依赖包

pip install -r requirements.txt

5.执行数据库迁移

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

flask db upgrade

6.启动 API 服务

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

正确输出:

(dify-0.6.9) root@MM-202203161213:/mnt/l/20230620_LLM_Model/20230923_LLMOps/dify-0.6.9/api# flask run --host 0.0.0.0 --port=5001 --debug
None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.
/root/.virtualenvs/dify-0.6.9/lib/python3.10/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
 * Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5001
 * Running on http://172.29.255.17:5001
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat
None of PyTorch, TensorFlow >= 2.0, or Flax have been found. Models won't be available and only tokenizers, configuration and file/data utilities can be used.
/root/.virtualenvs/dify-0.6.9/lib/python3.10/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
  warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 130-911-538

7.启动 Worker 服务

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

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

解释命令如下所示:

参数解释
celeryCelery 命令行工具。
-A app.celery指定 Celery 应用实例的位置,这里是 app.celery,表示在 app 模块中的 celery 实例。
worker启动一个 Celery worker 进程。
-P gevent指定并发池为 gevent,这是一个基于协程的并发库,用于处理并发任务。
-c 1指定并发工作进程的数量为 1。
-Q dataset,generation,mail指定这个 worker 处理的任务队列为 dataset、generation 和 mail。
–loglevel INFO将日志级别设置为 INFO,以获取详细的运行信息。

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

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

正确输出:

三.前端页面部署

Web 前端服务启动的基础条件推荐为需要用到 Node.js v18.x (LTS) 、NPM 版本 8.x.x 或 Yarn。

1.进入 web 目录

cd web

2.安装依赖包

npm install

3.配置环境变量

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

# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api

# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ORG=
NEXT_PUBLIC_SENTRY_PROJECT=

4.构建代码

npm run build

5.启动 Web 服务

npm run dev

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

PS L:\20230620_LLM_Model\20230923_LLMOps\dify-0.6.9\web> npm run dev  

> dify-web@0.6.9 dev
> next dev          

   ▲ Next.js 14.1.0
   - Local:        http://localhost:3000
   - Environments: .env.local           

   automatically enabled Fast Refresh for 1 custom loader
 ✓ Ready in 17.1s

访问 http://127.0.0.1:3000 即可使用本地部署的 Dify。设置管理员密码:

根据邮箱和密码登录Dify平台:

然后可看到探索、工作室、知识库、工具界面:

四.Dify数据表

1.Dify技术栈

Dify平台用到技术栈主要是Celery、Docker、Flask、Nginx、Postgresql、Python、React Flow、React、Redis、Weaviate等。分析源码系统比较核心的还是搞懂数据表结构和业务操作流程,相对来说前后端数据库框架还是比较固定和成熟的。

2.Dify表结构

SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'public';

已经生成包含两列(表名字和解释)的详细表格,如下所示:

表名字解释
alembic_versionAlembic 版本控制表
account_integrates账号整合信息表
api_requestsAPI 请求记录表
app_dataset_joins应用数据集关联表
celery_taskmetaCelery 任务元数据表
celery_tasksetmetaCelery 任务集合元数据表
dataset_process_rules数据集处理规则表
dataset_queries数据集查询记录表
dify_setupsDify 设置表
end_users终端用户表
installed_apps已安装应用表
invitation_codes邀请码表
message_chains消息链表
message_feedbacks消息反馈表
operation_logs操作日志表
pinned_conversations置顶会话表
saved_messages保存的消息表
accounts账户信息表
data_source_bindings数据源绑定表
tool_providers工具提供商表
document_segments文档分段表
provider_models提供商模型表
tenant_default_models租户默认模型表
tenant_preferred_model_providers租户首选模型提供商表
providers提供商表
provider_orders提供商订单表
documents文档表
dataset_retriever_resources数据集检索资源表
api_tokensAPI 令牌表
api_based_extensions基于 API 的扩展表
upload_files上传文件表
datasets数据集表
dataset_collection_bindings数据集集合绑定表
message_annotations消息注释表
app_annotation_hit_histories应用注释命中历史表
app_annotation_settings应用注释设置表
tenants租户表
tool_builtin_providers工具内置提供商表
tool_published_apps工具发布应用表
tool_model_invokes工具模型调用表
tool_conversation_variables工具对话变量表
tool_files工具文件表
message_files消息文件表
app_model_configs应用模型配置表
tenant_account_joins租户账户关联表
dataset_keyword_tables数据集关键字表
embeddings嵌入表
workflow_app_logs工作流应用日志表
workflow_node_executions工作流节点执行表
workflow_runs工作流运行表
workflows工作流表
apps应用表
conversations会话表
messages消息表
message_agent_thoughts消息代理想法表
tag_bindings标签绑定表
tags标签表
recommended_apps推荐应用表
sites站点表
tool_api_providers工具 API 提供商表
tool_label_bindings工具标签绑定表
tool_workflow_providers工具工作流提供商表

3.Postgres数据库

(1)information_schema

information_schema 是一个符合 SQL 标准的模式,它包含了视图,这些视图提供关于数据库元数据的信息,如表、列、视图和约束等。它提供了数据库的自描述能力,使得应用程序可以查询这些视图来发现数据库结构和约束。

(2)pg_catalog

pg_catalog 是 PostgreSQL 的系统模式,包含了系统表和视图,这些系统表和视图存储了关于数据库系统对象和元数据的信息。这些对象包括表、列、索引、函数和数据类型等。pg_catalog 是 PostgreSQL 特有的,提供了对数据库对象的低级访问。

(3)public

public 是 PostgreSQL 中的默认模式,所有新创建的数据库对象如果没有指定模式名,就会被放置在public模式中。用户通常在public模式中创建他们的表、视图、序列和函数等。

最后就可以愉快的打断点调试源代码了。

参考文献

[1] 本地源码启动:https://docs.dify.ai/v/zh-hans/getting-started/install-self-hosted/local-source-code

[2] 本地部署相关:https://docs.dify.ai/v/zh-hans/learn-more/faq/install-faq

[3] 文本转语音遇到这个错误怎么办:https://docs.dify.ai/v/zh-hans/learn-more/faq/install-faq#id-15.-wen-ben-zhuan-yu-yin-yu-dao-zhe-ge-cuo-wu-zen-mo-ban

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1905872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#描述-计算机视觉OpenCV(5):直方图算法

C#描述-计算机视觉OpenCV&#xff08;5&#xff09;&#xff1a;直方图算法 前文链接图像直方图灰度直方图的计算灰度直方图的绘制BGR三通道的直方图直方图的均衡化算法相似图像检测 前文链接 文中没提到的东西&#xff0c;很可能都在前文描述过 C#描述-计算机视觉OpenCV&…

[AI 大模型] OpenAI ChatGPT

文章目录 ChatGPT 简介ChatGPT 的模型架构ChatGPT的发展历史节点爆发元年AI伦理和安全 ChatGPT 新技术1. 技术进步2. 应用领域3. 代码示例4. 对话示例 ChatGPT 简介 ChatGPT 是由 OpenAI 开发的一个大型语言模型&#xff0c;基于GPT-4架构。它能够理解和生成自然语言文本&…

CentOS7安装、CentOS7修改root密码

目录 1 下载镜像 2 使用VMware新建一个虚拟机 3 centos7修改root密码 1 下载镜像 开源镜像站-阿里云centos-7.9.2009-isos-x86_64安装包是阿里云官方提供的开源镜像免费下载服务,每天下载量过亿,阿里巴巴开源镜像站为包含centos-7.9.2009-isos-x86_64安装包的几百个操作系统…

移动校园(2):express构建服务器,小程序调用接口,展示数据

express做服务器框架&#xff0c;mssql连接数据库&#xff0c;uni-request调用接口 这是文件夹目录 然后是index.js内容 const expressrequire(express) const appexpress() const uniRouterrequire("./uniRouter") const config{user:sa,password:123456,server:l…

汉中茗茶小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;茶叶管理&#xff0c;论坛管理&#xff0c;公告管理&#xff0c;茗茶历史管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;茗茶信息&#xf…

正则表达式 先行断言 \S {} 示例

目录 数据准备一. 先行断言1.1 正向先行断言1.2 负向先行断言 二. 配合 {} 和 \S 使用2.1 匹配一个任意非空白字符2.2 匹配任意多个非空白字符2.3 匹配3个非空白字符2.4 匹配至少3个非空白字符2.5 匹配0~3个非空白字符 数据准备 ⏹文件1 0561-10 AAA 123 dfg 345 sss 0561-2…

2008-2021年各省份高技术产业科研与发展(RD)活动情况数据

R&D&#xff08;研究与发展&#xff09;活动是推动国家和公司技术创新和经济增长的关键因素。以下是对各省份高技术产业科研与发展&#xff08;R&D&#xff09;活动情况数据的介绍&#xff1a; 数据简介 定义&#xff1a;R&D指在产品开发、工艺设计、生产技术改进…

阿尔泰科技与西安交通大学陕西省某技术重点实验室共谋未来!

近日&#xff0c;阿尔泰科技的电子工程师&#xff08;熊工&#xff09;应邀前往西安交通大学陕西省某技术重点实验室&#xff0c;参与课题组项目的测试与调试工作。此次合作不仅成功推动了项目的进展&#xff0c;还为未来的深入合作奠定了坚实基础。 阿尔泰科技作为领先的测控技…

Flink SQL kafka连接器

版本说明 Flink和kafka的版本号有一定的匹配关系&#xff0c;操作成功的版本&#xff1a; Flink1.17.1kafka_2.12-3.3.1 添加kafka连接器依赖 将flink-sql-connector-kafka-1.17.1.jar上传到flink的lib目录下 下载flink-sql-connector-kafka连接器jar包 https://mvnreposi…

AI教你如何系统的学习Python

Python学习计划 第一阶段&#xff1a;Python基础&#xff08;1-2个月&#xff09; 目标&#xff1a;掌握Python的基本语法、数据类型、控制结构、函数、模块和包等。 学习Python基本语法&#xff1a;包括变量、数据类型&#xff08;整数、浮点数、字符串、列表、元组、字典、…

Java求解百钱买百鸡问题(课堂实例2)

目录 &#x1f495;&#x1f495;引言&#x1f495;&#x1f495; &#x1f60d;&#x1f60d;点关注编程梦想家&#xff08;大学生版&#xff09;-CSDN博客不迷路&#x1f495;&#x1f495; 一、问题背景----百鸡百钱_百度百科 (baidu.com) &#x1d465;&#x1d466;&a…

颍川韩氏始祖,归顺大汉的弓高侯

弓高侯&#xff0c;听起来十分不顺当&#xff0c;像是域外来音似的。本人的名字更另类——颓当&#xff0c;词典中甚至找不到。然而&#xff0c;弓高曾经是河北的一个县名——弓高县&#xff0c;颓当曾经是匈奴的一个城——颓当城&#xff0c;这两个地名已经不存在了&#xff0…

python - 文件 / 永久存储:pickle / 异常处理

一.文件 利用help(open)可以看到open()函数的定义&#xff1a; >>> help(open) Help on built-in function open in module _io:open(file, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone) 默认打开模式是’rt’&#xff0…

spring boot(学习笔记第十二课)

spring boot(学习笔记第十二课) Spring Security内存认证&#xff0c;自定义认证表单 学习内容&#xff1a; Spring Security内存认证自定义认证表单 1. Spring Security内存认证 首先开始最简单的模式&#xff0c;内存认证。 加入spring security的依赖。<dependency>…

edge浏览器详细解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Microsoft Edge ​​​​…

InvalidVersionSpecError: Invalid version spec: =2.7解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

C++ | Leetcode C++题解之第22题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNodes(TreeNode* root) {if (root nullptr) {return 0;}int level 0;TreeNode* node root;while (node->left ! nullptr) {level;node node->left;}int low 1 << level, high (1 <&…

详解Java垃圾回收(GC)机制

一、为什么需要垃圾回收 如果不进行垃圾回收&#xff0c;内存迟早都会被消耗空&#xff0c;因为我们在不断的分配内存空间而不进行回收。除非内存无限大&#xff0c;我们可以任性的分配而不回收&#xff0c;但是事实并非如此。所以&#xff0c;垃圾回收是必须的。 二、哪些内…

计算机的错误计算(二十四)

摘要 计算机的错误计算&#xff08;二十一&#xff09;就案例 展示了“两个不相等数相减&#xff0c;差为0”。本节给出新的计算过程&#xff1a;不停增加计算精度直到出现非0结果。这个过程与结果表明&#xff0c;即使是专业数学软件&#xff0c;对这个问题的处理&#xff0…

JS进阶-作用域

学习目标&#xff1a; 掌握作用域 学习内容&#xff1a; 作用域局部作用域全局作用域作用域链JS垃圾回收机制拓展-JS垃圾回收机制-算法说明闭包变量提升 作用域&#xff1a; 作用域规定了变量能够被访问的"范围"&#xff0c;离开了这个"范围"变量便不能被…