はじめに
メドレーでは、社内の生成AI活用基盤としてオープンソースのLLMアプリ開発プラットフォーム「Dify」をセルフホストで運用しています。現在、約750名が利用しており、各事業のアシスタントボットをはじめとして、営業支援、カスタマーサポート支援、求人票作成支援など約50のAIアプリが稼働しています。
導入の背景や詳細については、以前、弊社VPoEが Findy Tools に寄稿した記事をご覧ください。
今回、v1.9.2からv1.10.1へアップグレードした際に、見落としてしまっていた躓きポイントがあったので、同じ状況の方の参考になればと思い共有します。
環境
- Dify v1.9.2 → v1.10.1
- Docker Compose によるセルフホスト
- PostgreSQL, Redis, Weaviate
- AWS EC2 (Amazon Linux 2023)
今回のアップグレードで変わったこと
v1.10.1では.env.exampleに多くの新規設定が追加されました。
主な変更点:
- Plugin Daemon の追加: プラグイン機能のためのデーモンサービスが新設
-
新しい環境変数:
TRIGGER_URL,INTERNAL_FILES_URL,DB_TYPEなど -
データベースサービス名の変更:
db→db_postgres
躓いたポイント
1. plugin_daemon が起動しない
アップグレード後、docker compose ps で確認すると plugin_daemon が Restarting を繰り返していました。
docker-plugin_daemon-1 Restarting (2) 15 seconds ago
原因: ログを確認すると、データベース接続エラーでした。
failed to connect to `host=db user=postgres database=dify_plugin`:
hostname resolving error (lookup db on 127.0.0.11:53: no such host)
解決策: .env の DB_HOST を db から db_postgres に変更。
- DB_HOST=db
+ DB_HOST=db_postgres
新しい docker-compose.yaml ではPostgreSQLのサービス名が db_postgres に変わっていたのが原因でした。
2. .env と .env.example の差分が大きい
既存の .env をそのまま使っていたら、新機能に必要な設定が足りず動作しませんでした。
解決策: .env.example をベースに、本番環境の値をマージする形で .env を再作成しました。
主に追加が必要だった設定:
# Plugin Daemon用
TRIGGER_URL=https://your-domain.com
INTERNAL_FILES_URL=http://api:5001
# UTF-8エンコード
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
PYTHONIOENCODING=utf-8
# データベースタイプの明示
DB_TYPE=postgresql
# Plugin Daemon設定
PLUGIN_DAEMON_KEY=...
PLUGIN_DAEMON_URL=http://plugin_daemon:5002
PLUGIN_DIFY_INNER_API_KEY=...
アップグレード手順まとめ
-
事前にローカルで差分を確認
サーバー上で作業を始める前に、ローカル環境で差分を確認しておくと安全です。
- 現在の
.envをサーバーからダウンロード - GitHub上の最新 .env.example と比較
- VSCode等のエディタで差分を確認し、マージ方針を決めておく
- 現在の
-
バックアップ取得
cp .env .env.backup cp docker-compose.yaml docker-compose.yaml.backup -
最新のコードを取得
git checkout main git pull origin main -
コンテナとネットワークのクリーンアップ
docker compose downでコンテナを停止します。docker compose down通常はこれで全コンテナが停止しますが、まれにネットワークやコンテナが残る場合があります。その場合は以下の手順で手動クリーンアップします。
ネットワークが残っている場合:
# ネットワークエラーが表示された場合 # ! Network docker_default Resource is still in use # 旧DBコンテナを強制削除 docker rm -f docker-db-1 # 未使用のネットワークをクリーンアップ docker network prune -fクリーンアップ確認:
docker compose ps # 何も表示されなければOK -
.env の更新
Step 1で確認した差分をもとに、
.env.exampleをベースに本番固有の値をマージします。その後、 元々の.envに設定していた本番環境の値を書き加えます。# .env.example をコピーして編集 cp docker/.env.example .env vi .env -
コンテナ再起動
docker compose down docker compose pull docker compose up -d -
起動確認
docker compose ps docker compose logs plugin_daemon --tail 50
おわりに
Difyは活発に開発が進んでいるため、アップグレード時は .env.example と docker-compose.yaml の両方を確認することをおすすめします。
特に今回のようにサービス名が変わるケースでは、既存の .env をそのまま使い回すと思わぬエラーに遭遇します。公式の .env.example をベースに差分をマージする方法が確実です。