← Back to list

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…

Bruno Lucio · 2026-02-19 11:51 · 0 claps · 2.6 min read
#jboss #wildfly #nginx #java #labs
Open on Medium ↗
Wiki topics: 📊 · Economic Policy

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 jboss será 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 (9990 HTTP e 9999 Native)
  • 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:

  1. Nome único (<host name="host1">)
  2. Informações do Domain Controller (<domain-controller><remote .../></domain-controller>)
  3. 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