ファイアウォールとデータレジデンシー.
DXPR Builderはページを自分のDrupalデータベースに保存します。ライセンス確認、エディターアセット、AIリクエストのためにDXPRサービスに接続します。このページではすべての接続先、各接続が運ぶ内容、DXAI Kavyaモデルの動作場所、プロダクトキーの保存方法、外部アクセス制限時に動作する内容を説明します。
接続一覧
| ホスト | 接続元 | 目的 | 必要な機能 |
|---|---|---|---|
dxpr.com |
Drupalサーバー | ライセンス状態、ドメインチェック、ライセンスユーザーの同期 | 編集 |
cdn2.dxpr.com |
エディターのブラウザー | エディターのJavaScriptとCSS(プライマリー) | 編集 |
cdn.dxpr.com |
エディターのブラウザー | エディターのJavaScriptとCSS(フォールバック) | 編集 |
kavya.dxpr.com |
Drupalサーバー | AIリクエストとAIクレジット残高 | AI機能 |
html-extract.dxpr.com |
エディターのブラウザー | AIの「URLからの複製」 | AI機能 |
r.jina.ai(サードパーティー) |
エディターのブラウザー | プロンプト内のURLのWebページ読み取り | AI機能 |
tuur.dxpr.com |
エディターのブラウザー | エディターの利用状況分析 | 任意 |
すべての接続はポート443のHTTPSです。サイト訪問者はDXPRサーバーから何も読み込みません。公開ページはデータベースに保存されたHTMLから描画され、フロントエンドスクリプト(dxpr_builder/dxpr_frontend.min.js)はモジュールに同梱です。app.dxpr.comは管理者に表示されるリンクにのみ現れます。
ライセンス確認(dxpr.com)
Drupalサーバーはsrc/Service/DxprBuilderLicenseServiceInterface.php定義の4つのエンドポイントを呼びます。各呼び出しはプロダクトキーをAuthorization: Bearerヘッダーで送ります。
| エンドポイント | タイミング | 送信データ |
|---|---|---|
GET /api/user-license |
認証済みは24時間ごと、未認証は30分ごと | gbaとusers_tier(edit with dxpr builder権限を持つアカウント数と該当ティア)、values_count(ビルダーフィールドを使うコンテンツアイテム数)、site_base_url、site(サイトのハッシュソルトのHMAC。ソルト自体は送りません)、site_mail(system.site由来)、project、version |
GET /api/domain-blacklist/{hostname} |
1時間ごと | ホスト名のみ。認証ヘッダーなし |
POST /api/central-user-storage/{add,remove,sync} |
アカウント、権限、プロダクトキー変更時。後続処理はキューに入りcronで実行 | ホスト名に加え、編集権限を持つ各アカウントのメールアドレスとロール名。有効なメールアドレスのないアカウントは飛ばします |
GET /api/user-license/users |
User Licensesページを開いたとき | キー以外なし |
ページコンテンツがライセンスリクエストに含まれることはありません。モジュールはフロントページに隠し<div>も出力します。固定マーカー文字列、ライセンスティア、エディター数、保存回数が入ります(dxpr_builder.moduleのdxpr_builder_page_bottom())。ページソースで読めます。
エディターアセット(cdn2.dxpr.com、cdn.dxpr.com)
設定がEditor Assets=Cloud(初期値)の場合、エディターのブラウザーはビルダーのJavaScriptとCSSをhttps://cdn2.dxpr.com/<version>/から読み込みます。/healthプローブ失敗後はhttps://cdn.dxpr.com/<version>/にフォールバックします。プロダクトキーは各アセットURLにjwtクエリーパラメーターで付きます(dxpr_builder_library_info_build())。CDNはそのキーを確認します。401応答ではjs/editor_validation.jsが「Your product key is not valid」と表示します。
選択肢Local (minified)とLocal (unminified)は、モジュールのdxpr_builder/ディレクトリーにエディターのビルド済みコピーがある場合のみ設定フォームに表示されます。そのコピーはCloud選択時も自動で使われます。Gitリポジトリーはこれらのビルド済みファイルを追跡しないため、drupal.orgからダウンロードしたリリースではエディターはCDNから読み込まれます。
AIリクエスト(kavya.dxpr.com)
ブラウザーがkavya.dxpr.comに直接接続することはありません。エディターは自分のサイトのルート(/dxpr_builder/ajax/ai/chat、/dxpr_builder/ajax/ai/image、/dxpr_builder/ajax/ai/image/edit。いずれもedit with dxpr builder権限、CSRFトークン、ライセンス済みアカウントが必要)に投稿します。サイトは各リクエストをDrupal AIモジュールのDXPRプロバイダー(ai_provider_dxpr)経由でhttps://kavya.dxpr.com/v1/chat/completions、/v1/images/generations、/v1/images/editsに中継します。認証はKeyモジュールに保存されたDXPR APIキーです。プロバイダーのhost設定(ai_provider_dxpr.settings)で別のホストに向けられます。別途、AI設定ページはプロダクトキーでGET https://kavya.dxpr.com/v1/account/balanceを呼び、クレジット残高を表示します。
AIリクエストの内容
ページコンテンツをサイト外に送るのはAI機能のみで、編集者が実行したときに限ります(dxpr_builder/build/dxpr-global/ai-service.js)。
| リクエスト | 送信内容 |
|---|---|
| テキストとページの生成 | システムプロンプト、エディターのプロンプト、チャット履歴 |
| エレメント選択時 | エレメントの外側HTML。500文字以下は全体、それ以上は先頭と末尾の200文字 |
| ページレベルの操作 | 既存ページのHTML(最大50,000文字)。ページ全体の置き換え時はページ全体 |
| 任意フィールド | モデル名、有効プロバイダーの順序、予測HTML結果、許可タグとクラス、web_searchフラグ、応答形式 |
| 画像生成 | プロンプト、サイズ、品質、背景 |
| 画像編集 | 同上とソース画像(base64エンコード) |
2つのおまけ機能がエディターのブラウザーからWebページを取得します(ai-service-url-fetch.js)。プロンプト内のURLは.md付きでリクエストし、失敗時はサードパーティーのリーダーサービス(DXPR運営外)https://r.jina.ai/<url>経由です。ページ複製のプロンプトではURLをhttps://html-extract.dxpr.com/?url=...に送ります。いずれも送るのはURLのみです。
AI出力は戻り際にフィルターされます。許可ドメイン、ブロックタグ、許可タグは/admin/dxpr_studio/dxpr_builder/ai_settingsのAI Output Filteringで設定します。
DXAI Kavyaモデルの動作場所
DXPR Builderは3つのモデルを提供します(src/Constants/AiModelConstants.php)。
| モデル | API名 | 設定フォームの説明 |
|---|---|---|
| DXAI Kavya M1 | kavya-m1 |
Best performance (OpenAI, Google Gemini, Anthropic) |
| DXAI Kavya M1 EU | kavya-m1-eu |
Privacy-focused (MistralAI) |
| DXAI Kavya M1 Fast | kavya-m1-fast |
Fastest responses, lower quality |
どちらのモジュールにも地域設定はありません。データレジデンシーはモデルと有効化した上流プロバイダーで決まります。
kavya-m1は5つのプロバイダー間でフェイルオーバーします。DXPR AIプロバイダー設定フォームの国名付き一覧:Anthropic(米国)、Google Gemini(米国)、MistralAI(フランス)、OpenAI(米国)、XAI(米国)。Manual priorityモードでは、プロバイダーをEnabledとDisabled間でドラッグし、順序を設定します。kavya-m1-euはMistralAIのみ使います。DXPR AIプロバイダーREADMEには「データを欧州域内に保持(オランダのサーバー)」とあり、ドキュメントにはKavyaサーバーがオランダで動作しバックアップがドイツにあること、リクエストはフランスのMistralAIサーバーを経由すること、EU域外プロバイダーへのフォールバックがないことが書かれています。これらの場所はDXPRの文書によるもので、Drupalコードで強制されるものではありません。
モジュールai_provider_dxprが入っている場合、モデルは/admin/config/ai/providers/dxprで選び、allowed_models設定で編集者が選べるモデルを制限します。未インストールの場合、モデルとプロバイダーの順序は/admin/dxpr_studio/dxpr_builder/ai_settingsで設定します。
プロダクトキーの保存方法
セクションLicenseの/admin/dxpr_studio/dxpr_builder/settingsには2つのStorage method選択肢があります(src/Form/DxprBuilderSettingsForm.php、src/Service/DxprBuilderKeyService.php)。
- Key module:Keyで選んだKeyエンティティからキーを読みます。
dxpr_builder_update_9020()はdxpr_builder.settings内のキーをKeyエンティティdxpr_builder_jwtに移します。そのConfigurationプロバイダーは引き続きエクスポートします。FileまたはEnvironmentプロバイダーのみ、設定エクスポートからキーを外せます。 - Configuration storage:キーは
dxpr_builder.settings.json_web_tokenに平文で保存され、設定エクスポートに含まれます。
プロダクトキーはJSON Web Tokenで、ライセンス呼び出し、クレジット残高呼び出し、CDNアセットURLを認証します。認証情報として扱います。
ファイアウォール設定
| 接続元 | 外部HTTPS許可先 | 備考 |
|---|---|---|
| Drupalサーバー | dxpr.com |
ライセンス |
| Drupalサーバー | kavya.dxpr.com |
AIのみ |
| 編集者のワークステーション | cdn2.dxpr.com、cdn.dxpr.com |
エディターアセット |
| 編集者のワークステーション | html-extract.dxpr.com、r.jina.ai |
AIのみ。これらをブロックしてもURL調査と複製が無効になるだけです |
| 編集者のワークステーション | tuur.dxpr.com |
分析。ブロックしても編集への影響はありません |
分析(dxpr_builder/build/dxpr-analytics/、PostHog)は、エディターのメールアドレスとサイトホスト名でイベントを識別します。drush config:set dxpr_builder.settings record_analytics 0で無効化します。このキーにフォームフィールドはありません。フォームフィールドのないキーが他に2つ、dxpr_builder.settingsから読まれます。cloud_urlはCDNベースURLを置き換えます(VERSIONはモジュールバージョンに置換)。license_endpointは中央ユーザー保存エンドポイントを置き換えます。settings.phpの設定上書きで指定します。
プロキシー設定
ライセンスとAI呼び出しはDrupalのHTTPクライアントを使うため、プロキシーはsettings.phpで設定します。
$settings['http_client_config']['proxy'] = [
'http' => 'http://proxy.example.com:8080',
'https' => 'http://proxy.example.com:8080',
'no' => ['localhost', '127.0.0.1'],
];
エディターのブラウザーはCDNアセットを読み込み、分析・リーダーサービスを直接呼ぶため、それらのリクエストはワークステーションのプロキシー設定に従います。
エアギャップとオンプレミスの導入
DXPR Builderは自分のサーバーで動作します。コンテンツがホスト型コンポーネントを通過することはありません。サーバーもエディターもDXPRに届かない場合:
| 機能 | DXPRアクセスなしの場合 |
|---|---|
| 公開ページの提供 | 動作します。DXPRからの読み込みはありません |
| コンテンツ保存 | 動作します。ページはデータベースのフィールド値です |
| エディターの読み込み | エディターのローカルビルドがない限り失敗します。場所はdxpr_builder/ |
| ライセンス検証 | 失敗します。モジュールはエラーを記録し、管理者に「We are having trouble connecting to the DXPR servers」と表示して30分ごとに再試行します。プロダクトキー設定中は編集をブロックしません |
| User Licensesページ | 空で、必要なのはdxpr.com |
| AI機能 | 利用不可です。各リクエストの経由地はkavya.dxpr.com |
| 分析、URL調査、URLからの複製 | 静かに飛ばされます |
プロダクトキーなしでは、モジュールは無料ティア制限をコードで適用します。エディター1人、コンテンツアイテム100件です。
完全オンプレミスの導入では、提供と保存は動作します。編集にはCDNアクセスかローカルエディタービルド、ライセンス検証にはdxpr.comが必要です。内部ホスト用のエディタービルドが必要な場合はDXPRにお問い合わせください。
次のステップ
- インストール:プロダクトキーと保存方法を設定します
- AI機能:AIを有効化し、モデルを選びます
- セキュリティ:権限と出力フィルターを確認できます
- ライセンスとプロダクトキー:ライセンスエラーの対処法を確認できます