Dify v0.6.9源码部署

一.前置条件

克隆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-alpinerestart: alwaysenvironment:# The password for the default postgres user.POSTGRES_PASSWORD: difyai123456# The name of the default postgres database.POSTGRES_DB: dify# postgres data directoryPGDATA: /var/lib/postgresql/data/pgdatavolumes:- db_data_postgres:/var/lib/postgresql/dataports:- "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 workwarn("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 workwarn("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.mzph.cn/web/41676.shtml

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

相关文章

Data-Juicer:阿里巴巴荣誉出品的大模型数据清洗框架

Diffusion Models专栏文章汇总&#xff1a;入门与实战 前言&#xff1a;如何优雅地进行大规模数据清洗是一门艺术&#xff0c;特别对于大模型&#xff0c;数据的质量是决定模型成功最关键的因素之一。阿里巴巴最近开源了一项专门针对大语言模型和视频生成大模型的数据清洗框架&…

短信群发平台适用于哪些行业?

短信群发平台作为一种高效、快速且成本相对较低的通信方式&#xff0c;适用于多个行业。以下是一些主要适用行业的概述&#xff1a; 1. 零售与电商行业 应用场景&#xff1a;零售和电商企业可以利用短信群发进行新品推广、促销信息发布、订单状态更新、物流跟踪通知等。 2. 金…

redis并发、穿透、雪崩

Redis如何实现高并发 首先是单线程模型&#xff1a;redis采用单线程可以避免多线程下切换和竞争的开销&#xff0c;提高cpu的利用率&#xff0c;如果是多核cpu&#xff0c;可以部署多个redis实例。基于内存的数据存储&#xff1a;redis将数据存储在内存中&#xff0c;相比于硬…

wireshark抓取Chrome浏览器quic协议的明文包

wireshark版本:Version 4.2.5 (v4.2.5-0-g4aa814ac25a1). 1.chromium浏览器启用quic&#xff1a; chrome://flags/#enable-quic 2.windows添加环境变量 SSLKEYLOGFILED:\sslkeylogfile.log 3.配置wireshark&#xff0c;编辑->首选项->Protocls->TLS&#xff1a;(Pre)-…

MyBatis(30)如何在 MyBatis 中使用 XML 和注解混合配置方式

在MyBatis中&#xff0c;你可以灵活地选择XML配置方式、注解方式&#xff0c;或者将这两种方式混合使用来配置你的映射器&#xff08;Mapper&#xff09;。使用混合配置方式&#xff0c;你可以结合两者的优势&#xff0c;例如&#xff0c;利用XML配置复杂查询和动态SQL&#xf…

【测试】系统压力测试报告模板(Word原件)

系统压力测试&#xff0c;简而言之&#xff0c;是在模拟高负载、高并发的环境下&#xff0c;对系统进行全面测试的过程。它旨在评估系统在面对极端使用条件时的性能表现&#xff0c;包括处理能力、响应时间、资源消耗及稳定性等关键指标。通过压力测试&#xff0c;开发团队能够…

上海-LM科技(面经)

上海-LM科技 hr电话面 个人简介 个人信息的询问 是否知道芋道框架 技术面 算法题 14. 最长公共前缀&#xff08;写出来即可&#xff09; 聊一下Docker Docker核心概念总结Docker实战 聊一下AOP Spring AOP详解 聊一下JWT JWT 基础概念详解JWT 身份认证优缺点分析 Spring…

企业选择云WAF的安全性考量

简介 云WAF&#xff08;Web Application Firewall&#xff09;是一种基于云计算平台的安全服务&#xff0c;旨在保护Web应用免受网络攻击。它通过监控和过滤HTTP/HTTPS流量&#xff0c;检测和阻止潜在的威胁和恶意行为&#xff0c;确保Web应用程序的安全性和可靠性。 云WAF的优…

代码随想录——单调递增的数字(Leetcode738)

题目链接 贪心 class Solution {public int monotoneIncreasingDigits(int n) {char[] digits String.valueOf(n).toCharArray();int flag digits.length;for (int i digits.length - 1; i > 0; i--) {if (digits[i] < digits[i - 1]) {flag i;digits[i - 1]--;}}…

一起学Hugging Face Transformers(13)- 模型微调之自定义训练循环

文章目录 前言一、什么是训练循环1. 训练循环的关键步骤2. 示例3. 训练循环的重要性 二、使用 Hugging Face Transformers 库实现自定义训练循环1. 前期准备1&#xff09;安装依赖2&#xff09;导入必要的库 2. 加载数据和模型1&#xff09; 加载数据集2&#xff09; 加载预训练…

玉石风能否接棒黏土风?一探AI绘画新风尚

在数字艺术的浪潮中,AI绘画平台以其独特的创造力和便捷性,正在逐步改变我们对艺术的传统认知。从黏土风的温暖质感到琉璃玉石的细腻光泽,每一次风格的转变都引领着新的潮流。今天,我们将聚焦玉石风,探讨它是否能成为下一个流行的艺术滤镜,并提供一种在线体验的方式,让你…

Python | Leetcode Python题解之第221题最大正方形

题目&#xff1a; 题解&#xff1a; class Solution:def maximalSquare(self, matrix: List[List[str]]) -> int:if len(matrix) 0 or len(matrix[0]) 0:return 0maxSide 0rows, columns len(matrix), len(matrix[0])dp [[0] * columns for _ in range(rows)]for i in…

使用Python实现深度学习模型:模型监控与性能优化

在深度学习模型的实际应用中,模型的性能监控与优化是确保其稳定性和高效性的关键步骤。本文将介绍如何使用Python实现深度学习模型的监控与性能优化,涵盖数据准备、模型训练、监控工具和优化策略等内容。 目录 引言模型监控概述性能优化概述实现步骤数据准备模型训练模型监控…

梧桐数据库:语法分析模块概述

语法分析模块是数据库系统的重要组成部分&#xff0c;它负责将用户输入的 SQL 语句转换为内部表示形式&#xff0c;以便后续的处理和执行。在数据库系统中&#xff0c;语法分析模块是连接用户与数据库的桥梁。它的主要任务是将用户输入的 SQL 语句进行解析&#xff0c;检查语法…

Kafka(一)基础介绍

一&#xff0c;Kafka集群 一个典型的 Kafka 体系架构包括若Producer、Broker、Consumer&#xff0c;以及一个ZooKeeper集群&#xff0c;如图所示。 ZooKeeper&#xff1a;Kafka负责集群元数据的管理、控制器的选举等操作的&#xff1b; Producer&#xff1a;将消息发送到Broker…

随着云计算和容器技术的广泛应用,如何在这些环境中有效地运用 Shell 进行自动化部署和管理?

在云计算和容器技术的环境中&#xff0c;Shell 脚本可以被用于自动化部署和管理任务。下面是一些在这些环境中有效使用 Shell 进行自动化部署和管理的方法&#xff1a; 在云环境中&#xff0c;使用云服务提供商的 API 进行自动化管理。例如&#xff0c;使用命令行工具或 SDK 来…

14 - Python网络应用开发

网络应用开发 发送电子邮件 在即时通信软件如此发达的今天&#xff0c;电子邮件仍然是互联网上使用最为广泛的应用之一&#xff0c;公司向应聘者发出录用通知、网站向用户发送一个激活账号的链接、银行向客户推广它们的理财产品等几乎都是通过电子邮件来完成的&#xff0c;而…

[AI 大模型] OpenAI ChatGPT

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

学习笔记——动态路由——OSPF(特殊区域)

十、OSPF特殊区域 1、技术背景 早期路由器靠CPU计算转发&#xff0c;由于硬件技术限制问题&#xff0c;因此资源不是特别充足&#xff0c;因此是要节省资源使用&#xff0c;规划是非常必要的。 OSPF路由器需要同时维护域内路由、域间路由、外部路由信息数据库。当网络规模不…

电脑会议录音转文字工具哪个好?5个转文字工具简化工作流程

在如今忙碌的生活中&#xff0c;我们常常需要记录和回顾重要的对话和讨论。手写笔记可能跟不上速度&#xff0c;而录音则以其便捷性成为了捕捉信息的有力工具。但录音文件的后续处理&#xff0c;往往让人头疼不已。想象一下&#xff0c;如果能够瞬间将这些声音转化为文字&#…