Ambiente de desenvolvimento SIGAA, SIGRH, SIPAC e SIGAdmin usando Docker
Manual do Repositório Ambiente Docker
Repositório GIT: https://git.ufla.br/sig-ufrn/ambiente-docker
Este repositório contém os arquivos necessários para construir e executar ambientes Docker do SIGUFRN com JBoss 5.1.0.GA. A estrutura separa ambientes de desenvolvimento, homologação e produção, além de manter recursos compartilhados e scripts auxiliares para testes.
Pré-requisitos
- Docker instalado.
- Docker Compose instalado.
- Git LFS instalado, pois o repositório versiona arquivos binários grandes, como JBoss, JDK e agentes de monitoramento.
sudo apt-get install git-lfs
git lfs install
Estrutura Geral
.
├── dev/ # Ambiente de desenvolvimento
├── homolog/ # Ambiente de homologação
├── prod/ # Ambiente de produção
├── resources/ # Recursos compartilhados para build e monitoramento
├── testes/ # Scripts de apoio para carga, rate limit e PostgreSQL
├── README.md # Visão inicial do repositório
└── MANUAL.md # Este manual
Ambientes Disponíveis
Ambiente | Diretório | Container principal | Uso esperado |
Desenvolvimento | dev/ | jboss_dev | Execução local com debug remoto e volumes de workspace. |
Homologação | homolog/ | jboss-homolog | Ambiente com JBoss e PostgreSQL no Compose. |
Produção | prod/ | jboss | Execução do JBoss em produção. |
Cada ambiente possui seus próprios arquivos Dockerfile, compose.yaml, env.conf, README.md, add_user_host.sh e limpar-jboss.sh.
Componentes Principais
- Dockerfile: constrói a imagem do JBoss customizado.
- compose.yaml: define containers, portas, volumes, rede, usuário e limites de memória.
- env.conf: sobrescreve ou define `JAVA_OPTS` usados pelo JBoss.
- add_user_host.sh: cria o usuário/grupo `sistemas` no host e ajusta permissões dos diretórios montados.
- limpar-jboss.sh: remove componentes desnecessários do JBoss durante o build da imagem.
- config/: contém arquivos copiados para dentro da imagem no momento do build.
- ear_sistemas/: contém EARs, WARs, JARs e arquivos de configuração das aplicações.
- logs/: recebe logs do JBoss montados a partir do container.
- resources/: contém recursos base, como `jboss-5.1.0.GA-jdk6.zip`, JDK e agentes de monitoramento.
Arquitetura Docker
O build usa duas etapas:
- Uma etapa builder, baseada em Alpine, que descompacta o JBoss, remove instâncias e bibliotecas desnecessárias e aplica arquivos de configuração.
- Uma etapa final, baseada em amazoncorretto:8-alpine, que recebe o JBoss preparado, instala dependências de fonte/timezone, cria o usuário sistemas e executa o servidor.
O JBoss é iniciado com:
/opt/jboss-5.1.0.GA/bin/run.sh -b 0.0.0.0 -p 8080 -c inst1
Diretórios Montados
Os ambientes montam diretórios do host dentro do container. Os principais são:
Host | Container | Finalidade |
./ear_sistemas | /opt/sistemas/ear | Artefatos das aplicações e configurações |
./pobox | /opt/pobox | Arquivos do SIAFI |
./usersOnline | /var/jboss_config/usersOnline | Dados de usuários online. |
./sistemas/comum | /var/sistemas/comum | Arquivos comuns dos sistemas. |
./comum | /var/comum | Arquivos comuns adicionais |
./logs | /opt/jboss-5.1.0.GA/server/inst1/log | Logs do JBoss. |
./fonts | /usr/share/fonts | Fontes usadas pelas aplicações. |
No ambiente dev, também há volumes para workspace local:
- /caminho/para/LIBS:/sig-ufrn/eclipse-workspace/LIBS/
- /caminho/para/SharedResources:/sig-ufrn/eclipse-workspace/SharedResources/
- /caminho/para/Sistema:/sig-ufrn/eclipse-workspace/Sistema/
Esses caminhos devem ser ajustados no dev/compose.yaml conforme a máquina do desenvolvedor.
Configuração Inicial
1. Copiar Recursos
Cada ambiente espera uma pasta `resources/` local para o build. Copie a pasta da raiz para o ambiente desejado:
cp -r ../resources ./
Execute o comando dentro de dev/, homolog/ ou prod/.
2. Configurar Fontes
A pasta fonts/ deve conter as fontes esperadas pelo Compose, incluindo arquivos como:
- Arimo-Italic-VariableFont_wght.ttf
- Arimo-VariableFont_wght.ttf
- Century Gothic.ttf
- EnglishTowne.ttf
- arquivos da pasta static/
3. Configurar ear_sistemas
A pasta ear_sistemas/ deve conter os artefatos e configurações necessários para o ambiente.
Para desenvolvimento, normalmente são necessários:
- libs.jar/remotehosts.properties
- libs.jar/ldap.properties
- postgres-ds.xml
- EARs opcionais, como admin.ear
Para homologação e produção, normalmente são necessários:
- libs.jar/remotehosts.properties
- libs.jar/ldap.properties
- postgres-ds.xml
- barramentoservicos.ear
- dto.jar
- servicos.ear
- shared.ear
- sigaa.ear
- sipac.ear
- sigrh.ear
- admin.ear
- sigpp.ear
- probe.war
4. Ajustar env.conf
Revise JAVA_OPTS conforme os recursos disponíveis na máquina.
Parâmetros importantes:
- -Xms: memória inicial da JVM.
- -Xmx: memória máxima da JVM.
- -XX:MetaspaceSize: tamanho inicial do Metaspace.
- -XX:MaxMetaspaceSize: tamanho máximo do Metaspace.
- -Dbr.ufrn.jboss.instanceName: nome da instância JBoss.
- -Dfile.encoding=ISO-8859-1: encoding usado pela aplicação.
No dev, o debug remoto já fica habilitado na porta 8787.
Permissões
O container executa com o usuário `sistemas`.sistemas. Para evitar problemas de escrita nos volumes, crie o mesmo usuário/grupo no host e ajuste a propriedade dos diretórios montados.
Dentro do diretório do ambiente, execute:
```bash
sudo ./add_user_host.sh
```
O script cria UID/GID `8080`8080 e aplica `chown`chown nos diretórios:
- `comum`
- `ear_sistemas`
- `fonts`
- `logs`
- `pobox`
- `sistemas`
- `usersOnline`
- comum
- ear_sistemas
- fonts
- logs
- pobox
- sistemas
- usersOnline
No `dev/compose.yaml`,yaml, os argumentos de build atuais usam `TARGET_UID=1000`1000 e `TARGET_GID=1000`.1000. Ajuste esses valores ou o script conforme o UID/GID necessário no host.
##
Build da Imagem
Entre no diretório do ambiente desejado e execute:
```bash
docker compose build --no-cache
```
Alternativamente, sem Compose:
```bash
docker build -t sigufrn --progress=plain --no-cache .
```
Alterações em `Dockerfile`,Dockerfile, `config/` ou `limpar-jboss.sh`sh exigem novo build da imagem.
##
Execução
Entre no diretório do ambiente e suba os containers:
```bash
docker compose up -d
```
Para acompanhar os logs:
```bash
docker logs -f jboss_dev
```
Em homologação:
```bash
docker logs -f jboss-homolog
```
Em produção:
```bash
docker logs -f jboss
```
Para acessar o shell:
```bash
docker exec -it jboss_dev /bin/sh
```
Ou ajuste o nome do container conforme o ambiente.
Portas
| Porta | Serviço |
dev, |
|
|
| 8787 | Debug remoto |
| 15432 | PostgreSQL exposto no |
| 9404 | Métricas JMX |
| 4000 | Glowroot |
opcional | 8025 | Interface |
| 1025 | SMTP |
|
| Dozzle |
##
Ambiente de Desenvolvimento
O ambiente `dev/` usa a imagem `ufla/jboss-5.1.0.ga-dev:2.1.0`0 e expõe a porta `8787`8787 para debug remoto.
Para configurar o debug no Eclipse:
1.
- Acesse
`Run > Debug Configurations...`.2. - Crie uma configuração em
`Remote JavaApplication`Application.3. - Use
`localhost`localhost ou`127.0.0.1`1 como host.4. - Use a porta
`8787`.5.8787. - Clique em
`Apply`Apply e depois em`Debug`Debug.
O `dev/compose.yaml`yaml também contém blocos comentados para MailPit e Dozzle.
###
MailPit
Para interceptar e-mails, descomente o serviço `mailpit`mailpit no `dev/compose.yaml`yaml e configure a aplicação para usar:
-
- host:
`mailpit-sigufrn`-sigufrn - porta SMTP:
`1025`-1025 - interface web:
`http://127.0.0.1:8025/`
###
Dozzle
Para visualizar logs pelo navegador, descomente o serviço `dozzle`dozzle no `dev/compose.yaml`yaml e acesse:
```text
http://127.0.0.1:8079/
```
##
Ambiente de Homologação
O ambiente `homolog/` sobe dois serviços:
-
- `jboss`, com container `jboss-homolog`.
- - `postgres`, com container `postgres`.
O PostgreSQL usa a imagem `postgres:18-alpine`, volume Docker `pg_data` e arquivo `postgres-env.conf`.
Revise principalmente:
```conf
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=postgres
POSTGRES_HOST_AUTH_METHOD=md5
```
Não mantenha senha padrão em ambiente compartilhado.
##
Ambiente de Produção
O ambiente `prod/` sobe somente o serviço JBoss definido no `compose.yaml`.
Cuidados recomendados:
-
- Validar `env.conf` antes de subir o ambiente.
- - Validar permissões dos volumes antes do deploy.
- - Garantir que `ear_sistemas/` contenha os artefatos corretos da versão a ser publicada.
- - Não versionar logs, EARs, dados de runtime ou segredos.
- - Recriar o container em janelas controladas de manutenção.
Para recriar o container:
```bash
docker compose stop jboss
docker compose pull
docker compose up -d jboss --force-recreate
```
##
Observabilidade
O repositório contém agentes em `resources/monitoring/`:
-
- Glowroot para traces.
- - JMX Exporter para métricas Prometheus.
Para habilitar:
1.
- Copie `resources/monitoring/` para o ambiente desejado.
2. - Descomente o volume `./monitoring/:/opt/monitoring/` no `compose.yaml`.
3. - Exponha as portas `4000` e `9404` no `Dockerfile` e no `compose.yaml`.
4. - Descomente os agentes no `env.conf`.
As métricas do JMX Exporter ficam em `9404`. O arquivo padrão `resources/monitoring/jmx_exporter/config.yaml` usa autenticação básica com usuário `admin` e senha `admin`; altere antes de usar fora de ambiente local.
O Glowroot fica disponível em `4000`. No primeiro acesso, cadastre usuário e senha em `Administration > Users > Add new`.
##
Testes e Scripts de Apoio
###
Teste de Carga
Diretório: `testes/teste_carga/`
Simula vários usuários registrando ponto no SIGRH.
Configuração básica:
```bash
python3 -m venv venv
source venv/bin/activate
python3 -m pip install -r ./requirements.txt
cp .env.sample .env
```
Depois, ajuste o `.env` e configure usuários de teste no banco conforme o README do diretório.
###
Rate Limit
Diretório: `testes/ratelimit/`
Scripts disponíveis:
```bash
python3 teste-rate-limit.py
python3 teste-rate-limit-navegacao.py
```
###
Consultas PostgreSQL
Diretório: `testes/consultas_postgres/`
Contém SQL para salvar periodicamente consultas em execução no PostgreSQL.
Exemplo de execução:
```bash
export PGPASSWORD='password'
watch -n 1 psql -h 127.0.0.1 -d <bd> -U <user> -f salvar_consultas.sql
```
##
Arquivos Ignorados
O `.gitignore` exclui diretórios e arquivos de runtime, como:
-
- `dev/ear_sistemas/`, `homolog/ear_sistemas/`, `prod/ear_sistemas/`
- - `logs/`
- - `resources/` copiado para cada ambiente
- - `fonts/` por ambiente
- - `pobox/`, `usersOnline/`, `comum/`, `sistemas/comum/`
- - `.env` dos testes
- - ambientes virtuais Python
Isso evita versionar artefatos grandes, dados sensíveis, logs e arquivos específicos de máquina.
##
Fluxo Recomendado de Uso
Para configurar um ambiente do zero:
1.
- Entre no diretório do ambiente: `dev/`, `homolog/` ou `prod/`.
2. - Copie `../resources` para o diretório atual.
3. - Prepare `fonts/`.
4. - Prepare `ear_sistemas/` com EARs, WARs, JARs e arquivos de configuração.
5. - Ajuste `env.conf`.
6. - Ajuste volumes e portas no `compose.yaml`.
7. - Configure permissões com `sudo ./add_user_host.sh`.
8. - Gere a imagem com `docker compose build --no-cache`.
9. - Suba o ambiente com `docker compose up -d`.
10. - Valide logs com `docker logs -f <container>`.
##
Solução de Problemas
###
Erro de permissão em volumes
Execute novamente `sudo ./add_user_host.sh` no diretório do ambiente e confira se o UID/GID do container corresponde ao usuário do host.
###
Alteração em arquivos de `config/` não aparece no container
Arquivos de `config/` são copiados durante o build. Gere a imagem novamente com `docker compose build --no-cache`.
###
JBoss não encontra EARs ou arquivos de configuração
Confira se `ear_sistemas/` existe, se os arquivos foram copiados corretamente e se os volumes estão apontando para o caminho correto no `compose.yaml`.
###
Debug remoto não conecta no desenvolvimento
Confira se o container `jboss_dev` está em execução, se a porta `8787` está exposta e se o Eclipse usa `localhost:8787`.
###
Métricas ou traces não aparecem
Confira se os agentes foram copiados, se o volume `monitoring` está montado, se as portas foram expostas e se as linhas do `env.conf` foram descomentadas.