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コマンドはあるぞ!
データベースの中身を見てみよう
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にログインしてワークスペースの名前を確認したら、ちゃんと変更できていました。
最後に
管理メニューから変更できるようにして欲しいなあ・・・