Dify(ディファイ)は頻繁にアップデートが行われており、新機能の追加やセキュリティ修正が継続的に提供されています。しかし、不用意にアップデートを行うと「起動しなくなった」「データが消えた」といったトラブルに見舞われることもあります。
この記事では、Docker Compose環境で構築したDifyを、安全かつ確実に最新バージョンへアップデートするための手順をステップバイステップで解説します。
Difyアップデートの基本手順(Docker Compose)
最も一般的なDocker Compose環境でのアップデート手順です。リスクを最小限に抑えるため、必ずバックアップを取得してから作業を行ってください。
注意: 作業はすべて ~/dify/docker ディレクトリ(インストール先)で行うことを前提としています。
1. データの完全バックアップ(必須)
Difyで最も重要な情報は、dockerの下にある、.env、docker-compose.yaml、volumesの3つとなります。
Difyのデータ(データベースとアップロードファイル)と設定ファイルをバックアップします。
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
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 を維持しつつ、不足している項目がないか確認してください。
準備ができたら、新しいイメージをプルして起動します。
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でのアップグレード手順
- 設定のエクスポート: 現在の設定を
values.yamlに保存します。helm get values dify -a -o yaml > values.yaml - バージョンの指定:
values.yaml内のtagを新しいバージョン(例:1.1.3)に書き換えます。 - アップグレード実行:
helm upgrade --install dify douban/dify -f values.yaml - DBマイグレーション:
kubectl exec -it {dify-api-pod} -- flask db upgrade
まとめ
Difyのアップデートは、以下の3原則を守ることで安全に行えます。
- 必ずバックアップを取る(ボリュームと設定ファイル)
- 公式のリリースノートで「破壊的変更」を確認する
- マイグレーション手順(権限変更やコマンド実行)を忘れない
最新の機能を活用しつつ、安定した運用を心がけてください。
付録:バージョン別のアップグレード
以下は、バージョン別の公式ページの手順に従ったアップデート手順です。
v2.0.0へのアップグレード手順
Docker Compose デプロイメント
- カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
- メインブランチから最新のコードを取得する
git checkout 2.0.0-beta.2
git pull origin 2.0.0-beta.2
- サービスを停止します。dockerディレクトリで実行してください。
docker compose down
- データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
- アップグレードサービス
docker compose up -d
- コンテナの起動後にデータを移行する
docker exec -it docker-api-1 uv run flask transform-datasource-credentials
ソースコードの展開
- API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
- リリース ブランチから最新のコードを取得します。
git checkout 2.0.0-beta.2
- Python の依存関係を更新します。
cd api
uv sync
- 次に、移行スクリプトを実行します。
uv run flask db upgrade
uv run flask transform-datasource-credentials
- 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。
v1.11(v1.11.0、v1.11.1、v1.11.2)へのアップグレード手順
Docker Compose デプロイメント
- カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
- メインブランチから最新のコードを取得する
git checkout main
git pull origin main
- サービスを停止します。dockerディレクトリで実行してください。
docker compose down
- データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
- アップグレードサービス
docker compose up -d
ソースコードの展開
- API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
- リリース ブランチから最新のコードを取得します。
git checkout 1.11.X
- Python の依存関係を更新します。
cd api
uv sync
- 次に、移行スクリプトを実行します。
uv run flask db upgrade
- 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。
v1.10.1以降
アップグレード前に必要なアクション
影響を受けるサービス:
apiworker
影響を受けるホストディレクトリ:
./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 デプロイメント
- カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
- メインブランチから最新のコードを取得する
git checkout main
git pull origin main
- サービスを停止します。dockerディレクトリで実行してください。
docker compose down
- データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
- アップグレードサービス
docker compose up -d
ソースコードの展開
- API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
- リリース ブランチから最新のコードを取得します。
git checkout 1.11.X
- Python の依存関係を更新します。
cd api
uv sync
- 次に、移行スクリプトを実行します。
uv run flask db upgrade
- 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。
1.9.0以降
uv run flask transform-datasource-credentials
Docker Compose デプロイメント
- カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
- メインブランチから最新のコードを取得する
git checkout 1.9.0
git pull origin 1.9.0
- サービスを停止します。dockerディレクトリで実行してください。
docker compose down
- データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
- アップグレードサービス
docker compose up -d
- コンテナの起動後にデータを移行する
# 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の内部ユーザです。
ソースコードの展開
- API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
- リリース ブランチから最新のコードを取得します。
git checkout 1.9.X
- Python の依存関係を更新します。
cd api
uv sync
- 次に、移行スクリプトを実行します。
uv run flask db upgrade
uv run flask transform-datasource-credentials
- 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。
1.9.0以前
Docker Compose デプロイメント
- カスタマイズした docker-compose YAML ファイルをバックアップします (オプション)
cd docker
cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
- メインブランチから最新のコードを取得する
git checkout 1.9.0
git pull origin 1.9.0
- サービスを停止します。dockerディレクトリで実行してください。
docker compose down
- データのバックアップ
tar -cvf volumes-$(date +%s).tgz volumes
- アップグレードサービス
docker compose up -d
ソースコードの展開
- API サーバー、ワーカー、および Web フロントエンド サーバーを停止します。
- リリース ブランチから最新のコードを取得します。
git checkout 1.9.X
- Python の依存関係を更新します。
cd api
uv sync
- 次に、移行スクリプトを実行します。
uv run flask db upgrade
- 最後に、API サーバー、ワーカー、Web フロントエンド サーバーを再度実行します。
【推奨】業務システム化に有効なアイテム
生成AIを学ぶ



システム化のパートナー



VPSサーバの選定





コメント