ローカル環境へのデプロイと比較して、Dify を PAI-EAS 上にデプロイすると、マネージドサービスおよびエラスティックなスケーリングが利用可能になります。チームは基盤となるインフラストラクチャの運用維持から解放され、アプリケーションのロジック開発に集中できます。これにより、プロトタイプから本番環境への反復開発が加速します。
仕組み
このソリューションでは、Dify アプリケーションを PAI-EAS 上でホストし、外部依存関係をマウントすることで、完全なサービスを構築します。アーキテクチャには、PAI-EAS のサービスインスタンスと、VPC ネットワーク上で安全かつ効率的に通信する外部クラウドサービスが含まれます。
主な構成要素は以下のとおりです:
PAI-EAS サービス:コアのコンピューティングプラットフォームとして、EAS は Web インターフェイス、API バックエンド、非同期タスクワーカー、プラグインサンドボックスなど、複数のコンテナー内で Dify のすべてのサービスコンポーネントを実行します。EAS はライフサイクル管理、リソーススケジューリング、ネットワーク構成を処理します。
ApsaraDB RDS for PostgreSQL:ユーザー、会話、ナレッジベース、ワークフロー、プラグインのデータを格納します。データベースをアプリケーションから分離することで、データの永続性と独立性が確保されます。
ApsaraDB for Redis:高性能なキャッシュおよびメッセージキュー機能を提供します。ホットデータのキャッシュ、セッション状態の管理、Celery Broker を用いた非同期タスクの Dify コンポーネント間分散を実現します。
Elasticsearch:ベクトルデータベースおよび全文検索エンジンとして機能します。検索拡張生成(RAG)シナリオでは、ナレッジベースのドキュメントを効率的に格納、インデックス化、取得します。
Object Storage Service (OSS):永続的なファイルストレージを提供します。Dify プラグイン、アップロードされたナレッジベースのファイル、およびサービスの更新や再起動後も永続化が必要なその他のデータを格納します。
ワークフローは以下のとおりです:
ユーザーは、EAS が提供する Web サービスのエンドポイント経由で Dify インターフェイスにアクセスします。すべてのリクエストは、まず Nginx コンテナーを経由して Dify-Web または Dify-API コンテナーにルーティングされます。ビジネスロジックの処理中、API サービスはバックエンドで PostgreSQL、Redis、Elasticsearch と連携します。文書のインデックス作成などの非同期タスクは、Redis を経由してワーカーコンテナーに送信されます。すべての永続ファイルは、マウントされた OSS パスから読み書きされます。
手順 1:依存リソースの準備
Dify のデプロイを開始する前に、必要な外部依存リソースを事前に準備してください。ネットワーク接続の問題を回避するため、すべてのリソースを PAI-EAS サービスと同じリージョンおよび VPC 内に配置してください。
既存の ApsaraDB RDS for PostgreSQL インスタンスおよび Elasticsearch インスタンスについては、VPC の変更はサポートされていません。これらのインスタンスを作成する際は、PAI-EAS サービスと同じ VPC を選択してください。
VPC(仮想プライベートクラウド)を計画します。VPC がまだ存在しない場合は、VPC および vSwitch の作成を行います。
ApsaraDB RDS for PostgreSQL インスタンスの作成:作成後に、このインスタンス用の特権アカウントを作成します。このアカウントを使用して、Dify のコア機能データ用とプラグインデータ用の 2 つのデータベースを作成します。詳細については、「アカウントおよびデータベースの作成」をご参照ください。
重要PostgreSQL 16 を推奨します。PostgreSQL 18 では uuidv7 関数との既知の競合があります。詳しくは、GitHub の該当 Issueをご確認ください。
Redis インスタンスの作成:EAS コンテナーから Redis にアクセスできるようにするため、PAI-EAS サービスが実行される vSwitch の IP CIDR ブロックを、Redis インスタンスのホワイトリストに追加します。この情報は、VPC コンソールの vSwitch 詳細ページで確認できます。
Alibaba Cloud Elasticsearch インスタンスの作成:ナレッジベースにおけるベクトルストレージおよび全文検索に使用します。PAI-EAS サービスと同じ VPC 内に配置してください。
手順 2:Dify サービスのデプロイ
PAI コンソールにログインします。ページ上部からリージョンを選択し、目的のワークスペースを選択して、Elastic Algorithm Service (EAS) をクリックします。
Inference Service タブで、Deploy Service をクリックします。Scenario-based Model Deployment セクションで、Dify LLM platform をクリックします。
デプロイページで、以下の主要パラメーターを設定します。
OSS:ナレッジベースのファイルおよびプラグインデータを永続的に保存するための OSS バケットを選択し、パスを指定します。システムはこのパス下に dify および dify_plugin の 2 つのフォルダーを作成します。
PostgreSQL configuration:
Host Address:ご利用の ApsaraDB RDS for PostgreSQL インスタンスの内部エンドポイントを入力します。ApsaraDB RDS for PostgreSQL コンソールに移動し、対象のインスタンスを開き、データベースの接続 ページでエンドポイントを確認します。
Port:デフォルトは 5432 です。実際のポート番号を入力します。
Database - core data:アプリケーション、ユーザー、会話、ナレッジベース、ワークフロー、モデル構成のデータを格納するデータベース名を入力します。
Database plugins:プラグインの実行時ステータス、構成、メタデータを格納するデータベース名を入力します。
Account および Password:上記データベース用に作成した特権アカウントのユーザー名およびパスワードを入力します。
Redis config:
Host:ご利用の Redis インスタンスの内部エンドポイントを入力します。Redis コンソールに移動し、インスタンスの詳細ページの接続情報セクションからエンドポイントを取得します。
Port:デフォルトは 6379 です。実際のポート番号を入力します。
Account および Password:ご利用の Redis インスタンスのアカウントおよびパスワードを入力します。
Elasticsearch configuration:
Host address:ご利用の Elasticsearch インスタンスの内部エンドポイントを入力します。Alibaba Cloud Elasticsearch コンソールに移動し、インスタンスの詳細ページを開き、基本情報セクションからエンドポイントを取得します。
Port:デフォルトは 9200 です。実際のポート番号を入力します。
Account および Password:ご利用の Elasticsearch インスタンスのログイン名(デフォルトは elastic)およびパスワードを入力します。パスワードを忘れてしまった場合は、パスワードをリセットしてください。
Resource Type:ご利用のサービス向けに EAS インスタンスタイプを選択します。安定したパフォーマンスを確保するため、最低でも 8 vCPU および 16 GB のメモリを推奨します。
すべての設定内容を確認後、Deploy をクリックします。サービスのステータスが「実行中」に変化した場合、デプロイは成功しています。
手順 3:サービスのステータス確認およびアクセステスト
デプロイが正常に完了した後、サービスのステータスを確認し、機能をテストします。
サービスログの表示
サービスの起動に失敗した場合や異常動作が発生した場合は、サービスの詳細ページに移動します。インスタンス一覧 から該当するコンテナー・コンポーネントを特定し、その ログ ボタンをクリックします。起動時および実行中のログを確認して、エラーの原因を特定します。

Dify Web インターフェイスへのアクセス
サービスの詳細ページで、右上隅の Web applications をクリックします。これにより Dify の初期設定ページが開きます。管理者アカウントを作成して、プラットフォームの利用を開始します。
API の呼び出し
Dify アプリケーションを作成後、API ページに表示されるベース URL は内部サービスのエンドポイントです。
インターネット経由で Dify API を呼び出すには、http://******.console.cn-hangzhou.eas.pai-ml.comを、PAI-EAS サービスの詳細ページに記載されているインターネットエンドポイントに置き換えます。
API キーを作成後、API 経由でアプリケーションと連携できます。

以下は、パブリック API を使用してチャットボットアプリケーションにメッセージを送信する例です:
curl -X POST 'http://xxxx.your_aliyun_account_id.cn-hangzhou.pai-eas.aliyuncs.com/v1/chat-messages' \ --header 'Authorization: Bearer app-xxxxxxxxxxxxx' \ --header 'Content-Type: application/json' \ --data-raw '{ "inputs": {}, "query": "Dify の主な機能を紹介してください", "response_mode": "blocking", "user": "test-user-001" }'
手順 4:JSON 構成ファイルを用いた高度なデプロイ
自動化または高度にカスタマイズされたデプロイを行う場合は、JSON 構成ファイルを使用します。EAS サービスのデプロイページで、JSON デプロイ に切り替え、以下のテンプレートを貼り付けます。このテンプレートでは、Dify に必要なすべてのコンテナー、環境変数、ストレージマウント、ネットワーク設定が完全に定義されています。
デプロイ時に、JSON テンプレート内のすべてのプレースホルダー($ で始まるもの)を実際の値に置き換えてください。各パラメーターの詳細については、「JSON デプロイ」をご参照ください。
metadata セクションでは、Web アクセスポートを公開するために
"enable_webservice": trueを設定します。storage セクションでは、
$oss_pathを実際の OSS パス(例:`oss://your-bucket-name/dify-data/`)に置き換えます。これは Dify API およびプラグインで使用されるパスであり、このパス内にdifyおよびdify_pluginのフォルダーが作成されます。containers セクションでは、以下の環境変数を置き換える必要があります。詳細については、「Dify の環境変数」をご参照ください。
PostgreSQL データベースの 構成
db_host:PostgreSQL データベースインスタンスのエンドポイント。
db_port:デフォルトは 5432 です。
api_db:Dify コア機能用のデータベース。アプリケーション、ユーザー、会話、ナレッジベース、ワークフロー、モデル構成のデータを格納します。
plugin_daemon_db:Dify プラグイン用のデータベース。プラグインの実行時ステータス、構成、メタデータを格納します。
db_username および db_password:両方のデータベースで同一のユーザー名およびパスワードを使用します。
Redis 構成
Redis は、ライブ AI 会話中にサービスコンポーネント間でリアルタイムのメッセージングおよび通信を可能にします。
redis_host:Redis インスタンスの接続エンドポイント。
redis_port:デフォルトは 6379 です。
redis_password:Redis インスタンス作成時に設定したパスワード。
Elasticsearch 構成
ベクトルデータベースおよび全文検索に使用します。
elasticsearch_host:Elasticsearch インスタンスの接続エンドポイント。
elasticsearch_port:デフォルトは 9200 です。
elasticsearch_username:デフォルトは elastic です。
elasticsearch_password:Elasticsearch インスタンス作成時に設定したパスワード。パスワードを忘れてしまった場合は、インスタンスのパスワードをリセットしてください。
セキュリティキー
Dify では、内部通信およびデータのセキュリティ確保のために複数のキーが必要です。コマンド
openssl rand -base64 42を使用して生成します。secret_key:セッションクッキーの署名およびデータベース内の機密データの暗号化に使用します。
api_key:悪意ある外部からの攻撃を防ぐための内部 API アクセスに使用します。
plugin_daemon_key:悪意ある外部からの攻撃を防ぐためのプラグインデーモンへの内部アクセスに使用します。
よくある質問
データベースインスタンスに接続できません
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 /app/internal/db/pg/pg.go:34
[2025-09-13 00:46:28] [/bin/sh]: [error] failed to initialize database, got error failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 init.go:95: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: panic: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)ご利用の ApsaraDB RDS for PostgreSQL インスタンスと PAI-EAS サービスが同じ VPC 内にあることを確認してください。ApsaraDB RDS for PostgreSQL は VPC の切り替えをサポートしていません。インスタンスを再構築する必要があります。

Redis に接続できません
dify-api の Redis クライアントが Redis サーバーに接続できません。
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/utils.py", line 188, in wrapper
[2025-09-13 00:28:21] [/bin/sh]: return func(*args, **kwargs)
[2025-09-13 00:28:21] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 1530, in get_connection
[2025-09-13 00:28:21] [/bin/sh]: connection.connect()
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 379, in connect
[2025-09-13 00:28:21] [/bin/sh]: self.connect_check_health(check_health=True)
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 389, in connect_check_health
[2025-09-13 00:28:21] [/bin/sh]: raise TimeoutError("Timeout connecting to server")
[2025-09-13 00:28:21] [/bin/sh]: redis.exceptions.TimeoutError: Timeout connecting to server
[2025-09-13 00:28:22] time="2025-09-12T16:28:22Z" level=info msg="program stopped with status:exit status 1" program=/bin/sh考えられる原因:
VPC ネットワークの問題:Redis インスタンスと PAI-EAS サービスが同じ VPC 内にあることを確認してください。

ホワイトリストの設定ミス:Redis のホワイトリストにルールが追加されているか確認してください。PAI-EAS サービスが実行される vSwitch の IP CIDR ブロックを追加します。CIDR ブロックは、vSwitch ページ で確認できます。


Elasticsearch に接続できません
考えられる原因:VPC ネットワークの問題。Elasticsearch インスタンスと PAI-EAS サービスが同じ VPC 内にあることを確認してください。

dify-api 用の必須データベースが存在しません
起動時に、Dify は 2 つのデータベースに接続します:dify-api 用の コアデータ データベースと、dify-plugin 用の プラグイン データベースです。
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 625, in connect
[2025-09-13 01:33:20] [/bin/sh]: return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycopg2/__init__.py", line 122, in connect
[2025-09-13 01:33:20] [/bin/sh]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycogreen/gevent.py", line 32, in gevent_wait_callback
[2025-09-13 01:33:20] [/bin/sh]: state = conn.poll()
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "dify_core" does not exist
[2025-09-13 01:33:20] [/bin/sh]:Dify Community Edition 1.7.1 では、プラグイン データベースは自動的に作成されますが、コアデータ データベースは作成されません。手動で作成する必要があります。
marketplace.dify.ai に接続できません
EAS コンテナーはデフォルトでインターネットにアクセスできません。EAS のインターネットまたはプライベートネットワークアクセス機能 を有効化して、インターネットアクセスを許可してください。
[2025-09-13 00:00:00] [/bin/sh]: 2025-09-12 16:00:00,847.847 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:02] [/bin/sh]: 2025-09-12 16:00:02,046.046 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:06] [/bin/sh]: 2025-09-12 16:00:06,416.416 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 2: timed out
[2025-09-13 00:00:07] [/bin/sh]: 2025-09-12 16:00:07,614.614 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 2: timed out