O Dispatcher do Adobe Experience Manager (AEM) é um módulo de servidor Web Apache HTTP que fornece uma camada de segurança e desempenho entre a camada do CDN e do AEM Publish. O Dispatcher é parte integral da arquitetura Experience Manager geral e deve fazer parte da configuração de desenvolvimento local.
O SDK as a Cloud Service do AEM inclui a versão recomendada das Ferramentas do Dispatcher, que facilita a configuração, validação e simulação do Dispatcher localmente. As Ferramentas do Dispatcher são compostas de:
.../dispatcher-sdk-x.x.x/src
.../dispatcher-sdk-x.x.x/bin/validate
.../dispatcher-sdk-x.x.x/bin/validator
.../dispatcher-sdk-x.x.x/bin/docker_run
.../dispatcher-sdk-x.x.x/bin/update_maven
Observe que ~
é usado como abreviação para o Diretório do usuário. No Windows, é equivalente a %HOMEPATH%
.
Os vídeos desta página foram gravados no macOS. Os usuários do Windows podem seguir, mas usar os comandos equivalentes do Windows das Ferramentas do Dispatcher, fornecidos com cada vídeo.
O SDK as a Cloud Service do AEM, ou AEM SDK, contém as Ferramentas do Dispatcher usadas para executar o servidor Web Apache HTTP com o módulo do Dispatcher localmente para desenvolvimento e o QuickStart Jar compatível.
Se o SDK as a Cloud Service do AEM já tiver sido baixado para configurar o tempo de execução local do AEM, não é necessário baixá-lo novamente.
Os usuários do Windows não podem ter espaços ou caracteres especiais no caminho para a pasta que contém as Ferramentas locais do Dispatcher. Se houver espaços no caminho, a variável docker_run.cmd
falha.
A versão das Ferramentas do Dispatcher é diferente da versão do SDK do AEM. Verifique se a versão das Ferramentas do Dispatcher é fornecida por meio da versão do SDK do AEM correspondente à versão as a Cloud Service do AEM.
aem-sdk-xxx.zip
arquivo~/aem-sdk/dispatcher
$ chmod a+x aem-sdk-dispatcher-tools-x.x.x-unix.sh
$ ./aem-sdk-dispatcher-tools-x.x.x-unix.sh
Descompactar aem-sdk-dispatcher-tools-x.x.x-windows.zip
em C:\Users\<My User>\aem-sdk\dispatcher
(criando pastas ausentes conforme necessário).
$ chmod a+x aem-sdk-dispatcher-tools-x.x.x-unix.sh
$ ./aem-sdk-dispatcher-tools-x.x.x-unix.sh
Todos os comandos emitidos abaixo pressupõem que o diretório de trabalho atual contém o conteúdo expandido das Ferramentas do Dispatcher.
Este vídeo usa o macOS para fins ilustrativos. Os comandos equivalentes do Windows/Linux podem ser usados para obter resultados semelhantes.
Projetos Experience Manager criados a partir do Arquétipo Maven do projeto AEM são preenchidos previamente nesse conjunto de arquivos de configuração do Dispatcher, portanto, não há necessidade de copiar da pasta src de Ferramentas do Dispatcher.
As Ferramentas do Dispatcher fornecem um conjunto de arquivos de configuração do Apache HTTP Web server e do Dispatcher que definem o comportamento para todos os ambientes, incluindo o desenvolvimento local.
Esses arquivos devem ser copiados em um projeto Maven Experience Manager para o dispatcher/src
, se ainda não existirem no projeto Maven do Experience Manager.
Uma descrição completa dos arquivos de configuração está disponível nas Ferramentas do Dispatcher descompactadas como dispatcher-sdk-x.x.x/docs/Config.html
.
Como opção, as configurações do Dispatcher e do Apache Web Server (via httpd -t
) pode ser validado usando o validate
script (não confundir com o validator
executável). A variável validate
O script oferece uma maneira conveniente de executar o três fases do validator
.
$ ./bin/validate.sh ./src
$ bin\validate src
$ ./bin/validate.sh ./src
O Dispatcher do AEM é executado localmente usando o Docker no src
Arquivos de configuração do Dispatcher e do Apache Web Server.
$ ./bin/docker_run_hot_reload.sh <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
A variável docker_run_hot_reload
executável é preferível sobre docker_run
à medida que recarrega os arquivos de configuração à medida que são alterados, sem precisar encerrar e reiniciar manualmente docker_run
. Alternativamente, docker_run
pode ser usado, no entanto, requer o encerramento e a reinicialização manuais docker_run
quando os arquivos de configuração são alterados.
$ bin\docker_run <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
$ ./bin/docker_run_hot_reload.sh <src-folder> <aem-publish-host>:<aem-publish-port> <dispatcher-port>
A variável docker_run_hot_reload
executável é preferível sobre docker_run
à medida que recarrega os arquivos de configuração à medida que são alterados, sem precisar encerrar e reiniciar manualmente docker_run
. Alternativamente, docker_run
pode ser usado, no entanto, requer o encerramento e a reinicialização manuais docker_run
quando os arquivos de configuração são alterados.
A variável <aem-publish-host>
pode ser definido como host.docker.internal
, um nome DNS especial que o Docker fornece no contêiner que é resolvido para o IP da máquina host. Se a variável host.docker.internal
não resolver, consulte o solução de problemas abaixo.
Por exemplo, para iniciar o contêiner Docker do Dispatcher usando os arquivos de configuração padrão fornecidos pelas Ferramentas do Dispatcher:
Inicie o contêiner Dispatcher Docker fornecendo o caminho para a pasta src de configuração do Dispatcher:
$ ./bin/docker_run_hot_reload.sh ./src host.docker.internal:4503 8080
$ bin\docker_run src host.docker.internal:4503 8080
$ ./bin/docker_run_hot_reload.sh ./src host.docker.internal:4503 8080
O serviço de publicação do SDK as a Cloud Service do AEM, executado localmente na porta 4503, está disponível por meio do Dispatcher em http://localhost:8080
.
Para executar as Ferramentas do Dispatcher em relação à configuração do Dispatcher de um projeto Experience Manager, aponte para o dispatcher/src
pasta.
$ ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
$ bin\docker_run <User Directory>/code/my-project/dispatcher/src host.docker.internal:4503 8080
$ ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
Os logs do Dispatcher são úteis durante o desenvolvimento local para entender se e por que as Solicitações HTTP são bloqueadas. O nível de log pode ser definido com o prefixo da execução de docker_run
com parâmetros de ambiente.
Os logs das Ferramentas do Dispatcher são emitidos para o padrão quando docker_run
é executado.
Parâmetros úteis para depuração do Dispatcher incluem:
DISP_LOG_LEVEL=Debug
define o log do módulo Dispatcher para o nível de Depuração
Warn
REWRITE_LOG_LEVEL=Debug
define o log do módulo de reescrita do servidor Web Apache HTTP no nível de Depuração
Warn
DISP_RUN_MODE
define o "modo de execução" do ambiente do Dispatcher, carregando os modos de execução correspondentes nos arquivos de configuração do Dispatcher.
dev
dev
, stage
ou prod
Um ou vários parâmetros, podem ser passados para docker_run
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug bin\docker_run <User Directory>/code/my-project/dispatcher/src host.docker.internal:4503 8080
$ DISP_LOG_LEVEL=Debug REWRITE_LOG_LEVEL=Debug ./bin/docker_run_hot_reload.sh ~/code/my-project/dispatcher/src host.docker.internal:4503 8080
Os logs do Apache Web Server e do AEM Dispatcher podem ser acessados diretamente no contêiner Docker:
As versões das Ferramentas do Dispatcher são incrementadas com menos frequência do que o Experience Manager e, portanto, as Ferramentas do Dispatcher exigem menos atualizações no ambiente de desenvolvimento local.
A versão recomendada das Ferramentas do Dispatcher é aquela fornecida com o SDK as a Cloud Service do AEM que corresponde à versão as a Cloud Service do Experience Manager. A versão do AEM as a Cloud Service pode ser encontrada em Cloud Manager.
Observe que a versão das Ferramentas do Dispatcher não corresponde à versão do Experience Manager.
O conjunto de linhas de base de configuração do Apache e Dispatcher é aprimorado regularmente e lançado com a versão do SDK as a Cloud Service do AEM. É prática recomendada incorporar as melhorias na configuração da linha de base ao projeto AEM e evitar validação local e falhas de pipeline do Cloud Manager. Atualize-os usando o update_maven.sh
script do .../dispatcher-sdk-x.x.x/bin
pasta.
Este vídeo usa o macOS para fins ilustrativos. Os comandos equivalentes do Windows/Linux podem ser usados para obter resultados semelhantes.
Suponhamos que você tenha criado um projeto de AEM no passado usando o Arquétipo de projeto AEM, as configurações de linha de base do Apache e Dispatcher eram atuais. Usando essas configurações de linha de base, as configurações específicas do seu projeto foram criadas reutilizando e copiando os arquivos como *.vhost
, *.conf
, *.farm
e *.any
do dispatcher/src/conf.d
e dispatcher/src/conf.dispatcher.d
pastas. A validação local do Dispatcher e os pipelines do Cloud Manager estavam funcionando bem.
Enquanto isso, as configurações de linha de base do Apache e Dispatcher foram aprimoradas por vários motivos, como novos recursos, correções de segurança e otimização. Eles são lançados por meio de uma versão mais recente das Ferramentas do Dispatcher como parte da versão as a Cloud Service do AEM.
Agora, ao validar as configurações específicas do Dispatcher do projeto em relação à versão mais recente das Ferramentas do Dispatcher, elas começam a falhar. Para resolver isso, as configurações de linha de base precisam ser atualizadas usando as etapas abaixo:
Verifique se a validação está falhando em relação à versão mais recente das Ferramentas do Dispatcher
$ ./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!
Atualize os arquivos imutáveis usando o update_maven.sh
script
$ ./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
Verifique os arquivos imutáveis atualizados, como dispatcher_vhost.conf
, default.vhost
, e default.farm
e, se necessário, faça alterações relevantes nos arquivos personalizados derivados desses arquivos.
Revalidar as configurações; deve passar
$ ./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
A variável host.docker.internal
é um nome de host fornecido ao Docker contém que é resolvido para o host. Por docs.docker.com (macOS, Windows):
A partir do Docker 18.03, a recomendação é se conectar ao nome DNS especial host.docker.internal, que é resolvido para o endereço IP interno usado pelo host
Quando bin/docker_run src host.docker.internal:4503 8080
resultados na mensagem Aguardar até que host.docker.internal esteja disponível, em seguida:
host.docker.internal
nome. Em vez disso, use o IP local.No Terminal, execute ifconfig
e registrar o host inet Endereço IP, geralmente o en0 dispositivo.
Em seguida, execute docker_run
usando o endereço IP do host: $ bin/docker_run_hot_reload.sh src <HOST IP>:4503 8080
No prompt de comando, execute ipconfig
e registre o host Endereço IPv4 da máquina host.
Em seguida, execute docker_run
usando este endereço IP: $ bin\docker_run src <HOST IP>:4503 8080
No Terminal, execute ifconfig
e registrar o host inet Endereço IP, geralmente o en0 dispositivo.
Em seguida, execute docker_run
usando o endereço IP do host: $ 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