SUP:ServidorJava
(→Links úteis) |
|||
(90 edições intermediárias de 2 usuários não apresentadas) | |||
Linha 1: | Linha 1: | ||
+ | [[image:Voltar.jpg |Voltar]][[P%C3%A1gina_principal|Voltar a Página Inicial]]<br> | ||
+ | |||
+ | == Diagrama da Arquitetura Atual == | ||
+ | [[Arquivo:Servidores Wildfly300517.png]] | ||
+ | |||
+ | ===Arquitetura Atual em texto=== | ||
+ | <pre> | ||
+ | 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 | ||
+ | -------------------------------------------------------------------------- | ||
+ | </pre> | ||
+ | |||
+ | == Endereços de Gereciamento dos balanceadores == | ||
+ | https://server1.midas.unioeste.br/balancer-manager/ <br /> | ||
+ | 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: | ||
+ | <pre> | ||
+ | [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 | ||
+ | </pre> | ||
+ | * 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: | ||
+ | <pre> | ||
+ | <role rolename="manager-gui"/> | ||
+ | <user username="umUsuario" password="umaSenha" roles="manager-gui,manager-status" /> | ||
+ | </pre> | ||
+ | *editar o arquivo /usr/local/tomcat/webapps/manager/META-INF/context.xml e deixá-lo assim: | ||
+ | <pre> | ||
+ | <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> | ||
+ | </pre> | ||
+ | * 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: | ||
+ | <pre> | ||
+ | <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> | ||
+ | </pre> | ||
+ | * para que a url de status do balanceador funcione (/balancer-manager), deve-se criar um usuário, conforme segue: | ||
+ | <pre> | ||
+ | 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 | ||
+ | </pre> | ||
+ | * 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: | ||
+ | <pre> | ||
+ | <IfModule mpm_worker_module> | ||
+ | StartServers 8 | ||
+ | MinSpareThreads 256 | ||
+ | MaxSpareThreads 512 | ||
+ | ThreadLimit 1024 | ||
+ | ThreadsPerChild 256 | ||
+ | MaxRequestWorkers 4096 | ||
+ | MaxConnectionsPerChild 256 | ||
+ | </IfModule> | ||
+ | </pre> | ||
+ | |||
+ | == 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) == | ||
+ | *http://makandracards.com/zeroglosa/16231-muitos-arquivos-abertos-too-many-open-files | ||
+ | *https://developer.jboss.org/wiki/EvitandoAExceptionTooManyOpenFiles | ||
+ | |||
+ | == 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: <pre>RedirectMatch ^/pwmunioeste/(.*) https://midas.unioeste.br/pwmunioeste/$1</pre> | ||
+ | : 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= | = Links úteis= | ||
* Configurar monitoramento do Tomcat 7 com JMX [http://www.i-net-design.com/2011/07/15/monitoring-tomcat-7-with-jmc/] | * Configurar monitoramento do Tomcat 7 com JMX [http://www.i-net-design.com/2011/07/15/monitoring-tomcat-7-with-jmc/] | ||
+ | * Configuração do haproxy para visualizar estatísticas [http://www.networkinghowtos.com/howto/viewing-haproxy-statistics/] ou http://serverfault.com/questions/169181/how-to-set-up-stats-for-haproxy | ||
+ | * Configurar Tomcat para que use gzip para comprimir o conteúdo http://viralpatel.net/blogs/enable-gzip-compression-in-tomcat/ | ||
+ | * Configurar Tomcat para inicializar no boot: http://blogasisco.wordpress.com/2012/10/08/tomcat-no-linuxdebian-com-inicializacao-no-boot-do-sistema/ | ||
+ | * Rotacionar log do Tomcat: http://java.dzone.com/articles/how-rotate-tomcat-catalinaout | ||
+ | * Instalar o Java no Ubuntu manualmente: https://docs.datastax.com/en/jdk-install/doc/jdk-install/installOracleJdkDeb.html | ||
+ | * Setar Timezone do Linux: https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-20-04 | ||
+ | * Inicializar Tomcat como serviço no Ubuntu 16: | ||
+ | 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: | ||
+ | <pre> | ||
+ | /opt/tomcat/apache-tomcat-8.5.81/logs/catalina.out { | ||
+ | copytruncate | ||
+ | daily | ||
+ | rotate 7 | ||
+ | compress | ||
+ | missingok | ||
+ | size 10M | ||
+ | } | ||
+ | </pre> | ||
+ | * 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: | ||
+ | <pre> | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install ttf-mscorefonts-installer | ||
+ | </pre> | ||
+ | *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: | ||
+ | <pre> | ||
+ | ProxyPass /sadauplugin http://localhost:8090/sadauplugin | ||
+ | ProxyPassReverse /sadauplugin http://localhost:8090/sadauplugin | ||
+ | |||
+ | ProxyPass / ajp://localhost:8009/ | ||
+ | ProxyPassReverse / ajp://localhost:8009/ | ||
+ | </pre> | ||
+ | * 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: | ||
+ | <pre> | ||
+ | a2enmod proxy_http | ||
+ | </pre> | ||
+ | |||
+ | = 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 | ||
+ | [[Arquivo: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 [https://pt.stackoverflow.com/questions/136998/erro-de-ssl-com-file-get-contents] | ||
+ | |||
+ | = 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/ | ||
+ | |||
+ | * Executar o tzupdater, passando como parâmetro o endereço do pacote de timezones mais atual: java -jar tzupdater.jar -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz | ||
+ | |||
+ | = 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: | ||
+ | <pre> | ||
+ | nameserver 127.0.0.53 | ||
+ | options edns0 trust-ad | ||
+ | #search . | ||
+ | domain unioeste.br | ||
+ | search unioeste.br | ||
+ | </pre> | ||
+ | * 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: | ||
+ | <pre> | ||
+ | # 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> | ||
+ | </pre> | ||
+ | *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> | ||
+ | = Erro de handshake nos pagamentos utilizando Pagseguro = | ||
+ | * Para resolver, deve-se habilitar o log ssl no java, inserindo o seguinte parâmetro no arquivo de inicialização do Tomcat: -Djavax.net.debug=ssl |
Edição atual tal como 10h00min de 1 de novembro de 2024
[editar] Diagrama da Arquitetura Atual
[editar] 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 --------------------------------------------------------------------------
[editar] Endereços de Gereciamento dos balanceadores
https://server1.midas.unioeste.br/balancer-manager/
https://server2.midas.unioeste.br/balancer-manager/
[editar] Endereço de Gerenciamento do Tomcat WS
https://ws.midas.unioeste.br/manager (servidor físico 170 foi descontinuado)
[editar] 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
[editar] 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>
[editar] 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)
[editar] 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
[editar] Resolver problema de "Muitos arquivos abertos" (Too many open files)
- http://makandracards.com/zeroglosa/16231-muitos-arquivos-abertos-too-many-open-files
- https://developer.jboss.org/wiki/EvitandoAExceptionTooManyOpenFiles
[editar] 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
[editar] 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
[editar] 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
[editar] 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.
[editar] Links úteis
- Configurar monitoramento do Tomcat 7 com JMX [1]
- Configuração do haproxy para visualizar estatísticas [2] ou http://serverfault.com/questions/169181/how-to-set-up-stats-for-haproxy
- Configurar Tomcat para que use gzip para comprimir o conteúdo http://viralpatel.net/blogs/enable-gzip-compression-in-tomcat/
- Configurar Tomcat para inicializar no boot: http://blogasisco.wordpress.com/2012/10/08/tomcat-no-linuxdebian-com-inicializacao-no-boot-do-sistema/
- Rotacionar log do Tomcat: http://java.dzone.com/articles/how-rotate-tomcat-catalinaout
- Instalar o Java no Ubuntu manualmente: https://docs.datastax.com/en/jdk-install/doc/jdk-install/installOracleJdkDeb.html
- Setar Timezone do Linux: https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-20-04
- Inicializar Tomcat como serviço no Ubuntu 16:
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/
[editar] 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
[editar] 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
[editar] 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
- 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]
[editar] 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/
- Executar o tzupdater, passando como parâmetro o endereço do pacote de timezones mais atual: java -jar tzupdater.jar -l https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz
[editar] 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
[editar] 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
[editar] 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.
[editar] 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
[editar] 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
[editar] 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>
[editar] Erro de handshake nos pagamentos utilizando Pagseguro
- Para resolver, deve-se habilitar o log ssl no java, inserindo o seguinte parâmetro no arquivo de inicialização do Tomcat: -Djavax.net.debug=ssl