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.pswp.cn/web/41676.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41676.shtml
英文地址,請注明出處:http://en.pswp.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;如果能夠瞬間將這些聲音轉化為文字&#…