設定本機 Dispatcher 工具 set-up-local-dispatcher-tools

Adobe Experience Manager (AEM)的Dispatcher是Apache HTTP Web伺服器模組,可在CDN和AEM Publish層級之間提供安全性與效能層。 Dispatcher是整體Experience Manager架構不可或缺的一部分,並應成為本機開發設定的一部分。

AEM as a Cloud Service SDK包含建議的Dispatcher Tools版本,有助於設定驗證並在本機模擬Dispatcher。 Dispatcher Tools由以下部分組成:

  • 位於.../dispatcher-sdk-x.x.x/src的Apache HTTP Web Server和Dispatcher組態檔基準組
  • 位於.../dispatcher-sdk-x.x.x/bin/validate的組態驗證器CLI工具
  • 位於.../dispatcher-sdk-x.x.x/bin/validator的組態產生CLI工具
  • 位於.../dispatcher-sdk-x.x.x/bin/docker_run的組態部署CLI工具
  • 不可變的組態檔覆寫CLI工具,位於.../dispatcher-sdk-x.x.x/bin/update_maven
  • 使用Dispatcher模組執行Apache HTTP Web伺服器的Docker影像

請注意,~是用作使用者目錄的速記。 在Windows中,這相當於%HOMEPATH%

NOTE
此頁面中的影片是錄製在macOS上。 Windows使用者可以跟著進行,但會使用每個視訊提供的對等Dispatcher Tools Windows命令。

先決條件

  1. Windows使用者必須使用Windows 10專業版(或支援Docker的版本)
  2. 在本機開發電腦上安裝Experience ManagerPublish Quickstart Jar
  • 可選擇在本機AEM Publish服務上安裝最新的AEM參考網站。 本教學課程會使用此網站以視覺效果呈現運作中的Dispatcher。
  1. 在本機開發電腦上安裝並啟動最新版本的Docker (Docker Desktop 2.2.0.5+ / Docker Engine v19.03.9+)。

下載Dispatcher工具(做為AEM SDK的一部分)

AEM as a Cloud Service SDK (或AEM SDK)包含用於在本機執行Apache HTTP Web伺服器(包含Dispatcher模組以進行開發)的Dispatcher工具,以及相容的QuickStart Jar。

如果AEM as a Cloud Service SDK已下載至設定本機AEM執行階段,則不需要重新下載。

  1. 使用您的Adobe ID登入experience.adobe.com/#/downloads
    • 您的Adobe組織​ 必須 ​已布建給AEM as a Cloud Service,才能下載AEM as a Cloud Service SDK
  2. 按一下要下載的最新​ AEM SDK ​結果列

從AEM SDK Zip解壓縮Dispatcher工具

TIP
Windows使用者在包含「本機Dispatcher工具」的資料夾路徑中不能有任何空格或特殊字元。 如果路徑中存在空格,docker_run.cmd會失敗。

Dispatcher工具的版本與AEM SDK的版本不同。 確保透過與Dispatcher版本相符的AEM SDK版本來提供AEM as a Cloud Service工具的版本。

  1. 解壓縮下載的aem-sdk-xxx.zip檔案
  2. 將Dispatcher工具解壓縮至~/aem-sdk/dispatcher
macOS
code language-shell
$ chmod a+x aem-sdk-dispatcher-tools-x.x.x-unix.sh
$ ./aem-sdk-dispatcher-tools-x.x.x-unix.sh
Windows
aem-sdk-dispatcher-tools-x.x.x-windows.zip解壓縮至C:\Users\<My User>\aem-sdk\dispatcher (視需要建立缺少的資料夾)。
Linux®
code language-shell
$ chmod a+x aem-sdk-dispatcher-tools-x.x.x-unix.sh
$ ./aem-sdk-dispatcher-tools-x.x.x-unix.sh

以下發出的所有命令都假設目前的工作目錄包含展開的Dispatcher工具內容。

此影片使用macOS作說明用途。 可使用同等的Windows/Linux命令來取得類似的結果。

瞭解Dispatcher設定檔

TIP
AEM專案Maven原型建立的Experience Manager專案已預先填入這組Dispatcher設定檔案,因此不需要從Dispatcher Tools src資料夾進行複製。

Dispatcher工具提供一組Apache HTTP Web伺服器和Dispatcher設定檔,可定義所有環境(包括本機開發)的行為。

如果這些檔案在Experience ManagerMaven專案中不存在,則將複製到Experience ManagerMaven專案到dispatcher/src資料夾。

在解壓縮的Dispatcher工具中,組態檔的完整說明為dispatcher-sdk-x.x.x/docs/Config.html

驗證設定

可選擇使用validate指令碼驗證Dispatcher和Apache Web伺服器設定(透過httpd -t) (請勿與validator可執行檔混淆)。 validate指令碼提供執行validator三個階段的便利方式。

macOS
code language-shell
$ ./bin/validate.sh ./src
Windows
code language-shell
$ bin\validate src
Linux®
code language-shell
$ ./bin/validate.sh ./src

在本機執行Dispatcher

AEM Dispatcher是使用Docker針對src Dispatcher和Apache Web伺服器組態檔在本機執行。

macOS
code language-shell
$ ./bin/docker_run_hot_reload.sh <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>

docker_run_hot_reload可執行檔優先於docker_run,因為它會在組態檔變更時重新載入組態檔,而不需手動終止和重新啟動docker_run。 或者,可以使用docker_run,但是當組態檔變更時,它需要手動終止和重新啟動docker_run

Windows
code language-shell
$ bin\docker_run <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
Linux®
code language-shell
$ ./bin/docker_run_hot_reload.sh <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>

docker_run_hot_reload可執行檔優先於docker_run,因為它會在組態檔變更時重新載入組態檔,而不需手動終止和重新啟動docker_run。 或者,可以使用docker_run,但是當組態檔變更時,它需要手動終止和重新啟動docker_run

<aem-publish-host>可設為host.docker.internal,這是Docker在解析為主機電腦IP的容器中提供的特殊DNS名稱。 如果host.docker.internal無法解析,請參閱下列疑難排解一節。

例如,若要使用Dispatcher工具提供的預設設定檔案啟動Dispatcher Docker容器:

啟動Dispatcher Docker容器,提供Dispatcher設定src資料夾的路徑:

macOS
code language-shell
$ ./bin/docker_run_hot_reload.sh ./src host.docker.internal:4503 8080
Windows
code language-shell
$ bin\docker_run src host.docker.internal:4503 8080
Linux®
code language-shell
$ ./bin/docker_run_hot_reload.sh ./src host.docker.internal:4503 8080

透過AEM as a Cloud Service SDK的Publish服務(于連線埠4503本機執行)可在http://localhost:8080透過Dispatcher取得。

若要針對Experience Manager專案的Dispatcher設定執行Dispatcher工具,請指向您專案的dispatcher/src資料夾。

macOS
code language-shell
$ ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
Windows
code language-shell
$ bin\docker_run <User Directory>/code/my-project/dispatcher/src host.docker.internal:4503 8080
Linux®
code language-shell
$ ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080

Dispatcher工具記錄檔

在本機開發期間,Dispatcher記錄有助於瞭解HTTP請求是否遭到封鎖以及為何遭到封鎖。 記錄層級可以透過以環境引數為執行docker_run加上前置字元來設定。

執行docker_run時,會將Dispatcher工具記錄檔發出至標準。

用於偵錯Dispatcher的實用引數包括:

  • DISP_LOG_LEVEL=Debug將Dispatcher模組記錄設定為偵錯層級
    • 預設值為: Warn
  • REWRITE_LOG_LEVEL=Debug將Apache HTTP Web伺服器重寫模組記錄設定為Debug層級
    • 預設值為: Warn
  • DISP_RUN_MODE會設定Dispatcher環境的「執行模式」,載入對應的執行模式Dispatcher設定檔。
    • 預設為dev
  • 有效值: devstageprod

一或多個引數可以傳遞至docker_run

macOS
code language-shell
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
Windows
code language-shell
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug bin\docker_run <User Directory>/code/my-project/dispatcher/src host.docker.internal:4503 8080
Linux®
code language-shell
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080

記錄檔存取

Apache Web Server和AEM Dispatcher記錄檔可直接在Docker容器中存取:

何時更新Dispatcher工具 dispatcher-tools-version

Dispatcher Tools版本的增加頻率低於Experience Manager,因此Dispatcher Tools在本機開發環境中所需的更新較少。

建議的Dispatcher工具版本是隨AEM as a Cloud Service SDK提供的符合Experience Manageras a Cloud Service版本的版本。 可透過Cloud Manager找到AEM as a Cloud Service的版本。

  • Cloud Manager >環境,依由​ AEM版本 ​標籤指定的環境而定

Experience Manager版本

請注意,Dispatcher Tools版本與Experience Manager版本不符。

如何更新Apache和Dispatcher設定的基準組

Apache和Dispatcher設定的基準集已定期增強,並隨AEM as a Cloud Service SDK版本發行。 最佳實務是將基準設定增強功能合併到您的AEM專案中,並避免本機驗證和Cloud Manager管道失敗。 使用.../dispatcher-sdk-x.x.x/bin資料夾中的update_maven.sh指令碼更新它們。

此影片使用macOS作說明用途。 可使用同等的Windows/Linux命令來取得類似的結果。

假設您過去曾使用AEM專案原型建立AEM專案,基準Apache和Dispatcher設定為最新。 使用這些基準組態,您的專案特定組態是透過重複使用和從dispatcher/src/conf.ddispatcher/src/conf.dispatcher.d資料夾複製*.vhost*.conf*.farm*.any等檔案所建立的。 您的本機Dispatcher驗證和Cloud Manager管道運作正常。

同時,由於新功能、安全性修正和最佳化等多種原因,基準Apache和Dispatcher設定已獲得增強。 做為AEM as a Cloud Service發行版本的一部分,透過較新版本的Dispatcher Tools發行。

現在,針對最新的Dispatcher工具版本驗證您專案專屬的Dispatcher設定時,這些設定會開始失敗。 若要解決此問題,必須使用下列步驟更新基準線設定:

  • 確認針對最新Dispatcher Tools版本的驗證失敗

    code language-shell
    $ ./bin/validate.sh ${YOUR-AEM-PROJECT}/dispatcher/src
    
    ...
    Phase 3: Immutability check
    empty mode param, assuming mode = 'check'
    ...
    ** error: immutable file 'conf.d/available_vhosts/default.vhost' has been changed!
    
  • 使用update_maven.sh指令碼更新不可變檔案

    code language-shell
    $ ./bin/update_maven.sh ${YOUR-AEM-PROJECT}/dispatcher/src
    
    ...
    Updating dispatcher configuration at folder
    running in 'extract' mode
    running in 'extract' mode
    reading immutable file list from /etc/httpd/immutable.files.txt
    preparing 'conf.d/available_vhosts/default.vhost' immutable file extraction
    ...
    immutable files extraction COMPLETE
    fd72f4521fa838daaaf006bb8c9c96ed33a142a2d63cc963ba4cc3dd228948fe
    Cloud manager validator 2.0.53
    
  • 驗證已更新的不可變檔案(例如dispatcher_vhost.confdefault.vhostdefault.farm),並視需要在自訂檔案中進行衍生自這些檔案的相關變更。

  • 重新驗證設定,應該會通過

$ ./bin/validate.sh ${YOUR-AEM-PROJECT}/dispatcher/src

...
checking 'conf.dispatcher.d/renders/default_renders.any' immutability (if present)
checking existing 'conf.dispatcher.d/renders/default_renders.any' for changes
checking 'conf.dispatcher.d/virtualhosts/default_virtualhosts.any' immutability (if present)
checking existing 'conf.dispatcher.d/virtualhosts/default_virtualhosts.any' for changes
no immutable file has been changed - check is SUCCESSFUL
Phase 3 finished
  • 在本地驗證變更後,提交更新的設定檔案

疑難排解

docker_run導致「等到host.docker.internal可用」訊息 troubleshooting-host-docker-internal

host.docker.internal是提供給Docker包含的主機名稱,可解析成主機。 根據docs.docker.com (macOSWindows):

從Docker 18.03開始,建議連線到特殊的DNS名稱host.docker.internal,這會解析為主機使用的內部IP位址

bin/docker_run src host.docker.internal:4503 8080導致訊息​ 等候host.docker.internal可用時,則:

  1. 確保已安裝的Docker版本為18.03或更高版本
  2. 您可能設定了本機電腦,無法註冊/解析host.docker.internal名稱。 請改用您的本機IP。
macOS
  • 從終端機,執行ifconfig並記錄主機​ inet IP位址,通常是​ en0 ​裝置。

  • 然後使用主機IP位址執行docker_run$ bin/docker_run_hot_reload.sh src <HOST IP>:4503 8080

Windows
  • 在命令提示字元中,執行ipconfig並記錄主機的​ IPv4位址

  • 然後,使用此IP位址執行docker_run$ bin\docker_run src <HOST IP>:4503 8080

Linux®
  • 從終端機,執行ifconfig並記錄主機​ inet IP位址,通常是​ en0 ​裝置。

  • 然後使用主機IP位址執行docker_run$ bin/docker_run_hot_reload.sh src <HOST IP>:4503 8080

錯誤範例

$ docker_run src host.docker.internal:4503 8080

Running script /docker_entrypoint.d/10-check-environment.sh
Running script /docker_entrypoint.d/20-create-docroots.sh
Running script /docker_entrypoint.d/30-wait-for-backend.sh
Waiting until host.docker.internal is available

其他資源

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69