※こちらの記事は2025年3月24日noteに投稿した内容です。

Difyは高機能なAIアプリケーション開発プラットフォームとして人気を集めていますが、バージョンアップ時には適切な手順が必要です。最近やっとXServer VPS上にインストールしたDify を0.15.3から1.1.2へのアップグレードできましたので備忘録として残しておきます。
※作業前にはイメージ保存をお忘れなく。
0. 準備作業
アップグレードを始める前に、以下のファイルをダウンロードしておきましょう:
- 最新のDocker Compose設定ファイル
- GitHubからdocker-compose.yamlをダウンロード(download raw fileを実行)
- Difyプラグインデーモン
- GitHub Releasesからdify-plugin-darwin-amd64(17.3MB)をダウンロード
1. docker-compose.yamlファイルの更新
現在の設定を新しいバージョンに反映させます。
手順
- 現状のファイルを0153docker-compose.yaml、新しいファイルを112docker-compose.yamlにリネーム
- 両ファイルをClaude 3.7 Sonnet(Extended)にアップロード
※無料版のClaudeやChatGPTではうまく作成できませんでした。 - 以下のプロンプトを入力: この2つはXServer VPS上にインストールしたDifyの設定ファイルです。現行の0153docker-compose.yamlの内容をバージョンアップ用の112docker-compose.yamlへ反映させて出力してください。
- 生成されたファイルをダウンロードしてdocker-compose.yamlにリネーム
- XServer Dify上の以下のパスにあるファイルに上書き: /root/dify/docker/docker-compose.yaml
2. プラグインデーモンのインストール
ダウンロードしたプラグインデーモンをサーバーに配置します。
(※WinSCPを使いました)
手順
- dify-plugin-darwin-amd64のファイル名をdifyにリネーム
- XServer Dify上の以下のパスにアップロード: /usr/local/bin/dify
- ファイルのパーミッションを755に変更: chmod 755 /usr/local/bin/dify
3. バージョンアップの実行
ここから実際のアップグレードを実行します。
(※PuTTYを使いました)
手順
コンソール上で以下のコマンドを実行:
update.sh
4. ツールの移行とプラグインへの変換
Dify 1.0.0から、以前のツールはプラグインアーキテクチャに移行しています。以下の手順で既存のツールやモデルプロバイダを新環境に移行します。
手順
- docker-apiコンテナのIDを確認:
docker ps
出力例:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
417241cd**** nginx:latest "sh -c 'cp /docker-e…" 3 hours ago Up 3 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp docker-nginx-1
f84aa773**** langgenius/dify-api:1.1.2 "/bin/bash /entrypoi…" 3 hours ago Up 3 hours 5001/tcp docker-worker-1
a3cb19c2**** langgenius/dify-api:1.1.2 "/bin/bash /entrypoi…" 3 hours ago Up 3 hours 5001/tcp docker-api-1
1.docker-apiコンテナにアクセスし、プラグイン抽出コマンドを実行:
docker exec -it a3cb19c2**** bash
poetry run flask extract-plugins --workers=20
※エラーが発生した場合は、サーバーにpoetry環境をインストールしてから実行してください。 ※コマンド実行後、端末に入力待機のプロンプトが表示された場合は「Enter」を押して入力をスキップします。
このコマンドは現在使用中のすべてのモデルとツールを抽出し、plugins.jsonlファイルを生成します。
2.プラグインをインストール:
poetry run flask install-plugins --workers=2
※インターネット接続が正常で、https://marketplace.dify.ai にアクセスできることを確認してください。
3.プラグインデータの移行:
poetry run flask migrate-data-for-plugin
移行が完了すると、以下のような結果が表示されます:
Migrate [tool_builtin_providers] data for plugin completed, total: 6
Migrate data for plugin completed.
5. .envファイルの修正
WARN[0000] The "DB_DATABASE" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "DB_USERNAME" variable is not set. Defaulting to a blank string.
このような警告が出た場合は、.envファイル内でDBに関する環境変数が一切設定されておらず、デフォルト値(docker-compose.yaml内の設定)がそのまま使われてますので、docker-compose.yamlファイルに記載されている内容を.envファイルに反映させます。
docker-compose.yamlファイルの内容がデフォルトの場合、
DB_USERNAME: ${DB_USERNAME:-postgres}
DB_PASSWORD: ${DB_PASSWORD:-difyai123456}
DB_DATABASE: ${DB_DATABASE:-dify}
となっていますので、.envファイルに
DB_DATABASE=dify
DB_USERNAME=postgres
DB_PASSWORD=difyai123456
を追記してDockerを再起動します。
docker compose down
docker compose up -d
6. 移行結果の検証
アップグレードと移行が正常に完了したか確認しましょう。
- Difyプラットフォームにアクセス
- 右上の「プラグイン」ボタンをクリック
- プラグインが空の場合はモデルとツールを再インストール
- いくつかのプラグインを使用して、正常に動作するかテスト
すべてが問題なく動作していれば、APIキーも移行されています。
まとめ
Dify 0.15.3から1.1.2へのアップグレードは、いくつかの重要なステップを踏む必要がありますが、本記事の手順に従えば比較的スムーズに移行できるはずです。特に、ツールからプラグインへの移行は1.x.xの大きな変更点です。
参考リンク
Dify 0.15.3から1.1.2へのアップデートで追加された新機能と変更点
環境変数の追加・変更
サーバー設定の最適化
- ワーカークラスとコネクション設定(行21-22):
SERVER_WORKER_CLASS: ${SERVER_WORKER_CLASS:-gevent}
SERVER_WORKER_CONNECTIONS: ${SERVER_WORKER_CONNECTIONS:-10}
セキュリティ強化
- リフレッシュトークン期限(行38-39):
REFRESH_TOKEN_EXPIRE_DAYS: ${REFRESH_TOKEN_EXPIRE_DAYS:-30}
Redisクラスターのサポート
- クラスター設定(行80-82):
REDIS_USE_CLUSTERS: ${REDIS_USE_CLUSTERS:-false}
REDIS_CLUSTERS: ${REDIS_CLUSTERS:-}
REDIS_CLUSTERS_PASSWORD: ${REDIS_CLUSTERS_PASSWORD:-}
ストレージシステムの刷新
- OpenDALストレージ(行91-93):
STORAGE_TYPE: ${STORAGE_TYPE:-opendal}
OPENDAL_SCHEME: ${OPENDAL_SCHEME:-fs}
OPENDAL_FS_ROOT: ${OPENDAL_FS_ROOT:-storage}
- Supabaseサポート(行152-154):
SUPABASE_BUCKET_NAME: ${SUPABASE_BUCKET_NAME:-your-bucket-name}
SUPABASE_API_KEY: ${SUPABASE_API_KEY:-your-access-key}
SUPABASE_URL: ${SUPABASE_URL:-your-server-url}
新機能:プラグインシステムとマーケットプレイス
プラグイン機能
- プラグインデータベース(行277-279):
DB_PLUGIN_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin}
EXPOSE_PLUGIN_DAEMON_PORT: ${EXPOSE_PLUGIN_DAEMON_PORT:-5002}
PLUGIN_DAEMON_PORT: ${PLUGIN_DAEMON_PORT:-5002}
- リモートインストール機能(行321-329):
PLUGIN_REMOTE_INSTALL_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
PLUGIN_REMOTE_INSTALL_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-********************************************************}
マーケットプレイス連携
- マーケットプレイスAPI(行292-294):
MARKETPLACE_ENABLED: ${MARKETPLACE_ENABLED:-true}
MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
FORCE_VERIFYING_SIGNATURE: ${FORCE_VERIFYING_SIGNATURE:-true}
- エンドポイントURL(行292):
ENDPOINT_URL_TEMPLATE: ${ENDPOINT_URL_TEMPLATE:-http://localhost/e/{hook_id}}
- Web UI連携(行349-356):
MARKETPLACE_API_URL: ${MARKETPLACE_API_URL:-https://marketplace.dify.ai}
MARKETPLACE_URL: ${MARKETPLACE_URL:-https://marketplace.dify.ai}
TOP_K_MAX_VALUE: ${TOP_K_MAX_VALUE:-}
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH: ${INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH:-}
PM2_INSTANCES: ${PM2_INSTANCES:-2}
LOOP_NODE_MAX_COUNT: ${LOOP_NODE_MAX_COUNT:-100}
MAX_TOOLS_NUM: ${MAX_TOOLS_NUM:-10}
MAX_PARALLEL_LIMIT: ${MAX_PARALLEL_LIMIT:-10}
新しいサービス
プラグインデーモン
- plugin_daemon(行409-429):
# plugin daemon
plugin_daemon:
image: langgenius/dify-plugin-daemon:0.0.6-local
restart: always
environment:
# Use the shared environment variables.
<<: *shared-api-worker-env
DB_DATABASE: ${DB_PLUGIN_DATABASE:-dify_plugin}
SERVER_PORT: ${PLUGIN_DAEMON_PORT:-5002}
SERVER_KEY: ${PLUGIN_DAEMON_KEY:-********************************************************}
MAX_PLUGIN_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
# 他の設定省略
新しいベクトルデータベースのサポート
OpenGauss
- OpenGaussベクトルDB(行604-619):
# opengauss vector database.
opengauss:
image: opengauss/opengauss:7.0.0-RC1
profiles:
- opengauss
privileged: true
restart: always
environment:
GS_USERNAME: ${OPENGAUSS_USER:-postgres}
# 他の設定省略
Elasticsearch
- Elasticsearch(行642-665):
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.14.3
container_name: elasticsearch
profiles:
- elasticsearch
- elasticsearch-ja
restart: always
volumes:
- ./elasticsearch/docker-entrypoint.sh:/docker-entrypoint-mount.sh
# 他の設定省略
entrypoint: [ 'sh', '-c', "sh /docker-entrypoint-mount.sh" ]
その他の設定
- Nginx設定(行530):
NGINX_CLIENT_MAX_BODY_SIZE: ${NGINX_CLIENT_MAX_BODY_SIZE:-100M}
- Redis認証(行384-385):
REDISCLI_AUTH: ${REDIS_PASSWORD:-************}
#Dify #XServer #バージョンアップ #アップグレード