Post

Guia Completo de Administração e Configuração do JBoss/WildFly

Guia Completo de Administração e Configuração do JBoss/WildFly

Introdução

O JBoss/WildFly é uma plataforma robusta e amplamente utilizada para o desenvolvimento e a execução de aplicações empresariais Java EE. Com sua arquitetura modular e suporte para configurações avançadas de cluster, segurança e automação de deploy, o WildFly se destaca tanto em ambientes de desenvolvimento quanto em produção. Neste guia completo, abordaremos desde a instalação básica até configurações avançadas, como deploy contínuo, otimização de desempenho e backup. Com instruções passo a passo e práticas recomendadas, este tutorial visa capacitar administradores e desenvolvedores a configurar, gerenciar e monitorar servidores WildFly de forma eficiente e segura.


Tabela de Conteúdos

  1. Introdução ao JBoss/WildFly
  2. Instalação e Configuração Inicial do JBoss/WildFly
  3. Estrutura de Diretórios e Configuração do Servidor
  4. Modos de Operação: Standalone e Domain Mode
  5. Deploy de Aplicações no JBoss/WildFly
  6. Administração e Gerenciamento via Console Web
  7. Administração com a CLI do JBoss/WildFly
  8. Configuração de Datasources e Conexões com Banco de Dados
  9. Gerenciamento de Segurança e Controle de Acesso
  10. Configuração de SSL/TLS para Comunicação Segura
  11. Logging e Monitoramento do Servidor
  12. Configuração de Cluster e Balanceamento de Carga
  13. Ajuste de Performance e Tuning do JBoss/WildFly
  14. Automação e Deploy Contínuo com JBoss/WildFly
  15. Backup e Recuperação de Configurações do Servidor

1. Introdução ao JBoss/WildFly

Objetivo

Apresentar o JBoss/WildFly e suas funcionalidades principais como servidor de aplicações Java EE, introduzindo sua importância e as principais características que fazem dele uma escolha popular em ambientes empresariais.

1.1 O que é JBoss/WildFly?

O JBoss Application Server (AS), agora conhecido como WildFly, é um servidor de aplicações de código aberto voltado para o desenvolvimento e execução de aplicações Java EE (Enterprise Edition). Com uma estrutura modular e capacidade de operar em ambientes distribuídos, o WildFly é amplamente utilizado em grandes organizações devido à sua robustez e suporte para sistemas complexos e de alta disponibilidade.

Histórico e Evolução

  • JBoss AS foi originalmente desenvolvido pela JBoss Inc. como um servidor Java EE padrão para empresas que buscavam uma alternativa de código aberto.
  • Em 2014, com a versão 8, o nome WildFly foi adotado para representar uma nova fase da tecnologia, com ênfase na modularidade, leveza e capacidade de integração com arquiteturas em nuvem e microserviços.

Essa evolução tornou o WildFly um servidor moderno, capaz de suportar desde aplicações monolíticas até microsserviços, mantendo o suporte completo para as especificações Java EE (atualmente Jakarta EE).

1.2 Benefícios do Uso em Ambientes Empresariais e de Desenvolvimento

  • Flexibilidade e Escalabilidade: Graças à sua arquitetura modular, o WildFly permite habilitar ou desabilitar subsistemas conforme necessário, economizando recursos e melhorando o desempenho.
  • Alta Disponibilidade e Clusterização: Oferece suporte para clustering, facilitando a criação de ambientes de alta disponibilidade e balanceamento de carga.
  • Suporte a Transações e Persistência: Ideal para sistemas críticos que exigem operações de banco de dados confiáveis e complexas, com suporte a transações distribuídas e integração com várias bases de dados.
  • Comunidade e Suporte Empresarial: A Red Hat oferece uma versão com suporte comercial (JBoss EAP - Enterprise Application Platform), que inclui atualizações e suporte técnico, além de extensiva documentação e comunidade ativa.

1.3 Componentes Principais do JBoss/WildFly

O WildFly é projetado com uma arquitetura modular, onde cada serviço é um subsistema que pode ser configurado conforme as necessidades da aplicação. Abaixo estão os principais componentes:

Componente Descrição
Gerenciador de Subsistemas Controle de subsistemas (ex.: segurança, transações, persistência) permitindo habilitar ou desabilitar serviços específicos.
Console de Administração Interface gráfica acessível via navegador, facilitando a administração e monitoramento do servidor em tempo real.
CLI (Command Line Interface) Interface de linha de comando que permite gerenciar o servidor e automatizar operações por meio de scripts.
Deployment Scanner Mecanismo que monitora mudanças em diretórios específicos para realizar deploys automáticos de aplicações Java EE.
Gerenciamento de Clusters Permite configurar múltiplos servidores (nós) em um cluster, com suporte para replicação de sessões e balanceamento de carga.
Gerenciador de Log Controla e organiza logs do servidor e das aplicações, com níveis configuráveis para depuração, avisos e erros.

1.4 Arquitetura Modular do WildFly

A arquitetura modular do WildFly é um dos seus principais diferenciais. Cada subsistema (ex.: JPA para persistência, Web para servidores HTTP) funciona como um módulo independente. Essa modularidade traz benefícios como:

  • Personalização de Ambiente: É possível personalizar o ambiente de execução ativando apenas os subsistemas necessários, o que reduz o uso de recursos.
  • Isolamento de Dependências: Permite que aplicações diferentes no mesmo servidor utilizem versões distintas de bibliotecas, evitando conflitos.
  • Atualização Fácil: Subsistemas podem ser atualizados ou substituídos sem afetar o núcleo do servidor.

Conclusão da Seção 1

Com sua estrutura modular, flexibilidade, e grande quantidade de recursos, o WildFly é uma escolha sólida para organizações que buscam uma solução escalável e eficiente para rodar aplicações Java EE. Essa base modular e adaptável permite ao WildFly ser aplicado tanto em ambientes de desenvolvimento quanto em cenários de produção robustos.


2. Instalação e Configuração Inicial do JBoss/WildFly

Objetivo

Ensinar a instalação e configuração básica do WildFly no Oracle Linux 8, passando pelos passos de download, configuração de variáveis de ambiente e inicialização do servidor.

2.1 Pré-requisitos

Antes de começar, é importante garantir que o Oracle Linux 8 tenha o Java Development Kit (JDK) instalado. O WildFly requer o JDK 8 ou superior. Verifique a instalação com o comando:

1
java -version

Caso o JDK não esteja instalado, você pode instalá-lo com:

1
sudo dnf install java-11-openjdk

2.2 Download do WildFly

  1. Acesse o site oficial do WildFly para fazer o download da versão mais recente: https://www.wildfly.org/downloads/.
  2. Faça o download do arquivo tar.gz (exemplo: wildfly-<versão>.Final.tar.gz).

2.3 Instalação do WildFly

  1. Abra o terminal no Oracle Linux e mova o arquivo baixado para o diretório /opt (ou qualquer outro diretório de sua preferência). Em seguida, extraia o arquivo:

    1
    2
    3
    
    sudo mv ~/Downloads/wildfly-<versão>.Final.tar.gz /opt/
    cd /opt
    sudo tar -xzvf wildfly-<versão>.Final.tar.gz
    
  2. Renomeie o diretório extraído para facilitar futuras atualizações:

    1
    
    sudo mv wildfly-<versão>.Final/ wildfly
    

2.4 Configuração das Variáveis de Ambiente

Para configurar o JBoss/WildFly corretamente, defina as variáveis de ambiente JAVA_HOME (diretório onde o JDK está instalado) e JBOSS_HOME (diretório do WildFly).

  1. Abra o arquivo /etc/profile.d/wildfly.sh para definir as variáveis de ambiente:

    1
    
    sudo nano /etc/profile.d/wildfly.sh
    
  2. Adicione as seguintes linhas ao arquivo:

    1
    2
    3
    
    export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
    export JBOSS_HOME=/opt/wildfly
    export PATH=$PATH:$JBOSS_HOME/bin
    
  3. Salve o arquivo e carregue as variáveis de ambiente:

    1
    
    source /etc/profile.d/wildfly.sh
    
  4. Verifique se as variáveis foram configuradas corretamente:

    1
    2
    
    echo $JAVA_HOME
    echo $JBOSS_HOME
    

2.5 Iniciando e Parando o Servidor WildFly

Com as variáveis configuradas, já é possível iniciar e parar o servidor usando os scripts localizados no diretório bin do WildFly.

  1. Para iniciar o servidor pela primeira vez, execute o comando:

    1
    
    $JBOSS_HOME/bin/standalone.sh
    
  2. Se tudo estiver correto, você verá mensagens no terminal indicando que o servidor foi iniciado com sucesso. O WildFly utiliza por padrão a porta 8080 para servir aplicações. Para acessar a página inicial e verificar, abra um navegador e digite:

    1
    
    http://localhost:8080
    
  3. Para parar o servidor, pressione Ctrl + C no terminal onde o servidor está rodando ou execute:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect command=:shutdown
    

2.6 Configuração Inicial de Usuário de Administração

Para acessar o console de administração, será necessário configurar um usuário administrador.

  1. Execute o script add-user.sh localizado no diretório bin do WildFly:

    1
    
    $JBOSS_HOME/bin/add-user.sh
    
  2. Escolha a opção de Management User (usuário de gerenciamento) e siga os prompts para definir o nome de usuário e a senha. Esse usuário será utilizado para acessar o console de administração do WildFly.

  3. Após configurar o usuário, acesse o console de administração no navegador:

    1
    
    http://localhost:9990
    

    Insira as credenciais configuradas para acessar a interface de gerenciamento.

Conclusão da Seção 2

Agora, você tem o WildFly instalado e configurado com um usuário administrativo. Esta instalação básica é suficiente para explorar as funcionalidades do servidor e realizar deploys iniciais. Na próxima seção, detalharemos a estrutura de diretórios e arquivos do WildFly, o que será essencial para a administração avançada.


3. Estrutura de Diretórios e Configuração do Servidor

Objetivo

Compreender a estrutura de diretórios e os principais arquivos de configuração do WildFly, essenciais para a administração do servidor e o gerenciamento de deploys e logs.

3.1 Estrutura de Diretórios do WildFly

A organização dos diretórios no WildFly facilita a manutenção e customização do servidor. Abaixo estão os principais diretórios e sua função:

Diretório Descrição
bin/ Contém scripts para iniciar/parar o servidor, gerenciar o console de administração (CLI) e adicionar usuários.
standalone/ Usado para configurações de servidor em modo standalone (não gerenciado). Inclui arquivos de configuração, dados, deploys e logs para esse modo.
domain/ Usado para configurações de servidor no modo Domain, onde múltiplos servidores podem ser gerenciados centralmente.
modules/ Armazena módulos do servidor, como bibliotecas Java, que podem ser usadas pelas aplicações implantadas.
docs/ Contém documentação sobre configurações padrão e informações de exemplo do WildFly.
appclient/ Usado para configurar e executar clientes Java EE.

3.2 Estrutura do Diretório standalone

Ao utilizar o WildFly em modo standalone (modo único, não gerenciado por um controlador), o diretório standalone será o mais relevante. Nele, estão os principais arquivos de configuração e subdiretórios específicos:

  • standalone/configuration: Contém arquivos de configuração, sendo o mais importante o standalone.xml, que define a configuração dos subsistemas, datasources, segurança, entre outros.
  • standalone/deployments: Diretório onde os arquivos .war, .ear ou .jar devem ser colocados para deploy de aplicações. O WildFly automaticamente detecta e faz o deploy dos arquivos neste diretório.
  • standalone/log: Diretório onde os logs do servidor são armazenados, sendo server.log o principal arquivo de log do servidor.
  • standalone/data: Contém dados persistentes necessários para o funcionamento do servidor e aplicações, como caches de sessão e dados temporários.

3.3 Arquivo de Configuração Principal: standalone.xml

O standalone.xml é o arquivo de configuração mais importante no modo standalone, contendo todas as definições dos subsistemas do WildFly. Abaixo estão alguns dos principais elementos deste arquivo:

  • ****: Cada subsistema (ex.: web, jpa, security) possui uma seção própria, onde são definidas configurações específicas.
  • ****: Define as interfaces de rede para o servidor, permitindo especificar endereços IP e portas.
  • ****: Configura as portas utilizadas pelo servidor, como 8080 (HTTP) e 9990 (Administração).
  • ****: Gerencia a configuração de segurança, incluindo autenticação de usuários e SSL/TLS.

3.4 Exemplo Prático: Configuração no standalone.xml

Aqui está um exemplo básico de modificação no standalone.xml para alterar a porta HTTP do servidor de 8080 para 8081.

  1. Abra o arquivo standalone.xml para edição:

    1
    
    sudo nano $JBOSS_HOME/standalone/configuration/standalone.xml
    
  2. Localize o elemento <socket-binding-group> e altere a porta HTTP:

    1
    
    <socket-binding name="http" port="8081"/>
    
  3. Salve o arquivo e reinicie o servidor para que as mudanças tenham efeito:

    1
    
    $JBOSS_HOME/bin/standalone.sh
    

Agora, o servidor estará disponível na porta 8081.

Conclusão da Seção 3

Compreender a estrutura de diretórios e o arquivo standalone.xml é essencial para a administração e customização do WildFly. A configuração modular e os diretórios específicos facilitam o gerenciamento, permitindo que cada aspecto do servidor seja configurado de forma organizada e eficiente.


4. Modos de Operação: Standalone e Domain Mode

Objetivo

Explicar os dois modos de operação do WildFly – Standalone e Domain Mode – e discutir como e quando utilizá-los. Essa compreensão é essencial para configurar o servidor de acordo com a arquitetura e requisitos do ambiente, seja ele um ambiente de desenvolvimento ou uma infraestrutura de produção escalável.

4.1 O que São os Modos Standalone e Domain Mode?

O WildFly permite a execução em dois modos principais:

  • Standalone Mode: Modo padrão, no qual o servidor WildFly é executado de forma independente, sem coordenação com outros servidores. Esse modo é mais indicado para ambientes simples, como ambientes de desenvolvimento, testes, ou pequenas implementações de produção que não exigem uma arquitetura de alta disponibilidade.

  • Domain Mode: Modo gerenciado em que múltiplas instâncias do WildFly são controladas por um Domain Controller (controlador de domínio). Esse modo é recomendado para ambientes de produção mais complexos, onde se deseja gerenciar vários servidores de maneira centralizada, com possibilidade de criar clusters para alta disponibilidade e balanceamento de carga.

4.2 Comparação dos Modos Standalone e Domain

Aspecto Standalone Mode Domain Mode
Configuração Cada servidor possui uma configuração independente (standalone.xml). Configuração centralizada via Domain Controller (domain.xml e host.xml).
Gerenciamento Ideal para servidores únicos ou configurações de teste. Facilita o gerenciamento de vários servidores e clusters, permitindo replicação de configurações.
Escalabilidade Menos escalável, com limitações para ambientes de produção de grande escala. Alta escalabilidade, permitindo a adição de nós e balanceamento de carga para grandes implementações.
Configuração de Rede Configuração de portas e IPs feita individualmente para cada servidor. Configuração de rede centralizada e replicada para todos os nós, ideal para clusters e balanceamento.

4.3 Configuração do Modo Standalone

A configuração do modo standalone é feita principalmente no arquivo standalone.xml, localizado no diretório $JBOSS_HOME/standalone/configuration. Esse arquivo contém todas as definições do servidor, como subsistemas, datasources, e segurança, além das portas e interfaces de rede.

  • Iniciar o Servidor em Modo Standalone: Para iniciar o servidor neste modo, use o seguinte comando:

    1
    
    $JBOSS_HOME/bin/standalone.sh
    

Esse modo é mais simples de configurar e administrar, especialmente em ambientes onde uma única instância é suficiente.

4.4 Configuração do Modo Domain

No modo Domain, dois arquivos principais controlam a configuração do servidor:

  • domain.xml: Define os subsistemas, como segurança, configuração de clusters, datasources e outros recursos compartilhados entre os servidores no domínio.
  • host.xml: Define as configurações específicas para cada host (máquina física ou virtual), incluindo quais servidores e perfis de servidor serão executados nesse host.

Estrutura do Modo Domain

Em um domínio WildFly, você possui um Domain Controller (controlador do domínio) que gerencia as configurações do domínio e diversos Host Controllers (controladores de host) que iniciam e administram as instâncias de servidor nos hosts.

Exemplo de Configuração em Domain Mode com Múltiplos Nós

Aqui está um exemplo prático de configuração de um domínio:

  1. Definindo Perfis no domain.xml: No arquivo domain.xml, configure os subsistemas e perfis que serão aplicados aos servidores. Um perfil define subsistemas e parâmetros, como configurações de rede e segurança.

  2. Configurando o host.xml para Vários Servidores: No arquivo host.xml, você pode definir os servidores que rodarão no host atual, suas interfaces de rede e o perfil que cada servidor usará.

  3. Iniciando o Servidor em Modo Domain: Para iniciar o WildFly em modo Domain, use o comando:

    1
    
    $JBOSS_HOME/bin/domain.sh
    
  4. Acessando o Console de Administração: No modo Domain, o console de administração é acessível pelo Domain Controller e permite configurar e monitorar todos os nós.

4.5 Vantagens e Desvantagens de Cada Modo em Ambientes de Produção

Standalone Mode

  • Vantagens:
    • Simples de configurar e executar.
    • Requer menos recursos de administração e é mais adequado para testes e desenvolvimento.
  • Desvantagens:
    • Limitações na escalabilidade e gerenciamento de clusters.
    • Configuração independente para cada instância, o que pode dificultar a manutenção em grandes ambientes.

Domain Mode

  • Vantagens:
    • Administração centralizada e facilidade de replicação de configurações.
    • Suporte ideal para clusters, com balanceamento de carga e alta disponibilidade.
  • Desvantagens:
    • Requer mais recursos de configuração e entendimento do Domain Controller e dos Host Controllers.
    • Configuração mais complexa, o que pode aumentar a sobrecarga administrativa.

Conclusão da Seção 4

A escolha entre Standalone e Domain Mode depende das necessidades do ambiente. O modo Standalone é ideal para ambientes menores, enquanto o modo Domain é indispensável em arquiteturas de produção que exigem alta disponibilidade e escalabilidade.


5. Deploy de Aplicações no JBoss/WildFly

Objetivo

Demonstrar como realizar o deploy de aplicações Java no JBoss/WildFly, abordando os diferentes métodos de deployment e configurando corretamente os arquivos para garantir uma implantação eficiente.

5.1 Métodos de Deploy

O WildFly oferece várias maneiras de fazer o deploy de aplicações, o que facilita tanto para ambientes de desenvolvimento quanto para ambientes de produção. Os principais métodos são:

  • Deploy por cópia direta: Colocando o arquivo da aplicação (.war, .ear, ou .jar) no diretório de deploy.
  • Console de Administração: Usando a interface web para realizar o upload e deploy da aplicação.
  • CLI (Command Line Interface): Utilizando comandos no terminal para fazer deploys, ideal para scripts e automação.

5.2 Deploy por Cópia Direta

No modo Standalone, você pode fazer o deploy de uma aplicação copiando o arquivo para o diretório standalone/deployments.

  1. Coloque o arquivo da aplicação no diretório de deploy:
    1
    
    cp minha-aplicacao.war $JBOSS_HOME/standalone/deployments/
    
  2. O WildFly detectará automaticamente o novo arquivo e iniciará o processo de deploy. Você pode verificar o status do deploy no arquivo server.log no diretório standalone/log.

  3. Para remover a aplicação, basta deletar o arquivo do diretório deployments:
    1
    
    rm $JBOSS_HOME/standalone/deployments/minha-aplicacao.war
    

5.3 Deploy pelo Console de Administração

O console de administração web do WildFly permite fazer o deploy de aplicações de maneira simples e visual.

  1. Acesse o console de administração:
    1
    
    http://localhost:9990
    
  2. Após fazer login, vá para Deployments > Manage Deployments e clique em Add.

  3. Clique em Choose File, selecione o arquivo da aplicação (.war, .ear, ou .jar), e depois em Next para iniciar o deploy.

  4. Após o deploy, você verá a aplicação listada como Enabled. Você pode iniciar, parar ou remover a aplicação a partir do console.

5.4 Deploy Usando a CLI (Command Line Interface)

A CLI é uma ferramenta poderosa para administração e deploy, permitindo o uso de scripts para automatizar processos. Abaixo está um exemplo de como fazer o deploy de uma aplicação pela CLI.

  1. Inicie a CLI conectando-se ao servidor:
    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect
    
  2. Use o comando deploy para fazer o deploy da aplicação:
    1
    
    deploy /caminho/para/minha-aplicacao.war
    
  3. Para remover o deploy da aplicação:
    1
    
    undeploy minha-aplicacao.war
    
  4. Para ver o status do deploy:
    1
    
    :read-resource
    

5.5 Exemplo Prático de Deploy de uma Aplicação Java

Aqui está um exemplo passo a passo de deploy usando a CLI para uma aplicação minha-aplicacao.war.

  1. Conecte-se ao servidor pela CLI:
    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect
    
  2. Execute o comando de deploy:
    1
    
    deploy /opt/deploy/minha-aplicacao.war
    
  3. Verifique no server.log ou pelo console web se a aplicação foi implantada corretamente. A aplicação estará acessível em:
    1
    
    http://localhost:8080/minha-aplicacao
    

5.6 Verificação de Logs

Os logs do WildFly são armazenados no diretório standalone/log, sendo o server.log o principal para monitorar o status das aplicações e do servidor.

  • Visualizar logs em tempo real:
    1
    
    tail -f $JBOSS_HOME/standalone/log/server.log
    

Isso permite acompanhar erros ou confirmações de que o deploy foi bem-sucedido.

Conclusão da Seção 5

O WildFly fornece métodos flexíveis para o deploy de aplicações, possibilitando uma integração fácil tanto em cenários de desenvolvimento quanto em ambientes de produção. A CLI, em particular, é uma ferramenta poderosa para automação e ideal para pipelines de CI/CD.


6. Administração e Gerenciamento via Console Web

Objetivo

Esta seção aborda o uso do Console de Administração do WildFly, uma interface gráfica que facilita a administração e monitoramento do servidor, incluindo a gestão de deploys, subsistemas, e monitoramento de desempenho.

6.1 Acessando o Console de Administração

  1. Acessar o Console Web:
    • No navegador, digite:
      1
      
      http://localhost:9990
      
    • Faça login usando o nome de usuário e senha definidos anteriormente (via add-user.sh).
  2. Navegação Básica:
    • O console é organizado em diferentes seções para configuração e monitoramento, como Runtime, Deployments, Configuration, Management e Extensions.

6.2 Seção Runtime: Monitoramento do Servidor

A aba Runtime fornece informações em tempo real sobre o servidor e os subsistemas em execução:

  • Server Status: Mostra o status atual do servidor e possibilita reiniciar, parar ou realizar um reload do servidor.
  • Deployments: Permite monitorar e gerenciar as aplicações implantadas. Você pode verificar o status de cada deploy, reiniciar ou desabilitar uma aplicação.
  • Subsystems: Exibe métricas e estatísticas de subsistemas críticos, como:
    • Web: Conexões HTTP e sessões ativas.
    • Datasources: Monitoramento de conexões de banco de dados.
    • JMS: Status de filas de mensagens e tópicos.

6.3 Gerenciando Deployments pelo Console

O console facilita a gestão de deploys de maneira visual:

  1. Acessar Deployments:
    • Navegue para Deployments > Manage Deployments.
  2. Adicionar um Novo Deploy:
    • Clique em Add e selecione o arquivo da aplicação (.war, .ear, ou .jar) para upload.
    • Depois de carregar, configure se deseja ativar o deploy imediatamente ou realizar o deploy posteriormente.
  3. Monitorar e Gerenciar Deployments:
    • Após o deploy, a aplicação aparece na lista de deployments, com opções para habilitar, desabilitar, reiniciar ou remover o deployment.
    • Esse gerenciamento visual é útil em produção para aplicar patches ou versões novas de uma aplicação sem a necessidade de reiniciar o servidor.

6.4 Configuração de Subsistemas pelo Console

Na aba Configuration, é possível acessar e configurar cada subsistema do servidor, como segurança, datasources, e parâmetros do servidor.

Principais Subsistemas e Configurações

Subsistema Descrição
Datasources Configuração de conexões com bancos de dados. Permite adicionar, remover e configurar parâmetros para datasources JDBC.
JMS (Java Messaging Service) Configuração de filas e tópicos de mensagens. Ideal para aplicações que utilizam troca de mensagens assíncronas.
Logging Configura os níveis de log do servidor e das aplicações, além de gerenciar handlers de log e especificar arquivos de log específicos.
Security Configura o gerenciamento de autenticação e autorização para o servidor e as aplicações, permitindo definir domínios de segurança personalizados.

Exemplo Prático: Configuração de Datasource pelo Console

  1. Acesse Configuration > Subsystems > Datasources.
  2. Clique em Add para adicionar um novo datasource.
  3. Siga os prompts para configurar o nome do datasource, tipo de banco de dados, parâmetros de conexão (URL, nome de usuário e senha) e teste de conexão.

Esse processo facilita a configuração de novos bancos de dados diretamente pela interface gráfica.

6.5 Ajuste de Parâmetros de Servidor

A aba Configuration > Server permite ajustar parâmetros gerais do servidor, como portas de rede, memória, e otimizações de desempenho.

  1. Alterar Porta HTTP:
    • Acesse Configuration > Subsystems > Web > HTTP e altere a porta padrão, se necessário.
  2. Configurar SSL:
    • Em Subsystems > Web > HTTPS é possível configurar SSL/TLS para comunicações seguras no servidor, um passo essencial para ambientes de produção.

6.6 Exemplo Prático: Monitoramento de Sessões e Conexões HTTP

A seção Runtime > Web exibe dados sobre conexões HTTP e sessões de usuários ativos:

  1. Clique em Subsystems > Web > HTTP para monitorar as conexões HTTP e ver as sessões ativas.
  2. Monitore o número de sessões, o tempo de resposta e outras métricas relevantes.

Esse monitoramento ajuda a identificar problemas de desempenho, como excesso de usuários ativos ou gargalos de rede.

Conclusão da Seção 6

O Console de Administração do WildFly é uma ferramenta completa para administração visual do servidor, ideal para monitoramento e ajustes rápidos em tempo real. Para automação e operações avançadas, no entanto, a CLI continua sendo uma alternativa poderosa.


7. Administração com a CLI do JBoss/WildFly

Objetivo

Explorar o uso da CLI (Command Line Interface) do WildFly para administração avançada, automação de tarefas e execução de scripts em ambientes de desenvolvimento e produção.

7.1 O Que é a CLI do WildFly?

A CLI (Interface de Linha de Comando) do WildFly é uma ferramenta poderosa para gerenciar o servidor. Ela permite executar comandos e scripts para configurar subsistemas, gerenciar deploys e monitorar o servidor. A CLI é ideal para automação e operações em ambientes de produção onde a administração de múltiplas instâncias pode ser complexa.

7.2 Acessando a CLI

  1. Iniciar a CLI: No terminal, navegue até o diretório bin do WildFly e inicie a CLI com o comando:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect
    
  2. Conectar ao Servidor: Você pode se conectar ao servidor remoto especificando o endereço e porta (padrão: localhost:9990):

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect controller=<IP_DO_SERVIDOR>:<PORTA>
    

7.3 Comandos Básicos da CLI

A CLI aceita comandos para operações de gerenciamento, configuração e deploy. Abaixo estão alguns dos comandos mais comuns:

  • Verificar Status do Servidor:

    1
    
    :read-attribute(name=server-state)
    
  • Verificar Versão do Servidor:

    1
    
    :read-attribute(name=release-version)
    
  • Parar o Servidor:

    1
    
    :shutdown
    
  • Reiniciar o Servidor:

    1
    
    :reload
    

Esses comandos são úteis para o monitoramento e controle básico do servidor.

7.4 Gerenciamento de Deployments com a CLI

A CLI permite gerenciar deploys de maneira prática, sem a necessidade de usar o console web. Veja os principais comandos para deploys:

  • Fazer o Deploy de uma Aplicação:

    1
    
    deploy /caminho/para/minha-aplicacao.war
    
  • Undeploy (Remover) uma Aplicação:

    1
    
    undeploy minha-aplicacao.war
    
  • Redeploy (Reimplantar) uma Aplicação:

    1
    
    redeploy minha-aplicacao.war
    

Esses comandos permitem gerenciar rapidamente o ciclo de vida das aplicações, facilitando a implantação e atualização.

7.5 Scripts e Automação com a CLI

A CLI suporta execução de scripts, o que é essencial para automação em ambientes de CI/CD. Scripts CLI podem ser escritos como arquivos .cli e executados diretamente na CLI.

Exemplo de Script de Deploy Automático

  1. Crie um arquivo deploy-script.cli com o seguinte conteúdo:

    1
    2
    3
    
    connect
    deploy /caminho/para/minha-aplicacao.war
    quit
    
  2. Execute o script com o comando:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --file=/caminho/para/deploy-script.cli
    

Esse script se conecta ao servidor, faz o deploy da aplicação e encerra a conexão. É possível incluir vários comandos no mesmo script para automatizar tarefas complexas.

Automação de Configuração de Datasource

Um exemplo prático de automação é configurar datasources para conexão com bancos de dados:

  1. Crie um script chamado datasource-setup.cli:

    1
    2
    3
    
    connect
    data-source add --name=MyDS --jndi-name=java:/MyDS --driver-name=mysql --connection-url=jdbc:mysql://localhost:3306/meubanco --user-name=usuario --password=senha --use-ccm=false
    quit
    
  2. Execute o script:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --file=/caminho/para/datasource-setup.cli
    

Esse comando configura um datasource MySQL para o servidor, permitindo que a aplicação se conecte ao banco sem necessidade de configuração manual.

7.6 Exemplo Prático: Script para Configuração e Deploy

Suponha que você deseje configurar um datasource e fazer o deploy de uma aplicação automaticamente. Esse script combina ambos os processos:

  1. Crie um arquivo setup-and-deploy.cli:

    1
    2
    3
    4
    5
    6
    
    connect
    # Configuração do datasource
    data-source add --name=MyDS --jndi-name=java:/MyDS --driver-name=mysql --connection-url=jdbc:mysql://localhost:3306/meubanco --user-name=usuario --password=senha --use-ccm=false
    # Deploy da aplicação
    deploy /caminho/para/minha-aplicacao.war
    quit
    
  2. Execute o script completo:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --file=/caminho/para/setup-and-deploy.cli
    

Esse script simplifica a configuração inicial e o deploy em um único passo, economizando tempo e reduzindo erros manuais.

7.7 Monitoramento e Consultas de Status via CLI

Além de comandos para configuração e deploy, a CLI permite consultas em tempo real para monitoramento de status:

  • Monitorar Conexões JDBC:

    1
    
    /subsystem=datasources/data-source=MyDS/statistics=pool:read-resource(include-runtime=true)
    
  • Verificar Threads em Uso:

    1
    
    /subsystem=threads:read-resource(include-runtime=true)
    

Essas consultas são úteis para identificar gargalos e monitorar o desempenho do servidor e das aplicações.

Conclusão da Seção 7

A CLI do WildFly é uma ferramenta essencial para administração avançada e automação, tornando mais fácil realizar operações de configuração, deploy e monitoramento. Sua capacidade de executar scripts permite uma gestão eficiente em ambientes de produção e integrações com pipelines de CI/CD.


8. Configuração de Datasources e Conexões com Banco de Dados

Objetivo

Demonstrar como configurar datasources para conectar o JBoss/WildFly a bancos de dados, abordando o processo tanto pela CLI quanto pelo Console de Administração. A configuração de datasources é essencial para que aplicações possam acessar bancos de dados externos, necessários para armazenamento e processamento de dados.

8.1 O Que é um Datasource?

No contexto do WildFly, um datasource é uma configuração de conexão que permite às aplicações se comunicarem com um banco de dados. Ele define os parâmetros de conexão, como URL, usuário, senha e configurações de pool de conexões.

8.2 Configuração de Datasource no standalone.xml

Antes de explorar a CLI e o Console de Administração, é útil entender a estrutura de configuração de um datasource no arquivo standalone.xml. Um exemplo básico de datasource para MySQL pode ser configurado como:

1
2
3
4
5
6
7
8
9
10
11
12
<subsystem xmlns="urn:jboss:domain:datasources:5.0">
    <datasources>
        <datasource jndi-name="java:/MyDS" pool-name="MyDS">
            <connection-url>jdbc:mysql://localhost:3306/meubanco</connection-url>
            <driver>mysql</driver>
            <security>
                <user-name>usuario</user-name>
                <password>senha</password>
            </security>
        </datasource>
    </datasources>
</subsystem>

Essa configuração pode ser criada e gerenciada automaticamente via CLI e Console, evitando a necessidade de editar o XML diretamente.

8.3 Configuração de Datasource pelo Console de Administração

  1. Acesse o Console de Administração:
    • Abra o console no navegador:
      1
      
      http://localhost:9990
      
    • Faça login com suas credenciais.
  2. Adicionar o Datasource:
    • Navegue até Configuration > Subsystems > Datasources.
    • Clique em Add e escolha o tipo de datasource (por exemplo, JDBC).
  3. Configuração dos Parâmetros do Datasource:
    • Defina o JNDI Name (ex.: java:/MyDS) e o driver (ex.: mysql).
    • Insira a connection URL (ex.: jdbc:mysql://localhost:3306/meubanco) e as credenciais de acesso (usuário e senha).
    • Opcionalmente, configure parâmetros adicionais, como timeout de conexão e tamanho do pool de conexões.
  4. Testar a Conexão:
    • Após configurar o datasource, o console permite testar a conexão. Isso ajuda a verificar se o WildFly consegue se conectar ao banco de dados.

Esse método é simples e oferece uma interface visual para a configuração do datasource, sem a necessidade de editar arquivos XML diretamente.

8.4 Configuração de Datasource Usando a CLI

A CLI é ideal para configurar datasources em scripts ou em pipelines de CI/CD. Aqui está um exemplo prático para configurar um datasource para MySQL:

  1. Inicie a CLI e Conecte-se ao Servidor:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect
    
  2. Adicionar o Datasource: Use o seguinte comando para criar o datasource:

    1
    
    data-source add --name=MyDS --jndi-name=java:/MyDS --driver-name=mysql --connection-url=jdbc:mysql://localhost:3306/meubanco --user-name=usuario --password=senha --use-ccm=false
    
  3. Verificar a Conexão: Após adicionar o datasource, você pode testar a conexão com:

    1
    
    /subsystem=datasources/data-source=MyDS:test-connection-in-pool
    
  4. Configurações Avançadas do Pool de Conexões: O comando a seguir altera o tamanho do pool de conexões do datasource, garantindo que o servidor administre conexões de forma eficiente:

    1
    
    /subsystem=datasources/data-source=MyDS:write-attribute(name=max-pool-size, value=20)
    

Esses comandos permitem que você configure o datasource e ajuste suas configurações sem acessar o console web ou editar o standalone.xml diretamente.

8.5 Integração com Bancos de Dados Populares

Abaixo, mostramos configurações de connection-url para os bancos de dados mais comuns:

Banco de Dados Connection URL Exemplo
MySQL jdbc:mysql://localhost:3306/meubanco
PostgreSQL jdbc:postgresql://localhost:5432/meubanco
Oracle jdbc:oracle:thin:@localhost:1521:XE
SQL Server jdbc:sqlserver://localhost:1433;databaseName=meubanco

Para cada banco de dados, é necessário instalar o driver correspondente no WildFly.

8.6 Instalação de Drivers JDBC

Para que o WildFly se conecte a diferentes bancos de dados, é necessário adicionar o driver JDBC do banco. Isso pode ser feito de duas maneiras:

  1. Instalar via Console:
    • Em Configuration > Subsystems > Datasources > JDBC Drivers, clique em Add e carregue o driver.
  2. Instalar Manualmente:
    • Copie o arquivo .jar do driver JDBC para o diretório standalone/deployments.

Após adicionar o driver, o WildFly reconhecerá o driver na configuração do datasource.

Conclusão da Seção 8

A configuração de datasources no WildFly pode ser feita facilmente pelo Console de Administração ou pela CLI, proporcionando flexibilidade para se conectar a diferentes bancos de dados. A CLI, em especial, é ideal para automação, permitindo configurar e testar conexões de forma eficiente.


9. Gerenciamento de Segurança e Controle de Acesso

Objetivo

Aprender a configurar a segurança do JBoss/WildFly, incluindo a criação de usuários administrativos, controle de acesso para aplicações, e integração com subsistemas de autenticação. O gerenciamento de segurança é essencial em ambientes de produção para garantir que apenas usuários autorizados possam acessar o servidor e suas aplicações.

9.1 Visão Geral de Segurança no WildFly

O WildFly utiliza subsistemas de segurança que permitem configurar autenticação (confirmação de identidade) e autorização (permissões de acesso) para diferentes usuários e aplicações. As configurações de segurança são centralizadas, permitindo controle sobre:

  • Usuários Administrativos: Acesso ao console e CLI do WildFly.
  • Usuários de Aplicação: Controle de acesso a aplicações Java EE implantadas no servidor.
  • Reinos de Segurança (Security Realms): Configurações específicas de segurança que incluem métodos de autenticação e autorizações.

9.2 Configuração de Usuários Administrativos

Os usuários administrativos são aqueles que têm acesso ao console de administração e à CLI. Esses usuários são configurados no WildFly com o comando add-user.sh.

  1. Criar um Usuário Administrativo:
    • No terminal, execute o script add-user.sh localizado no diretório bin do WildFly:

      1
      
      $JBOSS_HOME/bin/add-user.sh
      
  2. Escolha o Tipo de Usuário:
    • Escolha Management User para criar um usuário administrativo.
  3. Configurar Nome de Usuário e Senha:
    • Siga as instruções para definir um nome de usuário e senha. Após confirmar a criação, o usuário estará habilitado para acessar o console e a CLI.
  4. Configurar Funções de Acesso:
    • No WildFly, as permissões dos usuários administrativos podem ser ajustadas através das roles (funções) atribuídas a eles, como Administrator, Monitor, e Operator, que determinam os níveis de acesso.

9.3 Configuração de Usuários de Aplicação

Os usuários de aplicação são aqueles que acessam as aplicações implantadas no WildFly. Esses usuários também podem ser criados pelo add-user.sh, mas com o tipo de usuário Application User.

  1. Criar um Usuário de Aplicação:
    • Execute o script add-user.sh e escolha Application User quando solicitado.
  2. Definir Grupos de Usuários:
    • Ao criar o usuário, você poderá adicionar grupos (ex.: app-users, admin-users), que serão utilizados na aplicação para definir permissões de acesso.
  3. Acesso a Aplicações:
    • A aplicação Java EE no WildFly pode usar esses grupos para definir permissões, permitindo ou restringindo acesso com base nas funções dos usuários.

9.4 Subsistemas de Segurança

No WildFly, os subsistemas de segurança são configurados principalmente no arquivo standalone.xml. Estes subsistemas incluem autenticação, autorização e gerenciamento de segurança, e estão organizados em Security Realms. Abaixo estão os principais subsistemas e suas funcionalidades.

Security Realms

Os Security Realms permitem definir onde as credenciais de usuários são armazenadas e como elas são verificadas. No WildFly, é comum o uso de LDAP, bancos de dados, ou arquivos para autenticação.

Exemplo de Configuração de um Realm com Arquivo de Usuários
  1. No arquivo standalone.xml, localize a seção <security-realm>.
  2. Configure um realm para autenticação via arquivo:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <security-realm name="ApplicationRealm">
        <authentication>
            <local default-user="$local" skip-group-loading="true"/>
            <properties path="application-users.properties" relative-to="jboss.server.config.dir"/>
        </authentication>
        <authorization>
            <properties path="application-roles.properties" relative-to="jboss.server.config.dir"/>
        </authorization>
    </security-realm>
    

Nesse exemplo, application-users.properties contém as credenciais dos usuários, e application-roles.properties define as permissões.

Exemplo de Configuração de um Realm com LDAP

Para integrar com um servidor LDAP:

  1. Na seção <security-realm>, adicione um realm com configuração LDAP.

    1
    2
    3
    4
    5
    6
    7
    
    <security-realm name="LdapRealm">
        <authentication>
            <ldap connection="ldap-connection" base-dn="ou=users,dc=example,dc=com">
                <username-filter attribute="uid"/>
            </ldap>
        </authentication>
    </security-realm>
    
  2. Defina a conexão LDAP (a conexão deve ser configurada em uma seção separada do standalone.xml).

Esse método permite autenticar os usuários diretamente em um servidor LDAP, o que é útil em ambientes corporativos.

9.5 Configuração de SSL/TLS para Segurança de Comunicação

Para proteger as comunicações entre o servidor e os clientes, é importante configurar SSL/TLS no WildFly.

Configurando SSL/TLS no standalone.xml

  1. Gerar um Certificado SSL (caso ainda não tenha um):
    • Gere um certificado autoassinado ou obtenha um de uma Autoridade Certificadora (CA).
    • Armazene o certificado em um Keystore Java:

      1
      
      keytool -genkeypair -alias wildfly -keyalg RSA -keystore /path/to/keystore.jks -storepass sua_senha
      
  2. Configurar o Keystore no WildFly:
    • No standalone.xml, localize a seção do subsistema de web e configure o HTTPS, referenciando o Keystore:

      1
      2
      3
      4
      5
      
      <security-realm name="SSLRealm">
          <server-identities>
              <ssl keystore-path="keystore.jks" keystore-password="sua_senha"/>
          </server-identities>
      </security-realm>
      
  3. Configurar o Socket para HTTPS:
    • Ainda no standalone.xml, ajuste o <socket-binding-group> para ativar a porta HTTPS:

      1
      
      <socket-binding name="https" port="8443"/>
      
  4. Reinicie o Servidor para aplicar as mudanças.

Agora, o WildFly estará configurado para aceitar conexões seguras na porta 8443.

9.6 Exemplo Prático: Configuração Completa de Segurança com Usuários e SSL

Para configurar um ambiente seguro:

  1. Crie Usuários Administrativos e de Aplicação utilizando o add-user.sh.
  2. Configure um Realm de Aplicação para autenticação em um arquivo ou LDAP.
  3. Habilite SSL/TLS para conexões seguras.
  4. Reinicie e Teste a Configuração acessando o console e as aplicações via HTTPS para garantir que apenas usuários autorizados têm acesso.

Conclusão da Seção 9

A configuração de segurança do WildFly envolve o gerenciamento de usuários, realms e proteção das comunicações com SSL/TLS. Essas práticas são fundamentais para ambientes de produção e ajudam a proteger o servidor e as aplicações contra acessos não autorizados.


10. Configuração de SSL/TLS para Comunicação Segura

Objetivo

Aprender a configurar SSL/TLS no JBoss/WildFly para proteger a comunicação entre o servidor e os clientes, incluindo o console de administração e as aplicações. Em ambientes de produção, essa configuração é essencial para garantir a integridade e confidencialidade dos dados transmitidos.

10.1 O Que é SSL/TLS?

SSL (Secure Sockets Layer) e TLS (Transport Layer Security) são protocolos de criptografia que garantem a segurança das comunicações entre clientes e servidores. O WildFly permite habilitar SSL/TLS para proteger dados sensíveis, como credenciais de login e informações das aplicações.

10.2 Preparação: Criação e Instalação de Certificados SSL

Antes de configurar o SSL/TLS no WildFly, você precisa de um certificado digital. Você pode:

  1. Gerar um Certificado Autoassinado (para desenvolvimento e testes).
  2. Obter um Certificado de uma Autoridade Certificadora (CA), como Let’s Encrypt ou outra CA confiável (recomendado para produção).

Gerando um Certificado Autoassinado com o Keytool

  1. Gerar o Keystore: Use o keytool, utilitário do Java, para criar um Keystore que armazenará o certificado SSL.

    1
    
    keytool -genkeypair -alias wildfly -keyalg RSA -keystore /path/to/keystore.jks -storepass sua_senha -keypass sua_senha -dname "CN=localhost, OU=TI, O=SuaEmpresa, L=Cidade, S=Estado, C=BR"
    

    Este comando cria um keystore chamado keystore.jks com uma senha definida por você, contendo um certificado autoassinado para “localhost”.

  2. Verificar o Certificado no Keystore:

    1
    
    keytool -list -v -keystore /path/to/keystore.jks
    
  3. Armazenar o Keystore no Diretório de Configuração: Coloque o arquivo keystore.jks no diretório de configuração do WildFly, como $JBOSS_HOME/standalone/configuration.

10.3 Configuração de SSL no WildFly

Para ativar SSL/TLS, configure um Security Realm com SSL no arquivo standalone.xml. Essa configuração instrui o WildFly a usar o certificado para conexões seguras.

  1. Configurar o Security Realm com SSL:

    Abra o arquivo standalone.xml e adicione um security-realm com a referência ao keystore criado:

    1
    2
    3
    4
    5
    
    <security-realm name="SSLRealm">
        <server-identities>
            <ssl keystore-path="keystore.jks" keystore-password="sua_senha"/>
        </server-identities>
    </security-realm>
    
    • keystore-path: Caminho para o keystore onde o certificado SSL está armazenado.
    • keystore-password: Senha do keystore definida anteriormente.
  2. Configurar o Socket HTTPS:

    Ainda no standalone.xml, configure um socket-binding para HTTPS (geralmente na seção <socket-binding-group>):

    1
    
    <socket-binding name="https" port="8443"/>
    

    Aqui, a porta 8443 é configurada para conexões HTTPS. Você pode ajustá-la conforme necessário.

  3. Habilitar o Security Realm no Conector HTTPS:

    Dentro do subsistema undertow (responsável por gerenciar o servidor web), configure o conector HTTPS para usar o realm SSL:

    1
    
    <https-listener name="https" socket-binding="https" security-realm="SSLRealm"/>
    

    Isso instrui o WildFly a usar o SSLRealm e o certificado para o conector HTTPS.

10.4 Testando a Configuração SSL

Após configurar o SSL, reinicie o servidor para que as mudanças entrem em vigor:

1
$JBOSS_HOME/bin/standalone.sh
  1. Acessar o Console com HTTPS:
    • No navegador, acesse o console de administração via HTTPS para verificar se a configuração está funcionando:
      1
      
      https://localhost:8443
      
  2. Verificar o Certificado no Navegador:
    • O navegador exibirá o certificado SSL. Se for um certificado autoassinado, será necessário ignorar o aviso de segurança ou adicionar o certificado à lista de certificados confiáveis do navegador.

10.5 Configurações Avançadas de SSL/TLS

Configuração de Ciphers e Protocolos

Para um controle mais detalhado, você pode definir ciphers (algoritmos de criptografia) e protocolos TLS aceitos:

1
<https-listener name="https" socket-binding="https" security-realm="SSLRealm" enabled-protocols="TLSv1.2" cipher-suite="TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"/>
  • enabled-protocols: Define quais versões do protocolo TLS serão suportadas (ex.: TLSv1.2).
  • cipher-suite: Define o conjunto de ciphers suportados para conexões seguras.

Configuração de Mutual SSL (SSL Bidirecional)

O WildFly também suporta o SSL bidirecional, onde o cliente precisa apresentar um certificado para autenticação mútua.

  1. No security-realm, configure o SSL para exigir o certificado do cliente:

    1
    2
    3
    4
    5
    
    <security-realm name="MutualSSLRealm">
        <server-identities>
            <ssl keystore-path="keystore.jks" keystore-password="sua_senha" require-client-auth="true"/>
        </server-identities>
    </security-realm>
    
  2. Configure o conector HTTPS para usar o MutualSSLRealm.

Essa configuração é comum em ambientes onde a autenticação do cliente é mandatória, como sistemas bancários ou de saúde.

10.6 Exemplo Prático de Configuração Completa de SSL

Para configurar SSL com um certificado autoassinado:

  1. Gerar e Configurar o Keystore usando o keytool.
  2. Configurar o Security Realm e o HTTPS Listener no standalone.xml.
  3. Testar a Conexão via HTTPS.

A configuração completa do standalone.xml deve se parecer com o exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<security-realm name="SSLRealm">
    <server-identities>
        <ssl keystore-path="keystore.jks" keystore-password="sua_senha"/>
    </server-identities>
</security-realm>

<subsystem xmlns="urn:jboss:domain:undertow:7.0">
    <server name="default-server">
        <https-listener name="https" socket-binding="https" security-realm="SSLRealm"/>
    </server>
</subsystem>

<socket-binding-group name="standard-sockets" default-interface="public">
    <socket-binding name="https" port="8443"/>
</socket-binding-group>

Conclusão da Seção 10

A configuração de SSL/TLS no WildFly é fundamental para proteger dados sensíveis e garantir a segurança das comunicações entre clientes e servidor. Esse processo envolve a criação de certificados, configuração de realms de segurança e ajuste do conector HTTPS. Em ambientes de produção, recomenda-se o uso de certificados de CA confiáveis e a configuração de ciphers e protocolos TLS seguros.


11. Logging e Monitoramento do Servidor

Objetivo

Aprender a configurar e gerenciar logs no WildFly para monitoramento de atividades do servidor e das aplicações. Além disso, abordaremos a integração com ferramentas de monitoramento externas para coletar e analisar métricas de desempenho e eventos importantes em tempo real.

11.1 Introdução ao Sistema de Logging do WildFly

O WildFly possui um subsistema de logging configurável que permite definir níveis de log, filtros, e handlers para controlar onde e como as mensagens de log são armazenadas. Os logs ajudam a identificar problemas no servidor e nas aplicações e fornecem informações detalhadas para análise de falhas.

11.2 Níveis de Log no WildFly

O WildFly permite configurar diferentes níveis de log, que controlam a quantidade de informações registradas. Os níveis, do mais detalhado ao mais crítico, são:

Nível Descrição
TRACE Informações extremamente detalhadas, usadas principalmente para depuração intensa.
DEBUG Informações úteis para debug de aplicações.
INFO Eventos gerais de operação que indicam o funcionamento normal do sistema.
WARN Indicações de possíveis problemas, mas que não impedem o funcionamento normal do sistema.
ERROR Erros que afetam funcionalidades específicas, mas não comprometem todo o sistema.
FATAL Erros críticos que podem comprometer a estabilidade do sistema como um todo.

11.3 Configuração de Logging no standalone.xml

A configuração de logging é feita no subsistema logging do arquivo standalone.xml. Esse subsistema permite configurar loggers e handlers que controlam como e onde os logs são armazenados.

Configuração Básica de Logger

Aqui está um exemplo básico de configuração de um logger customizado para um pacote específico:

1
2
3
4
5
<subsystem xmlns="urn:jboss:domain:logging:5.0">
    <logger category="com.minhaaplicacao">
        <level name="DEBUG"/>
    </logger>
</subsystem>

Nesse exemplo, todas as mensagens do pacote com.minhaaplicacao com nível DEBUG ou superior serão registradas.

Configuração de Handlers

Os handlers definem o destino dos logs. Existem diferentes tipos de handlers, como console, file, e periodic-rotating-file.

  1. Console Handler:

    Registra logs diretamente no console.

    1
    2
    3
    4
    5
    6
    
    <console-handler name="CONSOLE">
        <level name="INFO"/>
        <formatter>
            <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n"/>
        </formatter>
    </console-handler>
    
  2. File Handler:

    Registra logs em um arquivo específico.

    1
    2
    3
    4
    5
    6
    7
    
    <file-handler name="FILE">
        <level name="DEBUG"/>
        <file path="server.log" relative-to="jboss.server.log.dir"/>
        <formatter>
            <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%n"/>
        </formatter>
    </file-handler>
    
  3. Periodic Rotating File Handler:

    Gera arquivos de log rotativos, o que é útil para evitar que um único arquivo de log cresça indefinidamente.

    1
    2
    3
    4
    5
    6
    7
    8
    
    <periodic-rotating-file-handler name="PERIODIC" autoflush="true">
        <level name="INFO"/>
        <formatter>
            <pattern-formatter pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%n"/>
        </formatter>
        <file path="rotated-server.log" relative-to="jboss.server.log.dir"/>
        <suffix value=".yyyy-MM-dd"/>
    </periodic-rotating-file-handler>
    
  4. Customizando Loggers e Handlers:

    Você pode atribuir handlers a loggers específicos para direcionar logs para diferentes destinos. Por exemplo:

    1
    2
    3
    4
    5
    6
    
    <logger category="com.minhaaplicacao" use-parent-handlers="false">
        <level name="DEBUG"/>
        <handlers>
            <handler name="PERIODIC"/>
        </handlers>
    </logger>
    

11.4 Visualização de Logs em Tempo Real

Para monitorar os logs do servidor em tempo real, você pode usar o comando tail no arquivo de log principal:

1
tail -f $JBOSS_HOME/standalone/log/server.log

Esse comando permite visualizar novos registros de log à medida que são gerados, o que é útil para identificar problemas em tempo real.

11.5 Integração com Ferramentas de Monitoramento Externas

Para monitorar o WildFly em larga escala, você pode integrar os logs com ferramentas de monitoramento e análise de log, como o ELK Stack (Elasticsearch, Logstash e Kibana) ou o Prometheus/Grafana para métricas.

Exemplo de Integração com ELK Stack

  1. Logstash: Use o Logstash para coletar os logs do WildFly. Configure um arquivo .conf com um input para o arquivo de log do WildFly:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    input {
        file {
            path => "/opt/wildfly/standalone/log/server.log"
            start_position => "beginning"
        }
    }
    output {
        elasticsearch {
            hosts => ["http://localhost:9200"]
        }
    }
    
  2. Kibana: Depois de configurar o Logstash e enviar os logs para o Elasticsearch, você pode visualizar e analisar os logs no Kibana, configurando painéis personalizados para acompanhar métricas e eventos do servidor.

Exemplo de Integração com Prometheus e Grafana

  1. Instalar Prometheus JMX Exporter: O WildFly oferece suporte para exportação de métricas JMX. Adicione o jmx_prometheus_javaagent no WildFly para expor as métricas para o Prometheus.

  2. Configurar Prometheus: Configure o Prometheus para coletar as métricas do JMX Exporter do WildFly e criar gráficos e alertas no Grafana.

Essas integrações são especialmente úteis para monitoramento de produção, ajudando a identificar problemas de desempenho, gargalos e tendências de uso.

11.6 Exemplo Prático: Configuração Completa de Logging

Para configurar o logging de maneira completa:

  1. Configuração do Logger:
    • Defina loggers específicos para cada subsistema relevante (por exemplo, com.myapp).
  2. Configuração do File Handler Rotativo:
    • Configure o periodic-rotating-file-handler para gerar logs diários.
  3. Configuração de Integração com ELK Stack:
    • Configure o Logstash para coletar logs e enviar ao Elasticsearch.

Essa abordagem fornece um sistema de logging robusto que permite gerenciar logs locais e externos, otimizando o monitoramento e a análise de eventos.

Conclusão da Seção 11

O logging e o monitoramento do WildFly são componentes essenciais para administração de servidores. Com a configuração de loggers e handlers, você pode controlar a geração de logs e integrá-los com ferramentas externas, como ELK e Prometheus, para um monitoramento eficiente e uma visão detalhada do desempenho e da saúde do servidor.


12. Configuração de Cluster e Balanceamento de Carga

Objetivo

Configurar o JBoss/WildFly para operar em um ambiente de cluster, possibilitando alta disponibilidade e balanceamento de carga. Essa configuração é essencial em ambientes de produção onde se deseja garantir a continuidade dos serviços e distribuir a carga entre vários servidores.

12.1 O Que é um Cluster?

Um cluster consiste em múltiplas instâncias do WildFly operando juntas para fornecer alta disponibilidade e escalabilidade. As instâncias em um cluster compartilham sessões e dados, permitindo que, em caso de falha de uma delas, outra instância assuma suas tarefas, garantindo que a aplicação continue disponível para os usuários.

12.2 Modo Domain para Gerenciamento de Clusters

Para configurar um cluster, é recomendável usar o Domain Mode, que permite gerenciar múltiplos servidores de forma centralizada. No Domain Mode, você pode definir perfis compartilhados, controlar configurações de rede e gerenciar o cluster a partir de um Domain Controller.

  1. Domain Controller: Gerencia a configuração de todos os servidores do cluster.
  2. Host Controllers: Controlam instâncias específicas do WildFly e se comunicam com o Domain Controller.

12.3 Configuração de Cluster no Arquivo domain.xml

O arquivo domain.xml permite definir os perfis de servidores e subsistemas necessários para a configuração de cluster.

  1. Configurar o Subsistema de Distribuição de Sessão (Infinispan):
    • Infinispan é o mecanismo de cache e replicação de sessão usado pelo WildFly. No domain.xml, configure um cache distribuído para manter a replicação de sessão entre os nós do cluster.
    1
    2
    3
    4
    5
    6
    
    <subsystem xmlns="urn:jboss:domain:infinispan:8.0">
        <cache-container name="web" default-cache="distributed">
            <transport lock-timeout="60000"/>
            <distributed-cache name="distributed" mode="SYNC"/>
        </cache-container>
    </subsystem>
    
  2. Configurar o Subsistema Undertow para Cluster:
    • O undertow é o servidor web embutido no WildFly. Configure-o para suportar a replicação de sessões HTTP.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <subsystem xmlns="urn:jboss:domain:undertow:4.0">
        <server name="default-server">
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content"/>
                <http-invoker security-realm="ApplicationRealm"/>
            </host>
        </server>
        <servlet-container name="default" session-cache="distributed"/>
    </subsystem>
    
  3. Configuração de Socket Binding para Comunicação entre Nós:
    • Configure o <socket-binding-group> no domain.xml para que as instâncias do WildFly possam se comunicar. Use o jgroups, uma tecnologia que facilita a comunicação entre servidores em um cluster.
    1
    2
    3
    4
    
    <socket-binding-group name="standard-sockets" default-interface="public">
        <socket-binding name="jgroups-tcp" port="7600"/>
        <socket-binding name="jgroups-tcp-fd" port="57600"/>
    </socket-binding-group>
    

12.4 Configuração de Balanceamento de Carga

Para distribuir a carga entre os nós do cluster, é necessário um balanceador de carga. O WildFly suporta várias soluções de balanceamento de carga, incluindo:

  • Apache HTTP Server com o Mod_jk ou Mod_cluster.
  • HAProxy ou Nginx como balanceadores de carga externos.

Exemplo com Mod_cluster

O Mod_cluster é um módulo avançado para Apache HTTP Server que se integra facilmente com o WildFly para balanceamento de carga.

  1. Instalar o Mod_cluster: No Apache HTTP Server, instale o módulo Mod_cluster.

    1
    
    sudo yum install mod_cluster
    
  2. Configurar o Mod_cluster no Apache: Adicione a configuração do Mod_cluster no arquivo de configuração do Apache:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    <IfModule mod_manager.c>
        Listen 6666
        ManagerBalancerName mycluster
        <VirtualHost *:6666>
            <Location /mod_cluster_manager>
                SetHandler mod_cluster-manager
                Require ip 127.0.0.1
            </Location>
            EnableMCPMReceive
            <Directory />
                Require all granted
            </Directory>
        </VirtualHost>
    </IfModule>
    
  3. Configurar o WildFly para Mod_cluster: No arquivo domain.xml, configure o subsistema modcluster para que o WildFly envie informações de cada nó para o Mod_cluster no Apache:

    1
    2
    3
    4
    5
    6
    7
    8
    
    <subsystem xmlns="urn:jboss:domain:modcluster:2.0">
        <mod-cluster-config advertise-socket="modcluster" security-key="myKey">
            <dynamic-load-provider>
                <load-metric type="cpu"/>
                <load-metric type="heap"/>
            </dynamic-load-provider>
        </mod-cluster-config>
    </subsystem>
    

Esse processo integra o Apache HTTP Server com o cluster do WildFly, distribuindo a carga entre os nós do cluster de forma eficiente.

12.5 Exemplo de Configuração e Teste de Alta Disponibilidade

  1. Iniciar o Domain Controller:
    • No WildFly, inicie o Domain Controller para carregar a configuração do cluster.
    1
    
    $JBOSS_HOME/bin/domain.sh
    
  2. Iniciar Nós do Cluster:
    • Em cada host controller, inicie as instâncias do WildFly.
  3. Testar a Replicação de Sessões:
    • Acesse a aplicação via balanceador de carga. Inicie uma sessão e observe se, ao parar uma instância, a sessão continua ativa em outra instância do cluster.

12.6 Monitoramento de um Cluster WildFly

Para monitorar o cluster, você pode utilizar ferramentas como Prometheus e Grafana para métricas e visualização.

  1. Configurar Prometheus JMX Exporter:
    • Adicione o jmx_prometheus_javaagent para expor as métricas JMX do WildFly e configurar o Prometheus para coletar essas métricas de cada nó do cluster.
  2. Configurar Grafana:
    • Utilize Grafana para visualizar as métricas do WildFly, como uso de CPU, memória e sessões ativas em cada nó.

Esse monitoramento é crucial para garantir que o cluster esteja operando conforme esperado e para ajustar configurações em tempo real.

Conclusão da Seção 12

Configurar um cluster no WildFly com balanceamento de carga proporciona alta disponibilidade e escalabilidade para ambientes de produção. Com essa configuração, o WildFly distribui automaticamente a carga entre os nós e replica sessões, garantindo continuidade de serviço em caso de falha.


13. Ajuste de Performance e Tuning do JBoss/WildFly

Objetivo

Otimizar a performance do WildFly para que o servidor funcione de forma eficiente em ambientes de produção, lidando com altos volumes de carga. Nesta seção, exploraremos configurações de memória, otimização de uso do garbage collector, ajustes de cache e outros parâmetros que impactam diretamente o desempenho do servidor.

13.1 Configuração de Memória

A alocação de memória é fundamental para o desempenho do WildFly, especialmente para aplicações com alto consumo de memória.

Ajuste de Parâmetros de Memória no standalone.conf ou domain.conf

No WildFly, as configurações de memória são definidas nos arquivos de configuração do Java (standalone.conf para modo standalone e domain.conf para modo domain). Abra o arquivo e edite as seguintes opções:

1
JAVA_OPTS="-Xms2048m -Xmx4096m"
  • -Xms: Define a memória inicial para a JVM (ex.: 2048 MB).
  • -Xmx: Define o limite máximo de memória para a JVM (ex.: 4096 MB).

Essas configurações devem ser ajustadas com base na quantidade de RAM disponível no servidor.

13.2 Configuração do Garbage Collector

O Garbage Collector (GC) gerencia a alocação e liberação de memória na JVM. Para otimizar o desempenho, é importante escolher um coletor de lixo adequado para o perfil de carga do servidor.

Coletor de Lixo G1 (G1GC)

O G1GC é recomendado para aplicações que exigem alta disponibilidade, pois ele realiza coletas de forma mais previsível e com pausas menores.

  1. No arquivo standalone.conf ou domain.conf, adicione as opções para habilitar o G1GC:

    1
    
    JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
    
  2. MaxGCPauseMillis: Define o tempo máximo de pausa desejado durante a coleta, em milissegundos. Esse valor pode ser ajustado conforme necessário para o balanceamento entre desempenho e consumo de memória.

Alternativa: Z Garbage Collector (ZGC)

Para JVMs com versão 11 ou superior, o ZGC é uma opção de coleta de lixo de baixa latência, especialmente útil em sistemas de grande escala.

1
JAVA_OPTS="$JAVA_OPTS -XX:+UseZGC"

O ZGC é projetado para reduzir significativamente o tempo de pausa de coleta, melhorando a experiência em sistemas com alto tráfego.

13.3 Otimização de Conexões JDBC

O desempenho da aplicação é fortemente impactado pela forma como as conexões com o banco de dados são gerenciadas. Ajustes no pool de conexões ajudam a garantir que as conexões estejam sempre disponíveis quando necessárias.

Configuração do Pool de Conexões

  1. Tamanho do Pool: O ajuste do tamanho do pool é feito no standalone.xml ou domain.xml, dependendo do modo. Abaixo está um exemplo de configuração de datasource com pool otimizado:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <datasource jndi-name="java:/MyDS" pool-name="MyDS">
        <connection-url>jdbc:mysql://localhost:3306/meubanco</connection-url>
        <driver>mysql</driver>
        <security>
            <user-name>usuario</user-name>
            <password>senha</password>
        </security>
        <pool>
            <min-pool-size>10</min-pool-size>
            <max-pool-size>50</max-pool-size>
        </pool>
    </datasource>
    
  2. Tamanho do Pool:

    • min-pool-size: Define o número mínimo de conexões ativas. Ajuste para garantir que conexões estejam sempre disponíveis.
    • max-pool-size: Define o número máximo de conexões simultâneas. Ajuste para evitar saturação e garantir que o servidor possa lidar com picos de tráfego.

Esses valores devem ser ajustados com base no número médio de usuários e na carga esperada.

13.4 Configuração de Cache

A configuração de cache é essencial para o desempenho de aplicações que demandam processamento intenso de dados.

Ajuste do Cache de Sessão (Infinispan)

Infinispan é o provedor de cache distribuído padrão do WildFly, usado para armazenar dados de sessão e melhorar o desempenho.

  1. Configuração do Cache de Sessão no standalone.xml:

    1
    2
    3
    4
    5
    
    <subsystem xmlns="urn:jboss:domain:infinispan:8.0">
        <cache-container name="web" default-cache="local">
            <local-cache name="sessions"/>
        </cache-container>
    </subsystem>
    
  2. Configurações Adicionais:

    • Você pode ajustar o modo para distributed ou replicated dependendo das necessidades de escalabilidade e replicação do cache.
    • Cache distribuído é recomendado para clusters.

Ajuste do Cache de Entidades (JPA)

Para otimizar o desempenho do JPA, configure o cache de entidades:

1
2
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.infinispan.hibernate.cache.v53.InfinispanRegionFactory"/>

Essas configurações otimizam o acesso a dados em cache, reduzindo a necessidade de acessar o banco de dados com frequência.

13.5 Tuning de Threads

A configuração de threads é importante para controlar o número de requisições simultâneas que o servidor pode processar.

Configuração de Pools de Threads

  1. Ajuste do Pool de Threads no standalone.xml:

    1
    2
    3
    4
    5
    
    <subsystem xmlns="urn:jboss:domain:threads:2.0">
        <thread-pool name="default" max-threads="200">
            <queue-length>100</queue-length>
        </thread-pool>
    </subsystem>
    
    • max-threads: Define o número máximo de threads que podem ser executados simultaneamente.
    • queue-length: Define o tamanho da fila de requisições para threads. Isso ajuda a gerenciar picos de tráfego.

Esses parâmetros são ajustados conforme a carga esperada, aumentando o número de threads para cenários de alta demanda.

13.6 Monitoramento de Desempenho

Para acompanhar o impacto das configurações de tuning e garantir que o WildFly esteja funcionando conforme o esperado, recomenda-se usar ferramentas de monitoramento, como:

  • Prometheus/Grafana: Para monitoramento de métricas e geração de gráficos de uso de CPU, memória, pool de conexões e tempo de resposta.
  • VisualVM: Ferramenta de monitoramento que permite análise de heap e profiling para otimizar o uso de memória e desempenho do CPU.

Conclusão da Seção 13

O ajuste de performance do WildFly envolve um balanceamento cuidadoso de memória, gerenciamento de threads, garbage collection e configurações de cache. Essas práticas permitem que o servidor atenda a cargas de trabalho intensivas e forneça uma experiência de usuário estável e rápida em produção.


14. Automação e Deploy Contínuo com JBoss/WildFly

Objetivo

Implementar práticas de Integração Contínua (CI) e Deploy Contínuo (CD) com o JBoss/WildFly para automatizar o deploy e atualização de aplicações. Essa abordagem permite integração de código frequente, testes automáticos e entregas rápidas, resultando em maior agilidade no desenvolvimento e estabilidade em produção.

14.1 Ferramentas de CI/CD Compatíveis com WildFly

Para configurar um pipeline de CI/CD com o WildFly, é comum usar ferramentas como Jenkins, GitLab CI, GitHub Actions ou Azure DevOps. Essas plataformas oferecem integrações e plugins que facilitam o build, teste e deploy automático de aplicações.

14.2 Configuração do Pipeline CI/CD para WildFly

Um pipeline típico de CI/CD envolve as seguintes etapas:

  1. Build: Compilar o código da aplicação.
  2. Testes: Executar testes automatizados.
  3. Deploy: Automatizar o deploy da aplicação no servidor WildFly.

Vamos detalhar o processo usando um exemplo com Jenkins.

14.3 Configurando o Jenkins para Deploy Automático no WildFly

Passo 1: Configuração do Ambiente no Jenkins

  1. Instalar o Plugin de Deploy do WildFly:
    • No Jenkins, vá para Gerenciar Jenkins > Gerenciar Plugins.
    • Busque por Deploy to WildFly Plugin e instale-o.
  2. Configurar as Credenciais:
    • Em Gerenciar Jenkins > Gerenciar Credenciais, adicione as credenciais do usuário administrativo do WildFly, que será usado para conectar-se ao servidor durante o deploy.

Passo 2: Criar um Job de Build e Deploy

  1. Configurar o Job:
    • Crie um novo Pipeline ou Freestyle Project em Jenkins.
    • Na seção Código-fonte, conecte o projeto ao repositório Git da aplicação.
  2. Build da Aplicação:
    • Na seção Build, adicione um comando de build, como o Maven, para compilar o projeto e gerar o artefato .war:

      1
      
      mvn clean package
      
  3. Deploy no WildFly:
    • Adicione uma etapa de pós-build (post-build) para realizar o deploy no WildFly.
    • Selecione a opção Deploy to WildFly e configure:
      • Nome do Artefato: Caminho do .war gerado (por exemplo, target/minha-aplicacao.war).
      • Endereço do Servidor: IP ou hostname do WildFly.
      • Porta: 9990 (porta padrão do console de administração).
      • Credenciais: Selecione as credenciais do WildFly configuradas anteriormente.

Exemplo de Pipeline Script em Jenkins

Para pipelines de CI/CD baseados em scripts, você pode usar o Pipeline as Code do Jenkins. Abaixo está um exemplo de script que compila e realiza o deploy automaticamente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Compilando o projeto...'
                sh 'mvn clean package'
            }
        }
        stage('Deploy to WildFly') {
            steps {
                echo 'Realizando deploy no WildFly...'
                deploy adapters: [[$class: 'WildflyAdapter',
                                  credentialsId: 'wildfly-credentials-id',
                                  url: 'http://wildfly-server:9990']],
                       contextPath: 'minha-aplicacao',
                       war: 'target/minha-aplicacao.war'
            }
        }
    }
}

14.4 Deploy Automático com GitLab CI/CD

O GitLab CI/CD é outra ferramenta popular para deploy contínuo. No GitLab, você define o pipeline no arquivo .gitlab-ci.yml.

Exemplo de Configuração .gitlab-ci.yml

Aqui está um exemplo de configuração de CI/CD para o GitLab:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
stages:
  - build
  - deploy

build:
  stage: build
  script:
    - echo "Building the project..."
    - mvn clean package

deploy:
  stage: deploy
  script:
    - echo "Deploying to WildFly..."
    - curl -u "user:password" -X POST "http://wildfly-server:9990/management" \
      -d '{"operation":"add", "address":[{"deployment":"minha-aplicacao.war"}], "content":[{"archive":true, "url":"file:///path/to/minha-aplicacao.war"}]}'

Este exemplo usa curl para fazer o deploy, aproveitando a API de gerenciamento do WildFly.

14.5 Deploy Contínuo com GitHub Actions

O GitHub Actions também permite configurar pipelines CI/CD diretamente no repositório do GitHub. Aqui está um exemplo de workflow para deploy automático no WildFly:

Exemplo de Configuração do GitHub Actions

No repositório GitHub, crie o arquivo .github/workflows/deploy.yml com o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
name: Deploy to WildFly

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository
        uses: actions/checkout@v2

      - name: Set up JDK 11
        uses: actions/setup-java@v2
        with:
          java-version: '11'

      - name: Build with Maven
        run: mvn clean package

      - name: Deploy to WildFly
        run: |
          curl -u "user:password" -X POST "http://wildfly-server:9990/management" \
            -d '{"operation":"add", "address":[{"deployment":"minha-aplicacao.war"}], "content":[{"archive":true, "url":"file:///path/to/minha-aplicacao.war"}]}'

Esse workflow será acionado quando houver um push na branch main, realizando o build e deploy da aplicação.

14.6 Automação de Rollback

Para uma estratégia de CI/CD mais robusta, é útil configurar um mecanismo de rollback em caso de falha no deploy. No WildFly, isso pode ser feito usando a CLI para remover o deploy com falha e restaurar a versão anterior.

Exemplo de Rollback com CLI

  1. Script para Rollback: Crie um script .cli que faça o undeploy e reimplemente a versão anterior:

    connect
    undeploy minha-aplicacao.war
    deploy /path/to/old-version/minha-aplicacao.war
    quit
    
  2. Automatizar Rollback no CI/CD:

    • No pipeline, inclua uma etapa condicional que execute o script de rollback em caso de falha no deploy.

Conclusão da Seção 14

Automatizar o deploy no WildFly com ferramentas de CI/CD como Jenkins, GitLab e GitHub Actions torna o processo mais ágil e seguro, permitindo entregas rápidas e redução de erros manuais. Com um pipeline bem configurado, você pode realizar deploys e rollbacks automaticamente, mantendo um fluxo contínuo de atualizações.


15. Backup e Recuperação de Configurações do Servidor

Objetivo

Implementar práticas de backup e recuperação para proteger as configurações e dados do JBoss/WildFly, garantindo a continuidade e recuperação rápida em caso de falhas. Este processo envolve o backup dos arquivos de configuração, deployments, e logs essenciais do servidor.

15.1 Componentes Essenciais para Backup

No WildFly, os componentes críticos que devem ser incluídos no backup são:

  1. Arquivos de Configuração:
    • standalone.xml ou domain.xml: Contém as configurações principais do servidor, como subsistemas, datasources, segurança e clusters.
    • host.xml (somente no Domain Mode): Define configurações específicas para cada host no cluster.
  2. Deployments:
    • O diretório standalone/deployments (modo standalone) ou domain/deployments (modo domain) contém os arquivos .war, .ear, e outros deployments de aplicação.
  3. Logs do Servidor:
    • O diretório standalone/log ou domain/log contém logs do servidor, úteis para auditoria e diagnóstico de problemas.
  4. Diretório de Dados:
    • O diretório standalone/data ou domain/data armazena dados temporários e caches de sessão que podem ser necessários para restaurar o estado das aplicações.

15.2 Realizando o Backup Manualmente

Abaixo estão os passos para realizar um backup manual dos componentes essenciais do WildFly.

  1. Parar o Servidor WildFly:
    • Antes de iniciar o backup, é recomendável parar o servidor para evitar inconsistências nos arquivos.
    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect command=:shutdown
    
  2. Copiar os Diretórios e Arquivos para Backup:
    • Use o comando cp ou rsync para copiar os arquivos e diretórios para um local de backup.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    BACKUP_DIR=/caminho/para/backup/$(date +%Y%m%d)
    mkdir -p $BACKUP_DIR
    
    # Backup dos arquivos de configuração
    cp -r $JBOSS_HOME/standalone/configuration $BACKUP_DIR
    
    # Backup dos deployments
    cp -r $JBOSS_HOME/standalone/deployments $BACKUP_DIR
    
    # Backup dos logs
    cp -r $JBOSS_HOME/standalone/log $BACKUP_DIR
    
    # Backup dos dados
    cp -r $JBOSS_HOME/standalone/data $BACKUP_DIR
    
  3. Armazenar o Backup em Local Seguro:
    • Movimente o backup para um local seguro, como um servidor de backup, armazenamento em nuvem ou uma unidade externa.

15.3 Automatizando o Backup com um Script

Para facilitar o processo, você pode automatizar o backup com um script bash que poderá ser agendado usando o cron.

Exemplo de Script de Backup

Crie um script wildfly_backup.sh com o conteúdo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash

# Configurações
JBOSS_HOME="/opt/wildfly"
BACKUP_DIR="/backup/wildfly/$(date +%Y%m%d)"
LOG_FILE="/backup/wildfly/backup.log"

# Criar diretório de backup
mkdir -p $BACKUP_DIR

# Parar o servidor WildFly
echo "Parando o servidor WildFly..." | tee -a $LOG_FILE
$JBOSS_HOME/bin/jboss-cli.sh --connect command=:shutdown

# Backup dos componentes essenciais
echo "Iniciando backup dos arquivos de configuração..." | tee -a $LOG_FILE
cp -r $JBOSS_HOME/standalone/configuration $BACKUP_DIR

echo "Backup dos deployments..." | tee -a $LOG_FILE
cp -r $JBOSS_HOME/standalone/deployments $BACKUP_DIR

echo "Backup dos logs..." | tee -a $LOG_FILE
cp -r $JBOSS_HOME/standalone/log $BACKUP_DIR

echo "Backup dos dados..." | tee -a $LOG_FILE
cp -r $JBOSS_HOME/standalone/data $BACKUP_DIR

# Reiniciar o servidor
echo "Reiniciando o servidor WildFly..." | tee -a $LOG_FILE
$JBOSS_HOME/bin/standalone.sh &

echo "Backup concluído em $(date)" | tee -a $LOG_FILE

Agendar o Script com Cron

Para executar o script automaticamente todos os dias, adicione-o ao crontab:

1
crontab -e

Adicione a seguinte linha para executar o script de backup diariamente às 2h da manhã:

1
0 2 * * * /caminho/para/wildfly_backup.sh

15.4 Recuperação do Backup

Para restaurar o servidor a partir de um backup, siga estes passos:

  1. Parar o Servidor WildFly:
    • Antes de restaurar os arquivos, pare o servidor para garantir que não haja conflitos.
    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect command=:shutdown
    
  2. Restaurar os Arquivos de Configuração:
    • Copie os arquivos de backup para os diretórios originais.
    1
    2
    3
    4
    5
    
    RESTORE_DIR=/caminho/para/backup/20231010
    cp -r $RESTORE_DIR/configuration/* $JBOSS_HOME/standalone/configuration/
    cp -r $RESTORE_DIR/deployments/* $JBOSS_HOME/standalone/deployments/
    cp -r $RESTORE_DIR/log/* $JBOSS_HOME/standalone/log/
    cp -r $RESTORE_DIR/data/* $JBOSS_HOME/standalone/data/
    
  3. Reiniciar o Servidor:
    • Após restaurar os arquivos, reinicie o servidor.
    1
    
    $JBOSS_HOME/bin/standalone.sh &
    

15.5 Backup e Recuperação Automáticos de Configurações via CLI

Você também pode usar a CLI do WildFly para exportar as configurações diretamente para um arquivo .xml, o que pode ser útil para realizar backups de configuração sem parar o servidor.

Backup de Configuração via CLI

  1. Exportar a Configuração:

    1
    
    $JBOSS_HOME/bin/jboss-cli.sh --connect --command=":read-config-as-xml" > /backup/wildfly/standalone-config-$(date +%Y%m%d).xml
    
  2. Recuperar a Configuração:

    • Para restaurar, substitua o conteúdo do arquivo de configuração principal (standalone.xml) pelo backup exportado.

15.6 Melhores Práticas para Backup e Recuperação

  • Agende Backups Regulares: Configure backups automáticos pelo menos uma vez por dia em ambientes críticos.
  • Teste os Backups Periodicamente: Verifique regularmente a integridade dos backups e execute simulações de recuperação para garantir que os dados possam ser restaurados.
  • Armazene Backups em Local Externo: Salve os backups em um local remoto ou em nuvem para evitar perdas em caso de falhas de hardware no servidor principal.
  • Versionamento de Configuração: Utilize sistemas de controle de versão, como Git, para manter um histórico das configurações do WildFly.

Conclusão da Seção 15

A implementação de um sistema de backup e recuperação confiável é essencial para garantir a continuidade dos serviços no JBoss/WildFly. Com práticas de backup automatizado e restauração, você pode minimizar o impacto de falhas e manter o ambiente de produção seguro e resiliente.


Conclusão

A administração do JBoss/WildFly envolve um equilíbrio entre configurações detalhadas e monitoramento constante para garantir alta disponibilidade e desempenho. Neste guia, exploramos todos os aspectos necessários para tirar o máximo proveito dessa poderosa plataforma de servidor de aplicações. Desde a configuração inicial e deploy de aplicações até segurança, tuning de performance e integração com pipelines de CI/CD, agora você está equipado com as melhores práticas para otimizar e proteger seu ambiente WildFly. Com essas configurações, o servidor estará preparado para lidar com os desafios de produção, oferecendo uma base sólida para a execução de aplicações corporativas de forma estável e escalável.


This post is licensed under CC BY 4.0 by the author.