Adobe Experience Manager(AEM)的Dispatcher是Apache HTTP Web伺服器模組,可在CDN和AEM Publish層級之間提供安全性和效能層。 Dispatcher是整體Experience Manager架構的必要部分,且應是本機開發設定的一部分。
AEM as a Dispatcher SDK包含建議的Dispatcher工具版本,有助於在本機設定、驗證和模擬Dispatcher。 Dispatcher工具由下列部分組成:
.../dispatcher-sdk-x.x.x/src
的Apache HTTP Web伺服器和Dispatcher配置檔案的基準集.../dispatcher-sdk-x.x.x/bin/validate
.../dispatcher-sdk-x.x.x/bin/validator
.../dispatcher-sdk-x.x.x/bin/docker_run
請注意, ~
是用戶目錄的簡稱。 在Windows中,這等同於%HOMEPATH%
。
本頁的影片是在macOS上錄制的。 Windows使用者可以跟著,但使用每個視訊隨附的同等Dispatcher工具Windows命令。
AEM as a Dispatcher SDK或AEM SDK包含Dispatcher工具,可用於在本機執行Apache HTTP Web伺服器,並搭配Dispatcher模組進行開發,以及相容的QuickStart Jar。
如果AEM as aCloud ServiceSDK已下載至設定本機AEM執行階段,則不需要重新下載。
Windows使用者在包含本機Dispatcher工具之資料夾的路徑中,不能有任何空格或特殊字元。 如果路徑中存在空格,docker_run.cmd
將會失敗。
Dispatcher工具的版本與AEM SDK的版本不同。 確認Dispatcher工具的版本是透過與AEM相符的AEM SDK版本提供,作為Cloud Service版本。
aem-sdk-xxx.zip
檔案解壓縮~/aem-sdk/dispatcher
aem-sdk-dispatcher-tools-x.x.x-windows.zip
解壓縮至C:\Users\<My User>\aem-sdk\dispatcher
(視需要建立遺失的資料夾)aem-sdk-dispatcher-tools-x.x.x-unix.sh
以解壓縮Dispatcher工具
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命令來實現類似的結果
從AEM專案Maven原型建立的Experience Manager專案會預先填入這組Dispatcher組態檔,因此不需要從Dispatcher工具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
的3個階段的便利方式。
bin\validate src
./bin/validate.sh ./src
AEM Dispatcher是針對src
Dispatcher和Apache Web伺服器組態檔,使用Docker在本機上執行。
bin\docker_run <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
./bin/docker_run.sh <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
<aem-publish-host>
可設為host.docker.internal
,Docker在解析到主機IP的容器中提供特殊的DNS名稱。 如果host.docker.internal
未解析,請參閱下面的疑難解答部分。
例如,若要使用Dispatcher工具提供的預設組態檔來啟動Dispatcher Docker容器:
啟動Dispatcher Docker容器,提供Dispatcher設定src資料夾的路徑:
bin\docker_run src host.docker.internal:4503 8080
./bin/docker_run.sh ./src host.docker.internal:4503 8080
在連接埠4503上本機執行的AEM as aCloud ServiceSDK發佈服務,將可透過Dispatcher在http://localhost:8080
取得。
若要針對Experience Manager專案的Dispatcher設定執行Dispatcher工具,請指向您專案的dispatcher/src
資料夾。
Windows:
$ bin\docker_run <User Directory>/code/my-project/dispatcher/src host.docker.internal:4503 8080
macOS / Linux:
$ ./bin/docker_run.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
在本機開發期間,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
dev
、stage
或prod
可傳遞一或多個參數至docker_run
窗口:
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug bin\docker_run <User Directory>/code/my-project/dispatcher/src host.docker.internal:4503 8080
macOS / Linux:
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug ./bin/docker_run.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
您可以在Docker容器中直接存取Apache Web伺服器和AEM Dispatcher記錄檔:
Dispatcher工具版本的遞增頻率比Experience Manager低,因此,Dispatcher工具在本機開發環境中需要的更新較少。
建議的Dispatcher工具版本是與AEM搭配的Cloud ServiceSDK,與Experience Manager作為Cloud Service版本相符。 您可以透過Cloud Manager找到AEM as aCloud Service版本。
請注意,Dispatcher工具版本本身將不符合Experience Manager版本。
host.docker.internal
是提供給Docker包含的主機名,它解析到主機。根據docs.docker.com(macOS, Windows):
從Docker 18.03開始,我們的建議是連線至特殊的DNS名稱host.docker.internal,其解析至主機使用的內部IP位址
如果bin/docker_run src host.docker.internal:4503 8080
導致消息Waiting untith.docker.internal可用,則:
host.docker.internal
名稱的註冊/解析。 請改用本機IP。
在命令提示符下,執行ipconfig
,並記錄主機的IPv4地址。
然後,使用此IP地址執行docker_run
:
bin\docker_run src <HOST IP>:4503 8080
從終端,執行ifconfig
並記錄主機inet IP地址,通常為en0設備。
然後使用主機IP地址執行docker_run
:
bin/docker_run.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
在Windows上執行docker_run
可能會導致下列錯誤,導致Dispatcher無法啟動。 這是Windows上Dispatcher回報的問題,將於未來版本中修正。
$ \Users\MyUser\aem-sdk\dispatcher>bin\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
host.docker.internal resolves to 192.168.65.2
Running script /docker_entrypoint.d/40-generate-allowed-clients.sh
Running script /docker_entrypoint.d/50-check-expiration.sh
Running script /docker_entrypoint.d/60-check-loglevel.sh
Running script /docker_entrypoint.d/70-check-forwarded-host-secret.sh
Starting httpd server
[Sun Feb 09 17:32:22.256020 2020] [dispatcher:warn] [pid 1:tid 140080096570248] Unable to obtain parent directory of /etc/httpd/conf.dispatcher.d/enabled_farms/farms.any: No such file or directory
[Sun Feb 09 17:32:22.256069 2020] [dispatcher:alert] [pid 1:tid 140080096570248] Unable to import config file: /etc/httpd/conf.dispatcher.d/dispatcher.any
[Sun Feb 09 17:32:22.256074 2020] [dispatcher:alert] [pid 1:tid 140080096570248] Dispatcher initialization failed.
AH00016: Configuration Failed