基于Compose的Dify进阶操作

本教程适用于Compose搭建的Dify,完成后期的一些进阶操作,例如修改知识库上传文件大小限制、自定义前端界面样式、增加工作空间等操作

常见问题

官网:

本地部署初始化后,密码错误如何重置?

  • 使用 docker compose 方式部署,可执行以下命令进行重置
docker exec -it docker-api-1 flask reset-password
  • 输入账户 email 以及两次新密码即可。

部署后如何升级版本?

  • 如果是通过镜像启动,请重新拉取最新镜像完成升级。

本地部署版,如何更改空间的名称?

  • 在数据库 tenants 表里修改。具体方式参考下面的创建工作空间

如果发生数据库迁移,需要备份哪些东西?

  • 需要备份数据库、配置的存储以及向量数据库数据,若为 docker compose 方式部署,可直接备份 dify/docker/volumes 目录下所有数据内容。
root@huhy:~# ls dify/docker/volumes/
app  certbot  db  myscale  oceanbase  opensearch  plugin_daemon  redis  sandbox  weaviate

本地部署版如何解决知识库文档上传的大小限制和数量限制。

/root/dify-main/docker/.env
# 修改为100M,默认15M
NGINX_CLIENT_MAX_BODY_SIZE=100M

# 上传文件大小限制,默认15M,调整为100
UPLOAD_FILE_SIZE_LIMIT=100

# 每次上传文件数上限,默认5个,调整50
UPLOAD_FILE_BATCH_LIMIT=50

在这里插入图片描述

部署客户端聊天界面

GitHub官网

用于创建一个对话的客户端应用,调用服务端的应用地址

  • 下载文件后上传
    在这里插入图片描述
unzip webapp-conversation-main
cd webapp-conversation-main/
  • 在当前目录下创建一个名为的文件.env.local,并从中复制内容.env.example
cp .env.example .env.local
  • 在管理端获取所需的三个地址

在这里插入图片描述

  • 创建APP_KEY

在这里插入图片描述

root@huhy:~/webapp-conversation-main# cat .env.local
NEXT_PUBLIC_APP_ID='fbdfee97-7ed3-4c99-9387-55b36b366e67'
NEXT_PUBLIC_APP_KEY='app-9CVGKyFtFIbNNVxpoMbH5QUh'
NEXT_PUBLIC_API_URL='http://192.168.200.160/v1'
  • 修改index文件
root@huhy:~/webapp-conversation-main# cat config/index.ts
import type { AppInfo } from '@/types/app'
export const APP_ID = `${process.env.NEXT_PUBLIC_APP_ID}`
export const API_KEY = `${process.env.NEXT_PUBLIC_APP_KEY}`
export const API_URL = `${process.env.NEXT_PUBLIC_API_URL}`
export const APP_INFO: AppInfo = {
  title: 'huhy',
  description: 'description',
  copyright: 'copyright',
  privacy_policy: '',
  default_language: 'zh-Hans'
}

export const isShowPrompt = true
export const promptTemplate = 'I want you to act as a javascript console.' #描述对话前的提示词

export const API_PREFIX = '/api'

export const LOCALE_COOKIE_NAME = 'locale'

export const DEFAULT_VALUE_MAX_LEN = 48
  • 有两种方式构建使用,这里使用docker
docker build . -t difyv1/webapp-conversation:latest
docker run -itd -p 3000:3000 difyv1/webapp-conversation:latest
  • 使用浏览器打开http://localhost:3000

在这里插入图片描述

在这里插入图片描述

自定义前端界面

进入容器docker-web-1

docker exec -it docker-web-1  sh
  • 左上角logo图片替换: logo-site.png
/app/web/public/logo $ ls
logo-embedded-chat-avatar.png  logo-embedded-chat-header.png  logo-site-dark.png             logo-site.png
/app/web/public/logo $
  • 站点图标替换:favicon.ico
/app/web/public $ ls
embed.js            embed.min.js        favicon.ico         logo                pdf.worker.min.mjs  screenshots         vs
/app/web/public $
  • 首页登录的背景图片替换:background.d3434daa.png
/app/web/.next/static/media $ ls background.d3434daa.png
background.d3434daa.png
/app/web/.next/static/media $ pwd

替换后重启容器即可生效

docker restart docker-web-1  

定制化前端镜像

上面对容器的镜像都只是临时性的,删除容器就会丢失配置,如果需要长期进行使用的话可以自定义构建前端镜像

  • 进入web目录下
/root/dify-main/web
  • 该目录与上述容器的前端目录/app/web一致,本地修改后重新构建镜像
docker build . -t dify-web-huhy
root@huhy:~/dify-main/web# docker images | grep huhy
dify-web-huhy               latest      59659c1b5b4c   4 minutes ago   436MB
  • 启动该镜像:如果后端应用不在本地则修改URL地址
docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 dify-web-huhy
root@huhy:~/dify-main/web# docker run -it -p 3000:3000 -e CONSOLE_URL=http://127.0.0.1:5001 -e APP_URL=http://127.0.0.1:5001 dify-web-huhy
                        -------------

__/\\\\\\\\\\\\\____/\\\\____________/\\\\____/\\\\\\\\\_____
 _\/\\\/\\\_\/\\\\\\________/\\\\\\__/\\\///\\\___
  _\/\\\_______\/\\\_\/\\\//\\\____/\\\//\\\_\///______\//\\\__
   _\/\\\\\\\\\\\\\/__\/\\\\///\\\/\\\/_\/\\\___________/\\\/___
    _\/\\\/____\/\\\__\///\\\/___\/\\\________/\\\//_____
     _\/\\\_____________\/\\\____\///_____\/\\\_____/\\\//________
      _\/\\\_____________\/\\\_____________\/\\\___/\\\/___________
       _\/\\\_____________\/\\\_____________\/\\\__/\\\\\\\\\\\\\\\_
        _\///______________\///______________\///__\///__


                          Runtime Edition

        PM2 is a Production Process Manager for Node.js applications
                     with a built-in Load Balancer.

                Start and Daemonize any application:
                $ pm2 start app.js

                Load Balance 4 instances of api.js:
                $ pm2 start api.js -i 4

                Monitor in production:
                $ pm2 monitor

                Make pm2 auto-boot at server restart:
                $ pm2 startup

                To go further checkout:
                http://pm2.io/


                        -------------

pm2 launched in no-daemon mode (you can add DEBUG="*" env variable to get more messages)
2025-03-10T07:14:20: PM2 log: Launching in no daemon mode
2025-03-10T07:14:20: PM2 log: [PM2][WARN] Applications dify-web not running, starting...
2025-03-10T07:14:20: PM2 log: App [dify-web:0] starting in -cluster mode-
2025-03-10T07:14:20: PM2 log: App [dify-web:0] online
2025-03-10T07:14:20: PM2 log: App [dify-web:1] starting in -cluster mode-
2025-03-10T07:14:20: PM2 log: App [dify-web:1] online
2025-03-10T07:14:20: PM2 log: [PM2] App [dify-web] launched (2 instances)
2025-03-10T07:14:20: PM2 log: ┌────┬─────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name        │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├────┼─────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ dify-web    │ default     │ 0.15.3  │ cluster │ 18       │ 0s     │ 0    │ online    │ 0%       │ 48.9mb   │ und… │ disabled │
│ 1  │ dify-web    │ default     │ 0.15.3  │ cluster │ 25       │ 0s     │ 0    │ online    │ 0%       │ 46.0mb   │ und… │ disabled │
└────┴─────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
2025-03-10T07:14:20: PM2 log: [--no-daemon] Continue to stream logs
2025-03-10T07:14:20: PM2 log: [--no-daemon] Exit on target PM2 exit pid=7
07:14:21 0|dify-web  |   ▲ Next.js 14.2.17
07:14:21 0|dify-web  |   - Local:        http://4616bfe78e8d:3000
07:14:21 0|dify-web  |   - Network:      http://172.17.0.2:3000
07:14:21 0|dify-web  |  ✓ Starting...
07:14:21 1|dify-web  |   ▲ Next.js 14.2.17
07:14:21 1|dify-web  |   - Local:        http://4616bfe78e8d:3000
07:14:21 1|dify-web  |   - Network:      http://172.17.0.2:3000
07:14:21 1|dify-web  |  ✓ Starting...
07:14:21 0|dify-web  |  ✓ Ready in 113ms
07:14:21 1|dify-web  |  ✓ Ready in 112ms

创建工作空间

Dify的开源社区版本默认是只有一个工作空间的,不能界面进行添加,可以手动从数据库中进行添加

  • 在api容器中生成公钥和私钥
docker exec -it docker-api-1 sh

cd /tmp/
openssl genrsa -out private.pem 2048
openssl rsa -pubout -in private.pem -out public.pem
# cat public.pem
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA26RDlHBfhdO99hSFcGx8
fYVTwQSIpfTxGEUT7SCrFHh8AHgjkj2xvMnxU1ZsuBiPrL3XNEH1ZwTc++blJ9OK
2ONOTyaUN93CTceJ6FAfONjCQ7CNaJiB7pZzMa9CXLIQgCo2goAuNM12bV0qcqW/
cU4zwObOjutNtbLQj9bvaCRrzsux5Fnxhsv5IutpZlaCG7idw8I1okoiHprAb6L0
kQHchiBvISkDdevrrga81fULK0blJ109srOOWU3fD2UWF3/G0nbPoR84Sk8rurxP
h670y+g0S2TZ9DNtBZkYEiMdlLx3gb6MxKPXMDmokG8sZBHzoHyjkilG60ddCljm
LwIDAQAB
-----END PUBLIC KEY-----
  • 进入数据库容器(dify使用postgre数据库)
docker exec -it docker-db-1 sh

psql -U postgres -d dify
  • 插入工作空间记录,名称为dify-huhy,注意替换公钥
INSERT INTO "public"."tenants" ("name", "encrypt_public_key", "plan", "status") VALUES ('dify-huhy', '-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA26RDlHBfhdO99hSFcGx8
fYVTwQSIpfTxGEUT7SCrFHh8AHgjkj2xvMnxU1ZsuBiPrL3XNEH1ZwTc++blJ9OK
2ONOTyaUN93CTceJ6FAfONjCQ7CNaJiB7pZzMa9CXLIQgCo2goAuNM12bV0qcqW/
cU4zwObOjutNtbLQj9bvaCRrzsux5Fnxhsv5IutpZlaCG7idw8I1okoiHprAb6L0
kQHchiBvISkDdevrrga81fULK0blJ109srOOWU3fD2UWF3/G0nbPoR84Sk8rurxP
h670y+g0S2TZ9DNtBZkYEiMdlLx3gb6MxKPXMDmokG8sZBHzoHyjkilG60ddCljm
LwIDAQAB
-----END PUBLIC KEY-----', 'basic', 'normal');
  • 查询dify-huhy工作空间的id
SELECT id FROM tenants WHERE name = 'dify-huhy';
dify=# SELECT id FROM tenants WHERE name = 'dify-huhy';
                  id
--------------------------------------
 b05d104f-85d7-41f7-b779-b724d0215455
(1 row)
  • 查询dify用户的id,注意在界面提前创建好
SELECT "id" FROM "accounts" where name ='huhy';
dify=# SELECT "id" FROM "accounts" where name ='huhy';
                  id
--------------------------------------
 b12265a9-6191-42c3-8588-e6768f833276
(1 row)
  • 将该用户和工作空间绑定,注意tenant_id为工作空间id,account_id为用户id
INSERT INTO "public"."tenant_account_joins" ("tenant_id", "account_id", "role", "invited_by", "current") VALUES ('b05d104f-85d7-41f7-b779-b724d0215455','b12265a9-6191-42c3-8588-e6768f833276', 'admin', NULL, 't');
dify=# INSERT INTO "public"."tenant_account_joins" ("tenant_id", "account_id", "role", "invited_by", "current") VALUES ('b05d104f-85d7-41f7-b779-b724d0215455','b12265a9-6191-42c3-8588-e6768f833276', 'admin', NULL, 't');
INSERT 0 1
  • 再次进入api容器,在/app/api/storage/privkeys目录下面创建工作空间,名称为该空间的数据库id,将私钥拷贝到目录下
docker exec -it docker-api-1 sh
cd /app/api/storage/privkeys
mkdir -p b05d104f-85d7-41f7-b779-b724d0215455
cp /tmp/private.pem b05d104f-85d7-41f7-b779-b724d0215455/private.pem
  • 浏览器界面刷新即可查看到手动添加的工作空间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
<think>好的,用户想了解Dify的使用方法或教程。首先,我需要整理已有的引用内容,确保回答符合系统级指令的要求,比如正确使用LaTeX格式和引用标识。 首先,引用[1]提到如何创建工具,引用[2]是关于创建工作流的提示词,引用[3]是克隆代码的步骤,引用[4]是创建知识库的步骤。用户的问题集中在Dify的使用教程上,所以需要分步骤说明,可能包括环境搭建、核心功能的使用,比如创建应用、知识库、工具和工作流。 需要检查是否每个引用都被正确引用,比如在创建应用时引用[1],创建知识库时引用[4],创建工作流时引用[2],安装步骤引用[3]。同时,确保使用中文回答,结构清晰,分点说明。可能还需要生成相关问题,如优化方法或常见问题,这样用户能更深入了解。 还要注意行内数学表达式是否正确使用$...$,但这里可能涉及较少数学内容,主要关注代码块和步骤说明。确保代码块用三个反引号包裹,并标明语言类型,如python。最后,添加相关问题,帮助用户进一步探索。</think>### Dify 使用教程分步说明 Dify 是一个开源工具,用于构建和部署基于大语言模型的应用。以下是其核心使用方法: --- #### 一、环境安装与部署 1. **克隆代码库** 通过以下命令获取最新代码: ```bash git clone https://github.com/langgenius/dify.git [^3] ``` 2. **安装依赖** 进入项目目录后运行 `docker-compose up -d` 启动服务。 --- #### 二、核心功能操作 1. **创建应用** - 登录后点击「创建应用」,选择对话型或文本生成型应用模板。 - 配置提示词和模型参数(如 GPT-3.5/4),支持动态变量插入[^1]。 2. **创建知识库** - 点击「创建空知识库」,填写名称后上传本地文档或导入在线数据(如网页、Notion)[^4]。 - 示例代码调用知识库: ```python # 通过API查询知识库 response = requests.post( "https://api.dify.ai/v1/knowledge-base/search", json={"query": "如何优化模型性能?"} ) ``` 3. **创建工作流** - 在「工作流」模块中,通过可视化界面连接多个工具或模型。 - 使用以下提示词模板确保回答符合规范: ``` Use the context inside <context></context> XML tags. - 若不确定答案需请求澄清 - 避免提及信息来源[^2] ``` --- #### 三、进阶操作 1. **工具集成** - 在「工具」页面添加第三方 API(如天气查询、数据库连接)。 - 示例工具调用: ```python def get_weather(city): return requests.get(f"https://weather-api.com/{city}").json() ``` 2. **调试与监控** - 使用「日志分析」功能跟踪用户请求和模型响应。 - 通过埋点统计接口调用次数: $$ \text{API调用成功率} = \frac{\text{成功次数}}{\text{总调用次数}} \times 100\% $$ ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huhy~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值