Criando um Lab de WildFly/JBoss Domain Mode: Domain Controller, Hosts Gerenciados e Autenticação
Aprenda a montar um laboratório completo de WildFly/JBoss em Domain Mode, com Domain Controller (DC), Hosts Gerenciados (HC), autenticação…
Criando um Lab de WildFly/JBoss Domain Mode: Domain Controller, Hosts Gerenciados e Autenticação
Aprenda a montar um laboratório completo de WildFly/JBoss em Domain Mode, com Domain Controller (DC), Hosts Gerenciados (HC), autenticação segura e deploy de aplicações em múltiplos nodes.

1. Conceitos Básicos
No Domain Mode, múltiplos servidores compartilham:
- Domain Controller (DC): centraliza configuração, deploys e monitoramento.
- Host Controller (HC): aplica a configuração do DC e gerencia servidores locais.
- Autenticação Elytron: garante que hosts se comuniquem de forma segura.
No lab, usamos:
ComponenteHost/ContainerFunçãoDomain Controllerdomain-controllerGerencia o domínioHost1host1Host gerenciadoHost2host2Host gerenciadoLoad Balancernginx-lbDistribui tráfego entre hosts
2. Estrutura do Lab
O lab utiliza Docker e Docker Compose para orquestrar os containers:
JbossDomain/
├─ domain-controller/
│ ├─ app/
│ │ └─ hello-world-war-1.0.0/
│ │ ├─ WEB-INF/
│ │ └─ index.jsp
│ ├─ config/
│ │ └─ host-master.xml
│ ├─ domain/
│ │ └─ configuration/
│ │ ├─ mgmt-users.properties
│ │ └─ mgmt-groups.properties
│ └─ Dockerfile
├─ host1/
│ └─ config/
│ └─ host1.xml
├─ host2/
│ └─ config/
│ └─ host2.xml
├─ nginx/
│ └─ nginx.conf
└─ docker-compose.yml
3. Dockerfile do Domain Controller
No domain-controller/Dockerfile, criamos os usuários necessários:
FROM quay.io/wildfly/wildfly:latest
USER root
# Admin do console (opcional)
RUN /opt/jboss/wildfly/bin/add-user.sh admin Admin#123 --silent
# User usado pelo Host Controller para conectar no Domain Controller
RUN /opt/jboss/wildfly/bin/add-user.sh jboss Jboss@123 --silent
USER jboss
⚠️ O usuário
jbossserá usado pelos Hosts para autenticação no Domain Controller.
4. Docker Compose: Configuração do Lab
O docker-compose.yml define todos os containers e redes:
services:
domain-controller:
build:
context: ./domain-controller
container_name: domain-controller
command: >
/opt/jboss/wildfly/bin/domain.sh
--host-config=host-master.xml -b 0.0.0.0
-bmanagement 0.0.0.0
ports:
- "9990:9990"
- "9999:9999"
environment:
- NODE_NAME=domain-controller
volumes:
- ./domain-controller/config/host-master.xml:/opt/jboss/wildfly/domain/configuration/host-master.xml:ro
- ./domain-controller/domain/configuration/mgmt-users.properties:/opt/jboss/wildfly/domain/configuration/mgmt-users.properties
- ./domain-controller/domain/configuration/mgmt-groups.properties:/opt/jboss/wildfly/domain/configuration/mgmt-groups.properties
networks:
- wildfly-net
host1:
image: quay.io/wildfly/wildfly:latest
container_name: host1
command: >
/opt/jboss/wildfly/bin/domain.sh
--host-config=host1.xml
-Djboss.domain.master.address=domain-controller
-b 0.0.0.0
-bmanagement 0.0.0.0
volumes:
- ./host1/config/host1.xml:/opt/jboss/wildfly/domain/configuration/host1.xml:ro
- ./domain-controller/domain/configuration/mgmt-users.properties:/opt/jboss/wildfly/domain/configuration/mgmt-users.properties
- ./domain-controller/domain/configuration/mgmt-groups.properties:/opt/jboss/wildfly/domain/configuration/mgmt-groups.properties
environment:
- NODE_NAME=host1
depends_on:
- domain-controller
networks:
- wildfly-net
host2:
image: quay.io/wildfly/wildfly:latest
container_name: host2
command: >
/opt/jboss/wildfly/bin/domain.sh
--host-config=host2.xml
-Djboss.domain.master.address=domain-controller
-b 0.0.0.0
-bmanagement 0.0.0.0
volumes:
- ./host2/config/host2.xml:/opt/jboss/wildfly/domain/configuration/host2.xml:ro
environment:
- NODE_NAME=host2
depends_on:
- domain-controller
networks:
- wildfly-net
nginx:
image: nginx:alpine
container_name: nginx-lb
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- host1
- host2
networks:
- wildfly-net
networks:
wildfly-net:
driver: bridge
5. Configuração do Domain Controller (host-master.xml)
O host-master.xml define:
<local/>→ este host é o Domain Controller- Interfaces de management (
9990HTTP e9999Native) - Usuário para autenticação dos hosts
Exemplo resumido:
<domain-controller>
<local/>
</domain-controller>
<interfaces>
<interface name="management">
<inet-address value="0.0.0.0"/>
</interface>
</interfaces>
<management>
<management-interfaces>
<http-interface http-authentication-factory="management-http-authentication">
<socket interface="management" port="9990"/>
</http-interface>
</management-interfaces>
</management>
6. Configuração dos Hosts (host1.xml / host2.xml)
Cada host precisa de:
- Nome único (
<host name="host1">) - Informações do Domain Controller (
<domain-controller><remote .../></domain-controller>) - Configuração Elytron para autenticação:
<subsystem xmlns="urn:wildfly:elytron:15.0">
<authentication-client>
<authentication-configuration name="hostAuthConfig"
authentication-name="jboss"
realm="ManagementRealm">
<credential-reference clear-text="Jboss@123"/>
</authentication-configuration>
<authentication-context name="hcAuthContext">
<match-rule authentication-configuration="hostAuthConfig"/>
</authentication-context>
</authentication-client>
</subsystem>
<domain-controller>
<remote protocol="remote"
host="domain-controller"
port="9999"
authentication-context="hcAuthContext"/>
</domain-controller>
7. Deploy de Aplicações
Após iniciar todos os containers:
docker-compose up -d
Acesse o Admin Console no browser:
http://localhost:9990
Deploy via CLI no Domain Controller:
/opt/jboss/wildfly/bin/jboss-cli.sh --connect
deploy /opt/jboss/wildfly/domain/deployments/app.war --server-groups=main-server-group
Teste nos hosts:
curl http://localhost/app/
Você verá a resposta indicando qual host respondeu:
Hello World!
Node: host1
8. Observabilidade
- Verifique status dos hosts e deploys:
/host=*/server=*/:read-attribute(name=status)
- Verifique boot errors:
/host=host1/server=server-one:read-boot-errors()
9. Próximos Passos
- Experimente failover entre hosts
- Adicione NGINX para load balancing (
/app/) - Automatize deploys com Ansible ou scripts CLI
- Explore autenticação Elytron avançada e SSL
💡 Resumo: Com este laboratório, você aprende a configurar Domain Controller, Hosts Gerenciados, autenticação segura e deploy de aplicações centralizado no WildFly/JBoss Domain Mode usando Docker.
메타데이터
- post_id
- 34aa59cbe8f0
- slug
- criando-um-lab-de-wildfly-jboss-domain-mode-domain-controller-hosts-gerenciados-e-autenticação-34aa59cbe8f0
- url
- https://medium.com/@bruno.sph/criando-um-lab-de-wildfly-jboss-domain-mode-domain-controller-hosts-gerenciados-e-autentica%C3%A7%C3%A3o-34aa59cbe8f0
- canonical_url
- https://medium.com/@bruno.sph/criando-um-lab-de-wildfly-jboss-domain-mode-domain-controller-hosts-gerenciados-e-autentica%C3%A7%C3%A3o-34aa59cbe8f0
- author_url
- https://medium.com/@bruno.sph
- status
- ok
- fetched_at
- 2026-06-24 11:06:28