基于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
  • 浏览器界面刷新即可查看到手动添加的工作空间
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

Dify升级

官网

低版本升级到v1.10.1

Docker Compose 部署

  • 升级前需要执行的操作
    从此版本开始1.10.1,Dify API 镜像将以非 root 用户(UID 1001)身份运行,以提高安全性。
    如果您使用的是本地文件系统存储(社区部署的默认设置),则必须更新主机上已挂载存储目录的所有权,否则容器将无法读取/写入文件。

受影响的服务:

api
worker

受影响的主机目录:

./volumes/app/storage→ 挂载到/app/api/storage
  • 在重启新版本之前,必须执行以下操作:
[root@localhost docker]# pwd
/root/dify/docker
docker compose down
sudo chown -R 1001:1001 ./volumes/app/storage
docker compose up -d
  • 完成此次一次性迁移后,Dify 将以新的非 root 用户模型正常运行。
    备份您自定义的 docker-compose YAML 文件(可选)
[root@localhost docker]# pwd
/root/dify/docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  • 从主分支获取最新代码
[root@localhost dify]# pwd
/root/dify
git checkout main
git pull origin main
  • 停止服务。请在 Docker 目录中执行此操作。
[root@localhost docker]# pwd
/root/dify/docker
docker compose down
  • 备份数据
tar -cvf volumes-$(date +%s).tgz volumes
  • 升级服务
docker compose up -d
  • 如果您遇到如下错误,请参考以下说明。
2025/11/26 11:37:57 /app/internal/db/pg/pg.go:30
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=dify_plugin`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

2025/11/26 11:37:57 /app/internal/db/pg/pg.go:34
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)
2025/11/26 11:37:57 init.go:99: [PANIC]failed to init dify plugin db: failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)
panic: [PANIC]failed to init dify plugin db: failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

请改用以下命令。

docker compose --profile postgresql up -d
posted @ 2025-03-14 09:59  huhy  阅读(1314)  评论(0)    收藏  举报  来源
--> --> /*文章评论*/