3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Difyのワークスペースの名前を変更したい!

Last updated at Posted at 2024-09-10

1042c03735a1e3ef5a740fa23e7024b7.webp.png

Difyをローカル環境にインストールしました。
ワークスペースの名前が、 "自分's Workspace"になっていて、これを変更したかったので調べて自分の手順をまとめておきます。

公式ドキュメントを探してみた

ワークスペースの名前変更について調べたところ、FAQに1行だけ記述がありました。

7. ローカル展開バージョンでスペースの名前を変更する方法は?
データベースのtenantsテーブルを直接修正してください。

???えーと???

たぶんDockerとかデータベースに詳しい人なら、これだけで出来るんでしょうか?
素人な自分にはハードル高めです。

色々調べてみた結果をまとめておきます。

Difyの環境を見てみよう

既にDifyをインストールした人ならわかっているはずですが、Difyは複数のDockerイメージで動いています。その中にデータベースがあるはず?
まず、何が動いているのか確認します。コマンドはdocker psです。

user@ub24x01 $ docker ps
CONTAINER ID   IMAGE                              COMMAND                   CREATED       STATUS                 PORTS                                                                      NAMES
092be184da5b   nginx:latest                       "sh -c 'cp /docker-e…"   2 hours ago   Up 2 hours             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   docker-nginx-1
7158a9594e63   langgenius/dify-api:0.7.3          "/bin/bash /entrypoi…"   2 hours ago   Up 2 hours             5001/tcp                                                                   docker-worker-1
ea36e9a10336   langgenius/dify-api:0.7.3          "/bin/bash /entrypoi…"   2 hours ago   Up 2 hours             5001/tcp                                                                   docker-api-1
1d9735fce8d2   semitechnologies/weaviate:1.19.0   "/bin/weaviate --hos…"   2 hours ago   Up 2 hours                                                                                        docker-weaviate-1
399d57ebf89f   redis:6-alpine                     "docker-entrypoint.s…"   2 hours ago   Up 2 hours (healthy)   6379/tcp                                                                   docker-redis-1
fa16051a2f2a   postgres:15-alpine                 "docker-entrypoint.s…"   2 hours ago   Up 2 hours (healthy)   5432/tcp                                                                   docker-db-1
b743515ea1f3   ubuntu/squid:latest                "sh -c 'cp /docker-e…"   2 hours ago   Up 2 hours             3128/tcp                                                                   docker-ssrf_proxy-1
3e3841206725   langgenius/dify-sandbox:0.2.6      "/main"                   2 hours ago   Up 2 hours                                                                                        docker-sandbox-1
eddd625cb248   langgenius/dify-web:0.7.3          "/bin/sh ./entrypoin…"   2 hours ago   Up 2 hours             3000/tcp                                                                   docker-web-1

Difyのデータベースへ接続するには?

postgresっていうイメージがありますね。おそらくこれが"データベース"でしょう。おそらくそこに"tenants"テーブルがあるはずです。

postgresのテーブルを操作するには、psqlコマンドが一般的です。

user@ub24x01 $ psql
コマンド 'psql' が見つかりません。次の方法でインストールできます:
sudo apt install postgresql-client-common

うん、インストールされてない。でも、余計なパッケージは入れたくない。普通はpostgresが動いている環境にはpsqlがあるはず。だから、このpostgresイメージに行けばpsqlがあるはずです。

さて、postgresイメージに行くには? docker素人が調べて参考にしたのは下記のページ

dockerイメージに接続するには、docker container execです。docker container attachはダメです。接続した後でシェルは動いてないし、Ctl+P,Ctl+Qでも抜けられなくなりました。

さっきの、docker psで表示されたpostgresイメージの"CONTAINER ID"を使って接続します。

user@ub24x01 $ docker container exec -it fa16051a2f2a /bin/ash
/ # ls
bin                         etc                         media                       proc                        sbin                        tmp
dev                         home                        mnt                         root                        srv                         usr
docker-entrypoint-initdb.d  lib                         opt                         run                         sys                         var
/ # psql
psql (15.8)
Type "help" for help.

postgres=# \q
/ # 

よし! psqlコマンドはあるぞ!

データベースの中身を見てみよう

a22a3a6d30c1b78f700534f8d59c5603.webpのコピー.png

postgresは多少の経験があります。psqlコマンドで接続するには、ユーザ名とデータベース名が必要だったはず。これを確認します。

user@ub24x01 $ docker container exec -it fa16051a2f2a /bin/ash
/ # psql
psql (15.8)
Type "help" for help.

postgres=# \l
                                                List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    | ICU Locale | Locale Provider |   Access privileges   
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------
 dify      | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | 
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/postgres          +
           |          |          |            |            |            |                 | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/postgres          +
           |          |          |            |            |            |                 | postgres=CTc/postgres
(4 rows)

postgres=# 

データベース名"dify"があります。これしかないのでコレですね。
Ownerが"postgres"のデフォルトのままなので、特に指定しなくても良さそうです。このままデータベース"dify"に接続します。

postgres=# \c dify
You are now connected to database "dify" as user "postgres".
dify=# 

接続できたので、とりあえずテーブルの一覧を見てみましょう。

dify=# \dt
                       List of relations
 Schema |               Name                | Type  |  Owner   
--------+-----------------------------------+-------+----------
 public | account_integrates                | table | postgres
 public | accounts                          | table | postgres
 public | alembic_version                   | table | postgres
   :
 public | tenant_preferred_model_providers  | table | postgres
 public | tenants                           | table | postgres
 public | tool_api_providers                | table | postgres
   :
 public | workflow_node_executions          | table | postgres
 public | workflow_runs                     | table | postgres
 public | workflows                         | table | postgres
(68 rows)
         
dify=# 

テーブル"tenants"がありました。きっとコレだ! 中身を見てみましょう。

dify=# select * from tenants;
                  id                  |       name        |                        encrypt_public_key                        | plan  | status |     created_at      |     updated_at      | custom_config 
--------------------------------------+-------------------+------------------------------------------------------------------+-------+--------+---------------------+---------------------+---------------
 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | 自分's Workspace | -----BEGIN PUBLIC KEY-----                                      +| basic | normal | 2024-09-05 03:01:00 | 2024-09-05 03:01:00 | 
                                      |                   | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyn0cgPw7yGSQe2Dh9Dm1+|       |        |                     |                     | 
                                      |                   | 省略
                                      |                   | TQIDAQAB                                                        +|       |        |                     |                     | 
                                      |                   | -----END PUBLIC KEY-----                                         |       |        |                     |                     | 
(1 row)

dify=# 

ここだな。これに違いない。たぶん・・・

ワークスペース名を変更しよう!

これ以降の操作は、postgresとpsqlとSQLをそれなりに理解していないと危険です。自信のない方は詳しい人にやってもらってください。

nemeを変更する方法について、自分はChatGPTに聞いてみました。select *の結果を貼り付けて、"nameを変更するSQLコマンド教えて"

ChatGPTさん
name列を書き換えるためのSQLコマンドは、UPDATE文を使用して実行できます。以下は、特定のidを持つ行のnameを新しい値に更新するSQLコマンドです。例えば、idが「xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx」で、nameを「new Workspace」に変更したい場合、以下のようにコマンドを実行します。
```sql
UPDATE tenants
SET name = 'new Workspace'
WHERE id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
```
これにより、指定した行のnameが更新されます。

では修正してみましょう。

dify=# UPDATE tenants SET name = 'みんなのワークスペース'  WHERE id = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
UPDATE 1
dify=#

テーブルは変更できたみたいです。selectで確認してみましょう。

dify=# select * from tenants;
                  id                  |       name        |                        encrypt_public_key                        | plan  | status |     created_at      |     updated_at      | custom_config 
--------------------------------------+-------------------+------------------------------------------------------------------+-------+--------+---------------------+---------------------+---------------
 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | みんなのワークスペース | -----BEGIN PUBLIC KEY-----                                      +| basic | normal | 2024-09-05 03:01:00 | 2024-09-05 03:01:00 | 
                                      |                   | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyn0cgPw7yGSQe2Dh9Dm1+|       |        |                     |                     | 
                                      |                   | 省略
                                      |                   | TQIDAQAB                                                        +|       |        |                     |                     | 
                                      |                   | -----END PUBLIC KEY-----                                         |       |        |                     |                     | 
(1 row)

dify=# 

できてますね。最後に \qでpsqlを終了します。

dify=# \q
/ # 

最後に、dockerイメージからexitします。Ctl+D 又は exitコマンドで。

/ # exit
user@ub24x01 $

これで、Difyにログインしてワークスペースの名前を確認したら、ちゃんと変更できていました。

fcd31dbb8d4b632d98474507f39b62b1.webpのコピー.png

最後に

管理メニューから変更できるようにして欲しいなあ・・・

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?