SUP:ServidorJava

De Wiki Unioeste NTI
(Diferença entre revisões)
Ir para: navegação, pesquisa
(Configuração para CORS no servidor Apache (balanceador) server1.midas.unioeste.br)
(Erro 412 Precondition Failed ao dar F5 em alguma página dos sistemas)
 
(9 edições intermediárias de um usuário não apresentadas)
Linha 49: Linha 49:
 
<pre>
 
<pre>
 
[Unit]
 
[Unit]
Description=Apache Tomcat Web Application Container                                           
+
Description=Tomcat
After=network.target                                                                          
+
After=network.target
                                                                                               
+
[Service]                                                                                     
+
Type=forking                                                                                   
+
                                                                                               
+
Environment=JAVA_HOME=/usr/lib/jvm/java-8-oracle/jre                                           
+
Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid                                     
+
Environment=CATALINA_HOME=/usr/local/tomcat                                                   
+
Environment=CATALINA_BASE=/usr/local/tomcat                                                   
+
  
Environment='CATALINA_OPTS=-Xss2M -Xms3072M -Xmx3072M -XX:MaxPermSize=1024M -server -d64'
+
[Service]
Environment='JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Duser.language=pt -Duser.region=BR -Duser.Timezone=GMT-3
+
Type=forking
-Djavax.net.ssl.trustStore=/usr/local/sistemas/cert/cacerts -Djavax.net.ssl.trustStorePassword=changeit
+
 
-Dcom.sun.jndi.ldap.object.disableEndpointIdentification=true'
+
User=root
                                                                                               
+
Group=root
ExecStart=/usr/local/tomcat/bin/startup.sh                                                    
+
 
ExecStop=/usr/local/tomcat/bin/shutdown.sh                                                    
+
Environment="JAVA_HOME=//usr/lib/jvm/java-1.8.0-openjdk-amd64"
                                                                                               
+
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
User=root                                                                                     
+
Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat-8.5.81"
Group=root                                                                                     
+
Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat-8.5.81"
UMask=0007                                                                                     
+
Environment="CATALINA_PID=/opt/tomcat/apache-tomcat-8.5.81/temp/tomcat.pid"
RestartSec=10                                                                                  
+
Environment="CATALINA_OPTS=-Xms512M -Xmx7168M -Xss1M -server -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=60"
Restart=always                                                                                
+
Environment='JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Duser.language=pt -Duser.region=BR -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2'
 +
 
 +
ExecStart=/opt/tomcat/apache-tomcat-8.5.81/bin/startup.sh
 +
ExecStop=/opt/tomcat/apache-tomcat-8.5.81/bin/shutdown.sh
 +
 
 +
RestartSec=10
 +
Restart=always
  
 
[Install]
 
[Install]
Linha 359: Linha 357:
 
= Configuração para CORS no servidor Apache (balanceador) server1.midas.unioeste.br =
 
= Configuração para CORS no servidor Apache (balanceador) server1.midas.unioeste.br =
 
* Essa configuração foi necessária para que o server1 pudesse aceitar requisições cross site vindas do servidor midas.unioeste.br
 
* Essa configuração foi necessária para que o server1 pudesse aceitar requisições cross site vindas do servidor midas.unioeste.br
* Deve-se instalar o módulo do Apache para lidar com cabeçalhos de requisição:  
+
* Deve-se instalar o módulo do Apache para lidar com cabeçalhos de requisição, através do comando: a2enmod headers
<pre>
+
        a2enmod headers
+
</pre>
+
 
* Deve-se editar o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf e inserir as seguintes configurações:
 
* Deve-se editar o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf e inserir as seguintes configurações:
 
<pre>
 
<pre>
Linha 383: Linha 378:
 
</pre>
 
</pre>
 
*Após fazer as alterações, reiniciar o serviço do Apache
 
*Após fazer as alterações, reiniciar o serviço do Apache
 +
= Servidores Tomcat reiniciando sozinhos =
 +
* Foi percebido, através da coluna status do sistema Deployer, que alguns servidores Tomcat estavam reiniciando sozinhos
 +
* Reinicializações vinha ocorrendo já a algum tempo, sendo que a investigação aconteceu em 25/06/2024
 +
* Possibilidades seriam de que a máquina virtual que hospeda o Tomcat tenha reiniciado, o que foi descartado ao fazer o comando uptime, que mostrou que o servidor estava ligado a vários dias
 +
* Outra possibilidade seria o Tomcat ter estourado memória e reiniciado, no entanto, ao investigar o catalina.out, não aparece nenhum erro
 +
* Investigando mais um pouco, descobriu-se que no arquivo de configuração do serviço /etc/systemd/tomcat.service existe uma propriedade chamada "Restart" que indica que o serviço deve ser reiniciado após parar
 +
* Através do comando journalctl -u tomcat -f pode-se verificar que realmente o serviço parou e foi reiniciado
 +
<pre>
 +
root@netsr-midasha08:/home/administrator# journalctl -u tomcat -f
 +
Jun 25 06:36:04 netsr-midasha08 systemd[1]: tomcat.service: Main process exited, code=killed, status=9/KILL
 +
Jun 25 06:36:05 netsr-midasha08 shutdown.sh[878325]: Tomcat stopped.
 +
Jun 25 06:36:05 netsr-midasha08 systemd[1]: tomcat.service: Failed with result 'oom-kill'.
 +
Jun 25 06:36:05 netsr-midasha08 systemd[1]: tomcat.service: Consumed 19h 19min 2.274s CPU time.
 +
Jun 25 06:36:15 netsr-midasha08 systemd[1]: tomcat.service: Scheduled restart job, restart counter is at 1.
 +
Jun 25 06:36:15 netsr-midasha08 systemd[1]: Stopped Tomcat.
 +
Jun 25 06:36:15 netsr-midasha08 systemd[1]: tomcat.service: Consumed 19h 19min 2.274s CPU time.
 +
Jun 25 06:36:15 netsr-midasha08 systemd[1]: Starting Tomcat...
 +
Jun 25 06:36:15 netsr-midasha08 startup.sh[878373]: Tomcat started.
 +
Jun 25 06:36:15 netsr-midasha08 systemd[1]: Started Tomcat.
 +
</pre>
 +
* Através do comando journalctl -xe foi possível verificar que o Ubuntu matou o processo do Tomcat, devido a falta de memória
 +
<pre>unattended-upgr invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
 +
</pre>
 +
* Fizemos a alteração do arquivo de inicialização do Tomcat, diminuindo o valor da memória máxima que pode ser alocada
 +
= Erro 412 Precondition Failed ao dar F5 em alguma página dos sistemas =
 +
* O erro é causado por <i>conditional requests</i> enviados no cabeçalho das requisições (p. ex. If-Modified-Since)
 +
* Para resolver, foi incluída na configuração do balanceador um comando que remove o header <b>Etag</b>, que é responsável pelo versionamento de itens em cache
 +
* Dessa forma, as <i>conditional requests</i> que lidam com o versionamento não são enviadas e o erro não acontece
 +
*A configuração foi feita no arquivo /etc/apache/mods-enabled/proxy_balancer.conf:
 +
<pre>
 +
<IfModule mod_headers.c>
 +
 +
#-----configuracao para que este server aceite requisicoes do midas.unioeste.br-----#
 +
SetEnvIf Origin "https://midas.unioeste.br$" AccessControlAllowOrigin=$0
 +
#SetEnvIf Origin "https://subpage\.allowed-origin\.com$" AccessControlAllowOrigin=$0
 +
 +
Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
 +
Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
 +
Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
 +
Header always set Access-Control-Allow-Credentials "true"
 +
 +
# Handle preflight requests
 +
SetEnvIf Request_Method OPTIONS OPTIONS_REQUEST
 +
Header always set Access-Control-Max-Age "86400" env=OPTIONS_REQUEST
 +
Header always set Content-Length "0" env=OPTIONS_REQUEST
 +
Header always set Content-Type "text/plain charset=UTF-8" env=OPTIONS_REQUEST
 +
 +
#desabilita header que controla a versão de itens em cache; por algum motivo, sistemas como deployer e sgps, arquivo virtual, apresentam erro 412 quando a Etag é setada
 +
Header unset Etag
 +
 +
</IfModule>
 +
</pre>

Edição atual tal como 17h32min de 1 de julho de 2024

VoltarVoltar a Página Inicial

Tabela de conteúdo

Diagrama da Arquitetura Atual

Servidores Wildfly300517.png

Arquitetura Atual em texto

IP	ALIAS	ENDEREÇO			PORTA	SERVIÇO VERS   SO
--------------------------------------------------------------------------
171	java1	(server1.midas.unioeste.br)	8080	Tomcat  8.5.15 16
						8081	Tomcat  8.5.15
--------------------------------------------------------------------------
172	java2	(cdn.unioeste.br)		80	apache         12
--------------------------------------------------------------------------
174	java4	        			8080	Tomcat  8.5.15 16
						8081	Tomcat  8.5.15
--------------------------------------------------------------------------
175	java5					8080	Tomcat  8.5.15 16
						8081	Tomcat  8.5.15
--------------------------------------------------------------------------
182	java6	(server2.midas.unioeste.br)	8080	Tomcat  8.5.15 16 
		master				8081	Tomcat  8.5.15 16
--------------------------------------------------------------------------
183	java7					8080	Tomcat  8.5.15 16
						8081	Tomcat  8.5.15
--------------------------------------------------------------------------
184	java8	(ws.midas.unioeste.br)		8080	Tomcat  8.5.5  12
--------------------------------------------------------------------------

Endereços de Gereciamento dos balanceadores

https://server1.midas.unioeste.br/balancer-manager/
https://server2.midas.unioeste.br/balancer-manager/

Endereço de Gerenciamento do Tomcat WS

https://ws.midas.unioeste.br/manager (servidor físico 170 foi descontinuado)

Passos para instalação de uma instância Tomcat (Ubuntu 16)

  • jdk 8 da Oracle está em D:\UNIOESTE\NTI - Documents\DDes\Desenvolvimento\Arquivos DDes\Desenvolvimento JAVA+EXTJS\jdk-8u202-linux-x64.tar.gz. Seguir os passos de instalação descritos no seguinte link: https://docs.datastax.com/en/jdk-install/doc/jdk-install/installOracleJdkDeb.html
  • baixar a última versão do Tomcat disponível no site http://tomcat.apache.org/ (atualmente usamos a 8.5.15)
  • extrair para a pasta /usr/local/tomcat (ou para tomcat2 se for a segunda instância)
  • alterar o dono da pasta para ROOT (chown root /usr/local/tomcat)
  • acessar a pasta /usr/local/tomcat/conf e editar o arquivo server.xml
    • caso seja a primeira instância, deve-se apenas alterar a seguinte tag, incluindo o atribuido jvmRoute: <Engine name="Catalina" defaultHost="localhost" jvmRoute="netsr-java01:server1"> (alterar conforme o nome da máquina)
    • caso seja a segunda instância, deve-se incrementar o número das portas 8005, 8080, 8009, 8443, ficando 8006, 8081, 8010, 8444 e também alterar o atributo jvmRoute, para que seja "netsr-java01:server2"
  • configurar no Ubuntu para que a instância possa ser iniciada ou parada com o comando systemctl
    • criar o arquivo /etc/systemd/system/tomcat.service com o seguinte conteúdo:
[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking

User=root
Group=root

Environment="JAVA_HOME=//usr/lib/jvm/java-1.8.0-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat/apache-tomcat-8.5.81"
Environment="CATALINA_HOME=/opt/tomcat/apache-tomcat-8.5.81"
Environment="CATALINA_PID=/opt/tomcat/apache-tomcat-8.5.81/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx7168M -Xss1M -server -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=60"
Environment='JAVA_OPTS=-Djava.net.preferIPv4Stack=true -Duser.language=pt -Duser.region=BR -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2'

ExecStart=/opt/tomcat/apache-tomcat-8.5.81/bin/startup.sh
ExecStop=/opt/tomcat/apache-tomcat-8.5.81/bin/shutdown.sh

RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
  • execute o comando para atualizar a lista de serviços no Ubuntu: systemctl daemon-reload
  • feito isso, o serviço do Tomcat poderá ser iniciado ou parado através dos comandos: systemctl start/stop/restart tomcat
  • por último, deve-se executar o seguinte comando para que o Tomcat seja iniciado na inicialização da máquina: sytemctl enable tomcat
  • para a segunda instância, deve-se seguir os mesmos passos, criando o arquivo /etc/systemd/system/tomcat2.service, não esquecendo de trocar os caminhos (trocar tomcat por tomcat2); o nome do serviço será tomcat2
  • para acessar o manager do Tomcat, deve:
    • editar o arquivo /usr/local/tomcat/conf/tomcat-users.xml e adicionar:
<role rolename="manager-gui"/>
<user username="umUsuario" password="umaSenha" roles="manager-gui,manager-status" />
  • editar o arquivo /usr/local/tomcat/webapps/manager/META-INF/context.xml e deixá-lo assim:
<Context antiResourceLocking="false" privileged="true" >
<!--
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
-->
</Context>
  • Criar mapeamento /usr/local/sistemas apontando para o cdn.unioeste.br
    • instalar pacote necessário: apt install nfs-common
    • criar pasta para montagem do diretório remoto: mkdir /media/sistemas_remoto
    • vi /etc/fstab e inserir: cdn.unioeste.br:/usr/local/sistemas /media/sistemas_remoto nfs rsize=8192,wsize=8192,timeo=14,intr
    • para testar o acesso: mount -t nfs -o rw cdn.unioeste.br:/usr/local/sistemas /media/sistemas_remoto/
    • criar link simbólico para poder acessar no caminho /usr/local/sistemas: ln -s /media/sistemas_remoto/ /usr/local/sistemas

Passos para configuração do balanceador Apache

  • instale o Apache (versão 2.4)
  • instale os módulos proxy_balancer e proxy_ajp (comando a2enmod nome_do_modulo)
  • edite o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf e altere conforme segue, lembrando de colocar somente os servidores que farão parte deste balanceador:
<IfModule mod_proxy_balancer.c>                                                                    
                                                                                                   
        # Balancer manager enables dynamic update of balancer members                              
        # (needs mod_status). Uncomment to enable.                                                 
        #                                                                                          
        <IfModule mod_status.c>                                                                    
           <Location /balancer-manager>                                                            
                SetHandler balancer-manager                                                        
                Order Deny,Allow                                                                   
                Deny from all                                                                      
                Allow from all                                                                     
                AuthType basic                                                                     
                AuthName "My_auth_name"                                                            
                AuthUserFile "/etc/apache2/passwd/passwords"                                       
                # Anonymous *                                                                      
                Require valid-user                                                                 
           </Location>                                                                             
        </IfModule>                                                                                
                                                                                                   
                                                                                                   
        <ifmodule mod_proxy_balancer.c>                                                            
                                                                                                   
                ProxyPass /balancer-manager !                                                      
                ProxyPass / balancer://server/ stickysession=JSESSIONID|jsessionid                 
                ProxyPassReverse / balancer://server/                                              
                <Proxy balancer://server>                                                          
                BalancerMember ajp://200.201.88.175:8009 loadfactor=1 route=netsr-java05:server1 TimeOut=3600   
                BalancerMember ajp://200.201.88.175:8010 loadfactor=1 route=netsr-java05:server2 TimeOut=3600   
                BalancerMember ajp://200.201.88.174:8009 loadfactor=1 route=netsr-java04:server1 TimeOut=3600   
                BalancerMember ajp://200.201.88.174:8010 loadfactor=1 route=netsr-java04:server2 TimeOut=3600   
                BalancerMember ajp://200.201.88.182:8009 loadfactor=1 route=netsr-java06:server1 TimeOut=3600   
                BalancerMember ajp://200.201.88.182:8010 loadfactor=1 route=netsr-java06:server2 TimeOut=3600   
                </proxy>                                                                           
                                                                                                   
        </ifmodule>                                                                                
                                                                                                   
                                                                                                   
</IfModule>                                                                                        
  • para que a url de status do balanceador funcione (/balancer-manager), deve-se criar um usuário, conforme segue:
mkdir /etc/apache2/passwd
/etc/apache2/passwd/passwords
htpasswd -c /etc/apache2/passwd/passwords admin
--insira a senha para o usuário admin, a qual será utilizada para acessar a url de gerenciamento
  • após estas configurações, reinicie o apache com o comando systemctl restart apache2
  • acesse a url de gerenciamento e verifique se os servidores balanceados estão listados (ex. de url: https://server1.midas.unioeste.br/balancer-manager)
  • altere o arquivo /etc/apache2/mods-enabled/mpm_worker.conf para permitir que o Apache receba um grande número de conexões simultâneas:
<IfModule mpm_worker_module>
        StartServers             8
        MinSpareThreads          256
        MaxSpareThreads          512
        ThreadLimit              1024
        ThreadsPerChild          256
        MaxRequestWorkers        4096
        MaxConnectionsPerChild   256
</IfModule>

Inclusão de novo servidor no sistema Deployer e no Balanceador

1. adicionar o servidor ao grupo de servidores REPORT no Deployer
- logar no servidor netsr-java01 (ou qualquer outro servidor, pois os arquivos são compartilhados)
- editar o arquivo /usr/local/sistemas/deployer/servers.txt
- adicionar uma linha para o novo servidor, no formato NOMEDOSERVER:PORTA;GRUPO (p. ex. netsr-java20.unioeste.br:8080;report
2. logar no sistema Deployer
- verificar se o novo servidor já está aparecendo no grupo de servidores correto
- clicar no botão DIF para listar as diferenças de apps deployados no servidor novo
- clicar no botão SYNC para sincronizar as diferenças e deixar fazer com que o server novo tenha os mesmos apps
- clicar no botão DIF para ver se ainda tem diferenças
3. adicionar o servidor ao grupo de servidores que faz parte do balanceador
- logar no servidor balanceador (p. ex., se for no balanceador de REPORT, logar no server1.midas.unioeste.br)
- editar o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf
- adicionar uma linha para o novo servidor na seção <Proxy> (p. ex. BalancerMember ajp://netsr-java20.unioeste.br:8009 loadfactor=1)
- reiniciar o apache
- logar no manager do balanceador e verificar se o novo servidor está sendo listado (p. ex. https://server1.midas.unioeste.br/balancer-manager)

Configuração para conexão com o AD usando SSL

  • Os passos abaixo podem ser feitos na máquina local e o arquivo resultante utilizado servidor
  • gerar certificado do servidor que é a Autoridade Certificadora (CA), no caso o NETSR-DMC01, com tipo 64; pode-se usar o próprio certificado que existe no navegador; gravar em uma pasta qualquer (p. ex. D:\\cert\\keystore.jks)
  • gerar a keystore, importando o certificado recém gerado
    • keytool -importcert -file D:\\cert\\certificado.cer -keystore D:\\cert\\keystore.jks
  • gerar path completo da cadeia de CAs existente no certificado
    • openssl s_client -host netsr-dmc02.unioeste.br -port 636 -prexit -showcerts
    • copiar e colar o resultado (a partir do ---) em D:\\cert\\unioeste.pem
  • importar este path completo para a keystore
    • keytool -import -alias gca -file D:\\cert\\unioeste.pem -keystore D:\\cert\\keystore.jks
  • copiar o arquivo keystore.jks para o servidor e utilizá-lo na conexão com o LDAP
  • reiniciar o serviço do Tomcat

Resolver problema de "Muitos arquivos abertos" (Too many open files)

Gerenciamento dos servidores Linux

  • descobrir os maiores arquivos do servidor: du -h /var | sort -n -r | head -n 10
  • verificar as portas que estão escutando no servidor:
netstat -atn # For tcp
netstat -aun # For udp
netstat -atun # For both
  • nos servidores que utilizam autenticação pelo AD, os usuários permitidos estão em um grupo; para saber qual o grupo, deve-se executar o comando:
root@netsr-linuxweb10:/etc/pam.d# vi login.group.allowed

Configuração de SSL no Apache

  • Adicionar regra no /etc/apache2/sites-enabled/000-default, na seção do VirtualHost *.80, para redirecionar do http para https
Redirecionar quando vier uma url específica:
RedirectMatch ^/pwmunioeste/(.*) https://midas.unioeste.br/pwmunioeste/$1
Página para testar site https: https://www.ssllabs.com


Adicionar certificado SSL no Java (Para servidor fazer requisições HTTPS)

O exemplo abaixo foi feito no servidor midas (170), adicionando o certificado dos correios para utilizar o serviço WSDL deles.

Entre na pasta que contém o arquivo de certificados cacerts

 cd /usr/lib/jvm/java-8-oracle/jre/lib/security

Gere o arquivo de certificado .cer referente ao domínio que deseja incluir

 echo -n | openssl s_client -connect apps.correios.com.br:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > correios.crt

Adicione o certificado gerado ao cacerts

 keytool -import -v -trustcacerts -alias apps.correios.com.br -file correios.crt -keystore cacerts -keypass changeit -storepass changeit -noprompt

Remova o arquivo temporário do certificado que já foi incluído

 rm correios.crt

Fonte: http://stackoverflow.com/questions/9619030/resolving-javax-net-ssl-sslhandshakeexception-sun-security-validator-validatore

Adicionar certificado P12 do PagSeguro)

Importar o certificado no formato P12 para o cacerts que está em /usr/local/sistemas/cert/

Entre na pasta que contém o arquivo de certificados cacerts

 cd /usr/local/sistemas/cert/

Importe o certificado

 keytool -v -importkeystore -srckeystore UnioestePixSandbox.p12 -srcstoretype PKCS12 -destkeystore cacerts -deststoretype JKS

Caso não funcione, pode ser que já existe algum outro certificado semelhante. Nesse caso, deve-se excluí-lo antes de importar. Para isso, pode-se listar os certificados já existentes, identificar o alias do certificado a ser removido e dar o comando para excluir.

Salva a lista para um arquivo temp.txt

  keytool -list -keystore cacerts > /home/administrator/temp.txt

Localize o certificado que deve ser excluído e faça o comando:

  keytool -delete -alias ALIAS -keystore cacerts

Como o certificado é carregado na pasta compartilhada pelos servidores, não é necessário instalar o certificado em cada servidor, pois todos usam o mesmo cacerts.

Links úteis

https://www.digitalocean.com/community/tutorials/how-to-install-apache-tomcat-8-on-ubuntu-16-04 https://devops.profitbricks.com/tutorials/how-to-install-and-configure-tomcat-8-on-ubuntu-1604/

Rotacionar logs do Tomcat

  • criar o arquivo /etc/logrotate.d/tomcat e inserir o seguinte conteúdo:
/opt/tomcat/apache-tomcat-8.5.81/logs/catalina.out {
        copytruncate
        daily
        rotate 7
        compress
        missingok
        size 10M
}
  • observar o caminho do log, para ter certeza de que está correto
  • para testar, execute o seguinte comando: logrotate --force --verbose /etc/logrotate.conf
  • se o servidor tiver outra instância de Tomcat, crie um novo arquivo com o nome tomcat2 e altere o caminho do log
  • referência: https://www.dicas-l.com.br/arquivo/utilizando_logrotate.php

Ajustes para rodar SADAU no servidor ws.midas.unioeste.br

  • instalar o JBoss 4.3.2, fazendo rodar como um serviço que inicia automaticamente
  • instalar as fontes para que os relatórios em Jasper funcionem:
sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer
  • Fazer deploy do projeto sadauplugin.war
    • rodar projeto no Eclipse
    • será gerado uma pasta com o nome do projeto
    • compacte o conteúdo dessa pasta para um arquivo sadauplugin.war
    • copie esse arquivo para a pasta \usr\local\jboss-4.2.3.GA\server\default\deploy
    • o JBoss fará o autodeploy do projeto
    • não esquecer de copiar o arquivo que possui as configurações de conexão com o banco
      • o arquivo sadauplugin-ds.xml deve ser copiado para a pasta deploy citadada acima
  • Atualmente é utilizado o mod_proxy para redirecionamento para as aplicações que rodam no Tomcat. O SADAU roda em Jboss 4.2.3.
  • Deve-se alterar o arquivo proxy.conf e deixá-lo encaminhando as requisições do sadauplugin para o servidor JBoss:
ProxyPass /sadauplugin http://localhost:8090/sadauplugin
ProxyPassReverse /sadauplugin http://localhost:8090/sadauplugin

ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
  • As demais requisições são encaminhadas normalmente para o Tomcat
  • Deve-se também habilitar o módulo do mod_proxy que reencaminha para servidores http:
a2enmod proxy_http

Exportação de certificado e utilização dele no servidor web php

  • Tivemos problema ao colocar um novo certificado nos servidores midas (midas.unioeste.br, server1.midas.unioeste.br, server3.midas.unioeste.br)
  • Nas chamadas das APIs de listagem de equipe e de cursos que o servidor php faz para os servidores midas, é utilizado https
  • Para que o servidor php confie no certificado dos servidores midas, é necessário exportar cada um dos certificados da cadeia dos servidores midas no formato X.509 na base 64

Exporta-certificado.png

  • Serão gerados arquivos com extensão .cer
  • Abra cada arquivo e coloque o conteúdo (que está na base 64) em um novo arquivo chamado cert.pem
  • Copie esse arquivo para a pasta /usr/lib/ssl/ do servidor php
  • Reinicie o serviço do Apache
  • Esse procedimento faz com que o Apache confie nos servidores que possuem os certificados públicos incluídos no arquivo cert.pem
  • Maiores detalhes em [3]

Corrigir timezone do Java

https://www.guiadojava.com.br/2019/11/nao-horario-de-verao.html

  • Logar no servidor que vai ser corrigido
  • Copiar de outro servidor o arquivo tzupdater.jar, ou então copiar da máquina local para o seu home no servidor
  • Se for copiar de outra máquina, o comando é o seguinte: scp administrator@netsr-java05:/home/local/UNIOESTENET/marcio.veronez/tzupdater.jar /home/administrator/

Aumentar o tempo de timeout do servidor Apache balanceador, para evitar que operações demoradas retornem erro

  • Editar o arquivo de configuração do Apache: vi /etc/apache2/apache2.conf
  • Editar a linha de configuração escrito Timeout=300 e inserir o valor desejado (p. ex. 900 segundos = 15 minutos)
  • Salvar e reiniciar o Apache

Configuração no resolv.conf dos servidores de aplicação

  • Configuração para que os servidores de aplicação se enxerguem somente pelo nome de máquina (necessário para o Deployer)
  • configurar o arquivo /etc/resolvconf/resolv.conf.d/base da seguinte forma:
nameserver 127.0.0.53
options edns0 trust-ad
#search .
domain unioeste.br
search unioeste.br
  • regerar o /etc/resolv.conf usando o comando resolvconf -u

Procedimentos para funcionar conexões TLS nos servidores

  • Liberar os servidores de aplicação para que possam fazer qualquer tipo de conexão, pois em 27/09/2023 descobrimos que nossos servidores não estavam conseguindo conectar no PagSeguro devido a uma regra no firewall Fortinet, que identificava as requisições como "shopping" e as bloqueava. *
  • Em 26/01/2024 alguns servidores não estavam com a conexão TLS funcionando. Tivemos que reiniciar eles para que voltassem a funcionar.

Configuração para CORS no servidor Apache (balanceador) server1.midas.unioeste.br

  • Essa configuração foi necessária para que o server1 pudesse aceitar requisições cross site vindas do servidor midas.unioeste.br
  • Deve-se instalar o módulo do Apache para lidar com cabeçalhos de requisição, através do comando: a2enmod headers
  • Deve-se editar o arquivo /etc/apache2/mods-enabled/proxy_balancer.conf e inserir as seguintes configurações:
# Set CORS headers
<IfModule mod_headers.c>
	SetEnvIf Origin "https://midas.unioeste.br$" AccessControlAllowOrigin=$0
	#SetEnvIf Origin "https://subpage\.allowed-origin\.com$" AccessControlAllowOrigin=$0

	Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
	Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
	Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
	Header always set Access-Control-Allow-Credentials "true"

	# Handle preflight requests
	SetEnvIf Request_Method OPTIONS OPTIONS_REQUEST
	Header always set Access-Control-Max-Age "86400" env=OPTIONS_REQUEST
	Header always set Content-Length "0" env=OPTIONS_REQUEST
	Header always set Content-Type "text/plain charset=UTF-8" env=OPTIONS_REQUEST
</IfModule>
  • Após fazer as alterações, reiniciar o serviço do Apache

Servidores Tomcat reiniciando sozinhos

  • Foi percebido, através da coluna status do sistema Deployer, que alguns servidores Tomcat estavam reiniciando sozinhos
  • Reinicializações vinha ocorrendo já a algum tempo, sendo que a investigação aconteceu em 25/06/2024
  • Possibilidades seriam de que a máquina virtual que hospeda o Tomcat tenha reiniciado, o que foi descartado ao fazer o comando uptime, que mostrou que o servidor estava ligado a vários dias
  • Outra possibilidade seria o Tomcat ter estourado memória e reiniciado, no entanto, ao investigar o catalina.out, não aparece nenhum erro
  • Investigando mais um pouco, descobriu-se que no arquivo de configuração do serviço /etc/systemd/tomcat.service existe uma propriedade chamada "Restart" que indica que o serviço deve ser reiniciado após parar
  • Através do comando journalctl -u tomcat -f pode-se verificar que realmente o serviço parou e foi reiniciado
root@netsr-midasha08:/home/administrator# journalctl -u tomcat -f
Jun 25 06:36:04 netsr-midasha08 systemd[1]: tomcat.service: Main process exited, code=killed, status=9/KILL
Jun 25 06:36:05 netsr-midasha08 shutdown.sh[878325]: Tomcat stopped.
Jun 25 06:36:05 netsr-midasha08 systemd[1]: tomcat.service: Failed with result 'oom-kill'.
Jun 25 06:36:05 netsr-midasha08 systemd[1]: tomcat.service: Consumed 19h 19min 2.274s CPU time.
Jun 25 06:36:15 netsr-midasha08 systemd[1]: tomcat.service: Scheduled restart job, restart counter is at 1.
Jun 25 06:36:15 netsr-midasha08 systemd[1]: Stopped Tomcat.
Jun 25 06:36:15 netsr-midasha08 systemd[1]: tomcat.service: Consumed 19h 19min 2.274s CPU time.
Jun 25 06:36:15 netsr-midasha08 systemd[1]: Starting Tomcat...
Jun 25 06:36:15 netsr-midasha08 startup.sh[878373]: Tomcat started.
Jun 25 06:36:15 netsr-midasha08 systemd[1]: Started Tomcat.
  • Através do comando journalctl -xe foi possível verificar que o Ubuntu matou o processo do Tomcat, devido a falta de memória
unattended-upgr invoked oom-killer: gfp_mask=0x1100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0
  • Fizemos a alteração do arquivo de inicialização do Tomcat, diminuindo o valor da memória máxima que pode ser alocada

Erro 412 Precondition Failed ao dar F5 em alguma página dos sistemas

  • O erro é causado por conditional requests enviados no cabeçalho das requisições (p. ex. If-Modified-Since)
  • Para resolver, foi incluída na configuração do balanceador um comando que remove o header Etag, que é responsável pelo versionamento de itens em cache
  • Dessa forma, as conditional requests que lidam com o versionamento não são enviadas e o erro não acontece
  • A configuração foi feita no arquivo /etc/apache/mods-enabled/proxy_balancer.conf:
 <IfModule mod_headers.c>

	#-----configuracao para que este server aceite requisicoes do midas.unioeste.br-----#
	SetEnvIf Origin "https://midas.unioeste.br$" AccessControlAllowOrigin=$0
	#SetEnvIf Origin "https://subpage\.allowed-origin\.com$" AccessControlAllowOrigin=$0

	Header always set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
	Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
	Header always set Access-Control-Allow-Headers "Content-Type, Authorization"
	Header always set Access-Control-Allow-Credentials "true"

	# Handle preflight requests
	SetEnvIf Request_Method OPTIONS OPTIONS_REQUEST
	Header always set Access-Control-Max-Age "86400" env=OPTIONS_REQUEST
	Header always set Content-Length "0" env=OPTIONS_REQUEST
	Header always set Content-Type "text/plain charset=UTF-8" env=OPTIONS_REQUEST

	#desabilita header que controla a versão de itens em cache; por algum motivo, sistemas como deployer e sgps, arquivo virtual, apresentam erro 412 quando a Etag é setada
	Header unset Etag

</IfModule>
Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas