MENU

Dify最新版へのアップデート手順!バックアップから完全解説

当ページのリンクには広告が含まれています。

Dify(ディファイ)は頻繁にアップデートが行われており、新機能の追加やセキュリティ修正が継続的に提供されています。しかし、不用意にアップデートを行うと「起動しなくなった」「データが消えた」といったトラブルに見舞われることもあります。

この記事では、Docker Compose環境で構築したDifyを、安全かつ確実に最新バージョンへアップデートするための手順をステップバイステップで解説します。

目次

Difyアップデートの基本手順(Docker Compose)

最も一般的なDocker Compose環境でのアップデート手順です。リスクを最小限に抑えるため、必ずバックアップを取得してから作業を行ってください。

注意: 作業はすべて ~/dify/docker ディレクトリ(インストール先)で行うことを前提としています。

注意:アップグレードの前にデータベースのバックアップを必ず行ってください。アップグレードが失敗した場合、迅速にバージョンをロールバックしてデータベースを復元することができます。

1. データの完全バックアップ(必須)

Difyで最も重要な情報は、dockerの下にある、.env、docker-compose.yaml、volumesの3つとなります。

Difyのデータ(データベースとアップロードファイル)と設定ファイルをバックアップします。

注意:Dify のバージョンアップ時には、バックアップしたファイルは必ずDifyをインストールしたディレクトリと異なるドライブへファイルを保管する様にして下さい。
手順中にDifyのイメージを最新にする処理を実施する際にDifyの管理ディレクトリ以下のファイルが消えてしまう事があります。
特に、YAMLファイルは注意深くバックアップを行う様にして下さい。

cd ~/difyai
# 現在のボリュームデータを一時フォルダにコピー
# ※ -rp オプションで権限(p)とディレクトリ構造(r)を保持します 
sudo cp -rp docker/volumes ../volumes_backup_$(date +%Y%m%d)

# バックアップが正しく作成されたか確認 
ls -l ../volumes_backup_$(date +%Y%m%d)

# 設定ファイルをバックアップディレクトリへコピー
cp .env ../env_backup_$(date +%Y%m%d)
cp docker-compose.yaml ../yaml_backup_$(date +%Y%m%d)

# 正しくコピーされたか確認
ls -l ../env_backup* ../yaml_backup*

2. 旧環境の停止とソースコードの更新

Gitを使って最新のソースコードを取得します。

cd ~/difyai/docker
sudo docker compose down
# 古いイメージを削除(データボリュームは削除されません)
sudo docker compose down --rmi all

.envdocker-compose.yaml も必ずバックアップして下さい。
git pull を行うと docker-compose.yamlvolumesが上書きされる可能性があります。

cd ~/difyai
# 最新の変更を取り込む
git fetch --all
git pull origin main

競合(Conflict)が発生した場合:ローカルで設定ファイルを変更していると、git pull でエラーになることがあります。その場合は、一度変更を退避(git stash)させてからプルし、その後設定を戻すか、バックアップした .env を参照して再設定してください。

# 1. 一つ上の階層へ移動
cd ~/difyai

# 2. ローカルの変更を一時的に退避
# ※これをしないと git pull が競合でエラーになります
git stash

# 3. 最新版を取得
git pull origin main

# 4. 退避した変更を戻す
git stash pop

3. 環境変数の更新とコンテナの再起動

最新版で追加された新しい変数が必要になる場合があります。既存の .env を維持しつつ、不足している項目がないか確認してください。

起動する前に、最新版の .env.example と現在の .env を比較して、新しく追加されたセキュリティ項目を正しく適用する必要があります。
これを実施しないで起動すると正常に動作しない可能性があります。

準備ができたら、新しいイメージをプルして起動します。

cd ~/dify/docker
最新イメージの取得と起動
sudo docker compose up -d --remove-orphans

これで基本的なアップデートは完了です。

アップデート後の確認とモデルの動作について

  • モデルの継承: Difyの仕様上、データベース内のワークフロー設定は自動的に引き継がれます。起動後、管理画面にログインしてモデルが一覧に存在することを確認してください。

バージョン別の重要注意事項

特定のバージョンを跨いでアップデートする場合、追加の移行作業が必要になることがあります。

v1.10.1以降へのアップデート(権限変更)

v1.10.1以降、コンテナ内の実行ユーザーが非root(UID 1001)に変更されました。そのため、ホスト側のディレクトリ権限を変更しないと、起動に失敗する可能性があります。

v2.0.0 (Beta) へのアップデート(データ移行)

メジャーアップデートとなるv2.0系では、データ構造の大幅な変更に伴い、起動後にデータ移行コマンドの実行が必須となっています。

高度な運用:Helmによる管理

Kubernetes環境でDifyを運用している場合は、Helmチャートを利用したバージョン管理が推奨されます。

Helmでのアップグレード手順

  1. 設定のエクスポート: 現在の設定を values.yaml に保存します。helm get values dify -a -o yaml > values.yaml
  2. バージョンの指定: values.yaml 内の tag を新しいバージョン(例: 1.1.3)に書き換えます。
  3. アップグレード実行:helm upgrade --install dify douban/dify -f values.yaml
  4. DBマイグレーション:kubectl exec -it {dify-api-pod} -- flask db upgrade

まとめ

Difyのアップデートは、以下の3原則を守ることで安全に行えます。

  • 必ずバックアップを取る(ボリュームと設定ファイル)
  • 公式のリリースノートで「破壊的変更」を確認する
  • マイグレーション手順(権限変更やコマンド実行)を忘れない

最新の機能を活用しつつ、安定した運用を心がけてください。

付録:バージョン別のアップグレード

以下は、バージョン別の公式ページの手順に従ったアップデート手順です。

v2.0.0へのアップグレード手順

重要:
0.x または 1.x からアップグレードする場合は、既存のデータソース資格情報を変換するために、以下の移行手順を実行する必要があります。この手順は、新しいバージョンとの互換性を確保するために必要です。

Docker Compose デプロイメント

  1. カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  1. メインブランチから最新のコードを取得する
git checkout 2.0.0-beta.2
git pull origin 2.0.0-beta.2
  1. サービスを停止します。dockerディレクトリで実行してください。
docker compose down
  1. データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
  1. アップグレードサービス
docker compose up -d
  1. コンテナの起動後にデータを移行する
docker exec -it docker-api-1 uv run flask transform-datasource-credentials

ソースコードの展開

  1. API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
  2. リリース ブランチから最新のコードを取得します。
git checkout 2.0.0-beta.2
  1. Python の依存関係を更新します。
cd api
uv sync
  1. 次に、移行スクリプトを実行します。
uv run flask db upgrade
uv run flask transform-datasource-credentials
  1. 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。

v1.11(v1.11.0、v1.11.1、v1.11.2)へのアップグレード手順

注記
v1.10.0 と v1.10.1 の間で、データベースの名前と.envの環境変数の項目が変わりました。
この為、.env.env.exampleに併せて修正する必要があります。
これを実施しないとDifyの起動でエラーが発生します。主な確認箇所は以下です。
・DB_TYPE
・DB_HOST

Docker Compose デプロイメント

  1. カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  1. メインブランチから最新のコードを取得する
git checkout main 
git pull origin main
  1. サービスを停止します。dockerディレクトリで実行してください。
docker compose down
  1. データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
  1. アップグレードサービス
docker compose up -d

ソースコードの展開

  1. API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
  2. リリース ブランチから最新のコードを取得します。
git checkout 1.11.X
  1. Python の依存関係を更新します。
cd api
uv sync
  1. 次に、移行スクリプトを実行します。
uv run flask db upgrade
  1. 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。

v1.10.1以降

アップグレード前に必要なアクション

重要:
1.10.1以降、 Dify API イメージはセキュリティ強化のため、非 root ユーザー (UID 1001) として実行されるようになりました。ローカルファイルシステムストレージ(コミュニティデプロイメントのデフォルト)を使用している場合は、ホストマシン上でマウントされたストレージディレクトリの所有権を更新する必要があります。そうしないと、コンテナはファイルの読み書きに失敗します。

影響を受けるサービス:

  • api
  • worker

影響を受けるホストディレクトリ:

./volumes/app/storage→ マウント/app/api/storage

新しいバージョンを再起動する前に実行する内容:

cd ~/difyai/docker

# 既存のコンテナを停止する
docker compose down

# ホスト上のディレクトリの所有権を更新する
sudo chown -R 1001:1001 ./volumes/app/storage

# 変更が正しく適用されたか確認する
ls -ln ./volumes/app/ | grep storage
#※左から3番目と4番目の数字が 1001 1001 と表示されれば成功です。

# 通常通り再起動する
docker compose up -d

この 1 回限りの移行の後、Dify は新しい非ルート ユーザー モデルで正常に動作するようになります。

Docker Compose デプロイメント

注記
v1.10.0 と v1.10.1 の間で、データベースの名前と.envの環境変数の項目が変わりました。
この為、.env.env.exampleに併せて修正する必要があります。
これを実施しないとDifyの起動でエラーが発生します。主な確認箇所は以下です。
・DB_TYPE
・DB_HOST

  1. カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  1. メインブランチから最新のコードを取得する
git checkout main 
git pull origin main
  1. サービスを停止します。dockerディレクトリで実行してください。
docker compose down
  1. データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
  1. アップグレードサービス
docker compose up -d


ソースコードの展開

  1. API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
  2. リリース ブランチから最新のコードを取得します。
git checkout 1.11.X
  1. Python の依存関係を更新します。
cd api
uv sync
  1. 次に、移行スクリプトを実行します。
uv run flask db upgrade
  1. 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。

1.9.0以降

重要
アップグレード後、既存のデータソース認証情報を変換するために、以下の移行手順を実行する必要があります。この手順は、新バージョンとの互換性を確保するために必要です。

uv run flask transform-datasource-credentials

Docker Compose デプロイメント

  1. カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  1. メインブランチから最新のコードを取得する
git checkout 1.9.0
git pull origin 1.9.0
  1. サービスを停止します。dockerディレクトリで実行してください。
docker compose down
  1. データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
  1. アップグレードサービス
docker compose up -d
  1. コンテナの起動後にデータを移行する
# 1. ディレクトリ移動 
cd ~/difyai/docker 

# 2.念のため、volumes 全体の所有権を 1001 に再設定 
sudo docker compose down
sudo chown -R 1001:1001 ./volumes 
sudo docker compose up -d

# 3. 変換コマンドの実行 
sudo docker exec -u dify -it difyai-api-1 flask transform-datasource-credentials
# ここで設定したdifyユーザは、difyの内部ユーザです。

ソースコードの展開

  1. API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
  2. リリース ブランチから最新のコードを取得します。
git checkout 1.9.X
  1. Python の依存関係を更新します。
cd api
uv sync
  1. 次に、移行スクリプトを実行します。
uv run flask db upgrade
uv run flask transform-datasource-credentials
  1. 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。

1.9.0以前

Docker Compose デプロイメント

  1. カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
  1. メインブランチから最新のコードを取得する
git checkout 1.9.0
git pull origin 1.9.0
  1. サービスを停止します。dockerディレクトリで実行してください。
docker compose down
  1. データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
  1. アップグレードサービス
docker compose up -d

ソースコードの展開

  1. API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
  2. リリース ブランチから最新のコードを取得します。
git checkout 1.9.X
  1. Python の依存関係を更新します。
cd api
uv sync
  1. 次に、移行スクリプトを実行します。
uv run flask db upgrade
  1. 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。

【推奨】業務システム化に有効なアイテム

生成AIを学ぶ

システム化のパートナー

VPSサーバの選定

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次