Le répartiteur de Adobe Experience Manager (AEM) est un module de serveur Web Apache HTTP qui fournit une couche de sécurité et de performances entre le niveau CDN et le niveau de publication AEM. Le répartiteur fait partie intégrante de l'architecture Experience Manager globale et devrait faire partie du développement local mis en place.
L’AEM en tant que SDK Cloud Service comprend la version recommandée des outils du répartiteur, qui facilite la configuration, la validation et la simulation locale du répartiteur. Les outils du répartiteur se composent des éléments suivants :
.../dispatcher-sdk-x.x.x/src
.../dispatcher-sdk-x.x.x/bin/validate
(SDK Dispatcher 2.0.29+).../dispatcher-sdk-x.x.x/bin/validator
.../dispatcher-sdk-x.x.x/bin/docker_run
Notez que ~
est utilisé comme abrégé pour le Répertoire d'utilisateur. Sous Windows, il s’agit de l’équivalent de %HOMEPATH%
.
Les vidéos de cette page ont été enregistrées sur macOS. Les utilisateurs de Windows peuvent suivre, mais utiliser les commandes Windows équivalentes de Dispatcher Tools, fournies avec chaque vidéo.
L'AEM en tant que SDK Cloud Service, ou SDK AEM, contient les outils du répartiteur utilisés pour exécuter le serveur Web Apache HTTP avec le module du répartiteur localement pour le développement, ainsi que le JAR QuickStart compatible.
Si l’AEM en tant que SDK Cloud Service a déjà été téléchargé dans configuration de l’AEM d’exécution locale, il n’est pas nécessaire de le retélécharger.
Les utilisateurs de Windows ne peuvent pas avoir d'espaces ou de caractères spéciaux dans le chemin d'accès au dossier contenant les outils du répartiteur local. Si des espaces existent dans le chemin d’accès, le docker_run.cmd
échoue.
La version des outils du répartiteur diffère de celle du SDK AEM. Assurez-vous que la version des outils du répartiteur est fournie via la version AEM SDK correspondant à l’AEM en tant que version Cloud Service.
aem-sdk-xxx.zip
téléchargé~/aem-sdk/dispatcher
aem-sdk-dispatcher-tools-x.x.x-windows.zip
dans C:\Users\<My User>\aem-sdk\dispatcher
(en créant les dossiers manquants si nécessaire).aem-sdk-dispatcher-tools-x.x.x-unix.sh
correspondant pour décompresser les outils du répartiteur.
chmod a+x aem-sdk-dispatcher-tools-x.x.x-unix.sh && ./aem-sdk-dispatcher-tools-x.x.x-unix.sh
Notez que toutes les commandes publiées ci-dessous supposent que le répertoire de travail actuel contient le contenu des outils du répartiteur en expansion.
Cette vidéo utilise macOS à des fins d’illustration. Les commandes Windows/Linux équivalentes peuvent être utilisées pour obtenir des résultats similaires
Les projets Experience Manager créés à partir de l'AEM Project Maven Archetype sont prérenseignés dans cet ensemble de fichiers de configuration du répartiteur. Il n'est donc pas nécessaire de les copier depuis le dossier src des outils du répartiteur.
Les outils de répartiteur fournissent un ensemble de fichiers de configuration de serveur Web Apache HTTP et de répartiteur qui définissent le comportement de tous les environnements, y compris le développement local.
Ces fichiers sont destinés à être copiés dans un projet Maven Experience Manager vers le dossier dispatcher/src
, s’ils n’existent pas déjà dans le projet Maven Experience Manager.
Cette vidéo utilise macOS à des fins d’illustration. Les commandes Windows/Linux équivalentes peuvent être utilisées pour obtenir des résultats similaires
Une description complète des fichiers de configuration est disponible dans les outils du répartiteur non compressés sous la forme dispatcher-sdk-x.x.x/docs/Config.html
.
Si vous le souhaitez, les configurations du Répartiteur et du serveur Web Apache (via httpd -t
) peuvent être validées à l'aide du script validate
(à ne pas confondre avec l'exécutable validator
).
bin\validate src
./bin/validate.sh ./src
Pour exécuter le répartiteur localement, les fichiers de configuration du répartiteur doivent être générés à l'aide de l'outil validator
CLI des outils du répartiteur.
bin\validator full -d out src
./bin/validator full -d ./out ./src
Cette commande transforme les configurations en un ensemble de fichiers compatible avec le serveur Web HTTP Apache du conteneur Docker.
Une fois générées, les configurations transposées sont utilisées pour exécuter le répartiteur localement dans le conteneur Docker. Il est important de s'assurer que les dernières configurations ont été validées à l'aide de validate
et sortie à l'aide de l'option -d
du validateur.
bin\docker_run <deployment-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
./bin/docker_run.sh <deployment-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
aem-publish-host
peut être défini sur host.docker.internal
, un nom DNS spécial fourni par Docker dans le conteneur qui correspond à l'adresse IP de l'ordinateur hôte. Si host.docker.internal
ne résout pas le problème, consultez la section dépannage ci-dessous.
Par exemple, pour début du conteneur du répartiteur Docker à l'aide des fichiers de configuration par défaut fournis par les outils du répartiteur :
Générez à partir de zéro le deployment-folder
, nommé out
par convention, chaque fois qu'une configuration change :
del /Q out && bin\validator full -d out src
rm -rf ./out && ./bin/validator full -d ./out ./src
conteneur Docker du répartiteur de débuts (Re-) fournissant le chemin d'accès au dossier de déploiement :
bin\docker_run out host.docker.internal:4503 8080
./bin/docker_run.sh ./out host.docker.internal:4503 8080
Le service de publication de l’AEM en tant que SDK Cloud Service s’exécutant localement sur le port 4503 sera disponible par l’intermédiaire de Dispatcher à http://localhost:8080
.
Pour exécuter les outils du répartiteur par rapport à la configuration du répartiteur d'un projet Experience Manager, générez simplement le dossier deployment-folder
à l'aide du dossier dispatcher/src
du projet.
Windows :
$ del -/Q out && bin\validator full -d out <User Directory>/code/my-project/dispatcher/src
$ bin\docker_run out host.docker.internal:4503 8080
macOS / Linux :
$ rm -rf ./out && ./bin/validator full -d ./out ~/code/my-project/dispatcher/src
$ ./bin/docker_run.sh ./out host.docker.internal:4503 8080
Cette vidéo utilise macOS à des fins d’illustration. Les commandes Windows/Linux équivalentes peuvent être utilisées pour obtenir des résultats similaires
Les journaux du répartiteur sont utiles pendant le développement local pour comprendre si et pourquoi les requêtes HTTP sont bloquées. Le niveau de journal peut être défini en préfixant l'exécution de docker_run
avec des paramètres d'environnement.
Les journaux des outils du répartiteur sont émis vers la sortie standard lorsque docker_run
est exécuté.
Les paramètres utiles pour le débogage du répartiteur sont les suivants :
DISP_LOG_LEVEL=Debug
définit la journalisation du module Répartiteur au niveau Débogage
Warn
REWRITE_LOG_LEVEL=Debug
définit Apache HTTP Web server rewrite module journalisation au niveau Debug
Warn
DISP_RUN_MODE
définit le "mode d'exécution" de l'environnement Répartiteur, en chargeant les fichiers de configuration Répartiteur des modes d'exécution correspondants.
dev
dev
, stage
ou prod
Un ou plusieurs paramètres peuvent être transmis à docker_run
Windows :
$ bin\validator full -d out <User Directory>/code/my-project/dispatcher/src
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug bin\docker_run out host.docker.internal:4503 8080
macOS / Linux :
$ ./bin/validator full -d out ~/code/my-project/dispatcher/src
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug ./bin/docker_run.sh out host.docker.internal:4503 8080
Cette vidéo utilise macOS à des fins d’illustration. Les commandes Windows/Linux équivalentes peuvent être utilisées pour obtenir des résultats similaires
Les journaux du serveur Web Apache et du répartiteur AEM sont directement accessibles dans le conteneur Docker :
Les versions des outils du répartiteur s’incrémentent moins fréquemment que le Experience Manager et les outils du répartiteur nécessitent donc moins de mises à jour dans l’environnement de développement local.
La version des outils du répartiteur recommandée est celle qui est fournie avec l’AEM en tant que SDK Cloud Service et qui correspond au Experience Manager en tant que version Cloud Service. La version de l’AEM en tant que Cloud Service peut être consultée via Cloud Manager.
Notez que la version des outils du répartiteur elle-même ne correspond pas à la version du Experience Manager.
host.docker.internal
est un nom d'hôte fourni au Docker contient qui correspond à l'hôte. Per docs.docker.com (macOS, Windows) :
À partir de la version 18.03 de Docker, nous vous recommandons de vous connecter au nom DNS spécial host.docker.internal, qui correspond à l'adresse IP interne utilisée par l'hôte.
Si, lorsque bin/docker_run out host.docker.internal:4503 8080
renvoie le message En attendant que host.docker.internal soit disponible, alors :
host.docker.internal
. Utilisez plutôt votre adresse IP locale.
Dans l'invite de commandes, exécutez ipconfig
et enregistrez l'adresse IPv4 de l'hôte sur l'ordinateur hôte.
Exécutez ensuite docker_run
en utilisant cette adresse IP :
bin\docker_run out <HOST IP>:4503 8080
Depuis le terminal, exécutez ifconfig
et enregistrez l'adresse IP de l'hôte inet, généralement le périphérique en0.
Exécutez ensuite docker_run
à l’aide de l’adresse IP de l’hôte :
bin/docker_run.sh out <HOST IP>:4503 8080
$ docker_run out 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
Lors de l'exécution de docker_run.cmd
, une erreur s'affiche et indique l'erreur ** : Dossier de déploiement introuvable :. Cela se produit généralement parce qu’il y a des espaces dans le chemin d’accès. Si possible, supprimez les espaces du dossier ou déplacez le dossier aem-sdk
vers un chemin qui ne contient pas d'espaces.
Par exemple, les dossiers utilisateur Windows sont souvent <First name> <Last name>
, avec un espace entre les deux. Dans l'exemple ci-dessous, le dossier ...\My User\...
contient un espace qui rompt l'exécution docker_run
des outils du répartiteur local. Si les espaces se trouvent dans un dossier d'utilisateur Windows, n'essayez pas de renommer ce dossier car il va rompre Windows. Déplacez plutôt le dossier aem-sdk
vers un nouvel emplacement que votre utilisateur est autorisé à modifier complètement. Notez que les instructions qui supposent que le dossier aem-sdk
se trouve dans le répertoire d’accueil de l’utilisateur devront être ajustées au nouvel emplacement.
$ \Users\My User\aem-sdk\dispatcher>bin\docker_run.cmd out host.internal.docker:4503 8080
'User\aem-sdk\dispatcher\out\*' is not recognized as an internal or external command,
operable program or batch file.
** error: Deployment folder not found: c:\Users\My User\aem-sdk\dispatcher\out
L'exécution de docker_run
sous Windows peut générer l'erreur suivante, empêchant le démarrage du répartiteur. Il s’agit d’un problème signalé avec Dispatcher sous Windows et qui sera corrigé dans une prochaine version.
$ \Users\MyUser\aem-sdk\dispatcher>bin\docker_run out 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