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
- Introdução ao JBoss/WildFly
- Instalação e Configuração Inicial do JBoss/WildFly
- Estrutura de Diretórios e Configuração do Servidor
- Modos de Operação: Standalone e Domain Mode
- Deploy de Aplicações no JBoss/WildFly
- Administração e Gerenciamento via Console Web
- Administração com a CLI do JBoss/WildFly
- Configuração de Datasources e Conexões com Banco de Dados
- Gerenciamento de Segurança e Controle de Acesso
- Configuração de SSL/TLS para Comunicação Segura
- Logging e Monitoramento do Servidor
- Configuração de Cluster e Balanceamento de Carga
- Ajuste de Performance e Tuning do JBoss/WildFly
- Automação e Deploy Contínuo com JBoss/WildFly
- 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
- Acesse o site oficial do WildFly para fazer o download da versão mais recente: https://www.wildfly.org/downloads/.
- Faça o download do arquivo tar.gz (exemplo:
wildfly-<versão>.Final.tar.gz
).
2.3 Instalação do WildFly
-
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
-
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).
-
Abra o arquivo
/etc/profile.d/wildfly.sh
para definir as variáveis de ambiente:1
sudo nano /etc/profile.d/wildfly.sh
-
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
-
Salve o arquivo e carregue as variáveis de ambiente:
1
source /etc/profile.d/wildfly.sh
-
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.
-
Para iniciar o servidor pela primeira vez, execute o comando:
1
$JBOSS_HOME/bin/standalone.sh
-
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
-
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.
-
Execute o script
add-user.sh
localizado no diretóriobin
do WildFly:1
$JBOSS_HOME/bin/add-user.sh
-
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.
-
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.
-
Abra o arquivo
standalone.xml
para edição:1
sudo nano $JBOSS_HOME/standalone/configuration/standalone.xml
-
Localize o elemento
<socket-binding-group>
e altere a porta HTTP:1
<socket-binding name="http" port="8081"/>
-
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:
-
Definindo Perfis no
domain.xml
: No arquivodomain.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. -
Configurando o
host.xml
para Vários Servidores: No arquivohost.xml
, você pode definir os servidores que rodarão no host atual, suas interfaces de rede e o perfil que cada servidor usará. -
Iniciando o Servidor em Modo Domain: Para iniciar o WildFly em modo Domain, use o comando:
1
$JBOSS_HOME/bin/domain.sh
-
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
.
- Coloque o arquivo da aplicação no diretório de deploy:
1
cp minha-aplicacao.war $JBOSS_HOME/standalone/deployments/
-
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óriostandalone/log
. - 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.
- Acesse o console de administração:
1
http://localhost:9990
-
Após fazer login, vá para Deployments > Manage Deployments e clique em Add.
-
Clique em Choose File, selecione o arquivo da aplicação (
.war
,.ear
, ou.jar
), e depois em Next para iniciar o deploy. - 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.
- Inicie a CLI conectando-se ao servidor:
1
$JBOSS_HOME/bin/jboss-cli.sh --connect
- Use o comando
deploy
para fazer o deploy da aplicação:1
deploy /caminho/para/minha-aplicacao.war
- Para remover o deploy da aplicação:
1
undeploy minha-aplicacao.war
- 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
.
- Conecte-se ao servidor pela CLI:
1
$JBOSS_HOME/bin/jboss-cli.sh --connect
- Execute o comando de deploy:
1
deploy /opt/deploy/minha-aplicacao.war
- 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
- 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
).
- No navegador, digite:
- 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:
- Acessar Deployments:
- Navegue para Deployments > Manage Deployments.
- 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.
- Clique em Add e selecione o arquivo da aplicação (
- 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
- Acesse Configuration > Subsystems > Datasources.
- Clique em Add para adicionar um novo datasource.
- 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.
- Alterar Porta HTTP:
- Acesse Configuration > Subsystems > Web > HTTP e altere a porta padrão, se necessário.
- 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:
- Clique em Subsystems > Web > HTTP para monitorar as conexões HTTP e ver as sessões ativas.
- 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
-
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
-
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
-
Crie um arquivo
deploy-script.cli
com o seguinte conteúdo:1 2 3
connect deploy /caminho/para/minha-aplicacao.war quit
-
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:
-
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
-
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:
-
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
-
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
- Acesse o Console de Administração:
- Abra o console no navegador:
1
http://localhost:9990
- Faça login com suas credenciais.
- Abra o console no navegador:
- Adicionar o Datasource:
- Navegue até Configuration > Subsystems > Datasources.
- Clique em Add e escolha o tipo de datasource (por exemplo, JDBC).
- 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.
- Defina o JNDI Name (ex.:
- 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:
-
Inicie a CLI e Conecte-se ao Servidor:
1
$JBOSS_HOME/bin/jboss-cli.sh --connect
-
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
-
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
-
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:
- Instalar via Console:
- Em Configuration > Subsystems > Datasources > JDBC Drivers, clique em Add e carregue o driver.
- Instalar Manualmente:
- Copie o arquivo
.jar
do driver JDBC para o diretóriostandalone/deployments
.
- Copie o arquivo
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
.
- Criar um Usuário Administrativo:
-
No terminal, execute o script
add-user.sh
localizado no diretóriobin
do WildFly:1
$JBOSS_HOME/bin/add-user.sh
-
- Escolha o Tipo de Usuário:
- Escolha Management User para criar um usuário administrativo.
- 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.
- 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
, eOperator
, que determinam os níveis 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
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.
- Criar um Usuário de Aplicação:
- Execute o script
add-user.sh
e escolha Application User quando solicitado.
- Execute o script
- 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.
- Ao criar o usuário, você poderá adicionar grupos (ex.:
- 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
- No arquivo
standalone.xml
, localize a seção<security-realm>
. -
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:
-
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>
-
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
- 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
- Configurar o Keystore no WildFly:
-
No
standalone.xml
, localize a seção do subsistema deweb
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>
-
- 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"/>
-
- 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:
- Crie Usuários Administrativos e de Aplicação utilizando o
add-user.sh
. - Configure um Realm de Aplicação para autenticação em um arquivo ou LDAP.
- Habilite SSL/TLS para conexões seguras.
- 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:
- Gerar um Certificado Autoassinado (para desenvolvimento e testes).
- 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
-
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”. -
Verificar o Certificado no Keystore:
1
keytool -list -v -keystore /path/to/keystore.jks
-
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.
-
Configurar o Security Realm com SSL:
Abra o arquivo
standalone.xml
e adicione umsecurity-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.
-
Configurar o Socket HTTPS:
Ainda no
standalone.xml
, configure umsocket-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.
-
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
- 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
- No navegador, acesse o console de administração via HTTPS para verificar se a configuração está funcionando:
- 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.
-
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>
-
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:
- Gerar e Configurar o Keystore usando o
keytool
. - Configurar o Security Realm e o HTTPS Listener no
standalone.xml
. - 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.
-
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>
-
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>
-
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>
-
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
-
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"] } }
-
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
-
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. -
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:
- Configuração do Logger:
- Defina loggers específicos para cada subsistema relevante (por exemplo,
com.myapp
).
- Defina loggers específicos para cada subsistema relevante (por exemplo,
- Configuração do File Handler Rotativo:
- Configure o
periodic-rotating-file-handler
para gerar logs diários.
- Configure o
- 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.
- Domain Controller: Gerencia a configuração de todos os servidores do cluster.
- 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.
- 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>
- Infinispan é o mecanismo de cache e replicação de sessão usado pelo WildFly. No
- 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>
- O
- Configuração de Socket Binding para Comunicação entre Nós:
- Configure o
<socket-binding-group>
nodomain.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>
- Configure o
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.
-
Instalar o Mod_cluster: No Apache HTTP Server, instale o módulo Mod_cluster.
1
sudo yum install mod_cluster
-
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>
-
Configurar o WildFly para Mod_cluster: No arquivo
domain.xml
, configure o subsistemamodcluster
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
- Iniciar o Domain Controller:
- No WildFly, inicie o Domain Controller para carregar a configuração do cluster.
1
$JBOSS_HOME/bin/domain.sh
- Iniciar Nós do Cluster:
- Em cada host controller, inicie as instâncias do WildFly.
- 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.
- 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.
- Adicione o
- 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.
-
No arquivo
standalone.conf
oudomain.conf
, adicione as opções para habilitar o G1GC:1
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
-
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
-
Tamanho do Pool: O ajuste do tamanho do pool é feito no
standalone.xml
oudomain.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>
-
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.
-
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>
-
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
-
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:
- Build: Compilar o código da aplicação.
- Testes: Executar testes automatizados.
- 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
- Instalar o Plugin de Deploy do WildFly:
- No Jenkins, vá para Gerenciar Jenkins > Gerenciar Plugins.
- Busque por Deploy to WildFly Plugin e instale-o.
- 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
- 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.
- 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
-
- 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.
- Nome do Artefato: Caminho do
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
-
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
-
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:
- 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.
- Deployments:
- O diretório
standalone/deployments
(modo standalone) oudomain/deployments
(modo domain) contém os arquivos.war
,.ear
, e outros deployments de aplicação.
- O diretório
- Logs do Servidor:
- O diretório
standalone/log
oudomain/log
contém logs do servidor, úteis para auditoria e diagnóstico de problemas.
- O diretório
- Diretório de Dados:
- O diretório
standalone/data
oudomain/data
armazena dados temporários e caches de sessão que podem ser necessários para restaurar o estado das aplicações.
- O diretório
15.2 Realizando o Backup Manualmente
Abaixo estão os passos para realizar um backup manual dos componentes essenciais do WildFly.
- 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
- Copiar os Diretórios e Arquivos para Backup:
- Use o comando
cp
oursync
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
- Use o comando
- 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:
- 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
- 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/
- 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
-
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
-
Recuperar a Configuração:
- Para restaurar, substitua o conteúdo do arquivo de configuração principal (
standalone.xml
) pelo backup exportado.
- Para restaurar, substitua o conteúdo do arquivo de configuração principal (
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.