Dify が話題でしたので、インストールして使ってみました。結論、「やばい」です。世界を変えるレベルですね。これがオープン・ソースで提供されているのが本当に驚きです。
今後も色々と使ってみたいと思いますが、まずは、Kubernetes にデプロイしたときのメモを残しておきます。
Kubernetes クラスター
Jun 6, 2024, 7:23 AM 現在、microAI のクラスターは、
- master-01 (Raspberry Pi 5)
- worker-01 (Raspberry Pi 5)
- worker-02 (Raspberry Pi 5)
- jetson-01 (Jetson Orin Nano NX 16G)
- jetson-02 (Jetson Orin Nano NX 16G)
の合計5台です。すべて arm64 です。Dify が arm64 用にもイメージを用意してくれています。感謝。
helm
こちらを利用させていただいてデプロイしていきます。
設定ファイル作成
をベースに必要な箇所を書き換えていきます。
sandbox が、なぜか、Raspberry Pi ではエラーを起こしたので、jetson にデプロイするように設定しました。
volumes: []
volumeMounts: []
nameOverride: ""
fullnameOverride: ""
global:
host: "xxx.xxxx.com"
enableTLS: false
image:
tag: "0.6.10"
extraBackendEnvs:
- name: SECRET_KEY
value: "xxxxxxxxxxxxxxxx"
- name: LOG_LEVEL
value: "DEBUG"
- name: VECTOR_STORE
value: "milvus"
ingress:
enabled: true
className: "nginx"
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 20m
serviceAccount:
annotations: {}
name: ""
frontend:
replicaCount: 1
podAnnotations: {}
nodeSelector:
dify: "true"
affinity: {}
api:
replicaCount: 1
podAnnotations: {}
nodeSelector:
dify: "true"
affinity: {}
worker:
replicaCount: 1
podAnnotations: {}
nodeSelector:
dify: "true"
affinity: {}
sandbox:
replicaCount: 1
podAnnotations: {}
nodeSelector:
jetson: "true"
affinity: {}
redis:
embedded: true
nodeSelector:
dify: "true"
postgresql:
embedded: true
nodeSelector:
dify: "true"
minio:
embedded: true
設定詳細
host: "xxx.xxxx.com"
: ドメインの設定。ご自身の環境にあわせてください。後にcloudflare で設定してインタネット越しに見えるようにします。
tag: "0.6.10"
: https://github.com/langgenius/dify/releases に記載の最新バージョンを指定します。
value: "xxxxxxxxxxxxxxxx"
: 自由にシークレットキーを設定してください。ランダムなテキストを入れればOKです。
nginx.ingress.kubernetes.io/proxy-body-size: 20m
: ファイルアップロードを1ファイル20Mbyte まで許可しています。Dify は 15Mまでなので、それ以上であればよいです。
dify: "true"
: デプロイしたいノードにラベルを設定し、そのラベルを指定
jetson: "true"
: こちらも同じです
インストール実行
# helm repo add douban https://douban.github.io/charts/
# helm upgrade dify douban/dify -f dify-values.yaml --install --debug
初期設定
インストール後に1度だけ初期化をする必要があります。
# kubectl get pod | grep dify-worker
dify-worker-54c47b94d7-nhggf 1/1 Running 0 9h
このコマンドででてくる pod 名を使って
# kubectl exec -it dify-worker-54c47b94d7-nhggf -- flask db upgrade
このようなコマンドを作って初期化します。
ローカルからアクセス
インストールが完了したので、自分のPCの hosts などに ingress-nginx-controller の EXTERNAL-IP を設定するとローカルで見られるようになります。
ingress-nginx service/ingress-nginx-controller LoadBalancer 11.1.49.172 10.0.1.0 80:31496/TCP,443:31784/TCP 9d app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
の場合、hostsに
10.0.1.0 xxx.xxxx.com
と記載して、ブラウザで http://xxx.xxxx.com にアクセスすれば見ることができます。
あとは、画面に従って初期設定などを行ってください。
Cloudflare Tunnel でインターネット経由で見られるようにする
ここから、おそらく、間違ったやり方ですが、Cloudflare Tunnel を使って、インターネット経由で見られるようにします。
通信は暗号化したいので、https でアクセスしたいのですが、上記で enableTLS: false
と設定していると、うまく動いてくれませんでした。
このような流れになるのですが、Dify が、HTML上に http://
xxx.xxxx.com のように、プロトコルをハードコーディングしてくるので、https と http が混在してしまいエラーになります。
なので、これを無理やり直していきます。
設定ファイルを変更して無理やり修正
# helm get manifest dify > dify-custome.yaml
# sed -i 's|http://xxx.xxxxx.com|https://xxx.xxxxx.com|g' dify-custome.yaml
# kubectl apply -f dify-custome.yaml
一度、現在の設定ファイルを出力して、ハードコーディングされたURL部分を書き換えて、適用します。
これで、Cloudflare Tunnel 経由でアクセスできるようになります。
※Cloudflare では、ingress-nginx-controller のホストかIPを指定します。
おまけ
dify-values.yaml の修正を適用する方法
# helm upgrade dify douban/dify -f dify-values.yaml --debug
アンインストール方法
# helm uninstall dify
このコマンド1発でアンインストールできます。