commit 5cd1348e691169f3143bd52a55f9acb7daafe2de Author: Admin Script Date: Fri Nov 28 00:29:42 2025 -0300 Commit inicial automático diff --git a/README.md b/README.md new file mode 100644 index 0000000..4e6cea8 --- /dev/null +++ b/README.md @@ -0,0 +1,109 @@ +# Procedimentos técnicos do data center + +Abaixo uma lista de manuais passo-a-passo para realização de procedimentos técnicos no data center + +## Estrutura Data Center - Atende.Net + +- [`Cadastros Estrutura Cliente`](./docs/cadastro_ambientes_clientes.md); (CRIANDO) +- [`Criação Estrutura Temporária - Migração do Cliente`](./docs/criacao_estrutura_migracao.md); +- [`Criação e Configuração Definitiva - Estrutura do Cliente`](./docs/criacao_estrutura.md); +- [`Transferência Cliente - Ambiente Produção Atende.Net`](./docs/transferencia_cliente_producao_nova_estrutura.md); +- [`Módulos Opcionais Atende.Net`](./docs/modulos_opcionais_atendenet.md); + +## Atualização Atende.Net + +- [`Atualização dos Clientes`](./docs/atualizacao_svn.md); +- [`Publicação Release Atende.net`](./docs/release_atendenet.md); + +## Estrutura Data Center - IPM Saúde S1 + +- [`Ativação IPM Saúde`](./docs/procedimento_ipmsaude.md); +- [`Transferência Cliente - Ambiente Produção IPM Saúde`](./docs/transferencia_ipm_saude.md); + + +## Atualização IPM Saúde S1 + +- [`Publicação Release IPM Saúde`](./docs/release_ipmsaude.md); + +## Estrutura Data Center - Ambientes Compartilhados + +- [`Configuração do Ambiente dos Consórcios`](./docs/configuracao_ambiente_consorcio.md); +- [`Transferência Cliente - Ambiente Compartilhado`](./docs/transferencia_ambiente_compartilhado.md); + +## Estrutura Data Center - Ambientes Paralelos + +- [`Restauração de base ambiente Homologação`](./docs/restauracao_homologacao.md); +- [`Descaracterização Ambientes Paralelos`](./docs/descaracterizacao_ambiente.md); + +## Replicações Internas - Slony e Replicação Nativa + +- [`Replicação Slony - Fiscal S1`](./docs/replicacao_slony_fiscal_s1.md); +- [`Replicação Nativa - Fiscal S1`](./docs/replicacao_nativa_fiscal_s1.md); +- [`Replicação Nativa - IpmSaude S1`](./docs/replicacao_nativa_saude_s1.md); + +## Replicações Externas - Banco de Dados e Arquivos (anexos Atende.Net) + +- [`Replicação Banco de Dados - IPM x Cliente`](./docs/replicacao_sgdb_ipm_cliente.md); +- [`Replicação Arquivos - IPM x Cliente`](./docs/replicacao_arquivos_ipm_cliente.md); + +## Procedimentos Gerais - Servidores + +- [`Ampliação de disco no Linux - APP-01-0820`](./docs/expansao_disco_app_0820.md); +- [`Ampliação de disco no Linux - BDP-01-1600`](./docs/expansao_disco_postgres_16.md); +- [`Atualização DNE`](./docs/atualizacao_dne.md); +- [`Certificado SSL - Integração Arrecadação - mtls-cloud.ipm.com.br`](./docs/ssl_mtls_cloud.md); +- [`Configuração para migração Siafic`](./docs/siafic.md); +- [`Padronização de Servidores Virtuais`](./docs/padronizacao-servidores.md); +- [`Procedimento de Checkout`](./docs/checkout.md); +- [`Atualizar Certificado SSL - Storage CEPH`](./docs/certificado_ssl_ceph.md); +- [`Movimentação de Arquivos para o Banco de Dados`](./docs/movimentacao_arquivos_bd.md); +- [`Atualização PHP 8.2`](./docs/atualizacao_php_82.md); +- [`Configurando Domínios Gov.Br`](./docs/configurando_dominios_gov_br.md); + +## Procedimentos - Docker + +- [`Criação de Network Portainer`](./docs/criacao_network_portainer.md); +- [`Criação do usuário "zbx_monitor" ElasticSearch`](./docs/criacao_usuario_monitor_elastic.md); +- [`Migração de diretório ElasticSearch`](./docs/migracao_dir_elastic.md); + +## Gerenciamento do Data Center - GTT + +### Liberação de Acesso ao Monitoramento + +- [`Liberação de acesso a usuários`](./docs/gtt_usuarios.md); +- [`Cadastro de usuários com acesso aos DashBoards`](./docs/zbx_dashboard_user.md); +- [`Zabbix Agent`](./docs/gtt_zabbix_agent.md); +- [`Zabbix Server`](./docs/gtt_zabbix_server.md); +- [`Visualizar Dashboards`](./docs/gtt_dashboards.md); + +### Liberação de Acesso ao Download do Backup + +- [`Liberação de Acesso Download do Backup`](./docs/gtt_download_backup.md); + +## Monitoramento + +- [`Troubleshooting - Comandos Úteis`](./docs/mon_troubleshooting.md); +- [`Monitoramento Servidores`](./docs/monitoramento_servidores.md); + +## Contingência + +- [`Links de Internet`](./docs/contingencia_links_internet.md); + +## +### Documentação Antiga (Histórico) - será excluida posteriormente +- [`Atualização de Servlets`](./docs/atualizacao_servlets.md); +- [`Ativação Slony - Inicial`](./docs/ativacao_slony.md); +- [`Ativação Slony - Adicionar Novo Node`](./docs/ativacao_slony_node.md); +- [`Slony - Remover Node`](./docs/remover_node_slony.md); +- [`Reativar Replicação`](./docs/reativar_replicacao.md); +- [`Ampliação de disco no Linux`](./docs/ampliacao_disco.md); +- [`Ativação Replicação Arquivos (Anexos)`](./docs/ativar_replicacao_arquivos.md); +- [`Reinicialização de Tomcat`](./docs/reiniciar_tomcat.md); +- [`Consultar senhas de ambientes`](./docs/consulta_senhas.md); +- [`Reinicia Serviço NFS`](https://documentos.ipm.com.br/data-center/ceph/src/branch/master/docs/destrava_nfs.md); +- [`Prorrogações contratuais`](./docs/gdc_prorrogacoes.md); +- [`Transferência Cliente - Ambiente Produção Atende.Net`](./docs/transferencia_cliente_producao.md); +- [`Publicação das Releases`](./docs/release.md); +- [`Configuração Servidor Firewall (00000-clean-afw-01-0260.atende.net)`](./configuracao_firewall_0260_cliente.md) +- [`Configuração Servidor Apache (00000-clean-app-01-5618.atende.net)`](./configuracao_apache_5618_cliente.md) +- [`Separação Apache IPM Saúde (Específico)`](./docs/apache_saude_separacao.md); diff --git a/docs/Create user Zabbix.postman_collection.json b/docs/Create user Zabbix.postman_collection.json new file mode 100644 index 0000000..1bba505 --- /dev/null +++ b/docs/Create user Zabbix.postman_collection.json @@ -0,0 +1,83 @@ +{ + "info": { + "_postman_id": "b89eb59d-2657-441d-97fd-6c35fe48a0d4", + "name": "Elastic - Create User Zabbix", + "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json", + "_exporter_id": "29069947" + }, + "item": [ + { + "name": "Roles Local - Criar - Monitoramento", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"cluster\": [\"monitor\"]\n}" + }, + "url": "{{URL_ELASTIC}}/_security/role/zabbix_monitoring" + }, + "response": [] + }, + { + "name": "Usuários Local - Criar - Monitoramento", + "request": { + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"password\" : \"{{SENHA_MONITORAMENTO}}\",\n \"full_name\" : \"Zabbix Monitoring User\",\n \"roles\": [\"zabbix_monitoring\"]\n}" + }, + "url": "{{URL_ELASTIC}}/_security/user/zbx_monitor" + }, + "response": [] + } + ], + "auth": { + "type": "basic", + "basic": { + "password": "Ipm@123456789", + "username": "elastic" + } + }, + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "variable": [ + { + "key": "URL_ELASTIC", + "value": "https://192.168.13.23:5100" + }, + { + "key": "SENHA_MONITORAMENTO", + "value": "Ipm@Zabbix" + } + ] +} \ No newline at end of file diff --git a/docs/ampliacao_disco.md b/docs/ampliacao_disco.md new file mode 100644 index 0000000..8d0eee2 --- /dev/null +++ b/docs/ampliacao_disco.md @@ -0,0 +1,187 @@ +# Ampliação de disco no Linux + + +*** Falta organizar *** + +``` +##NO linux +fdisk -l +## identificar o disco EX: "Disco /dev/sdd: 180 GiB, 193273528320 bytes, 377487360 setores" +fdisk /dev/sdd +n (nova partição) +p (primaria) +enter +enter +enter +t (para definir tipo) +8e (Linux LVM) +w (para gravar) +pvcreate /dev/sdd (criar volume) +pvscan (vai mostrar os volumes criados conforme exemplo abaixo PG11.5) + #PV /dev/sde1 VG sgdb04 lvm2 [<120,00 GiB / 1020,00 MiB free] + #PV /dev/sdc1 VG sgdb03 lvm2 [<90,00 GiB / 1020,00 MiB free] + #PV /dev/sdb2 VG sgdb02 lvm2 [<30,00 GiB / 1020,00 MiB free] + #PV /dev/sdb1 VG sgdb01 lvm2 [<20,00 GiB / 1020,00 MiB free] + #PV /dev/sda3 VG cl_00000-clean-centos8 lvm2 [38,41 GiB / 4,00 MiB free] + #Total: 5 [298,39 GiB] / in use: 5 [298,39 GiB] / in no VG: 0 [0 ] +vgextend sgdb04 /dev/sdd1 (estender volume sgdb04) + vgdisplay (vai mostras volumes, notar no exemplo abaixo o "FRES PE/SIZE que deve ter o espaço do disco criado) + --- Volume group --- + VG Name sgdb04 + System ID + Format lvm2 + Metadata Areas 2 + Metadata Sequence No 3 + VG Access read/write + VG Status resizable + MAX LV 0 + Cur LV 1 + Open LV 1 + Max PV 0 + Cur PV 2 + Act PV 2 + VG Size 299,99 GiB + PE Size 4,00 MiB + Total PE 76798 + Alloc PE / Size 30464 / 119,00 GiB + Free PE / Size 46334 / 180,99 GiB + VG UUID vT9XaP-xZBY-Hwnj-l5VJ-xvxk-5FGr-3TIRI7 +df -h (vai mostrar os discos que existem na maquina e seus tamanhos) + /dev/mapper/cl_00000--clean--centos8-root 15G 4,9G 11G 33% / + /dev/mapper/cl_00000--clean--centos8-home 2,4G 50M 2,4G 3% /home + /dev/sda2 976M 179M 731M 20% /boot + /dev/sda1 599M 6,7M 593M 2% /boot/efi + /dev/mapper/sgdb04-dados 119G 928M 119G 1% /var/lib/pgsql/11 + /dev/mapper/sgdb01-pg_log 19G 168M 19G 1% /var/lib/pgsql/11/data/log + /dev/mapper/cl_00000--clean--centos8-var_log 15G 297M 15G 2% /var/log + /dev/mapper/sgdb02-pg_wal 29G 272M 29G 1% /var/lib/pgsql/11/data/pg_wal + /dev/mapper/sgdb03-indices 89G 668M 89G 1% /var/lib/pgsql/11/tablespaces/indice +lvextend -L +180G /dev/mapper/sgdb04-dados +xfs_growfs /var/lib/pgsql/11 +df -h (vai mostrar /dev/mapper/sgdb04-dados com tamanho estendido) + /dev/mapper/cl_00000--clean--centos8-root 15G 4,9G 11G 33% / + /dev/mapper/cl_00000--clean--centos8-home 2,4G 50M 2,4G 3% /home + /dev/sda2 976M 179M 731M 20% /boot + /dev/sda1 599M 6,7M 593M 2% /boot/efi + /dev/mapper/sgdb04-dados 299G 2,2G 297G 1% /var/lib/pgsql/11 + /dev/mapper/sgdb01-pg_log 19G 168M 19G 1% /var/lib/pgsql/11/data/log + /dev/mapper/cl_00000--clean--centos8-var_log 15G 306M 15G 2% /var/log + /dev/mapper/sgdb02-pg_wal 29G 272M 29G 1% /var/lib/pgsql/11/data/pg_wal + /dev/mapper/sgdb03-indices 89G 668M 89G 1% /var/lib/pgsql/11/tablespaces/indice + + + + + + + + + + + + + + + ######################################################### + + ################################# SGDB 11 ################################# +###### Processo para adicionar o disco de backup ###### +# Deve-se adicionar um HD temporário ao servidor do banco de dados +# Como sugestão, adicionar o HD com tamanho de 2345GB, no Location informar o volume VMDATA-A650-02 ou VMDATA-A650-21 no formato Thin Provision +# desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. + +#EXEMPLO +lsblk (Identificar o novo disco sem ponto de montagem) +fdisk /dev/sde +g (altera para o formato GPT ao invés de DOS) +n (criar nova particão) +t (trocar o tipo da partição) +31 (Linux LVM - SGDB11) +p (visualizar a partição criada) + +#Comando (m para ajuda): p +#Disco /dev/sde: 2,3 TiB, 2517924577280 bytes, 4917821440 setores +#Unidades: setor de 1 * 512 = 512 bytes +#Tamanho de setor (lógico/físico): 512 bytes / 512 bytes +#Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes +#Tipo de rótulo do disco: gpt +#Identificador do disco: 5D62CD2C-31F7-3540-9581-B205ABAD4104 + +#Dispositivo Início Fim Setores Tamanho Tipo +#/dev/sde1 2048 4917821406 4917819359 2,3T Linux LVM + +w (salvar e sair) + +lsblk ( conferir partição criada ) +vgcreate sgdb20 /dev/sde1 +lvcreate -L +2344G -n backup sgdb20 +mkfs.xfs /dev/mapper/sgdb20-backup +vim /etc/fstab +/dev/mapper/sgdb20-backup /var/lib/pgsql/11/backup xfs defaults 0 1 +mkdir -p /var/lib/pgsql/11/backup +mount /var/lib/pgsql/11/backup +chown postgres.postgres /var/lib/pgsql/11/backup -R +chmod 700 /var/lib/pgsql/11/backup -R +df -h + +###### Processo para remover o disco de backup ###### +umount /var/lib/pgsql/11/backup +rm -rf /var/lib/pgsql/11/backup +lvremove /dev/sgdb20/backup +vgremove sgdb20 +vim /etc/fstab +-- Remover linha do ponto de montagem "/var/lib/pgsql/11/backup" + + +################################# SGDB 9.5 ################################# + + +###### Processo para adicionar o disco de backup ###### +# Deve-se adicionar um HD temporário ao servidor do banco de dados +# Como sugestão, adicionar o HD com tamanho de 2345GB, no Location informar o volume VMDATA-A650-02 ou VMDATA-A650-21 no formato Thin Provision +# desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. + +#EXEMPLO +lsblk (Identificar o novo disco sem ponto de montagem) +fdisk /dev/sdd +g (altera para o formato GPT ao invés de DOS) +n (criar nova particão) +t (trocar o tipo da partição) +15 (Linux LVM - SGDB95) +p (visualizar a partição criada) + +#Comando (m para ajuda): p +# +#Disk /dev/sdd: 2517.9 GB, 2517924577280 bytes, 4917821440 sectors +#Units = sectors of 1 * 512 = 512 bytes +#Sector size (logical/physical): 512 bytes / 512 bytes +#I/O size (minimum/optimal): 512 bytes / 512 bytes +#Disk label type: gpt +# +# Start End Size Type Name +# 1 2048 4917821406 2,3T Linux LVM + +w (salvar e sair) + +lsblk ( conferir partição criada ) +vgcreate sgdb20 /dev/sdd1 +lvcreate -L +2344G -n backup sgdb20 +mkfs.xfs /dev/mapper/sgdb20-backup +vim /etc/fstab +/dev/mapper/sgdb20-backup /database/backup xfs defaults 0 1 +mkdir -p /database/backup +mount /database/backup +chown postgres.postgres /database/backup -R +chmod 700 /database/backup -R +df -h + +###### Processo para remover o disco de backup ###### +umount /database/backup +rm -rf /database/backup +lvremove /dev/sgdb20/backup +vgremove sgdb20 +vim /etc/fstab +-- Remover linha do ponto de montagem "/database/backup" + +``` + diff --git a/docs/apache_saude_separacao.md b/docs/apache_saude_separacao.md new file mode 100644 index 0000000..cb08a0a --- /dev/null +++ b/docs/apache_saude_separacao.md @@ -0,0 +1,429 @@ +## Separação Apache IPM Saúde x Atende.Net + +> Documentação criada para documentar o procedimento de separação do servidor Apache do cliente, dividindo os sistemas IPM Saúde e Atende.Net, fazendo com que os mesmos trabalhem de forma individual. + +### Requisitos: +- Reservar IP Público para uso do sistema +- Criação de uma nova VM Apache (APP) para adição do novo sistema dedicado (00000-cliente-app-02-5618.atende.net) +- Cadastrar o DNS com base no IP público dedicado (saude-cliente.atende.net) + + +### Procedimentos (Firewall do cliente): + +Criar Virtual IP no PfSense +Acesse o Firewall do cliente através do IP INT_RT na porta 9080 + +Acesse: Firewall > Virtual IPs + + Criei um Novo Virtual IP com as informações + Type: IP Alias + Interface: WAN + Address(es): O IP que você definiu (177.11.XXX.XXX) + Description: saude-cliente.atende.net + +![Virtual_IPS](../img/virtual_ip_pfsense.png) + +Após a criação do IP Virtual, devemos criar o NAT para o novo ambiente + +Acesse: Firewall > NAT + + Será necessário a criação de um NAT para a Porta 80 e outra para a 443 + + NAT Porta 80: + + Interface: WAN + Protocol: TCP + Source: Any + Source Port Range: Any + Destination: (177.11.XXX.XXX - saude.cliente.atende.net) - Aqui você colocará o destino para o IP Virtual que você criou + Destination port range: HTTP + Redirect target IP: 192.168.XXX.XXX - Aqui você colocará o IP LAN do Servidor Apache específico que você irá criar. + Description: HTTP SAUDE + + NAT Porta 443: + + Interface: WAN + Protocol: TCP + Source: Any + Source Port Range: Any + Destination: (177.11.XXX.XXX - saude.cliente.atende.net) - Aqui você colocará o destino para o IP Virtual que você criou + Destination port range: HTTPS + Redirect target IP: 192.168.XXX.XXX - Aqui você colocará o IP LAN do Servidor Apache específico que você irá criar. + Description: HTTPS SAUDE + +![NAT 80 e 443](../img/nat_saude_pfsense.png) + +Após a criação do NAT para a Porta 80 e 443, devemos criar as regras de liberação desse novo IP WAN. + +Acesse: Firewall > Rules > WAN + +Será necessário a criação de um NAT para a Porta 80 e outra para a 443 + + Regra Interface WAN - 80 + + Action: Pass + Interface: WAN + Protocol: TCP + Source: Any + Source Port range: Any + Destination: Single host or alias: 192.168.XXX.XXX - Aqui você irá informar o IP LAN do Apache específico que você criou pro Saúde + Destination Port Range: HTTP 80 + Description: NAT HTTP SAUDE + Advanced Option > State type: Synproxy (Habilite o synproxy nas configurações avançadas) + + Regra Interface WAN - 443 + + Action: Pass + Interface: WAN + Protocol: TCP + Source: Any + Source Port range: Any + Destination: Single host or alias: 192.168.XXX.XXX - Aqui você irá informar o IP LAN do Apache específico que você criou pro Saúde + Destination Port Range: HTTPS 443 + Description: NAT HTTPS SAUDE + Advanced Option > State type: Synproxy (Habilite o synproxy nas configurações avançadas) + +![Rules WAN](../img/rules_wan.png) + +Depois de efetuado o procedimento acima, devemos criar os NATs na Interface INT_RT do cliente para acesso a VM: +Os NATS serão de acordo com a porta definida no levantamento dos dados do ambiente do cliente. Essas portas podem sofrer alterações de acordo com a quantidade de maquinas que o ambiente do cliente possui atualmente. + + NAT Cookpit + NAT SSH + +![Rules WAN](../img/nat_cookipt_pfsense_saude.png) +![Rules WAN](../img/nat_ssh_pfsense_saude.png) + +Por fim, devemos cadastrar o DNS Forwarder para esse novo servidor Apache informando o IP LAN definido 192.168.XXX.XXX + +![Rules WAN](../img/dns_forwarder_pfsense.png) + + +### Procedimento Criação Servidor Apache (IPM Saúde): + +Após efetuado as configurações no Firewall do cliente, iremos criar/configurar o Apache específico para o Saúde: + +> Substituir os IP conforme o Apache, os nomes conforme o cliente e cadastrar o endereço saude-cliente.atende.net + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + +Acesse o Console VMWare do servidor: + LAUNCH WEB CONSOLE > Informe usuário e senha (root - 123456): + + # vim /etc/sysconfig/network-scripts/ifcfg-eno16780032 + IPADDR="192.168.XX.XX" - Inserir IP informado no chamado + PREFIX="28" + GATEWAY="192.168.XX.XX" - Inserir IP do Firewall + DNS1="192.168.XX.XX" - Inserir IP do Firewall + + # reboot + +Após reiniciar a máquina, conectar via SSH com o IP INT_RT configurado no Firewall (porta definida na criação do ambiente): + + # vim /etc/resolv.conf + nameserver 192.168.XX.XX - Alterar para o IP do gateway + + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + - Substituir o IP do App. Ex: :% s/21.20/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/00000-saude-cliente-app-02-5618 + - Substituir domínio do cliente. Ex: :% s/clean.atende.net/saude-cliente.atende.net (conforme URL1 informada no chamado) + + # O arquivo deve ficar da seguinte maneira: + + 192.168.23.20 01383-cliente-app-02-5618 01383-cliente-app-02-5618.atende.net + 192.168.23.20 saude-cliente.atende.net + 192.168.23.20 www.saude-cliente.atende.net + 192.168.23.21 cliente.atende.net + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/00000-saude-cliente-app-02-5618 + +Instalar o VMWare-Tools: +No VCenter, vá na VM do cliente e siga os passos: Actions > Guest OS > Install VMWare Tools. + + # mount /dev/cdrom /mnt + # cd /root + # cp /mnt/VMwareTools-10.....tar.gz /root/ + # tar -xzvf VMwareTools-10.....tar.gz + # cd vmware-tools-distrib/ + # ./vmware-install.pl > yes > ENTER até o fim da instalação + # reboot + +Altere os arquivos de configuração do servidor: +Ajustar os seguintes itens conforme a planilha de manutenção de servidores: + + +Ajuste o arquivo performance.conf: + + # vim /etc/httpd/conf.d/performance.conf + MaxKeepAliveRequests 45 - Alterar conforme planilha MAX KEEPALIVE + + StartServers 20 - Alterar conforme planilha START SERVERS + MinSpareServers 20 - Alterar conforme planilha START SERVERS + MaxSpareServers 40 - Alterar conforme planilha MAX SERVERS + ServerLimit 190 - Alterar conforme planilha MAX CLIENTS + MaxClients 190 - Alterar conforme planilha MAX CLIENTS + MaxRequestsPerChild 4000 + + + +Ajuste o arquivo security.conf: + + # vim /etc/httpd/conf.d/security.conf + ServerTokens Prod - Conferir se o valor está como "Prod" + ServerSignature Off - Conferir se o valor está como "Off" + TraceEnable Off - Conferir se o valor está como "Off" + Directory - Alterar o clean.atende.net pelo do cliente. Ex: :% s/clean.atende.net/saude-cliente.atende.net + + # Adicionar os parâmetros abaixo: + + + Order deny,allow + Deny from all + Allow from nome + + +Ajustar o arquivo php.conf + + vim /etc/httpd/conf.d/php.conf + -- DirectoryIndex atende.php super_login.php + + +Ajuste o arquivo qos.conf: + + # vim /etc/httpd/conf.d/qos.conf + QS_SrvMaxConnPerIP 95 115 - Alterar conforme planilha + QS_ClientEventBlockCount 115 95 - Alterar conforme planilha + QS_SrvMaxConnExcludeIP 192.168.XX.XX - Substituir pelo IP do Tomcat. Ex: :% s/21.23/XX.XX + + + SetHandler qos-viewer - Substituir pelo IP do Apache. Ex: :% s/21.20/XX.XX + Order Deny,Allow + Deny from All + Allow from 192.168.XX.XX ; XX.X.XX.XXX/29 ; XX.XX.XX.XXX/28 ; XXX.XXX.XX.X/28 ; XXX.XX.XX.X/22 + + + +Ajuste o arquivo ssl.conf: + + # vim /etc/httpd/conf.d/ssl.conf + Alterar o clean.atende.net pelo endereço do cliente. Ex: :% s/clean.atende.net/saude-cliente.atende.net + +Ajuste o arquivo status.conf: + + # vim /etc/httpd/conf.d/status.conf + - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + +Criar o arquivo alias.conf + + vim /etc/httpd/conf.d/alias.conf + Alias /social "/var/www/html/saude-cliente.atende.net/saude/" + Alias /vigilancia "/var/www/html/saude-cliente.atende.net/saude/" + Alias /hospital "/var/www/html/saude-cliente.atende.net/saude/" + +Ajuste o arquivo httpd.conf: + + # vim /etc/httpd/conf/httpd.conf + Configurar as informações gerais do servidor, substituindo pelo endereço principal. + Ex: :% s/CLEAN.atende.net/saude-cliente.atende.net + + # Adicionar o parâmetro de super_login.php + -- DirectoryIndex atende.php super_login.php + + +Ajuste o arquivo awstats.conf: + + # vim /etc/httpd/conf.d/awstats.conf + Directory - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + +Renomeie o nome do arquivo para o cliente em questão: + + # cd /etc/awstats + # mv awstats.clean.atende.net.conf awstats.saude-cliente.atende.net.conf - Substituir cliente pelo nome do cliente em questão. + # vim awstats.saude-cliente.atende.net.conf - Substituir a palavra clean pelo nome do cliente. Ex: :% s/clean/saude-cliente + + +Confira configuração do memcache: + + # cat /etc/sysconfig/memcached - CACHESIZE deve estar ="128" + + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agentd.conf + Server=192.168.XX.XX - Alterar para o IP do Firewall + ServerActive=192.168.XX.XX - Alterar para o IP do Firewall + Hostname=00000-clean-app-01-5618 - Alterar o código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/00000-saude-cliente-app-02-5618 + + +Ajuste o arquivo apache.conf: + + # vim /etc/ztc/apache.conf + host=192.168.XX.XX - Alterar para o IP do Apache + + +Realize a conferência do arquivo memcache.conf: + + # cat /etc/zabbix/zabbix_agentd.d/memcache.conf + Retorno: UserParameter=memcache[*],/opt/ztc/bin/memcache_status.sh $1 + + +Conferir regras de firewall, caso exista alguma alteração será informado: + + # iptables -L + +Execute o procedimento abaixo: + + cd /root/download/php56/ + wget https://datacenter.atende.net/updates/php56/dbase-5.1.1.tgz + pecl install dbase-5.1.1.tgz + tar -xzvf dbase-5.1.1.tgz + cd dbase-5.1.1/ + /usr/bin/zts-phpize + ./configure --with-php-config=/usr/bin/zts-php-config + make && make install + cd /etc/php.d + wget https://datacenter.atende.net/updates/php56/dbase.ini + cd /etc/php-zts.d/ + wget https://datacenter.atende.net/updates/php56/dbase.ini + + Procedimento de Jobs do Saúde + + cd /root + wget https://datacenter.atende.net/updates/jobs_ipmsaude.sh + chmod 755 jobs_ipmsaude.sh + vim job_ipmsaude.sh + + #Apague a linha abaixo + url=`cat /etc/tomcat/ipm.properties | grep enderecoWeb | cut -d '/' -f3 | cut -d '\' -f1` + + #Substitua por: + url="saude-cliente.atende.net" + + #Salve o arquivo jobs_ipmsaude.sh + + ./jobs_ipmsaude.sh + crontab -e + 0-59/10 * * * * /root/jobs_ipmsaude.sh + + +### IMPORTANTE ### + +> Neste momento precisamos avaliar como a separação que esta sendo efetuada irá ocorrer. Nestes casos existem duas opções: +> +>1 - Manter o Atende.Net no servidor Atual e este novo servidor ficará para o IPM Saúde +>2 - O Apache Atual ficará para o IPM Saúde e será separado o Atende.Net +> +> Neste exemplo abaixo, iremos criar um novo servidor para o IPM saúde, sendo assim, caso você realize a opção 2, os passos devem ser feitos de forma invertida! + + +Neste passo, iremos precisar realizar um checkout para o IPM Saúde + +Renomear a pasta para o nome do cliente em questão: + + # mv clean.atende.net saude-cliente.atende.net + # cd saude-cliente.atende.net/ + # svn co https://atualizacao.atende.net/svn/Saude_Producao/1.0.0/ saude/ + +Após o checkout, precisamos copia as seguintes pastas do Servidor Antigo onde o Saúde estava operandor (Apache Atende.Net): + + sau_atualiza_versao_config.inc + _config.padrao.inc + download + imagem + upload + + +Conferir o Atualiza: + + # vim atualiza/atualiza_versao_config.inc + +```console + Devido a separação do Apache entre o Atende.Net e o IPM Saúde, neste momento temos configurado o servidor da Saúde, porém agora precisamos realizar alguns ajustes no Apache que ficou dedicado para o Atende.Net: + +Ajustes do arquivo hosts + + Adicionar o endereço: 192.168.XXX.XXX saude-cliente.atende.net + + Exemplo: + + 192.168.23.21 00000-cliente-app-02-5618 00000-cliente-app-02-5618.atende.net + 192.168.23.21 origens-cliente.atende.net + 192.168.23.21 www.origens-cliente.atende.net + 192.168.23.21 ws-cliente.atende.net + 192.168.23.21 cliente.atende.net + 192.168.23.21 www.cliente.atende.net + 192.168.23.21 nfse-cliente.atende.net + 192.168.23.21 www.nfse-cliente.atende.net + 192.168.23.21 cliente.sc.gov.br + 192.168.23.21 www.cliente.sc.gov.br + 192.168.23.20 saude-cliente.atende.net + +Alterar o arquivo alias.conf já existente: + + vim /etc/httpd/conf.d/alias.conf + + Conteudo do arquivo alias.conf: + + Redirect permanent "/saude" "https://saude-cliente.atende.net/saude/" + Redirect permanent "/social" "https://saude-cliente.atende.net/social/" + Redirect permanent "/vigilancia" "https://saude-cliente.atende.net/vigilancia/" + Redirect permanent "/hospital" "https://saude-cliente.atende.net/hospital/" + +Checkout IPM Saúde + + /var/www/html/cliente.atende.net + + No checkout do Atende.Net deve ser feito backup e removido os arquivos relacionados ao IPM Saúde, porém mantendo a pasta /saude + No config_padrão.inc do Atende.Net deve ser adicionado a seguinte linha apontando a nova URL referente ao IPM Saúde: + + vim /var/www/html/cliente.atende.net/_config.padrao.inc + $_CONFIG['urlsaudeatual'] = 'https://saude-cliente.atende.net'; + +### Procedimento Ajuste no Servidor Banco de Dados (IPM Saúde): + +> Devido a divisão entre os Apaches dedicando um para o sistema do Atende.Net e outro para o IPM Saúde, precisamos ajustar a configuração do Backup dos arquivos que o banco do Saúde realiza. Para isso seguiremos o passo a passo abaixo: + +Para realização dos Backups dos Arquivos, deve ser verificado o arquivos /root/bkp_remoto/bkp_remoto.cfg +Nele deve constar os dados corretos: + + ip_stg_bkp=172.16.0.246 + Neste linha deve-se alterar conforme o novo checkout: + document_root=/var/www/html/saude-cliente.atende.net + + #Deve também ser verificado o parâmetro referente ao IP do Apache e alterar caso necessário: + ip_apache=192.168.XXX.XXX + +[Voltar](../README.md) \ No newline at end of file diff --git a/docs/ativacao_assistente_dara.md b/docs/ativacao_assistente_dara.md new file mode 100644 index 0000000..475e4db --- /dev/null +++ b/docs/ativacao_assistente_dara.md @@ -0,0 +1,247 @@ +# Ativação Assistente Virtual - Dara + + +>### Objetivo da Documentação: +> +> O intuito dessa documentação, é realizar a Ativação do Assistente Virtual do Atende.Net utilizando a inteligência artificial Dara, onde teremos que configurar Servidor, Stacks e ajustes gerais no ambiente, seguindo o passo a passo abaixo! +> + +## Requisitos: + +* Verificar se no chamado consta todas as informações necessárias para a configuração/criação do ambiente +* Verificar se o ambiente necessita de ampliações nos demais Servidores (App, Banco de Dados, MSDs etc). +* Seguir o passo a passo com atenção não pulando nenhum passo ou executando algo fora de ordem +----------------------------------------------------------------------------------------- + +### ✅ Configuração Geral do ambiente + +Antes de iniciarmos a configuração específica do Assistente Virtual, precisamos garantir que a instalação do mesmo não implicará no aumento de recursos de disco do Servidor de Banco de Dados. Para isso, sempre verifique o descritivo passado no chamado. Caso necessite de Ampliação, os Discos deverão ser reconfigurados conforme o padrão informado no chamado. + +Para isso, existe a documentação relacionada a configuração e Padrões das Partições/Discos do Servidor PostgreSQL: + +#### Configuração Hardware Servidores - Discos +[Documentação Padrão Partições](/data-center/Padroes/src/branch/master/docs/partition-bdp-1600.md) +[Documentação Configuração de Discos](../docs/expansao_disco_postgres_16.md) + +### ✅ Criação Servidor MSD02 + +Após o ajuste dos Discos do passo anterior, deve ser verificado se o ambiente do cliente já possui o servidor 00000-cliente-msd-02-2400.atende.net. Caso NÃO exista, siga a documentação abaixo para realizar a configuração do mesmo! Se o cliente já possuir o Servidor, ignore o passo e siga para a Configuração do Servidor MSD02. + +Para criar o Servidor, acesse o VMWare correspondendo ao Data Center onde o cliente esta instalado: +PR: https://sp01-ger-vcsa01.atendenet.local/ ou SP: https://sp01-ger-vcsa01.atendenet.local/ +Efetue o login com suas credênciais! + +* Clone a VM Template (00000-clean-msd-03-2400.atende.net_v1): + +![Clone_VM](../img/clone_msd03_msd02.png) + +* Defina o nome padrão do Servidor + +![Definindo_Nome](../img/configuration_msd02_01.png) + +* Selecione o Volume do VMWARE conforme os demais servidor do cliente em questão: + +![Definindo_DataStore](../img/configuration_msd02_02.png) + +* Após a escolha do volume, selecione a opção (Customize this virtual machine's hardware) para configurarmos os recursos computacionais da Máquina Virtual: + +![Confiuration_VM](../img/configuration_msd02_03.png) + +* Configure a vCPU de acordo com o valor passado no chamado. Sempre atento a opção de Cores per Socket, onde para cada valor par, o valor deve corresponder a metade do mesmo. Caso for um valor impar, por exemplo 3, o valor da configuração deve ser igual. + +![Configuration_VM_02](../img/configuration_msd02_04.png) + +* Configure o valor da Memória de acordo com o valor passado no chamado, sempre deixando marcado a opção Reservation, garantindo que a memória configurada esteja reservada para essa máquina virtual: + +![Configuration_VM_03](../img/configuration_msd02_05.png) + +* Em seguida, selecione a rede de acordo com o cliente (00000_cliente) e garanta que a opção de Adapter Type esteja como VMXNET3: + +![Configuration_VM_04](../img/configuration_msd02_06.png) + +* Por fim, clique em Next e confirme o clone da Maquina Virtual. + +### ✅ Ajuste de Firewall - Cliente + +Ante de realizar a Configuração do Servidor MSD02, você deve realizar algumas configurações para o acesso desse novo Servidor MSD02. + +Para isso, acesse o Firewall do cliente através da INT_RT: +PR: https://172.16.1.XXXX:9080 +SP: https://172.24.1.XXX:9080 +As credenciais devem ser coletadas através da ferramenta https://datacenter.ipm.com.br + +#### Ajuste de NAT: + +Navegue em: Firewall > NAT > Port Forward + +Configure o NAT para as portas: +9030: Acesso via SSH +8030: Acesso Coockpit + +#### Ajuste DNS Forwarder: + +Navegue em: Services > DNS Forwarder +Crie uma nova entrada com o padrão: + +Host: 00000-cliente-msd-02-2400 +Domínio: atende.net +IP: 192.168.XXX.XXX +Salve a configuração! + + +### ✅ Configuração Servidor MSD02 + +Após a criação da VM e o Ajustes no Firewall, iremos criar o servidor MSD02. Para isso, siga os passos da documentação! + + Obs. Siga atentamente a documentação, principalmente considerando a quantidade de MSD's que o ambiente do cliente que você esta configurando possui. Neste caso do MSD02 iremos seguir a documentação apartir do trecho (Publicação do servidor worker) + +[Configuração Servidor MSD02](/data-center/Docker/src/branch/master/docs/server-deploy.md#publicação-do-servidor-worker) + + +### ✅ Deploy Stacks + +Após a configuração do Servidor, iremos realizar o Deploy das Stacks necessárias para o funcionamento do Assistente Virtual. +Para isso, siga a documentação abaixo neste ordem: + + Obs. Na parte do Elastic, deve ser feito apenas a parte referente ao Elastic LOCAL pois todos os clientes hoje já possuem o Elastic GLOBAL configurado! + +* [Deploy Stack - IES API Gateway](/data-center/Docker/src/branch/master/docs/deploy_dara-ies-api-gateway.md) +* [Deploy Stack - DES Elastic Search](/data-center/Docker/src/branch/master/docs/deploy_atendenet-des-elasticsearch.md) +* [Deploy Stack - IPL Suggester](/data-center/Docker/src/branch/master/docs/deploy_dara-ipl-suggester.md) + +### ✅ Configuração MicroServiços + +Após a configuração de todo ambiente e o deploy das Stacks conforme o passo anterior, agora iremos configurar os microserviços no Sistema Atende.Net para que ele possa utilizar os recursos instalados no ambiente. + +Acesse o Atende.Net do cliente (https://cliente.atende.net) + +Navegue em: Gerenciamento do Sistema » Sistema » Administração » Microsserviços » Microsserviços + +E informe os seguintes microserviços substituindo pelos dados do cliente em questão e dados do Data Center onde o mesmo esta instalado (SP ou PR): + +Elastic > ElasticGlobal: https://pr01-svc.atende.net:9200 +Elastic > ElasticLocal: https://00000-des-atendenet-0870-01.atende.net:9200 +Inteligência Artificial > IaApiGateway: https://ies-api-gateway.atende.net:8443 +Inteligência Artificial > IaSuggester: https://ies-api-gateway.atende.net:8443/IaSuggester +Inteligência Artificial > IaSuggesterExterno: https://cliente.atende.net:8443/IaSuggester +Assistente Virtual > AssistenteChatbotWeb: https://pr01-js.atende.net/ncb-chatbotweb-frontend-v1 + +### ✅ Cadastro GTT + +Após a configuração dos microserviços, a estrutura para o Assistente Virtual já estará pronta para funcionamento, faltando apenas a ativação do módulo por parte da Estrutura. + +Com isso, resta realizarmos o cadastro desse novo equipamento e Stacks que criamos nos passos anteriores! + +Acesse https://datacenter.atende.net e navegue em: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento +Clique em Incluir e informe os seguinte dados: + + +#### Cadastro do Equipamento + +Nome: 00000-cliente-msd-02-2400.atende.Net +Tipo de Equipamento: Micro Serviço Docker +Local de Instalação: Data Center IPM - Site SP01 ou pr01 +Classificação: Virtual +Sistema Operacional: Linux - Ubuntu Linux (64-bit) +Clique em Confirmar + +![Cadastro_GTT_01](../img/cadastro_msd02_gtt_01.png) + +#### Cadastro Usuários do Equipamento + +Após cadastro do equipamento, selecione o mesmo, clique em Consultar » Usuários SO e cadastre os usuários do Sistema Operacional + +Usuário: ipm +Senha: ****** +Tipo de Acesso: Restrito + +Usuário: root +Senha: ****** +Tipo de Acesso: Privilegiado + +![Cadastro_GTT_02](../img/cadastro_msd02_gtt_02.png) + +#### Cadastro Interface do Equipamento + +Após o cadastro de usuário, volte ao equipamento, clique em Consultar » Interfaces e cadastre a interface da máquina virtual: + +Tipo: LAN +Gerenciar IPv4: Sim +Rede: Informe conforme a informação passada no chamado +IPv4: Informe conforme a informação passada no chamado +Ativo: Sim + +Como IP Secundário você irá informar o IP VIP (Virtual) do ambiente, que corresponde ao Equipamento 00000-cliente-msd-cluster.atende.net + +![Cadastro_GTT_03](../img/cadastro_msd02_gtt_03.png) + +#### Cadastro da Instancia do Equipamento + +Agora vincule a Instancia do cliente para o Equipamento. Clique no equipamento, navegue em Consultar » Instância » Relacionar Equipamento x Instância: + +![Cadastro_GTT_04](../img/cadastro_msd02_gtt_04.png) + +#### Cadastro Serviço do Equipamento + +Para informar o serviço do Equipamento, clicando sobre o mesmo, Consultar » Serviços e Selecione a Opção Docker e Configurar Serviço: + +Modo de Operação: Manager + +![Cadastro_GTT_05](../img/cadastro_msd02_gtt_05.png) + +#### Cadastro Stacks GTT + +Por fim, precisaremos cadastrar as Stacks que criamos no GTT. Para isso, selecione o equipamento 00000-cliente-msd-cluster.atende.net do cliente, navegue em: Consultar » Serviços » Docker » Configurar Serviço + +Após isso, clique em Incluir e informe todos os dados de cada Stack conforme foi feito no Portainer nos passos anteriores! + +![Cadastro_GTT_06](../img/cadastro_msd02_gtt_06.png) + +### ✅ Cadastro Zabbix - Monitoramento + +Após o cadastro do Equipamento no GTT, iremos cadastrar o mesmo no Zabbix para realizar a monitoração do mesmo. Para isso, acesse o Zabbix correspondente ao Data Center onde o cliente esta instalado: + +PR: https://pr01-datacenter.ipm.com.br:8085 +SP: https://sp01-datacenter.ipm.com.br:8085 + +Navegue em Configuration > Hosts e filtre pelo nome do cliente. + +![Zabbix_cadastro_01](../img/cadastro_msd02_zabbix_01.png) + +Selecione o host MSD01 e use a Opção de Clone + +![Zabbix_cadastro_02](../img/cadastro_msd02_zabbix_02.png) + +Após isso, altere os dados de HostName, IP do Agent e clique em Add! + +![Zabbix_cadastro_03](../img/cadastro_msd02_zabbix_03.png) + +Após o cadastro, você irá verificar que o Agent do mesmo não ira comunicar de forma instantânea, sendo necessário acessar o Firewall do cliente e reiniciar o Serviço do Zabbix Proxy. + +Para isso, acesse o Firewall do cliente (Exemplo: https://172.XX.1.XXX:9080): + +Navegue em: Status > Services e Reiniciar o serviço zabbix_proxy + +![Zabbix_Proxy_Service](../img/reiniciar_servico_proxy.png) + +Após a reinicialização do zabbix_proxy no Firewall (pfsense) do cliente, será possível verificar a comunicação correta do Agent do Equipamento! + +![Zabbix_cadastro_04](../img/cadastro_msd02_zabbix_04.png) + +Após isso, o equipamento já estará sendo monitorado via Zabbix. Porém para que seja possível gerar os alertas para a equipe de Monitoramento, precisamos ajustar esse equipamento ao Mapa do cliente. + +Para isso, navegue em: Monitoring > Maps > Filtro pelo cliente +Acesse o Mapa do cliente, clique em Map Element e clique em Add. + +Type: Host +Host: Selecione o Equipamento em questão 00000-cliente-msd-02-2400.atende.net +Apply OK + +Após isso, selecione o Equipamento adicionado com a Nuvem relacionada a rede e Adicione um Link entre os dois elementos! + +![Zabbix_cadastro_05](../img/cadastro_msd02_zabbix_05.png) + + +Após a execução de todos os passos, o cliente já possui a Estrutura e todas as configurações necessárias para o funcionamento adequado do Assistente Virtual DARA! + +[`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/ativacao_educação.md b/docs/ativacao_educação.md new file mode 100644 index 0000000..b1f2d71 --- /dev/null +++ b/docs/ativacao_educação.md @@ -0,0 +1,115 @@ +## Ativação Educação DARA + +>### Objetivo da Documentação: +> +> O intuito dessa documentação, é realizar a Instalação e Ativação do Educação DARA no Atende.Net, onde teremos que configurar o Servidor, Stacks e ajustes gerais no ambiente, seguindo o passo a passo abaixo! +> + +## Requisitos: + +* Verificar se no chamado consta todas as informações necessárias para a configuração/criação do ambiente +* Verificar se o ambiente necessita de ampliações nos demais Servidores (App, Banco de Dados, MSDs etc). +* Seguir o passo a passo com atenção não pulando nenhum passo ou executando algo fora de ordem + +### ✅ Criação Servidor MSD02 + +Após o ajuste dos Discos do passo anterior, deve ser verificado se o ambiente do cliente já possui o servidor 00000-cliente-msd-02-2400.atende.net. Caso NÃO exista, siga a documentação abaixo para realizar a configuração do mesmo! Se o cliente já possuir o Servidor, ignore o passo e siga para a Configuração do Servidor MSD02. + +Para criar o Servidor, acesse o VMWare correspondendo ao Data Center onde o cliente esta instalado: +PR: https://sp01-ger-vcsa01.atendenet.local/ ou SP: https://sp01-ger-vcsa01.atendenet.local/ +Efetue o login com suas credênciais! + +* Clone a VM Template (00000-clean-msd-03-2400.atende.net_v1): + +![Clone_VM](../img/clone_msd03_msd02.png) + +* Defina o nome padrão do Servidor + +![Definindo_Nome](../img/configuration_msd02_01.png) + +* Selecione o Volume do VMWARE conforme os demais servidor do cliente em questão: + +![Definindo_DataStore](../img/configuration_msd02_02.png) + +* Após a escolha do volume, selecione a opção (Customize this virtual machine's hardware) para configurarmos os recursos computacionais da Máquina Virtual: + +![Confiuration_VM](../img/configuration_msd02_03.png) + +* Configure a vCPU de acordo com o valor passado no chamado. Sempre atento a opção de Cores per Socket, onde para cada valor par, o valor deve corresponder a metade do mesmo. Caso for um valor impar, por exemplo 3, o valor da configuração deve ser igual. + +![Configuration_VM_02](../img/configuration_msd02_04.png) + +* Configure o valor da Memória de acordo com o valor passado no chamado, sempre deixando marcado a opção Reservation, garantindo que a memória configurada esteja reservada para essa máquina virtual: + +![Configuration_VM_03](../img/configuration_msd02_05.png) + +* Em seguida, selecione a rede de acordo com o cliente (00000_cliente) e garanta que a opção de Adapter Type esteja como VMXNET3: + +![Configuration_VM_04](../img/configuration_msd02_06.png) + +* Por fim, clique em Next e confirme o clone da Maquina Virtual. + +### ✅ Ajuste de Firewall - Cliente + +Ante de realizar a Configuração do Servidor MSD02, você deve realizar algumas configurações para o acesso desse novo Servidor MSD02. + +Para isso, acesse o Firewall do cliente através da INT_RT: +PR: https://172.16.1.XXXX:9080 +SP: https://172.24.1.XXX:9080 +As credenciais devem ser coletadas através da ferramenta https://datacenter.ipm.com.br + +#### Ajuste de NAT: + +Navegue em: Firewall > NAT > Port Forward + +Configure o NAT para as portas: +9030: Acesso via SSH +8030: Acesso Coockpit + +#### Ajuste DNS Forwarder: + +Navegue em: Services > DNS Forwarder +Crie uma nova entrada com o padrão: + +Host: 00000-cliente-msd-02-2400 +Domínio: atende.net +IP: 192.168.XXX.XXX +Salve a configuração! + + +### ✅ Configuração Servidor MSD02 + +Após a criação da VM e o Ajustes no Firewall, iremos criar o servidor MSD02. Para isso, siga os passos da documentação! + + Obs. Siga atentamente a documentação, principalmente considerando a quantidade de MSD's que o ambiente do cliente que você esta configurando possui. Neste caso do MSD02 iremos seguir a documentação apartir do trecho (Publicação do servidor worker) + +[Configuração Servidor MSD02](/data-center/Docker/src/branch/master/docs/server-deploy.md#publicação-do-servidor-worker) + + +### ⚙️ Procedimentos para Ativação da Educação DARA + +Antes de iniciar, certifique-se de que as seguintes stacks foram implantadas no ambiente do cliente: + +- [Deploy do IES - API Gateway](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-ies-api-gateway.md) +- [Deploy do DES - ElasticSearch Local e Global](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_atendenet-des-elasticsearch.md) +- [Deploy do IEE - Evasão Escolar](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-iee-evasao-escolar.md) +- [Deploy do IEI - Projeção de Alunos](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-iei-creches-projecao-alunos.md) +- [Deploy do IEI - Ensino Fundamental](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-iei-ensino-fundamental.md) +- [Deploy do IEI - Ensino Infantil](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-iei-ensino-infatil.md) + +--- + +### 📝 Observações + +- Ao final da documentação de cada stack mencionada acima, é informado o endereço correspondente que deve ser configurado nos microsserviços do Atende.Net. +- Para referência rápida, seguem os endereços: + +| Serviço | Endereço | +|-------------------------------------|--------------------------------------------------------------------------| +| **IES - API Gateway** | `https://ies-api-gateway.atende.net:8443` | +| **ElasticSearch (Global)** | `https://sp01-svc.atende.net:9200/` | +| **ElasticSearch (Local)** | `https://08573-des-atendenet-0870-01.atende.net:9200` | +| **IEE - Evasão Escolar** | `https://ies-api-gateway.atende.net:8443/IaEvasaoEscolar` | +| **IEI - Projeção de Alunos** | `https://ies-api-gateway.atende.net:8443/IaProjecaoAlunos` | +| **IEI - Ensino Fundamental** | `https://ies-api-gateway.atende.net:8443/IaEnsinoFundamental` | +| **IEI - Ensino Infantil** | `https://ies-api-gateway.atende.net:8443/IaEnsinoInfantil` | \ No newline at end of file diff --git a/docs/ativacao_fiscal_s2.md b/docs/ativacao_fiscal_s2.md new file mode 100644 index 0000000..e26e65e --- /dev/null +++ b/docs/ativacao_fiscal_s2.md @@ -0,0 +1,175 @@ +# Ativação Fiscal S-2 no PHP 8.2 + +## Cadastro no DNS + +Realizar o cadastro dos domínios nos servidores de DNS, conforme abaixo: +```console +ws-cliente IN A 177.11.20.19 +nfse-cliente IN A 177.11.20.19 +www.nfse-cliente IN A 177.11.20.19 +``` + +## Configuração Firewall + +Lembrar de cadastrar os dominios origens, nfse e ws no DNS Forwarder, direcionando para o IP do Apache. Conforme passos abaixo: +Vá em: Services > DNS Forwarder > Host Overrides - Add: +![HOSTOVERRIDES](../img/host_overrides.png) + +Informe o endereço, dominio e ip do apache e clique em "save" conforme exemplo abaixo: +![DOMINIOS](../img/dominio_fiscal.png) + +**Observação: repita esse passo para os seguintes endereços: ws-cliente, nfse-cliente e origens-cliente** + +## Cadastro no Recaptcha + +Cadastrar os domínios no Recaptcha Cliente V2 e V3: ws-cliente.atende.net e nfse-cliente.atende.net. +![RECAPTCHA](../img/recaptcha_fiscal_s2.png) + +## Configuração Apache + +Deve-se verificar se é necessário aumentar o recurso do cliente, por conta da implantação do sistema Fiscal S-2. +Se for necessário ampliar recursos, altere os arquivos abaixo conforme planilha de manutenção: +```console +# vim /etc/apache2/envvars +# vim /etc/php/8.2/fpm/pool.d/www.conf +``` + +Ajuste os arquivos awstats do cliente: + +```console +# cd /etc/awstats +# mv awstats.nfse-cliente.atende.net.disabled awstats.nfse-demonstracao.atende.net.conf +# vim awstats.nfse-demonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/nfse-demonstracao.atende.net-ssl-access.log" +SiteDomain="nfse-demonstracao.atende.net" +HostAliases="nfse-demonstracao.atende.net" +--- + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/002-nfse-domain.conf +# vim /etc/hosts +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 nfse-demonstracao.atende.net +192.168.28.132 www.nfse-demonstracao.atende.net +--- +``` +Confira a sintaxe do Apache: + +```console +# apachectl -t +``` +Insira a flag abaixo no config padrão: + +```console +# vim /var/www/html/cliente.atende.net/_config.padrao.inc +$_CONFIG['versao_fiscal'] = 'S2'; +``` + +Após o horario de expediente, execute um graceful para aplicar as informações: +```console +# apachectl -k graceful +``` + +## Banco de Dados Atende.net + +ATENÇÃO: Apenas executar o procedimento abaixo se for necessário ampliar recurso! + +Altere os arquivos de configuração conforme planilha de manutenção: + +```console +# cd /etc/postgresql/16/main +# vim postgresql.prod +# vim postgresql.mig +--- +max connections +shared buffers +work mem +maintenance_work_mem - Alterar conforme arquivo que estiver editando (prod ou mig) +min_dynamic_shared_memory (MB) +max_locks_per_transaction - Alterar conforme arquivo que estiver editando (prod ou mig) +max worker processes +max parallel workers per gather +max parallel workers +effective cache_size +--- +``` + +Substitua pelo novo arquivo: + +```console +# cp postgresql.prod postgresql.conf +y +``` + +Altere o parâmetro huge_pages: + +```console +# vim postgresql.conf +huge_pages -> try +``` + +Reinicie a máquina apenas após o horário de expediente: + +```console +# reboot +``` + +Após o servidor reiniciar, deve-se ajustar as configurações do kernel, para isso execute o script: + +```console +# ./kernelsetup.sh +``` + +Edite o arquivo /etc/sysctl.conf e substitua as informações apresentadas pelas existentes: + +```console +# vim /etc/sysctl.conf +Ajustar conforme Retorno do script +``` + +Aplique as configurações: + +```console +# sysctl -p +``` + +Altere o parâmetro huge_pages: + +```console +# vim postgresql.conf +huge_pages -> on +``` + +Reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: + +```console +# systemctl restart postgresql +``` + +## Configuração Stack + +Altere na planilha de manutenção os novos valores da VM msd, assim como a flag fiscal=1 e reconfigure as stacks. +Se houver alteração, deve-se alterar no cadastro do GTT. + +Para aplicar os novos valores, realize um "Pull and Redeploy" após o horário de expediente. + +## Cadastro no Atende.net + +Faça login no sistema do cliente, por exempo demonstracao.atende.net e após vá em: +IPM > Gerenciamento do Sitema > Sistema > Domínios + +Realize o cadastro dos domínios conforme abaixo: + +- Endereço nfse + +Selecionar o sistema "Nota Fiscal Eletrônica" (66) e definir o redirecionamento para o endereço abaixo, trocando apenas o nome do cliente. + +`https://nfse-cliente.atende.net/autoatendimento/servicos/nfse` + +![NFSE](../img/_domonios_fiscalnovo-dominio_nfse.png) + + +- [`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/ativacao_ged.md b/docs/ativacao_ged.md new file mode 100644 index 0000000..132b4fb --- /dev/null +++ b/docs/ativacao_ged.md @@ -0,0 +1,146 @@ +## ⚙️ Procedimentos para Ativação do GED + +### 🔒 Configuração de NATs no Firewall + +Antes de iniciar, acesse o firewall do cliente e crie as regras de NAT conforme os exemplos já existentes para o **msd-01**, alterando apenas o **endereço IP**, a **porta** e a **descrição**. + +NATs a serem replicados: + +- **Cockpit msd-03**: Porta `8029` +- **Ssh msd-03**: Porta `9029` + +As configurações devem ficar conforme o exemplo abaixo: + +![Configuração dos NATs](../img/config_nat_ged.png) + +#### 🌐 Realizar também o cadastro no DNS Forwarder + +Services > DNS Forwarder +![Configuração dos DNs](../img/config_dns_ged.png) + +Host Overrides > + Add + +![Configuração dos DNs2](../img/config_dns_ged2.png) + ++ Add Host Name +--- + +### VmWare + +1. Acesse o VMware e busque pela VM msd-03 que foi clonada. +2. Verifique as configurações da VM. +3. Realize o *Power On* da VM. + +--- + +### 🚀 Deploy da MSD-03 + +Após ligar a VM, siga com o procedimento de deploy da MSD-03: + +- 📄 [Deploy da MSD-03](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/server-deploy.md) + +--- + +### 📊 Cadastro no Zabbix + +1. Cadastre o servidor no Zabbix. +2. Lembre-se de incluí-lo no **mapa** de monitoramento. + +--- + +### 📁 Atualização da Planilha + +Acesse a planilha **"Manutenção Servidores - 15082024 v1"**, localize o cliente e altere o valor da coluna **"Ged Ativo?"** para `1`. + +--- + +### 📦 Deploy da Stack OCR File Optimizer + +Realize o deploy da stack abaixo e ajuste os recursos das demais stacks dos servlets conforme as novas informações da planilha. + +⚠️ **Importante**: Apenas salve as alterações, **não** reinicie as stacks neste momento. + +- 📄 [Deploy do OCR File Optimizer](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_atendenet-ocr-fileoptimizer.md) + +> Essa stack é um serviço **Tomcat** que roda no ambiente do cliente. Se você estiver apenas ativando o GED, certifique-se de que o deploy da stack já tenha sido realizado conforme descrito acima. + +--- + +### 🛠️ Procedimentos no GTT + +1. Buscar pelo cliente. +2. Selecionar o equipamento do tipo **"cluster"**. +3. Botão direito no equipamento >> Serviços >> Incluir >> Buscar pelo template OCR e realizar as alterações de acordo com o ambiente do cliente. + +**Caminho**: +*Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Serviços do Equipamento* + +As stacks que já estão cadastradas deverão ser atualizadas com os novos valores que foram gerados na planilha. + +--- + +### 🧾 Documentação dos Processos + +Os procedimentos listados abaixo serão realizados por quem for executar a **reinicialização das stacks**, que deve ocorrer **fora do expediente**. + +Tramitar então o chamado para o responsável pela reinicialização. + +``` +Foi realizada a criação da **msd-03**, o deploy da stack do **OCR** e as demais configurações nas outras stacks. + +Também foi feito o cadastro da nova stack no **GDT** e a atualização das variáveis. + +Fica pendente, portanto, realizar o **pull e o redeploy** para aplicar as alterações nas stacks, bem como a configuração dos endereços dos microserviços dentro do Atende.Net +``` + +Caso chamado já esteja com responsável, apenas realizar o complemento com a mensagem acima. + +--- + +### 🔹 Passo a Passo + +--- + +### 1. Acesse o Atende.Net + +> URL: [https://demonstracao.atende.net](https://demonstracao.atende.net) + +--- + +### 2. Acesse a rotina de Microsserviços + +**Caminho:** +`Gerenciamento do Sistema » Sistema » Administração » Microsserviços » Microsserviços` + +Preencha os seguintes dados: + +- **Aplicação:** FileOptimizer +- **Nome:** WebCodeReader +- **Nome:** WebFileInfo +- **Nome:** WebOcrReader +- **Nome:** WebPdfJoin +- **Nome:** WebThumbnail + + **Endereço:** `http://192.168.28.142:8085` + +- Atualmente esses endereços vão estar todos direcionados para a porta `8083`, devem então ser alterados para o endereço acima, ficando na porta `8085`. + +--- + +### 3. Exemplo de configuração + +Tela de preenchimento do microserviço: + +![Configuração do microserviço FileOptimizer](../img/atende_net_config_microservico_FileOptimizer.png) + +--- + +### 4. Confirmação + +Clique em **Confirmar** e verifique se a versão foi carregada corretamente, conforme mostrado abaixo: + +![Versão carregada - FileOptimizer](../img/atende_net_config_microservico_FileOptimizer1.png) + +> **Observação:** A versão exibida pode ser diferente da apresentada na imagem, caso tenha ocorrido alguma atualização após a elaboração desta documentação. + +Finalizado então o procedimento de ativação do GED \ No newline at end of file diff --git a/docs/ativacao_ia-saude.md b/docs/ativacao_ia-saude.md new file mode 100644 index 0000000..d1817eb --- /dev/null +++ b/docs/ativacao_ia-saude.md @@ -0,0 +1,122 @@ +## Ativação IA na Saúde + +>### Objetivo da Documentação: +> +> O intuito dessa documentação, é realizar a Instalação dos serviços de IA no sistema da saúde, onde teremos que configurar o Servidor, Stacks e ajustes gerais no ambiente, seguindo o passo a passo abaixo! +> + +## Requisitos: + +* Verificar se no chamado consta todas as informações necessárias para a configuração/criação do ambiente +* Verificar se o ambiente necessita de ampliações nos demais Servidores (App, Banco de Dados, MSDs etc). +* Seguir o passo a passo com atenção não pulando nenhum passo ou executando algo fora de ordem + +### ✅ Criação Servidor MSD02 + +Após o ajuste dos Discos do passo anterior, deve ser verificado se o ambiente do cliente já possui o servidor 00000-cliente-msd-02-2400.atende.net. Caso NÃO exista, siga a documentação abaixo para realizar a configuração do mesmo! Se o cliente já possuir o Servidor, ignore o passo e siga para a Configuração do Servidor MSD02. + +Para criar o Servidor, acesse o VMWare correspondendo ao Data Center onde o cliente esta instalado: +PR: https://sp01-ger-vcsa01.atendenet.local/ ou SP: https://sp01-ger-vcsa01.atendenet.local/ +Efetue o login com suas credênciais! + +* Clone a VM Template (00000-clean-msd-03-2400.atende.net_v1): + +![Clone_VM](../img/clone_msd03_msd02.png) + +* Defina o nome padrão do Servidor + +![Definindo_Nome](../img/configuration_msd02_01.png) + +* Selecione o Volume do VMWARE conforme os demais servidor do cliente em questão: + +![Definindo_DataStore](../img/configuration_msd02_02.png) + +* Após a escolha do volume, selecione a opção (Customize this virtual machine's hardware) para configurarmos os recursos computacionais da Máquina Virtual: + +![Confiuration_VM](../img/configuration_msd02_03.png) + +* Configure a vCPU de acordo com o valor passado no chamado. Sempre atento a opção de Cores per Socket, onde para cada valor par, o valor deve corresponder a metade do mesmo. Caso for um valor impar, por exemplo 3, o valor da configuração deve ser igual. + +![Configuration_VM_02](../img/configuration_msd02_04.png) + +* Configure o valor da Memória de acordo com o valor passado no chamado, sempre deixando marcado a opção Reservation, garantindo que a memória configurada esteja reservada para essa máquina virtual: + +![Configuration_VM_03](../img/configuration_msd02_05.png) + +* Em seguida, selecione a rede de acordo com o cliente (00000_cliente) e garanta que a opção de Adapter Type esteja como VMXNET3: + +![Configuration_VM_04](../img/configuration_msd02_06.png) + +* Por fim, clique em Next e confirme o clone da Maquina Virtual. + +### ✅ Ajuste de Firewall - Cliente + +Ante de realizar a Configuração do Servidor MSD02, você deve realizar algumas configurações para o acesso desse novo Servidor MSD02. + +Para isso, acesse o Firewall do cliente através da INT_RT: +PR: https://172.16.1.XXXX:9080 +SP: https://172.24.1.XXX:9080 +As credenciais devem ser coletadas através da ferramenta https://datacenter.ipm.com.br + +#### Ajuste de NAT: + +Navegue em: Firewall > NAT > Port Forward + +Configure o NAT para as portas: +9030: Acesso via SSH +8030: Acesso Coockpit + +#### Ajuste DNS Forwarder: + +Navegue em: Services > DNS Forwarder +Crie uma nova entrada com o padrão: + +Host: 00000-cliente-msd-02-2400 +Domínio: atende.net +IP: 192.168.XXX.XXX +Salve a configuração! + + +### ✅ Configuração Servidor MSD02 + +Após a criação da VM e o Ajustes no Firewall, iremos criar o servidor MSD02. Para isso, siga os passos da documentação! + + Obs. Siga atentamente a documentação, principalmente considerando a quantidade de MSD's que o ambiente do cliente que você esta configurando possui. Neste caso do MSD02 iremos seguir a documentação apartir do trecho (Publicação do servidor worker) + +[Configuração Servidor MSD02](/data-center/Docker/src/branch/master/docs/server-deploy.md#publicação-do-servidor-worker) + +### ⚙️ Procedimentos para Ativação da IA na Saúde + +Antes de iniciar, certifique-se de que as seguintes stacks foram implantadas no ambiente do cliente: + +### IPM Saúde S1 + +- [Deploy do IES - API Gateway](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-ies-api-gateway.md) +- [Deploy do DES - ElasticSearch Local](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_atendenet-des-elasticsearch.md) +- [Deploy do IDI - Diabetes](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-idi-diabetes.md) +- [Deploy do ISP - Infarto AVC](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-isp-infarto-avc.md) +- [Deploy do ISA - Infra Postos](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-isa-infra-postos.md) + +### IPM Saúde S2 + +- [Deploy do IES - API Gateway](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-ies-api-gateway.md) +- [Deploy do DES - ElasticSearch Local](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_atendenet-des-elasticsearch.md) +- [Deploy do IDI - Diabetes](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-idi-diabetes.md) +- [Deploy do ISP - Infarto AVC](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-isp-infarto-avc.md) +--- + +Adicionar as linhas abaixo no _config.padrao.inc da Saúde + +vim /var/www/html/cliente.atende.net/saude/_config.padrao.inc + +``` +$_CONFIG['microsservicos_ia_jwt_key'] = 'xxxxxxxxxxxxxxxxxxxxx'; +$_CONFIG['elastic_user'] = '00000-cliente'; +$_CONFIG['elastic_pass'] = 'xxxxxxxxxxxxxxxxxxxxxx'; +``` + +O valor JWT deve ser copiado do GDT + +-- + +Finalizado as configurações da IA para Saúde, realizamos apenas o deploy das stacks a configuração de endereço de microsservicos é toda realizada pela saúde pois é diretamente no fonte. \ No newline at end of file diff --git a/docs/ativacao_ia-scraper.md b/docs/ativacao_ia-scraper.md new file mode 100644 index 0000000..05e2d5d --- /dev/null +++ b/docs/ativacao_ia-scraper.md @@ -0,0 +1,82 @@ +## Ativação IA Scraper + +>### Objetivo da Documentação: +> +> O intuito dessa documentação, é realizar a Instalação dos serviços de IA no sistema AtendeNet, onde teremos que configurar endereços de microsserviços e alteração no config, seguindo o passo a passo abaixo! + +Antes de iniciar é necessário garantir que já foi realizado o deploy das stacks abaixo, em seus respectivos ambientes: + +- 1 - [ElasticSearch Global (SVC)](https://documentos.ipm.com.br/data-center/docker/src/branch/master/docs/deploy_atendenet-des-elasticsearch.md) +- 2 - [RabbitMQ](https://documentos.ipm.com.br/data-center/docker/src/branch/master/docs/deploy_nodeservices-drm-rabbitmq.md) +- 3 - [Scraper](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_dara-imd-scraper.md) + +Se você tem certeza que já foi realizado os deploys acima nos ambientes globais, poderá seguir então com os procedimentos abaixo. + +--- + +## 0) Decidir o Data Center do cliente + +**Identifique se o cliente está no SP01 ou PR01.** +Isso determina os **endpoints** a configurar: + +| Data Center | IaScraper (IA) | RabbitMQ (FilaHubWebSocketPublisher) | +| ----------- | --------------------------------------- | ------------------------------------ | +| **SP01** | `https://sp01-svc.atende.net/IaScraper` | `sp01-js.atende.net:15672` | +| **PR01** | `https://pr01-svc.atende.net/IaScraper` | `pr01-js.atende.net:15672` | + +> **ATENÇÃO**: use sempre o endpoint correspondente ao **Data Center do cliente**. + +--- + +## 1) Ajustes no servidor Apache (AtendeNet) + +1. Acesse o **servidor Apache** do cliente com usuário **root**. + +2. Abra o arquivo de configuração do cliente (ajuste o domínio conforme o cliente): + + ```bash + vim /var/www/html/demonstracao.atende.net/_config.padrao.inc + ``` + +3. **Adicione ao final** do arquivo as linhas abaixo: + + ```php + $_CONFIG['rabbitmq_user'] = 'ipm'; + $_CONFIG['rabbitmq_pass'] = '+PMcPF2+IeahonAKh+IxYQ=='; + $_CONFIG['microsservicos_ia_jwt_key_global'] = 'XXXXXXXXXXXXXXXXXXX'; + ``` + + * O valor de `microsservicos_ia_jwt_key_global` deve ser obtido no **GDT**: + + * Equipamento: **Gravatai - JITSI** + * Usuários: **00000-sp01-svc** e **00000-pr01-svc** + * A senha do **RabbitMQ** é a informada acima. +--- + +## 2) Configurar os microsserviços no AtendeNet + +Acesse o **AtendeNet** do cliente (ajuste o domínio real do cliente): + +* Ex.: `https://demonstracao.atende.net` + +No menu: **Gerenciamento do Sistema » Microsserviços » Microsserviços** + +1. Localize a aplicação **RabbitMQ**. + +2. No serviço **FilaHubWebSocketPublisher**, informe o **endpoint** conforme o DC: + + * **SP01:** `sp01-js.atende.net:15672` + * **PR01:** `pr01-js.atende.net:15672` + +3. Localize a aplicação **Inteligência Artificial**. + +4. No serviço **IaScraper**, informe o **endpoint** conforme o DC: + + * **SP01:** `https://pr01-svc.atende.net/IaScraper` + * **PR01:** `https://sp01-svc.atende.net/IaScraper` + +![Mics Scraper](../img/mics_scraper.png) + +--- + +Após isso está finalizado a configuração do serviço IA Scraper. \ No newline at end of file diff --git a/docs/ativacao_jitsi.md b/docs/ativacao_jitsi.md new file mode 100644 index 0000000..319b570 --- /dev/null +++ b/docs/ativacao_jitsi.md @@ -0,0 +1,75 @@ +# Ativação do JITSI - Video Conferência + +Este processo consiste em 4 etapas: +1) Ativação do Módulo no Cliente +2) Configuração do _config.padrao do cliente +3) Configuração do Microserviço do Atende.Net +4) Configuração das Salas de Video Conferência + + +## 1. Ativação do Módulo + + +Para que o JITSI (Serviço de Video Conferência) seja ativado em um cliente, o módulo do mesmo precisa estar ativado. Para isso, a solicitação deve ser feita para Florianópolis ou ao Sr. Giovani Lunelli depende da situação e como a solicitação veio. + + +## 2. Configuração Apache (config.padrao) do cliente: + +Após a ativação do módulo no ambiente do cliente, deve ser feito a configuração no Apache do mesmo! +Neste passo, deve ser inserido a HASH conforme abaixo na config.padrao.inc do cliente! + + Importante: A HASH é igual para qualquer cliente, pois ela é a mesma para os dois ambientes globais do JITSI tanto no Data Center do PR como SP! + +Acesse o arquivo do _config.padrao.inc do cliente: +``` +vim /var/www/html/cliente.atende.net/_config.padrao.inc +``` +Inserir a config com a hash do App Secret do JITSI: +``` +$_CONFIG['meeting_app_secret'] = 'eGMJDJ6pdPoUQLS6imxtyw=='; +``` + + +## 3. Configuração do Microserviço do Atende.Net + +Após configurado a HASH do App no config.padrao.inc do cliente, é necessário agora configurar o Microserviço no sistema Atende.Net referente a esse módulo: + +Caminho: Gerenciamento do Sistema » Sistema » Administração » Microsserviços +Aplicação: Meeting +Microserviço: Meeting + + Importante: Diferente da HASH, a URL do serviço é diferente para cada ambiente, conforme o Data Center que o cliente estiver. Abaixo os endereços: + +Data Center PR: +``` +https://pr01-meet-01.atende.net +``` +Data Center SP: +``` +https://sp01-meet-01.atende.net +``` + +Exemplo: + +![config_microservicos](../img/meetingurl_microservicos.jpg) + + +## 4. Configuração das Salas de Video Conferência + +Após a estrutura do JITSI estar ativada conforme os 3 primeiros passos, basta configurar as salas para o funcionamento da video conferência: + +Acesso o caminho abaixo: + +Cadastros Únicos » Outros » Configuração » Geral + +Selecione a Aba Reuniões + +E defina a quantidade de (Limite de Transmissão Simultâneas) conforme o valor passado na solicitação. + + Importante: O numero de transmissões simultâneas ou salas que são definidos nessa janela, são de acordo com as configurações contratuais que o cliente esta pagando, sendo assim, sempre consulte o setor de contratos antes de realizar a configuração! + +![config_microservicos](../img/config_meeting_salas.jpg) + +Após configurados os 4 passos, o cliente já estará com a Video Conferência funcionando no sistema Atende.Net! + +[`Voltar`](../README.md) diff --git a/docs/ativacao_powerbi.md b/docs/ativacao_powerbi.md new file mode 100644 index 0000000..45231f5 --- /dev/null +++ b/docs/ativacao_powerbi.md @@ -0,0 +1,52 @@ +## ⚙️ Procedimentos para Ativação do Power BI + +Antes de iniciar, verifique se o deploy das seguintes stacks já foi realizado: + +- [Deploy do PowerBI Adapter](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_nodeservices-naa-powerbi-adapter.md) +- [Deploy do PowerBI Gateway](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_nodeservices-ngi-powerbi-gateway.md) + +Essas stacks são serviços Node.js que rodam no ambiente global. Portanto, se você estiver apenas ativando o Power BI para um novo cliente, é provável que o deploy já tenha sido realizado durante a criação do ambiente Node.js. + +--- + +### 🔹 Passo a Passo + +--- + +### 1. Acesse o Atende.Net + +> URL: [https://demonstracao.atende.net](https://demonstracao.atende.net) + +--- + +### 2. Acesse a rotina de Microsserviços + +**Caminho:** +`Gerenciamento do Sistema » Sistema » Administração » Microsserviços » Microsserviços` + +Preencha os seguintes dados: + +- **Aplicação:** Power BI +- **Nome:** PowerBiAdapter + + **Endereço:** `https://sp01-js.atende.net/naa-powerbi-adapter-v1` + +--- + +### 3. Exemplo de configuração + +Tela de preenchimento do microserviço: + +![Configuração do microserviço PowerBiAdapter](../img/atende_net_config_microservico_PowerBiAdapter.png) + +--- + +### 4. Confirmação + +Clique em **Confirmar** e verifique se a versão foi carregada corretamente, conforme mostrado abaixo: + +![Versão carregada - PowerBiAdapter](../img/atende_net_config_microservico_PowerBiAdapter1.png) + +> **Observação:** A versão exibida pode ser diferente da apresentada na imagem, caso tenha ocorrido alguma atualização após a elaboração desta documentação. + +Finalizado então o procedimento de ativação do PowerBI. \ No newline at end of file diff --git a/docs/ativacao_pracadeatendimento.md b/docs/ativacao_pracadeatendimento.md new file mode 100644 index 0000000..c7173ba --- /dev/null +++ b/docs/ativacao_pracadeatendimento.md @@ -0,0 +1,84 @@ +# Procedimentos para ativação do módulo **Praça de Atendimento** + +> **Referência de exemplo** +> Chamado: **792526** + +## Visão geral + +A ativação exige: + +1. identificar o **Data Center** do cliente (**SP01** ou **PR01**); +2. ajustar o **config** do AtendeNet no servidor Apache; +3. configurar os **endpoints de microsserviços** (NodeJsm/Hubwebsocket) no AtendeNet; +4. configurar o **RabbitMQ** (FilaHubWebSocketPublisher); +5. **validar** conectividade e versão. + +--- + +## 0) Decidir o Data Center do cliente + +**Identifique se o cliente está no SP01 ou PR01.** +Isso determina os **endpoints** a configurar: + +| Data Center | Hubwebsocket (NodeJsm) | RabbitMQ (FilaHubWebSocketPublisher) | +| ----------- | ----------------------------- | ------------------------------------ | +| **SP01** | `https://sp01-js.atende.net/` | `sp01-js.atende.net:15672` | +| **PR01** | `https://pr01-js.atende.net/` | `pr01-js.atende.net:15672` | + +> **ATENÇÃO**: use sempre o endpoint correspondente ao **Data Center do cliente**. + +--- + +## 1) Ajustes no servidor Apache (AtendeNet) + +1. Acesse o **servidor Apache** do cliente com usuário **root**. + +2. Abra o arquivo de configuração do cliente (ajuste o domínio conforme o cliente): + + ```bash + vim /var/www/html/demonstracao.atende.net/_config.padrao.inc + ``` + +3. **Adicione ao final** do arquivo as linhas abaixo: + + ```php + $_CONFIG['rabbitmq_user'] = 'ipm'; + $_CONFIG['rabbitmq_pass'] = '+PMcPF2+IeahonAKh+IxYQ=='; + $_CONFIG['microsservicos_kong_jwt_key'] = 'XXXXXXXXXXXXXXXXXXX'; + ``` + + * O valor de `microsservicos_kong_jwt_key` deve ser obtido no **GDT**: + + * Equipamento: **Gravatai - JITSI** + * Usuários: **00000-pr01-node** e **00000-sp01-node** + * A senha do **RabbitMQ** é a informada acima. +--- + +## 2) Configurar os microsserviços no AtendeNet + +Acesse o **AtendeNet** do cliente (ajuste o domínio real do cliente): + +* Ex.: `https://demonstracao.atende.net` + +No menu: **Gerenciamento do Sistema » Microsserviços » Microsserviços** + +1. Localize a aplicação **NodeJs**. + +2. No serviço **Hubwebsocket**, informe o **endpoint** conforme o DC: + + * **SP01:** `https://sp01-js.atende.net/` + * **PR01:** `https://pr01-js.atende.net/` + +![Mics Praca Atendimento](../img/mics_praca_atendimento.png) + +--- + +## 3) Configurar o RabbitMQ no AtendeNet + +Ainda em **Microsserviços**, localize a aplicação **Rabbit MQ** e, no serviço **FilaHubWebSocketPublisher**, informe: + +* **SP01:** `sp01-js.atende.net:15672` +* **PR01:** `pr01-js.atende.net:15672` +--- + +Após isso está finalizada a configuração do módulo Praça de Atendimento. \ No newline at end of file diff --git a/docs/ativacao_slony.md b/docs/ativacao_slony.md new file mode 100644 index 0000000..4bcfb8b --- /dev/null +++ b/docs/ativacao_slony.md @@ -0,0 +1,780 @@ +# Roteiro de Ativação do Slony + +### LEIA - IMPORTANTE + +Caso queira ativar o Slony pela primeira vez utilize o manual seguindo os passos abaixo. +Porém caso queira apenas adicionar um novo Node em uma estrutura do Slony já configurada (Exemplo Fiscal S1), siga o passo a passo do roteiro a seguir: + +[`Ativação Slony Fiscal - Adicionando Novo Node`](./ativacao_slony_node.md) + +## Destino - Banco Atende.Net + +Realize a instalação do Slony no banco: +``` +cd /root/ +wget https://datacenter.atende.net/updates/slony1_11.zip +unzip slony1_11.zip +cd slony +rpm -Uvh slony1_11-2.2.10-1.rhel8.x86_64.rpm perl-Switch-2.17-10.el8.noarch.rpm perl-DBD-Pg-3.7.4-4.module_el8.3.0+426+0b4e9c0a.x86_64.rpm perl-Text-Balanced-2.03-395.el8.noarch.rpm perl-Filter-1.58-2.el8.x86_64.rpm perl-SelfLoader-1.23-416.el8.noarch.rpm +``` +Realize a liberação do IP do Fiscal ou Vigilância no pg_hba do SGBD: +``` +vim /var/lib/pgsql/11/data/pg_hba.conf +Ex.: host all all 172.16.1.18/32 trust + +systemctl reload postgresql-11.service +``` + +Execute o SQL para criação da estrutura (schema replicacao) no SGBD de destino: + +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` + +Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. +``` +lsblk + +fdisk /dev/sde + +#Dispositivo Inicializar Início Fim Setores Tamanho Id Tipo +#/dev/sde1 2048 2587885567 2587883520 1,2T 8e Linux LVM + +vgcreate sgdb10 /dev/sde1 +lvcreate -L +1233G -n replicacao sgdb10 +mkfs.xfs /dev/mapper/sgdb10-replicacao +vim /etc/fstab +/dev/mapper/sgdb10-replicacao /var/lib/pgsql/11/tablespaces/replicacao xfs defaults 0 1 +mkdir -p /var/lib/pgsql/11/tablespaces/replicacao +mount /var/lib/pgsql/11/tablespaces/replicacao +chown postgres.postgres /var/lib/pgsql/11/tablespaces/replicacao/ -R +chmod 700 /var/lib/pgsql/11/tablespaces/replicacao/ -R +``` +Criar tablespace replicacao: +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/pgsql/11/tablespaces/replicacao'; +``` + +## Origem - Configurando Node + +Altere os dados conforme os do cliente que irá fazer a replicação: +``` +vim /usr/local/slony1/etc/slon_tools.conf + + $CLUSTER_NAME = 'replication_ipmfiscal'; + add_node( + node => 1, + host => '192.168.23.10', + dbname => '00002_ipmfiscal', + port => 5432, + user => 'postgres', + password => '' + ); + + add_node( + node => 2, + host => '172.24.1.24', + dbname => '08573_sc', + port => 65432, + user => 'postgres', + password => '' + + ); +``` +Quando finalizada a configuração do Slave, deve-se prosseguir com o próximo passo: +``` +/usr/local/slony1/bin/slonik_init_cluster | /usr/local/slony1/bin/slonik +``` +Após, inicie o cluster: +``` +/usr/local/slony1/bin/slon_start 1 +/usr/local/slony1/bin/slon_start 2 +``` + +Atualize as funções no master: + +```ruby +CREATE SCHEMA replicacao; + +CREATE TABLE replicacao.tbclientenode +( + clicodigo integer not null, + nodcodigo integer not null +); +ALTER TABLE replicacao.tbclientenode + ADD CONSTRAINT pk_tbclientenode PRIMARY KEY(nodcodigo); +CREATE UNIQUE INDEX idx_unique_tbclientenode_cliente + ON replicacao.tbclientenode (clicodigo); + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +drop function if exists replicacao.fn_inicia_replicacao(s_contexto text, a_tabelas text[], i_clicodigo integer); + +create or replace function replicacao.fn_get_schema_slony() + returns text as +$body$ +begin + return (select schemaname + from pg_tables + where tablename = 'sl_node'); +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_adiciona_schema_slony_search_path() + returns boolean as +$body$ +declare + s_search_path text; + s_schema_name text; +begin + s_schema_name := (select replicacao.fn_get_schema_slony()); + + s_search_path := pg_catalog.current_setting('search_path'); + s_search_path := s_search_path||', '||s_schema_name; + + PERFORM pg_catalog.set_config('search_path', s_search_path, true); + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_schema_slony_search_path() + returns boolean as +$body$ +declare + s_search_path text; + s_schema_name text; +begin + s_schema_name := (select replicacao.fn_get_schema_slony()); + + s_search_path := pg_catalog.current_setting('search_path'); + s_search_path := replace(s_search_path, ', '||s_schema_name, ''); + + PERFORM pg_catalog.set_config('search_path', s_search_path, true); + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.status() + returns table(cliente integer, lagtime interval, lastevent bigint, lastreceived bigint, sincronizado boolean) as +$body$ +begin + perform (select replicacao.fn_adiciona_schema_slony_search_path()); + + drop table if exists tbreturn; + create temp table tbreturn as + select tbclientenode.clicodigo as cliente, + sl_status.st_lag_time as lagtime, + sl_status.st_last_event as lastevent, + sl_status.st_last_received as lastreceived, + sl_status.st_last_event = sl_status.st_last_received as sincronizado + from sl_status + left join replicacao.tbclientenode + on tbclientenode.nodcodigo = sl_status.st_received; + + perform (select replicacao.fn_remove_schema_slony_search_path()); + + return query(select * from tbreturn); +end; +$body$ + LANGUAGE plpgsql VOLATILE; + + +CREATE OR REPLACE FUNCTION replicacao.fn_get_node_by_clicodigo(i_clicodigo integer) + RETURNS integer AS +$BODY$ +declare + i_node integer; +begin + select nodcodigo + into i_node + from replicacao.tbclientenode + where clicodigo = i_clicodigo; + + if (i_node is null) then + raise exception 'Não foi possível encontrar um node de replicação para o cliente %.', i_clicodigo; + end if; + + return i_node; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_prepara_contexto( + s_contexto text, + a_tabelas text[]) + RETURNS boolean AS +$BODY$ +declare + i_set integer; + s_pk text; + r_tabela record; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_prepara_contexto'); + + lock table sl_event; + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm DISABLE; + end if; + + if exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", já existe.', s_contexto; + else + select coalesce(max(set_id),0)+1 into i_set from sl_set; + perform storeset(i_set, s_contexto); + end if; + + for r_tabela in select unnest(a_tabelas) as nometabela + loop + if (position('webbased.' in lower(r_tabela.nometabela)) > 0) then + raise exception 'A tabela "%", está relacionada ao schema webbased, o qual não deve ser replicado.', r_tabela.nometabela; + end if; + + if (exists(select 1 + from sl_table + where tab_nspname||'.'||tab_relname = r_tabela.nometabela)) then + raise exception 'A tabela "%", já está sendo replicada.', r_tabela.nometabela; + end if; + + select indice.relname + into s_pk + from pg_class tabela + left join pg_namespace + on pg_namespace.oid = tabela.relnamespace + left join pg_index + on pg_index.indrelid = tabela.oid + left join pg_class indice + on indice.oid = pg_index.indexrelid + where pg_namespace.nspname||'.'||tabela.relname = r_tabela.nometabela + and pg_index.indisprimary; + + if coalesce(s_pk,'') = '' then + raise exception 'A tabela "%", não possui chave primária.', r_tabela.nometabela; + end if; + + perform setaddtable(i_set, (select coalesce(max(tab_id),0)+1 from sl_table), r_tabela.nometabela, s_pk, ''); + end loop; + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm ENABLE; + end if; + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_inicia_replicacao_contexto( + s_contexto text, + i_clicodigo integer) + RETURNS boolean AS +$BODY$ +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_inicia_replicacao_contexto'); + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm DISABLE; + end if; + + perform replicacao.fn_adiciona_slave_replicacao(s_contexto, i_clicodigo); + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm ENABLE; + end if; + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_interrompe_replicacao(s_contexto text) + RETURNS boolean AS +$BODY$ +declare + i_set integer; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_interrompe_replicacao('''||s_contexto||''')'); + + if not exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", não existe.', s_contexto; + else + select set_id into i_set from sl_set where set_comment = s_contexto; + end if; + + perform dropset(i_set); + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_interrompe_replicacao_tabela(s_tabela text) + RETURNS boolean AS +$BODY$ +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_interrompe_replicacao_tabela('''||s_tabela||''')'); + + if (not exists(select tab_id + from sl_table + where tab_nspname||'.'||tab_relname = s_tabela)) then + raise exception 'A tabela "%", não está sendo replicada.', s_tabela; + end if; + + perform setdroptable((select tab_id + from sl_table + where tab_nspname||'.'||tab_relname = s_tabela)); + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_adiciona_slave_replicacao( + s_contexto text, + i_clicodigo integer) + RETURNS boolean AS +$BODY$ +declare + i_set integer; + i_node_master integer; + i_node_slave integer; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + i_node_master = 1; + i_node_slave = replicacao.fn_get_node_by_clicodigo(i_clicodigo); + + insert into replicacao.tblog (logacao) values ('fn_adiciona_slave_replicacao'); + + if not exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", não existe.', s_contexto; + else + select set_id into i_set from sl_set where set_comment = s_contexto; + + if exists(select 1 from sl_set where set_comment = s_contexto and age(xmin) = 0) then + raise exception 'O contexto "%", não deve ser preparado e iniciado na mesma execução.', s_contexto; + end if; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_master) then + raise exception 'O node de replicação "%", não existe.', i_node_master; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_slave) then + raise exception 'O node de replicação "%", não existe.', i_node_slave; + end if; + + perform subscribeset(i_set, i_node_master, i_node_slave, false, false); + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_interrompe_replicacao_tabelas_sem_slave() + RETURNS boolean AS +$BODY$ +declare + s_objetos text; + r_record record; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_interrompe_replicacao_tabelas_sem_slave'); + + lock table sl_set; + + for r_record in + select sl_table.tab_nspname||'.'||sl_table.tab_relname as table + from sl_table + left join sl_set + on sl_set.set_id = sl_table.tab_set + left join sl_subscribe + on sl_subscribe.sub_set = sl_set.set_id + where sl_subscribe.sub_receiver is null + loop + perform replicacao.fn_interrompe_replicacao_tabela(r_record.table); + end loop; + + perform replicacao.fn_remove_schema_slony_search_path(); + perform replicacao.fn_adiciona_schema_slony_search_path(); + + for r_record in + select sl_set.set_comment as contexto + from sl_set + left join sl_subscribe + on sl_subscribe.sub_set = sl_set.set_id + where sl_subscribe.sub_receiver is null + loop + perform replicacao.fn_interrompe_replicacao(r_record.contexto); + end loop; + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_remove_slave_replicacao( + s_contexto text, + i_clicodigo integer) + RETURNS text AS +$BODY$ +declare + i_set integer; + i_node_master integer; + i_node_slave integer; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + i_node_master = 1; + i_node_slave = replicacao.fn_get_node_by_clicodigo(i_clicodigo); + + insert into replicacao.tblog (logacao) values ('fn_remove_slave_replicacao'); + + if not exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", não existe.', s_contexto; + else + select set_id into i_set from sl_set where set_comment = s_contexto; + + if exists(select 1 from sl_set where set_comment = s_contexto and age(xmin) = 0) then + raise exception 'O contexto "%", não deve ser preparado e iniciado na mesma execução.', s_contexto; + end if; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_master) then + raise exception 'O node de replicação "%", não existe.', i_node_master; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_slave) then + raise exception 'O node de replicação "%", não existe.', i_node_slave; + end if; + + raise notice 'Executar no slave: "select * from _replication_ipmfiscal.unsubscribeset(%, %, false);"', i_set, i_node_slave; + + /*perform unsubscribeset(i_set, i_node_slave, false);*/ + + perform replicacao.fn_remove_schema_slony_search_path(); + + return format('Executar no slave: "select * from _replication_ipmfiscal.unsubscribeset(%s, %s, false);"', i_set, i_node_slave); +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + +CREATE OR REPLACE FUNCTION replicacao.fn_event_trigger_on_execute_ddl() + RETURNS event_trigger + LANGUAGE 'plpgsql' + COST 100 + VOLATILE NOT LEAKPROOF +AS $BODY$ +BEGIN + if position((select replicacao.fn_get_schema_slony()) in current_query()) = 0 then + insert into replicacao.tbddl (ddlcomando) values (current_query()); + end if; +END +$BODY$; +``` +Acessar o banco do fiscal, schema replicação, tabela tbclientenode (alterar o código do cliente) não necessário o SQL abaixo: +```ruby +insert into replicacao.tbclientenode (clicodigo, nodcodigo) values (88, 2); + +clicodigo = (Codigo do sistema) do cliente no Atende.Net +nodcodigo - Código do node criado no slon_tools.conf ou no arquivo relacionado a sua adição no master. + +Obs: Para cada node SLAVE (Destino) adicional deve-se executar o procedimento descrito no chamado: 480647, anexo 9 (Migração Fiscal - Criando Nodes) +``` +Ao final, deve-se executar o script para criar a estrutura no banco slave, para isto edite o script de backup que fica no servidor master(IPMFiscal) +```ruby +su - postgres + +# Altere +cod_fiscal="8165" -- Código do schema (Fiscal) +IP_Destino="172.16.1.90" -- IP do Atende.Net - Servidor SLAVE (Destino) +Porta_Destino="65432" - Porta de acesso ao banco Atende.Net - Servidor SLAVE (Destino) +BD_Destino="01611_pinhais" - Nome do banco de dados do Atende.Net - Servidor SLAVE (Destino) + +# Execute o script - O backup e o log serão criados na storage de backup "X:\STORE\Transferir\00002_ipmfiscal" +su - postgres +./backup_estrutura_slony.sh + +# Ao final, confira os log´s. +cat 8561*.log | grep ERROR | uniq -u + +# Conferir se os Schemas foram criados, o comando deve retornar os Schemas restaurados, caso não existe favor verificar +cat 8561*.log | grep "creating SCHEMA 8561" | uniq -u (Substituir pelo Código do Schema) +``` +## Validações +Validar Schema e Authorization no banco destino: +```ruby +-- Schema: migracao_fiscal +-- DROP SCHEMA migracao_fiscal; +CREATE SCHEMA migracao_fiscal + AUTHORIZATION dbaipm; + +GRANT ALL ON SCHEMA migracao_fiscal TO dbaipm; +GRANT ALL ON SCHEMA migracao_fiscal TO administradores; +GRANT USAGE ON SCHEMA migracao_fiscal TO consultas; +GRANT ALL ON SCHEMA migracao_fiscal TO migradores; +GRANT ALL ON SCHEMA migracao_fiscal TO sistema; +``` +Setar privilégios schemas fiscal: +```ruby +do +$body$ +declare + r_objeto record; +begin + for r_objeto in (select 'GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO dbaipm; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO administradores; + GRANT USAGE ON SCHEMA "'||pg_namespace.nspname||'" TO consultas; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO migradores; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO sistema;' as cmd, + '"'||pg_namespace.nspname||'"' as nome + from pg_namespace + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + ) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando grants do schema '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando grants do schema %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; +end; +$body$; +``` +## Script de teste +```ruby +# Master (Origem) +create table replicacao.tbteste2(col1 integer primary key, col2 text); +insert into replicacao.tbteste2 values(1,'1'); +select * from replicacao.tbteste2; + +# Slave (destino) +create table replicacao.tbteste2(col1 integer primary key, col2 text); + +# Master (origem) +select replicacao.fn_prepara_contexto('Teste Inicial 2', string_to_array('replicacao.tbteste2',',')); +--executar os dois acima juntos +select replicacao.fn_inicia_replicacao_contexto('Teste Inicial 2', 512); --Segundo parametro é o código do cliente (CÓDIGO DO SISTEMA NO GDT) + +# Slave (destino) +select * from replicacao.tbteste2; --Já deve ter 1 registro + +# Master (origem) +insert into replicacao.tbteste2 values(2,'2'); + +# Slave (destino) +select * from replicacao.tbteste2; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# Master (origem) +select replicacao.fn_interrompe_replicacao('Teste Inicial 2'); +drop table replicacao.tbteste2; + +# Slave (destino) +drop table replicacao.tbteste2; +``` +Parar o serviço e iniciar novamente, após, verifique o Lag Time: +``` +/usr/local/slony1/bin/slon_kill + +/usr/local/slony1/bin/slon_start 1 +/usr/local/slony1/bin/slon_start 2 +``` +```ruby +select * from replicacao.status(); +``` \ No newline at end of file diff --git a/docs/ativacao_slony_node.md b/docs/ativacao_slony_node.md new file mode 100644 index 0000000..34585e3 --- /dev/null +++ b/docs/ativacao_slony_node.md @@ -0,0 +1,339 @@ +# Roteiro - Adicionando Novo Node no Slony + +### IMPORTANTE +Esse manual é um passo a passo do procedimento de inclusão de um novo Node (Cliente) no serviço do Slony já instalado. +Caso precise realizar uma instalação Inicial (partindo do zero) utilize o manual: + +[`Ativação Slony Fiscal - Inicial`](./ativacao_slony.md) + +## Destino - Banco Atende.Net + +Realize a instalação do Slony no banco: +``` +cd /root/ +wget https://datacenter.atende.net/updates/slony1_11.zip +unzip slony1_11.zip +cd slony +rpm -Uvh slony1_11-2.2.10-1.rhel8.x86_64.rpm perl-Switch-2.17-10.el8.noarch.rpm perl-DBD-Pg-3.7.4-4.module_el8.3.0+426+0b4e9c0a.x86_64.rpm perl-Text-Balanced-2.03-395.el8.noarch.rpm perl-Filter-1.58-2.el8.x86_64.rpm perl-SelfLoader-1.23-416.el8.noarch.rpm +``` +Realize a liberação do IP do Fiscal ou Vigilância no pg_hba do SGBD: +``` +vim /var/lib/pgsql/11/data/pg_hba.conf +Ex.: host all all 172.16.1.18/32 trust + +systemctl reload postgresql-11.service +``` + +Execute o SQL para criação da estrutura (schema replicacao) no SGBD de destino: + +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` + +Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. +``` +lsblk + +fdisk /dev/sde + +#Dispositivo Inicializar Início Fim Setores Tamanho Id Tipo +#/dev/sde1 2048 2587885567 2587883520 1,2T 8e Linux LVM + +vgcreate sgdb10 /dev/sde1 +lvcreate -L +1233G -n replicacao sgdb10 +mkfs.xfs /dev/mapper/sgdb10-replicacao +vim /etc/fstab +/dev/mapper/sgdb10-replicacao /var/lib/pgsql/11/tablespaces/replicacao xfs defaults 0 1 +mkdir -p /var/lib/pgsql/11/tablespaces/replicacao +mount /var/lib/pgsql/11/tablespaces/replicacao +chown postgres.postgres /var/lib/pgsql/11/tablespaces/replicacao/ -R +chmod 700 /var/lib/pgsql/11/tablespaces/replicacao/ -R +``` +Criar tablespace replicacao: +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/pgsql/11/tablespaces/replicacao'; +``` + +## Origem - Configurando Node + +Altere os dados conforme os do cliente que irá fazer a replicação: +``` +vim /usr/local/slony1/etc/slon_tools.conf + + $CLUSTER_NAME = 'replication_ipmfiscal'; + add_node( + node => 1, + host => '192.168.23.10', + dbname => '00002_ipmfiscal', + port => 5432, + user => 'postgres', + password => '' + ); + + add_node( + node => 2, + host => '172.24.1.24', + dbname => '08573_sc', + port => 65432, + user => 'postgres', + password => '' + + ); +``` +Quando finalizada a configuração do Slave, deve-se prosseguir com o próximo passo: +Navegue até a pasta e crie o arquivo de configuração para criação do novo Node +No nome do arquivo siga o padrão dos demais (create_node_"numerodonode"_"nomedocliente".cmd) +``` +cd /usr/local/slony1/bin/ +vim create_node_2_cliente.cmd + +cluster name=replication_ipmfiscal; + +node 1 admin conninfo ='dbname=00002_ipmfiscal host=127.0.0.1 user=postgres'; +node 2 admin conninfo ='dbname=00000_cliente host=IP_INT_RT port=65432 user=postgres'; +store node (id=2, comment='Node 2 - 00000_cliente@IP_INT_RT', event node=1); + +store path(server=1,client=2,conninfo='host=127.0.0.1 dbname=00002_ipmfiscal user=postgres'); +store path(server=2,client=1,conninfo='host=IP_INT_RT port=65432 dbname=00000_cliente user=postgres'); + +# Após configurado, salve o arquivo e execute o comando abaixo indicando o arquivo que acabou de ser configurado: + +/usr/local/slony1/bin/slonik /usr/local/slony1/bin/create_node_"numerodonode"_"nomedocliente".cmd +``` + +Acessar o banco do fiscal, schema replicação, tabela tbclientenode (alterar o código do cliente) não necessário o SQL abaixo: +```ruby +insert into replicacao.tbclientenode (clicodigo, nodcodigo) values (88, 2); + +clicodigo = (Codigo do sistema) do cliente no Atende.Net +nodcodigo - Código do node criado no slon_tools.conf ou no arquivo relacionado a sua adição no master. + +Obs: Para cada node SLAVE (Destino) adicional deve-se executar o procedimento descrito no chamado: 480647, anexo 9 (Migração Fiscal - Criando Nodes) +``` +Ao final, deve-se executar o script para criar a estrutura no banco slave, para isto edite o script de backup que fica no servidor master "IPMFiscal" (Script: backup_estrutura_slony.sh) +```ruby +su - postgres + +# Altere +cod_fiscal="8165" -- Código do schema (Fiscal) +IP_Destino="172.16.1.90" -- IP do Atende.Net - Servidor SLAVE (Destino) +Porta_Destino="65432" - Porta de acesso ao banco Atende.Net - Servidor SLAVE (Destino) +BD_Destino="01611_pinhais" - Nome do banco de dados do Atende.Net - Servidor SLAVE (Destino) + +# Execute o script - O backup e o log serão criados na storage de backup "X:\STORE\Transferir\00002_ipmfiscal" +su - postgres +./backup_estrutura_slony.sh + +# Ao final, confira os log´s. +cat 8561*.log | grep ERROR | uniq -u + +# Conferir se os Schemas foram criados, o comando deve retornar os Schemas restaurados, caso não existe favor verificar +cat 8561*.log | grep "creating SCHEMA 8561" | uniq -u (Substituir pelo Código do Schema) +``` +## Validações +Validar Schema migracao_fiscal foi criado no banco destino, e setar os privilégios para o mesmo: +```ruby +GRANT ALL ON SCHEMA migracao_fiscal TO dbaipm; +GRANT ALL ON SCHEMA migracao_fiscal TO administradores; +GRANT USAGE ON SCHEMA migracao_fiscal TO consultas; +GRANT ALL ON SCHEMA migracao_fiscal TO migradores; +GRANT ALL ON SCHEMA migracao_fiscal TO sistema; +``` +Setar privilégios para demais schemas referentes ao Fiscal também no SGDB de Destino (cliente): +```ruby +do +$body$ +declare + r_objeto record; +begin + for r_objeto in (select 'GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO dbaipm; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO administradores; + GRANT USAGE ON SCHEMA "'||pg_namespace.nspname||'" TO consultas; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO migradores; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO sistema;' as cmd, + '"'||pg_namespace.nspname||'"' as nome + from pg_namespace + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + ) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando grants do schema '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando grants do schema %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; +end; +$body$; + +``` +Após a restauração e conferencia dos logs, com o usuário root no SGDB Origem inicie o Node: +```ruby +/usr/local/slony1/bin/slon_start 2 (Indique o node que deseja iniciar) +``` +## Script de teste +```ruby +# Master (Origem) +create table replicacao.tbteste2(col1 integer primary key, col2 text); +insert into replicacao.tbteste2 values(1,'1'); +select * from replicacao.tbteste2; + +# Slave (destino) +create table replicacao.tbteste2(col1 integer primary key, col2 text); + +# Master (origem) +select replicacao.fn_prepara_contexto('Teste Inicial 2', string_to_array('replicacao.tbteste2',',')); + +select replicacao.fn_inicia_replicacao_contexto('Teste Inicial 2', 512); --Segundo parametro é o código do cliente (CÓDIGO DO SISTEMA NO GDT) + +# Slave (destino) +select * from replicacao.tbteste2; --Já deve ter 1 registro + +# Master (origem) +insert into replicacao.tbteste2 values(2,'2'); + +# Slave (destino) +select * from replicacao.tbteste2; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# Master (origem) +select replicacao.fn_interrompe_replicacao('Teste Inicial 2'); +drop table replicacao.tbteste2; + +# Slave (destino) +drop table replicacao.tbteste2; +``` +Após os testes, executar o comando abaixo para verificar o LagTime no Servidor Master. +Esse select irá retornar o tempo de todos os nodes ativos via Slony (replicação). O retorno será apenas o tempo do lagtime e o mesmo deverá sempre estar variando (descendo e subindo), se estiver com mais de 10 minutos acumulado considera que possa haver algum probelma. +```ruby +select * from replicacao.status(); +``` \ No newline at end of file diff --git a/docs/ativar_replicacao_arquivos.md b/docs/ativar_replicacao_arquivos.md new file mode 100644 index 0000000..a8c2ff8 --- /dev/null +++ b/docs/ativar_replicacao_arquivos.md @@ -0,0 +1,327 @@ + +# Ativação da Replicação Anexos + +Obs. Esse procedimento é voltado ao cliente que não possui nenhum tipo de configuração de replicação feita. Caso o cliente já tenho a replicação do banco de dados, muito dos passos colocados aqui já estarão feito, bastante apenas um checklist no ambiente em questão! + +## Firewall - PfSense + +* Configurar o Firewall para receber a replicação: + +Primeiro passo é criar um Aliases do IP público passado pelo cliente + +``` +Caminho: Firewall / Aliases / IP + +Preencha o nome, IP e descritivo do Alises que você esta criando. +``` +![Aliases](../img/firewall_aliases_ip.png) + +Após a criação do Aliases, será necessária a criação de uma regra na Interface LAN do cliente liberando a porta padrão da replicação 61100: + +``` +Action: Pass +Interface: LAN +Protocol: TCP/UDP +Source: LAN Net +Destination: Single host or alias (Cliente_DC) - aqui você indicara o Aliases criado no passo anterior +Description: Replicacao +``` + OBS: Lembre-se sempre de manter a regra criada na interface acima das regras de bloqueios LAN Net IPv4 e IPv6 + +![Rules_Replicacao](../img/rules_lan_replicacao.png) + +## SGDB - MASTER - PRODUÇÃO + +* Após a criação do Aliases e liberação da porta para a replicação, conecte no SGDB do cliente para realizar as configurações: +* Via Putty conecte no banco master do cliente desejado + + Caso você execute os passos abaixo e o mesmo não solicite a senha, deve ser verificado se existe comunicação com o banco replicado, através de ping, traceroute ou telnet para testar e garantir a comunicação entre os dois ambientes. + +``` +Realize a conexão ao banco Slave do cliente: + +ssh -p 61100 root@XXX.XXX.XXX.XXX +Após executar o comando o mesmo irá solicitar a senha. Passe a senha conforme repassado pelo cliente +``` + +## SGDB - SLAVE + +Após conectar, crie o usuário para a replicação (Substituia pelo código do cliente e defina uma senha para o usuário): + +``` +useradd rep00000 +passwd rep00000 +``` + +Em seguida, adicione o usuário criado (rep00000) no mesmo grupo e pasta do usuário postgres: + +``` +# vim /etc/passwd + +postgres:x:26:26::/var/lib/pgsql:/bin/bash +rep00000:x:26:26::/var/lib/pgsql:/bin/bash +``` + +Crie a pasta de acesso via SSH no servidor Replicado + +``` +ssh root@127.0.0.1 (yes) +``` + + IMPORTANTE: O comando abaixo, só deve ser executado caso o ambiente seja exclusivo para a replicação dos arquivos (anexos do sistema). Caso o mesmo já esteja executando a replicação do Banco de Dados ou será configurado junto com a dos arquivos, o passo abaixo NÃO deve ser executado + +``` +systemctl stop postgresql-11 +systemctl disable postgresql-11 +``` + +Verifique as configurações na interface de Rede do ambiente Replicado: + +``` +vim /etc/sysconfig/network-scripts/ifcfg-ens192 +ONBOOT=yes +``` + +Ajustar o hosts da maquina, usando o mesmo padrão de nome do Banco de dados master com a palavra SLAVE no final e também substituindo o IP conforme o IP da Interface da VM: + +``` +#vim /etc/hosts + +IP LAN da Maquina +00000-CLIENTE-SGDB11-ATENDENET-SLAVE +``` + +Ajustar o hostname da maquina, usando o mesmo padrão de nome do Banco de dados master com a palavra SLAVE no final: + +``` +#vim /etc/hostname + +00000-CLIENTE-SGDB11-ATENDENET-SLAVE +``` + +Ajustar o arquivo network + +``` +#vim /etc/sysconfig/network + +00000-CLIENTE-SGDB11-ATENDENET-SLAVE +``` + +Remover Scripts Defaults da IPM que vem junto com o template disponibilizado para o cliente + +``` +rm -rf /root/bkp_remoto/ +rm -rf /root/gdt_agent/ +``` + +Remover Agendamento do Crontab + +``` +crontab -r +``` + +Remover Configurações de Ponto de Montagem da Storage do FSTAB: + +``` +vim /etc/fstab +//192.168.131.248/Backup /var/lib/pgsql/11/storage cifs users,noauto,username=serverlinux,password=XXXXXXXX,domain=ATENDENET,uid=26,gid=26,rw 0 0 +``` + +No momento do envio das configurações do ambiente para o cliente, é enviado o espaço em disco necessário para replicar os arquivos. Para criar o disco com o espaço disponibilizado pelo cliente, execute os passos abaixo: + +``` +$ su - root +# lsblk (Identificar o novo disco, geralmente será o SDG) +# fdisk /dev/sdg +Comando (m para ajuda): p +Disco /dev/sdg: 2 TiB, 2199023255552 bytes, 4294967296 setores +Unidades: setor de 1 * 512 = 512 bytes +Tamanho de setor (lógico/físico): 512 bytes / 512 bytes +Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes +Tipo de rótulo do disco: dos +Identificador do disco: 0xfb109cc9 + +Comando (m para ajuda): n +Tipo da partição + p primária (0 primárias, 0 estendidas, 4 livre) + e estendida (recipiente para partições lógicas) +Selecione (padrão p): + +Usando resposta padrão p. +Número da partição (1-4, padrão 1): +Primeiro setor (2048-4294967295, padrão 2048): +Último setor, +setores ou +tamanho{K,M,G,T,P} (2048-4294967294, padrão 4294967294): + +Criada uma nova partição 1 do tipo "Linux" e de tamanho 2 TiB. + +Comando (m para ajuda): p +Disco /dev/sdg: 2 TiB, 2199023255552 bytes, 4294967296 setores +Unidades: setor de 1 * 512 = 512 bytes +Tamanho de setor (lógico/físico): 512 bytes / 512 bytes +Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes +Tipo de rótulo do disco: dos +Identificador do disco: 0xfb109cc9 + +Dispositivo Inicializar Início Fim Setores Tamanho Id Tipo +/dev/sdg1 2048 4294967294 4294965247 2T 83 Linux + +Comando (m para ajuda): t +Selecionou a partição 1 +Código hexadecimal (digite L para listar todos os códigos): 8e +O tipo da partição "Linux" foi alterado para "Linux LVM". + +Comando (m para ajuda): p +Disco /dev/sdg: 2 TiB, 2199023255552 bytes, 4294967296 setores +Unidades: setor de 1 * 512 = 512 bytes +Tamanho de setor (lógico/físico): 512 bytes / 512 bytes +Tamanho E/S (mínimo/ótimo): 512 bytes / 512 bytes +Tipo de rótulo do disco: dos +Identificador do disco: 0xfb109cc9 + +Dispositivo Inicializar Início Fim Setores Tamanho Id Tipo +/dev/sdg1 2048 4294967294 4294965247 2T 8e Linux LVM + +Comando (m para ajuda): w +A tabela de partição foi alterada. +# vgscan +# pvcreate /dev/sdg1 +# vgcreate backup /dev/sdg1 +# lvcreate -L 2047G -n arquivo backup +# mkfs.xfs /dev/backup/arquivo +``` + +Após a criação do disco, adicione o mesmo no FSTAB para que toda vez que o ambiente reinicie ou seja desligado, volte a montar o disco no momento da inicialização: + +``` +# vim /etc/fstab +/dev/mapper/backup-arquivo /backup/arquivo xfs defaults 0 1 +``` + +Finalize a criação do disco, criando a pasta, realizando a montagem do mesmo e aplicando as permissões + +``` +# mkdir -p /backup/arquivo/ +# mount /backup/arquivo/ +# df -h +# chown rep00000:rep00000 /backup/arquivo/ -R +# ls -la /backup/arquivo/ +``` + +## TASK02 - DATA CENTER PR + +Após todo o ambiente configurado, é necessário realizar a configuração da rotina de Copia/Replicação dos Arquivos(Anexos) do sistema: + +Conecte no Servidor TASK02 no ambiente Data Center do PR (172.16.0.102): + +``` +#### Executar no Task02/PR01 ##### +rclone config +n +name> (Database) +Storage> 45 +host> (IP Público do cliente) +user> rep00000 +port> 61100 +SSH Password, Choose an alternative below. Press Enter for the default> (y) Yes, type in my own password +Enter the password: (senha do usuário rep00000) +Confirm the password: (senha do usuário rep00000) +key_pem> +key_file> +Option key_file_pass> (n) +pubkey_file> +key_use_agent> +use_insecure_cipher> +disable_hashcheck> true +ssh> +Edit advanced config? (n) +Configuration complete. (y) +``` + +* Execute o Script Inicial dos arquivos Atuais + +``` +- Transferência de arquivos atuais (Ceph RedHat / Apache) - pasta corrente +rclone sync /storage/pr01-dd6400_01/STORE/Arquivos/rsync/00199_saojose/00199_saojose-full/00199_saojose/arquivo 00199_saojose:/backup/arquivo/corrente -v --no-update-modtime --size-only &>> /root/bkp_files/log/00199_saojose-20240307-152017889732103.log & +``` + +* Assim que o Script Inicial for executado, deve-se comentar o arquivo de configuração do Rclone do cliente em questão: + +``` +#Comentar Configuração do Rclone do cliente: + +/root/.config/rclone/rclone.conf +``` + +* Após finalizado a replicação manual (inicial) dos arquivos do CEPH Redhat/Apache, descomente a configuração do backup incremental do cliente no arquivo rclone.conf do servidor TASK02 + + +### Arquivos Históricos + +Caso o cliente possua arquivos históricos nas Storage CEPH Ubuntu ou ISILON, os procedimento abaixo devem ser executados: + +``` +Exemplo de Script para Arquivos Históricos - ISILON E Ubuntu - Exemplo com o Cliente São José: + +- Transferência de arquivos antigos (Ceph Ubuntu / Isilon) - pasta permanente +rclone copy /storage/pr01-dd6400_01/STORE/Anual/00199_saojose/00199_saojose-20240130-103615-arquivos-s3-rclone 00199_saojose:/backup/arquivo/permanente -v &>> /root/bkp_files/log/00199_saojose-20240307-152017889732103.log & + +rclone copy /storage/pr01-dd6400_01/STORE/Anual/00199_saojose/storage/s3/00199_saojose/00199_saojose 00199_saojose:/backup/arquivo/permanente -v &>> /root/bkp_files/log/00199_saojose-20240318-152017889732103.log & +``` + +## ZABBIX - MONITORAMENTO + +Para o acompanhamento do funcionamento do ambiente Slave, deve ser cadastrado o Equipamento do SGDB Slave do cliente no Monitoramento do Zabbix: + +Devido ao servidor não estar no ambiente do Data Center da IPM, o monitoramento será apenas via ICMP + +Configuration > hosts + +``` +Hostname: 00000-CLIENTE-SGDB11-ATENDENET-SLAVE +Groups: cliente.atende.net e Virtual Machines +Agent: XXX.XXX.XXX.XXX - Informe o IP Público passado pelo cliente +Monitored by proxy: PX_PMCliente - Adicione no mesmo proy do cliente em questão +``` + + Obs: Caso o IP do cliente não esteja liberado para ICMP deve ser solicitado a liberação para o bloco IP do Data Center 177.11.20.0/22 afim de conseguirmos monitorar o ambiente. + +Exemplo do banco replicado de Pinhais: + +![Zabbix_Slave](../img/zabbix_ambiente_slave.png) + +## GTT - Cadastro Equipamento + +Após todas as configuração dos passos anterior, deve ser cadastrado o equipamento no GTT afins de documentação: + +``` +#Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento +Nome: 00000-CLIENTE-SGDB11-ATENDENET-SLAVE +Tipo de Equipamento: Banco de dados +Local da Instalação: Selecione o Data Center onde o cliente encontra-se +Classificação: Virtual +Sistema Operacional: Linux CentOS 8 (64-bit) +``` + +![GTT_Equipamento_Cadastro](../img/gtt_sgdb_cadastro.png) + +Em seguida, cadastre os dois usuários (root), e o (rep00000) criado anteriormente: + +Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Usuários do Equipamento + +![GTT_Equipamento_Usuario](../img/gtt_sgdb_cadastro_user.png) + +Cadastre também as Interfaces de rede (WAN e LAN) do ambiente do cliente (Lembre-se de desmarcar a opção Gerenciar IPv4): + +Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Interfaces do Equipamento + +![GTT_Equipamento_Usuario](../img/gtt_sgdb_cadastro_rede.png) + +Vincule também a instancia do cliente no Equipamento que esta sendo cadastrado: + +Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Equipamento x Instância + +![GTT_Equipamento_Usuario](../img/gtt_sgdb_cadastro_instancia.png) + + +- [`VOLTAR`](../README.md) + diff --git a/docs/atualizacao_dne.md b/docs/atualizacao_dne.md new file mode 100644 index 0000000..a1b69ae --- /dev/null +++ b/docs/atualizacao_dne.md @@ -0,0 +1,130 @@ + +# Atualização DNE - Data Center + +Manual para o procedimento de Atualização do DNE dos correios no ambiente cloud.ipm.com.br. + + Especificamente trata da atualização periódica (Mensal) da base de dados no cadastro multifinalitário e atualização da tabela de cidades nos clientes Atende.Net + +## Cronograma de Atualização + +A atualização do DNE é realizado mensalmente (Toda segunda quarta feira) do mês. + +## Download dos Arquivos DNE + +Deve-se acessar o endereço do site dos correio e realizar o Download dos arquivos pendentes de atualização! + +https://shopping.correios.com.br/wbm/shopping/script/wbmShopLogin.aspx?ds_url_target=ynZEeTnJLFaBgugz2dNm6gnt5inYkDP/W33AfCTjs/U= + +Login: compras@ipm.com.br + +Senha: Setor do Data Center possui a senha! + +![Login_Site](../img/site_correios.png) + +Após o login, sera exibido uma lista com os arquivos de atualizações. Neste ponto, deve ser verificado qual o ultimo arquivo que foi atualizado no mês anterior, e realizar o download/atualização apenas dos arquivos subsequentes. + +#### Arquivos Atualização + +![Arquivos_Lista](../img/site_arquivos_atualizacao.png) + +Selecione o arquivo e realize o download. Nesse caso em questão utilizaremos o arquivo (eDNE_Delta_Master_24041.zip) que esta pendente de atualização: + +![Arquivos_Lista](../img/download_arquivo.png) + +## Procedimento de Atualização + +Após o download do arquivo no site dos Correios, será necessário realizar a copia do mesmo para o ambiente do Data Center para realizar a atualização. +Importante ressaltar que o DNE fica centralizado no ambiente cloud.ipm.com.br, sendo assim, será necessário apenas a atualização através do servidor pr01-remoto.ipm.com.br:33389 + +Transfira o Arquivo para o Data Center e acesse a Área de trabalho remota. Copei o arquivo para o endereço raiz do Software DNEImport responsável por realizar a atualização do DNE. + +``` +C:\IPM\DNEImport\DNE\ZIP +``` + +Neste diretório é possivel conferir o ultimo arquivo que foi realizado a atualização com base no nome do arquivo localizado no diretório e o arquivo que esta sendo atualizado no momento. Ordem que pode ser também verificada no portal do Correios conforme data da liberação do arquivo, ilustrada na imagem [`Arquivos Atualização`](#arquivos-atualiza%C3%A7%C3%A3o) + +![Arquivos_Ordem](../img/arquivos_ordem_01.png) + +Realize a extração do arquivo no mesmo diretório (atual) através do 7zip (não esqueça de marcar a opção para o mesmo criar a pasta) + +![Extrair_Arquivo](../img/extrair_arquivo_dne.png) + +Após a extração, vá até a pasta extraida do arquivo, entre na subpasta Delimitado e copie todos os arquivos que estão no diretório: + +``` +C:\IPM\DNEImport\DNE\ZIP\eDNE_Delta_Master_24041\Delimitado +``` + +![Arquivo_Copia_DNE](../img/arquivo_copia_dne.png) + +Retorne para o diretório abaixo e crie uma pasta com o mesmo nome do arquivo zipado mencionado nos passos anteriores: + +``` +# Volte para a pasta: +C:\IPM\DNEImport\DNE + +# Crie a pasta +eDNE_Delta_Master_24041 +``` + +Após isso cole os arquivos nesse diretório criado + +![Arquivos_Delimitado](../img/arquivos_delimitado_copia.png) + +Com os arquivos já organizados, agora executaremos a atualização via aplicação DNEImport + +``` +Execute o software: +C:\IPM\DNEImport\DNEImport.exe +``` +Selecione a opção Atualização: + +![DNE_Import_Inicial](../img/dne_import_inicial.png) + +Teste a conexão com o SGDB conforme já vem pré definido na ferramenta: + +![DNE_Teste_Conexao](../img/dne_teste_conexao.png) + +Selecione a pasta do arquivo de atualização onde foi extraido os arquivos Delimitados e marque todos os arquivos na tela do DNEImport: + +``` +C:\IPM\DNEImport\DNE\eDNE_Delta_Master_24041 +``` + +![Arquivo_Selecao](../img/dne_arquivo_selecao.png) + +Depois clique em Executar para realizar a atualização + +![DNE_Executar](../img/dne_executar.png) + +Acompanhe a atualização e assim que finalizar feche o DNEImport + +![DNE_Atualizacao](../img/dne_finalizado_atualizacao.png) + +## Validando a Atualização + +Para validar a atualização e conferir os logs da importação, acesso o endereço https://cloud.ipm.com.br + +Acesse o módulo Multifinalitário e navegue até a tela: + +``` +Caminho: Cadastros Genéricos » Importação » DNE » Logs de Importação +``` + +![DNE_Logs_Atualizacao](../img/dne_logs_atualizacao.png) + +Após conferido, esta finalizado o processo de atualização do DNE + +## Solicitação de Atualização em ambiente Desenvolvimento/Qualidade + +Toda atualização que é realizada em ambiente de Produção deve ser solicitado também a atualização em ambiente de Desenvolvimento/Qualidade. + +Para isso, basta zipar os arquivos da pasta delimitado feito nos passos anteriores e abrir uma solicitação via Chamado (Dicionário) para providenciar a atualização por parte da Infraestrutura Interna conforme exemplo abaixo + + +![DNE_Logs_Atualizacao](../img/dne_chamado.png) + + +- [`VOLTAR`](../README.md) + diff --git a/docs/atualizacao_php_82.md b/docs/atualizacao_php_82.md new file mode 100644 index 0000000..55880a3 --- /dev/null +++ b/docs/atualizacao_php_82.md @@ -0,0 +1,148 @@ +# Atualização PHP 8.2 + +Este procedimento será executado até que todos os clientes estejam com o ambiente atualizado. +Nesta mesma atividade, executaremos outros procedimentos de atualização e padronização do ambiente dos clientes. + +## Novos recursos + +- __Atualização do servidor de firewal (AFW)__ + - Atualizado o pfsense para a versão 2.7.2. + - Esta atualização contempla ajustes em regras de firewall e NAT. + - A ativação do pacote HAProxy para todos os ambientes, permitindo o crescimento horizontal do ambiente. + - Disponibilização do usuário "ipm" para acesso a interface web. + - Disponibilização de ferramentas de monitoramento e análise para o usuário "ipm". + - Atualizado o cadastro do DNSForwarder para conter os servidores e domínios do cliente. + +- __Atualização do servidor de aplicação (APP)__ + - Atualizado o sistema operacional ubuntu para a versão 22.04. + - Disponibilização do usuário "ipm" para acesso via SSH/Web. + - Disponibilização do serviço "cockpit" para monitoramento via Web. + - Disponibilização de ferramentas de monitoramento e análise para o usuário "ipm". + - Instalado Apache 2.4.62 com módulo MPM Event ativo e integrado módulos de segurança (mod_qos/mod_security). + - Instalado PHP 8.2.24 como serviço em modo FPM. + - Ajustado o valor do ProxyTimeOut: + - Domínios externos: 15 minutos (cliente.atende.net / ws-cliente.atende.net ...). + - Domínios internos: 12 horas (origens-cliente.atende.net). + - Ajustado configurações do serviço apache para utilizar variáveis de ambiente "envvars". + - Criado arquivos de configuração para as mais variadas opções de domínios virtuais. + - Ajustado arquivos de logs para realizar o rotate e conter mais informações sobre as requisições. + - Alterado o log do mod_security para o formato JSON, permitindo integração com ambiente de SIEM. + - Adicionado novos campos ao log "request", com destaque para a coluna [R: -] ao qual contém um ID único relacionado ao "error" log. + - Ativado logs para o serviço do PHP-FPM, com destaque para o "slow" log, que registra o trace de rotinas lentas (maior que 30s). + - Ativado novas interfaces de monitoramento via web: + - cliente.atende.net/server-status + - cliente.atende.net/realtime-status + - cliente.atende.net/fpm-status + - cliente.atende.net/fpm-ping + - cliente.atende.net/awstats/awstats.pl + - cliente.atende.net/qos + - Instalado o serviço NFS e configurado para exportar a pasta doc_root do Apache, permitindo a clusterização em vários servidores. + - Realizado o tunning do servidor para performance e segurança. + +- __Atualização no servidor de Micro Serviços Docker (MSD)__ + - Criação da rede do docker, independente de qualquer "stack". + - Ajustes em variáveis das stacks. + - Deploy das stacks do elasticsearch e memcache em modo "host" + - Deploy das stacks + - 00000-dhm-atendenet-0160-01 (Memcache) + - 00000-jsm-atendenet-v2-01 (Java Services) + +## Procedimentos + +### Criação da estrutura definitva + +__1) Configure o novo servidor de Firewall `afw-0272`, seguindo a documentação e a planilha de check-list, conforme orientações recebidas no chamado.__ +>Caso o cliente possua endereços de acesso além dos "domínios" padrões, estes devem ser adicionados no DNSForwarder. +>Fique atento ao nome dos servidores no cadastro do DNS Forwarder, pois alguns clientes possuem o servidor bdp-02-0950. +>__Atenção:__ Neste momento deve-se configurar os endereços IP definitivos apenas nas interfaces WAN e LAN matendo-as inativas, também não devemos ativar o serviço FRR para o protocolo OSPF. + +[`Configuração do Servidor AFW-0272`](configuracao_firewall_0272_cliente.md) + +__2) Configure o novo servidor de Aplicação `app-0820`, seguindo a documentação e a planilha de check-list, conforme orientações recebidas no chamado.__ +>Fique atento aos sistemas e domínios que cada cliente pode possuir em específico. +>__Atenção:__ Neste momento deve-se configurar o endereço IP "Temp" na interface LAN e as demais configurações com o endereço IP definitivo. + +[`Configuração do Servidor APP-0820`](configuracao_apache_0820_cliente.md) + +__2.1) Caso o cliente possua o sistema IPMSaúde S1 ativo, além das configurações realizadas acima, deve-se executar o script de sincronização dos arquivos no servidor APP-0820.__ +>Ao executar o script será solicitada a senha do usuário root do servidor APP-5618. + +```console +# vim /root/sync_files_ipmsaude.sh +# :% s/192.168.21.20/192.168.28.132 +# :% s/cliente.atende.net/demonstracao.atende.net +--- +ip_apache="192.168.28.132" +cliente="demonstracao.atende.net" +--- +# /root/sync_files_ipmsaude.sh +``` + +__3) Realize os ajustes no servidor de Micro Serviços Docker `msd-2400`, seguindo a documentação e a planilha de check-list, conforme orientações recebidas no chamado.__ +>Fique atento ao redeploy das stacks, que deve ocorrer somente no momento da atualização do ambiente para o php 8.2. +>A variável "enderecoweb" deve ser alterada em todos os clientes para o domínio origens-cliente.atende.net + +__Planilha:__ +[`Ajustes no Servidor MSD-2400`](https://ipmcombr-my.sharepoint.com/:x:/r/personal/alexsandre_constantino_ipm_com_br/_layouts/15/doc.aspx?sourcedoc=%7B55cb5a8f-4ed2-4c5d-898d-01227838f6ee%7D&action=edit) + +__Orientações:__ +[`Criação Network Portainer`](criacao_network_portainer.md) +[`Deploy Memcache`](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_atendenet_dhm-memcached.md) +[`Deploy JSM v2`](https://documentos.ipm.com.br/data-center/Docker/src/branch/master/docs/deploy_atendenet-jsm-servicemanagerv2.md) + +__4) Realize os cadastros no Zabbix__ +>Cadastre os novos equipamentos no zabbix e deixe-os desativados. + +### Momento da atualização para o PHP 8.2 + +__5) Neste momento devemos seguir a planilha `Manutenção de Servidores - 15072025 v1` na aba `php 5.6 -> php 8.2`.__ +>É de suma importância que o agendamento (158) Exclusão de arquivos temporários, seja ativo neste momento. +>Neste momento, deve-se conferir/ajustar o cadastro de domínios no sistema Atende.Net. + +__Planilha:__ +[`PHP 5.6 -> PHP 8.2`](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EeWD8UZRKtxPj3NFGXqU_ysBOWrs37Blw6LYdg-6jEXz0A?e=KNtsjY) + +__Orientações:__ +[`Cadastro de Domínios`](cadastro_dominios_atendenet.md) + +__Atenção:__ Caso o cliente possua o sistema IPMSaúde S1, realizaremos todo o processo conforme a planilha de manutenção, onde, após testar o acesso ao sistema IPMSaúde, realizaremos o processo abaixo, afim de garantir que todos os arquivos foram sincronizados entre os servidores. + +__5.1) Ligar o servidor APP-5618 ao qual foi configurado com o endereço IP Temporário antes de ser desligado.__ + +__5.2) Editar o script de sincronização no servidor APP-0820, alterando o endereço IP para o endereço IP Temporário__ + +```console +# vim /root/sync_files_ipmsaude.sh +# :% s/192.168.28.132/192.168.28.136 +--- +ip_apache="192.168.28.136" +--- +``` + +__5.3 Executar o script e aguardar o término da sincronização__ + +```console +# /root/sync_files_ipmsaude.sh +root@192.168.28.136's password: +receiving incremental file list +gls/8291/tbanexo/2013/2490/2025/07/24/ +... +``` + +>__Importante:__ Durante a execução do script, não será possível realizar a manipulação de arquivos através do sistema IPMSaúde S1, devido aos privilégios da pasta, ao qual serão ajustados pelo script ao final da sincronização. + +__5.4) Ao concluir deve-se desligar o servidor APP-5618__ + + +### Atividades após a atualização para o PHP 8.2 + +__6) Realizar/Revisar cadastros do GTT__ +>Primeiro desative os equipamentos antigos e depois cadastre os novos equipamentos. + +__7) Desativar o Backup e a Replicação das VM´s antigas no PPDM e RP4VM__ + +__8) Caso necessário, ajustar o data store das VM´s__ + +__9) Ativar o Backup e a Replicação das VM´s antigas no PPDM e RP4VM__ + +__10) Fazer backup e remover VM´s antigas__ diff --git a/docs/atualizacao_servlets.md b/docs/atualizacao_servlets.md new file mode 100644 index 0000000..32b2b5b --- /dev/null +++ b/docs/atualizacao_servlets.md @@ -0,0 +1,62 @@ +# Atualização dos Servlets + +*** Falta organizar *** + +``` +rm -rf /root/tomcat/* +mkdir /root/tomcat/ +cd /root/tomcat/ +wget https://datacenter.atende.net/updates/update_applets_122.zip +unzip update_applets_122.zip +pid_tomcat=`ls -1 /tmp/*tomcat/` +echo -e "\e[00;31mFinalizando Tomcat - PID: $pid_tomcat.\e[00m" +kill -9 $pid_tomcat +sleep 3 +rm /var/cache/tomcat/temp/* -rf +rm /var/cache/tomcat/work/* -rf +rm /var/log/tomcat/* -rf +rm /var/lib/tomcat/webapps/WebReport/ -rf +rm /var/lib/tomcat/webapps/JavaBridge/ -rf +rm /var/lib/tomcat/webapps/JavaMelody/ -rf +rm /var/lib/tomcat/webapps/FileOptimizer/ -rf +rm /var/lib/tomcat/webapps/FileSigner/ -rf +rm /var/lib/tomcat/webapps/JobRunner/ -rf +-- +mv WebReport /var/lib/tomcat/webapps/ +mv JavaBridge /var/lib/tomcat/webapps/ +mv JavaMelody /var/lib/tomcat/webapps/ +mv FileSigner /var/lib/tomcat/webapps/ +-- GED +mv JavaMelody /var/lib/tomcat/webapps/ +mv FileOptimizer /var/lib/tomcat/webapps/ +mv JobRunner /var/lib/tomcat/webapps/ +-- +chown tomcat.tomcat /var/lib/tomcat/webapps/WebReport/ -R +chown tomcat.tomcat /var/lib/tomcat/webapps/JavaBridge/ -R +chown tomcat.tomcat /var/lib/tomcat/webapps/JavaMelody/ -R +chown tomcat.tomcat /var/lib/tomcat/webapps/FileSigner/ -R +-- GED +chown tomcat.tomcat /var/lib/tomcat/webapps/JavaMelody/ -R +chown tomcat.tomcat /var/lib/tomcat/webapps/FileOptimizer/ -R +chown tomcat.tomcat /var/lib/tomcat/webapps/JobRunner/ -R +-- +vim /etc/tomcat/ipm.properties +** Se for cluster deve-se alterar o enderecoWeb para origens-clean.atende.net ** +usaCluster=1 +-- +systemctl start tomcat.service +sleep 3 +pid_tomcat=`ls -1 /tmp/*tomcat/` +echo -e "\e[00;31mINFO: Iniciando Tomcat - PID: $pid_tomcat.\e[00m" +-- +lynx http://127.0.0.1:8080/WebReport +lynx http://127.0.0.1:8080/JavaBridge +lynx http://127.0.0.1:8080/JavaMelody +lynx http://127.0.0.1:8080/FileSigner +-- +lynx http://127.0.0.1:8080/JavaMelody +lynx http://127.0.0.1:8080/FileOptimizer +lynx http://127.0.0.1:8080/JobRunner +``` + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/atualizacao_svn.md b/docs/atualizacao_svn.md new file mode 100644 index 0000000..be00443 --- /dev/null +++ b/docs/atualizacao_svn.md @@ -0,0 +1,140 @@ +# Roteiro de Atualização dos Clientes + +[`1. Especificações`](#1-especificações) + +[`2. Teste Padrão`](#2-teste-padrão) + +[`3. Atualização em Produção`](#3-atualização-em-produção) + +## 1. Especificações + +A atualização dos clientes acontece por meio de solicitações, podendo ocorrer de duas formas: +* Solicitação de Prioridade: +Ao concluir um chamado que possui prioridade, de forma automática, é disparado um e-mail para o grupo administracao.dc@ipm.com.br. +Conforme imagem abaixo, é possivel identificar a qual cliente refere-se o chamado: + +![Prioridade](../img/solicitacao_prioridade.PNG) + +* Solicitação do Gerente de Fábrica: +Quando necessário atualizar os clientes, é direcionado um e-mail com as especificações de quais chamados e clientes devem ser atualizados, exemplo abaixo: + +![Gerente](../img/solicitacao_gerente.PNG) + +## 2. Teste Padrão + +Após receber a solicitação de atualização, é necessário realizar o roteiro de teste para garantir que o processo finalize com êxito. +Portanto, deve-se atualizar os seguintes ambientes: + +https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/atualiza/atualiza_versao.php?cidade=sc +https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/atualiza/atualiza_versao.php?cidade=pr +https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/atualiza/atualiza_versao.php?cidade=rs +https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/atualiza/atualiza_versao.php?cidade=copia_release +https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/atualiza/atualiza_versao.php?cidade=publicacao_release + +**Atenção: A atualização dos clientes somente deverá ocorrer se todos os ambientes executarem com sucesso** + +Para realizar os testes, execute os passos abaixo em todos os endereços apontados anteriormente! + +1. Realizar login com seu código do dicionário e senha: + +![Login](../img/login_svn.PNG) + +2. Selecionar a última revisão SVN disponível e clicar em "Executar Atualização": + +![Revisao](../img/revisao_svn.PNG) + +3. Verificar se a etapa finalizou sem erros: + +![Atualizacao](../img/atualizacao_svn.PNG) + +Caso apresente erro na execução do processo, deverá ser aberto um chamado para que a correção seja liberada em operação. +Após a correção, toda a etapa deverá ser feita novamente. + +Exemplo de chamado com erro na atualização: + +![Chamado](../img/chamado_svn.PNG) + +4. Após a atualização do software conforme descrito nos 3 itens acima, deve-se seguir os procedimentos padrões conforme abaixo: + +* Acessar as 3 bases SC, PR e RS (https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/?cidade=sc , https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/?cidade=pr e https://origens-qualidade-atendenet56.ipm.com.br:7443/ti01/?cidade=rs). + +* Fazer login com o usuário 040.292.199-26 e senha IPM@1234567 + +![Login](../img/login_sc.PNG) + +* Clicar na opção "Acesso à informação" e no final da página selecionar a opção "Nova Solicitação": + +![Info1](../img/acesso_informacao1.PNG) + +![Info2](../img/acesso_informacao2.PNG) + +* Preencher um texto qualquer no campo descrição, selecionar um arquivo de no máximo 2MB para enviar e em seguida clicar em "Confirmar": + +![Solicitacao](../img/solicitacao_informacao.PNG) + +Esta etapa está concluída após ser impresso o relatório de COMPROVANTE DE ABERTURA, em seguida clique em sair para proceder com os demais passos. + +![Sair](../img/sair_login.PNG) + +* Fazer login com o usuário 026.896.599-48 e senha Ipm@12345678 + +* No menu “Cadastros Únicos”, ir na opção Cadastros >> Pessoas e executar a consulta (com o filtro informando Código de 19 até 1000): + +![WUN](../img/consulta_unico.PNG) + +* Clicar no botão para imprimir a consulta e apenas confirmar a emissão. Deverão ser impressas as pessoas retornadas na consulta: + +![WUN2](../img/consulta_unico2.PNG) + +![WUN3](../img/consulta_unico3.PNG) + + +**Estes procedimentos devem ser executados sempre antes de atualizar todos os clientes.** + +Observar as atualizações disponíveis desde a última executada, avaliando a diferença no número da versão e possíveis liberações fora da release. +Caso algo diferente aconteça deverá ser aberto chamado com print e descrições do erro encontrado em anexo e informado imediatamente o responsável pelo módulo através de e-mail. Além do responsável pelo módulo os gerentes de: (Fábrica/Data Center/Tecnologia e Pesquisa/ Atendimento) devem ser informados em cópia. + +* Após as etapas descritas acima, execute a atualização do ambiente https://qualidade-gtt56.ipm.com.br/atualiza/atualiza_versao.php + +* Via sistema, deverá ser testado a atualização dos ambientes Security, Trust e Aplicativo. Acesse o ambiente https://qualidade-gtt56.ipm.com.br +![atua](../img/atualiza_qualidade.png) + +**Se o processo acima finalizar corretamente, prossiga para o próximo passo** + +* Via /atualiza, atualize o endereço https://datacenter.ipm.com.br e também os ambientes paralelos conforme planilha "Release - Ambientes Paralelos" + +## 3. Atualização em Produção + +Após o processo [`teste padrão`](#2-teste-padrão) finalizar com êxito, podemos proceder com a atualização em produção conforme a solicitação inicial. +Para atualizar os clientes, utilizamos a ferramenta https://datacenter.ipm.com.br + +* Faça login com seu código do dicionário e senha: + +![GDT](../img/login_gdt.PNG) + +* Vá em Gerenciamento Data Center >> Processos >> Atualização Atende.Net: + +![GDT2](../img/atualiza_gdt.PNG) + +* Selecione os clientes solicitados e clique em Atualizar. Após, informe o número da revisão e clique em Confirmas + +![GDT3](../img/atualiza2_gdt.PNG) + +* Acompanhe o status de atualização conforme abaixo: + +![SVNstatus](../img/status_gdt.PNG) + +* Após finalizar o processo de atualização, responder e-mail informando a conclusão do processo: + +Responder conforme o modelo das [`solicitações`](#1-especificações). + +* Solicitação de Prioridade: + +![email](../img/email_final1.PNG) + +* Solicitação do Gerente de Fábrica: + +![email](../img/email_final2.PNG) + + +- [`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/cadastro_ambientes_clientes.md b/docs/cadastro_ambientes_clientes.md new file mode 100644 index 0000000..e6a45cd --- /dev/null +++ b/docs/cadastro_ambientes_clientes.md @@ -0,0 +1,211 @@ +## Documentação para Cadastramento do Cliente no GTT (datacenter.ipm.com.br) + +> +> Essa documentação esta voltada para o passo a passo do cadastramento do ambiente do cliente na ferramenta GTT (datacenter.ipm.com.br) onde o Data Center IPM armazena as informações técnicas do cliente. +> +> Obs. Siga o passo a passo na sequencia para não haver problemas com dependencia ou algo semelhante! +> + + +#### ✅ Acesso a Aplicação. + +Acesse a aplicação através do endereço datacenter.ipm.com.br e efetue o login com as suas credenciais. + +#### ✅ Inclusão do Cliente + +Após o login, navegue em Gerenciamento Data Center » Manutenção » Clientes e seleciona a opção Incluir Clientes + +![cadastro_clientes_wizard_gtt_01](../img/cadastro_clientes_wizard_gtt_01.png) + +Informe o Código do Sistema do cliente em questão (Informação recebida no Chamado) + +![cadastro_clientes_wizard_gtt_02](../img/cadastro_clientes_wizard_gtt_02.png) + +Após informar o código o mesmo irá gerar um aviso informando não ter encontrado o cliente na base de dados e irá sugerir a importação dos dados. Selecione a opção SIM! + +Após importação, basta ajustar o Nome Fantasia para o padrão PM - CLIENTE (no exemplo PM - JACINTO) e informe o tipo de Entidade, no caso do exemplo EXECUTIVO. + +![cadastro_clientes_wizard_gtt_03](../img/cadastro_clientes_wizard_gtt_03.png) + +#### ✅ Cadastro de Instancia + +Após a inclusão do cliente, na mesma tela, consulte o nome do cliente cadastrado, selecione o registro e clique no botão Instancia + +![cadastro_clientes_wizard_gtt_04](../img/cadastro_clientes_wizard_gtt_04.png) + +Após a abertura da nova janela, clique no botão Incluir + +![cadastro_clientes_wizard_gtt_05](../img/cadastro_clientes_wizard_gtt_05.png) + +Agora estaremos no cadastro das informações do cliente através do Wizard, uma janela desenvolvida especificamente para cadastro de estrutura do cliente, onde iremos seguir etapas para cadastrar as informações, cada etapa é baseada em um circulo que fica no topo da janela. + +Nesta primeira etapa, iremos cadastrar a Instancia, para isso, informe os dados solicitados: + +Nome: 00000-cliente +Finalidade: Cliente +Local de Instalação: Data Center IPM - Site SP01 ou Data Center IPM - Site PR01 (Selecione o local de acordo com o cliente que esta sendo efetuado o cadastro!) +Ambiente: Dedicado Selecione a opção de acordo com o cliente, caso for consórcios deve ser selecionado a opção Compartilhado +Ativo: SIM + +Após informado os dados, clique em Avançar Etapa Wizard + +![cadastro_clientes_wizard_gtt_06](../img/cadastro_clientes_wizard_gtt_06.png) + + +#### ✅ Cadastro Serviços Externos + +Para cadastrar os serviços externos, iremos clicar no botão incluir + +![cadastro_clientes_wizard_gtt_07](../img/cadastro_clientes_wizard_gtt_07.png) + +Na janela da inclusão do Serviço, será solicitado dados como Serviço, Fase de Implantação, Analytics e Recaptcha. + +Informe o Serviço como Instalação Padrão - Atende.Net +Fase de Implantação: Produção +Ativo: SIM + +![cadastro_clientes_wizard_gtt_22_1](../img/cadastro_clientes_wizard_gtt_22_1.png) + + Cadastro Analytics +Para efetuar o cadastro do Analytics, siga os passos abaixo: + +Acesse o endereço http://analytics.google.com/ e efetue o login com a conta ipm@ipm.com.br e a senha padrão para esta conta. +Após o login na área de Administração, clique na opção: Criar > Conta + +![cadastro_clientes_wizard_gtt_08](../img/cadastro_clientes_wizard_gtt_08.png) + +Informe o Nome da Conta (PM - Cliente) e clique em Avançar + +![cadastro_clientes_wizard_gtt_09](../img/cadastro_clientes_wizard_gtt_09.png) + +Nos detalhes da Propriedade, coloque as informações: + +Nome da Propriedade: PM - Cliente +Fuso horário dos relatórios: Brasil GMT 03:00 - Horário São Paulo +Moeda: Real Brasileiro (R$) + +![cadastro_clientes_wizard_gtt_10](../img/cadastro_clientes_wizard_gtt_10.png) + +Nos dados da empresa, seleciona a categoria (Outras atividades comerciais) e Tamanho a Empresa como Grande Os dados dessa etapa são irrelevante para o funcionamento do Analitycs, são apenas dados obrigatórios no cadastro, mais sem intervensão no funcionamento da ferramenta) + +![cadastro_clientes_wizard_gtt_11](../img/cadastro_clientes_wizard_gtt_11.png) + +Na parte de Objetivos de negócios, selecione a opção (Entender o tráfego da Web e/ou do app) + +![cadastro_clientes_wizard_gtt_12](../img/cadastro_clientes_wizard_gtt_12.png) + +Na coleta de dados selecione a plataforma Web + +![cadastro_clientes_wizard_gtt_13](../img/cadastro_clientes_wizard_gtt_13.png) + +Configure o fluxo informando a URL do site e o nome do fluxo + +URL: https://cliente.atende.net +Nome do Fluxo: PM - Cliente + +![cadastro_clientes_wizard_gtt_14](../img/cadastro_clientes_wizard_gtt_14.png) + +Após clicar em avançar, o Google ira gerar uma tag. Coleta essa tag pois informaremos ela no cadastro do serviço Externo no GTT! + +Padrão da TAG: G-XXXXXX + +![cadastro_clientes_wizard_gtt_15](../img/cadastro_clientes_wizard_gtt_15.png) + + Cadastro Recaptcha + +O próximo cadastro externo que faremos é no Google Recaptcha. Para isso, acesse o endereço https://console.cloud.google.com/security/recaptcha e efetue o login com a conta ipm@ipm.com.br e senha padrão. + +![cadastro_clientes_wizard_gtt_16](../img/cadastro_clientes_wizard_gtt_16.png) + +Selecione a opção reCAPTCHA no menu lateral esquerda e encontre as Chaves clássicas. Neste ponto, precisaremos reaproveitar o recaptcha de outros clientes para o cadastro desse novo cliente em questão, pois as novas chaves não estão funcionando corretamente. Sendo assim, você deve selecionar um cliente já existente nas Chaves Classicas e cadastrar o endereço do cliente em questão nesse mesmo cadastro. + +Para efetuar o cadastro dos endereços do novo cliente que você esta configurando, você terá que acessar o admin console do recaptcha, para isso, acesse https://www.google.com/recaptcha/admin e encontre o cliente que você irá reaproveitar o cadastro: + +![cadastro_clientes_wizard_gtt_17](../img/cadastro_clientes_wizard_gtt_17.png) + +Selecione o cliente e a opção de reCaptcha v2 (00000 - Cliente - v2) e cadastre os endereços do cliente. Exemplo: + +cliente.atende.net +ws-cliente.atende.net +origens-cliente.atende.net +nfse-cliente.atende.net + +![cadastro_clientes_wizard_gtt_18](../img/cadastro_clientes_wizard_gtt_18.png) + +Execute o mesmo procedimento agora para a versão v3 (00000 - Cliente - v3): + +![cadastro_clientes_wizard_gtt_19](../img/cadastro_clientes_wizard_gtt_19.png) + +Após os dois cadastro serem efetuados, entre em cada um deles (v2 e v3) e colete as chaves Site e Secreta + +![cadastro_clientes_wizard_gtt_20](../img/cadastro_clientes_wizard_gtt_20.png) + +![cadastro_clientes_wizard_gtt_21](../img/cadastro_clientes_wizard_gtt_21.png) + +Agora com as informações do Analytics e Recaptcha, informe os dados nos campos solicitados e clique em Avançar Etapa Wizard: + +![cadastro_clientes_wizard_gtt_22](../img/cadastro_clientes_wizard_gtt_22.png) + + +Informe o Cliente Principal: + +Tipo de Entidade: Executivo +Cliente: 00000 CLIENTE +Nome Fantasia: PM - CLIENTE +Ativo: SIM +Principal: SIM + +![cadastro_clientes_wizard_gtt_23](../img/cadastro_clientes_wizard_gtt_23.png) + +Nos endereços, informe os endereços com os seguintes padrões: + + Todos domínio cadastrado conforme orientações abaixo, sempre exibirá uma confirmação perguntando se você deseja enviar os domínios para o cliente? Neste momento sempre clicaremos em NÃO! + +![cadastro_clientes_wizard_gtt_25](../img/cadastro_clientes_wizard_gtt_25.png) + + cliente.atende.net +Tipo de Endereço: Atende.net Padrão +Ativo: Sim +Principal: Sim +Permite Atualizar: Sim +Endereço/Domínio: https://cliente.atende.net +Instancia/Cliente: Município Cliente + +![cadastro_clientes_wizard_gtt_24](../img/cadastro_clientes_wizard_gtt_24.png) + + cliente.UF.gov.br + Neste caso, atente-se ao estado onde o cliente esta localizado "sc.gov.br, pr.gov.br, rs.gov.br, mg.gov.br etc.." +Tipo de Endereço: Atende.net Padrão +Ativo: Sim +Endereço/Domínio: https://cliente.UF.gov.br +Instancia/Cliente: Município Cliente + +![cadastro_clientes_wizard_gtt_24_3](../img/cadastro_clientes_wizard_gtt_24_3.png) + + ws-cliente.atende.net +Tipo de Endereço: Atende.net Padrão +Ativo: Sim +Endereço/Domínio: https://ws-cliente.atende.net +Instancia/Cliente: Município Cliente + +![cadastro_clientes_wizard_gtt_24_1](../img/cadastro_clientes_wizard_gtt_24_1.png) + + origens-cliente.atende.net +Tipo de Endereço: Origens/Java Services +Ativo: Sim +Endereço/Domínio: https://origens-cliente.atende.net +Instancia/Cliente: Município Cliente + +![cadastro_clientes_wizard_gtt_24_2](../img/cadastro_clientes_wizard_gtt_24_2.png) + +Próximo passo é relacionar o Serviço na Instancia do Cliente: + +![cadastro_clientes_wizard_gtt_26](../img/cadastro_clientes_wizard_gtt_26.png) + +> +> Caso o cliente possuir mais módulos por exemplo o Fiscal, esse mesmo cadastro de Serviço deve ser efetuado e suas respectivas informações! +> + +#### ✅ Cadastro Equipamentos do Cliente + + diff --git a/docs/cadastro_dominios_atendenet.md b/docs/cadastro_dominios_atendenet.md new file mode 100644 index 0000000..71ef1e3 --- /dev/null +++ b/docs/cadastro_dominios_atendenet.md @@ -0,0 +1,61 @@ +# Domínios Atende.Net + +## Endereços Padrões + +>__Obs:__ Todos os ambientes devem possuir os endereços padrões cadastrados para acesso ao Atende.Net + +Faça login no sistema Atende.Net, por exempo demonstracao.atende.net e após vá em: +__IPM > Gerenciamento do Sitema > Sistema > Domínios__ + +Realize o cadastro dos domínios conforme abaixo: + +- __Endereço Principal__ + +>Cadastre o endereço de acesso principal, com o tipo: __Atende.Net Padrão__ + +![PRINCIPAL](../img/dominios_atendenet_principal.png) + +- __Endereço Gov.Br__ + +>Cadastre o endereço de acesso através do Gov.Br, com o tipo: __Atende.Net Padrão__ + +![GOV_BR](../img/dominios_atendenet_gov_br.png) + +- __Endereço Origens/Java Services__ + +>Cadastre o endereço de acesso para as Origens/Java Services, com o tipo: __Origens/Java Services__ + +![ORIGENS](../img/dominios_atendenet_origens.png) + +- __Endereço WebServices__ + +>Cadastre o endereço de acesso para os webservices, com o tipo: __Atende.Net Padrão__ + +![WS](../img/dominios_atendenet_ws.png) + +## Endereços Adicionais + +- __IPMFiscal S2__ + +>Cadastre o endereço de acesso para o módulo IpmFiscal S2, com o tipo: __Atende.Net Padrão__ +>Deve-se informar os campos: +>- Sistema: __66__ +>- Redirecionar para: __https://nfse-demonstracao.atende.net/autoatendimento/servicos/nfse__ + +![FISCAL_S2](../img/dominios_atendenet_fiscal_s2.png) + +- __Siafic__ + +>Cadastre o endereço de acesso a uma entidade específica, com o tipo: __Atende.Net Padrão__ + +![FISCAL_S2](../img/dominios_atendenet_siafic.png) + +- __Apelido__ + +>Caso o cliente possua mais de um endereço de acesso, cadastre-o com o tipo: __Atende.Net Padrão__ + +![FISCAL_S2](../img/dominios_atendenet_apelido.png) + +## Configurações das Stack´s + +A variável __enderecoWeb__ de todas as stack´s relacionadas aos Servlets Java, deve conter o endereço de Origens. Ex: __origens-demonstracao.atende.net__. \ No newline at end of file diff --git a/docs/certificado_ssl_ceph.md b/docs/certificado_ssl_ceph.md new file mode 100644 index 0000000..22f3e47 --- /dev/null +++ b/docs/certificado_ssl_ceph.md @@ -0,0 +1,94 @@ +# Atualizar certificado CEPH + +## CEPH - Ubuntu + +- Acesse o ceph via interface web e ir em "__Services > ingres.rgw.IPM__" + - Clicar em Edit + - Informar o certificado com a CA no campo __Certificate__ + - Informar a chave privada no campo __Private Key__ + +- Acesse servidores RGW via SSH e editar os arquivos abaixo, inserindo o certificado com a CA e a chave privada no arquivo. +```console +# vim /var/lib/ceph/47982c20-e8e3-11ec-a4bc-5b54e4d1bd58/haproxy.rgw.IPM.pr01-s3-rgw01.fcmldd/haproxy/haproxy.pem +# vim /var/lib/ceph/47982c20-e8e3-11ec-a4bc-5b54e4d1bd58/haproxy.rgw.IPM.pr01-s3-rgw02.bgyrid/haproxy/haproxy.pem +``` + +- Acesse o servidor MON-01 via SSH e executar os comandos abaixo. +```console +# cephadm shell + +# ceph -s + cluster: + id: 47982c20-e8e3-11ec-a4bc-5b54e4d1bd58 + health: HEALTH_OK + + services: + mon: 3 daemons, quorum pr01-s3-mon01,pr01-s3-mon02,pr01-s3-mon03 (age 5d) + mgr: pr01-s3-mon02.rdxgcr(active, since 2w), standbys: pr01-s3-mon03.asxocd, pr01-s3-mon01.ybckvc + mds: 1/1 daemons up, 1 standby + osd: 32 osds: 32 up (since 3M), 32 in (since 16M) + rgw: 2 daemons active (2 hosts, 1 zones) + rgw-nfs: 3 daemons active (3 hosts, 1 zones) + + data: + volumes: 1/1 healthy + pools: 11 pools, 385 pgs + objects: 32.49M objects, 4.1 TiB + usage: 8.5 TiB used, 120 TiB / 128 TiB avail + pgs: 385 active+clean + + io: + client: 5.1 MiB/s rd, 6.05k op/s rd, 0 op/s wr + +# ceph orch restart ingress.rgw.IPM +Scheduled to restart haproxy.rgw.IPM.pr01-s3-rgw01.fcmldd on host 'pr01-s3-rgw01' +Scheduled to restart keepalived.rgw.IPM.pr01-s3-rgw01.jyicnu on host 'pr01-s3-rgw01' +Scheduled to restart haproxy.rgw.IPM.pr01-s3-rgw02.bgyrid on host 'pr01-s3-rgw02' +Scheduled to restart keepalived.rgw.IPM.pr01-s3-rgw02.uqblji on host 'pr01-s3-rgw02' +``` + +- Acesse o ceph via interface web e acompanhe o status dos serviços "__ingres.rgw.IPM__" + +## CEPH Red Hat +- Acesse o ceph via interface web e ir em "__Services > ingres.rgw.default__" + - Clicar em Edit + - Informar o certificado com a CA no campo __Certificate__ + - Informar a chave privada no campo __Private Key__ + +- Acesse servidores RGW via SSH e editar os arquivos abaixo, inserindo o certificado com a CA e a chave privada no arquivo. +```console +# vim /var/lib/ceph/13b8a71a-dd2d-11ed-bdae-005056b9558d/haproxy.rgw.default.pr01-s3-rhcs-01-rgw-01-0531.sxgpxi/haproxy/haproxy.pem +# vim /var/lib/ceph/13b8a71a-dd2d-11ed-bdae-005056b9558d/haproxy.rgw.default.pr01-s3-rhcs-01-rgw-02-0531.epasvo/haproxy/haproxy.pem +``` + +- Acesse o servidor MON-01 via SSH e executar os comandos abaixo. +```console +# cephadm shell + +# ceph -s + cluster: + id: 13b8a71a-dd2d-11ed-bdae-005056b9558d + health: HEALTH_OK + + services: + mon: 3 daemons, quorum pr01-s3-rhcs-01-mon-01-0531.atende.net,pr01-s3-rhcs-01-mon-03-0531,pr01-s3-rhcs-01-mon-02-0531 (age 4M) + mgr: pr01-s3-rhcs-01-mon-03-0531.eeiulx(active, since 4M), standbys: pr01-s3-rhcs-01-mon-01-0531.atende.net.ppauhk, pr01-s3-rhcs-01-mon-02-0531.rporv h + osd: 63 osds: 63 up (since 4M), 63 in (since 6M) + rgw: 2 daemons active (2 hosts, 1 zones) + rgw-nfs: 3 daemons active (3 hosts, 1 zones) + + data: + pools: 10 pools, 385 pgs + objects: 30.11M objects, 4.7 TiB + usage: 9.7 TiB used, 242 TiB / 252 TiB avail + pgs: 385 active+clean + + io: + client: 4.4 MiB/s rd, 211 op/s rd, 0 op/s wr + +# ceph orch restart ingress.rgw.default +Scheduled to restart haproxy.rgw.IPM.pr01-s3-rgw01.fcmldd on host 'pr01-s3-rgw01' +Scheduled to restart keepalived.rgw.IPM.pr01-s3-rgw01.jyicnu on host 'pr01-s3-rgw01' +Scheduled to restart haproxy.rgw.IPM.pr01-s3-rgw02.bgyrid on host 'pr01-s3-rgw02' +Scheduled to restart keepalived.rgw.IPM.pr01-s3-rgw02.uqblji on host 'pr01-s3-rgw02' +``` \ No newline at end of file diff --git a/docs/checkout.md b/docs/checkout.md new file mode 100644 index 0000000..6c7b4df --- /dev/null +++ b/docs/checkout.md @@ -0,0 +1,54 @@ +# Procedimento de CHECKOUT + + +Caso ocorra de em algum momento atualizarem para uma revisão acima da release, sem atualizar na release, +será necessário realizar o checkout na versão da release para poder executar os pacotes, e somente após a execução dos pacotes, voltar para a versão mais atual. + +Neste caso o ambiente EAD foi atualizado na última versão antes de atualizar a Release. + +## Procedimento + +Exemplo demonstrado no ambiente EAD (substituir pelo ambiente necessário) + +* Acessar a pasta `/var/www/html` +``` +cd /var/www/html +``` +* Executar comando do checkout em uma nova pasta do ambiente: `cliente.atende.net_release` onde `40704` é o número da Revisão da Release, conforme exemplo abaixo: +``` +svn co https://atualizacao.atende.net/svn/AtendeNet_Producao/1.0.0/ ead.atende.net_release -r 40704 +``` +* Copiar o(s) arquivo(s) `_config` do ambiente para a nova pasta `_release`: +``` +cp ead.atende.net/_config.*.inc ead.atende.net_release/ +``` +* Copiar `atualiza_versao_config.inc`da pasta do ambiente para a pasta `_release/atualiza`: +``` +cp ead.atende.net/atualiza/atualiza_versao_config.inc ead.atende.net_release/atualiza/ +``` +* Renomear a pasta atual para `cliente.atende.net_ultima_versao`: +``` +mv ead.atende.net/ ead.atende.net_ultima_versao/ +``` +* Renomear a pasta `cliente.atende.net_release` para o encereço correto atual `cliente.atende.net`: +``` +mv ead.atende.net_release/ ead.atende.net/ +``` +* Dar permissão na pasta: +``` +chown apache.apache ead.atende.net/ -R +``` +### Neste momento, atualizar o ambiente na versão da Release (neste caso `40704`) + +* Após atualizar todos os _configs do ambiente (neste caso por ser o EAD, possui vários _configs), renomear a pasta `cliente.atende.net` novamente para `cliente.atende.net_release`: +``` +mv ead.atende.net ead.atende.net_release +``` +* Renomear de volta a pasta `cliente.atende.net_ultima_versao` para `cliente.atende.net`: +``` +mv ead.atende.net_ultima_versao/ ead.atende.net +``` + +Atualizar todos na última revisão. + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/configuracao_ambiente_consorcio.md b/docs/configuracao_ambiente_consorcio.md new file mode 100644 index 0000000..ea16055 --- /dev/null +++ b/docs/configuracao_ambiente_consorcio.md @@ -0,0 +1,167 @@ +# Configuração Consórcio + +### Cadastrar endereço no DNS Forward - PfSense + +Acesse o Firewall dos consórcios e então abra a rotina Services -> DNS Forwarder. + +![Firewall Consórcios](../img/configuracao_ambiente_consorcio_firewall_consorcio.png "Firewall Consórcios") + +Então vá até a tabela "Host Overrides" e selecione o botão "Add" bem no final dela. Carregará um formulário em uma nova página, preecha-o qual a imagem abaixo. Os valores informados estão descritos na lista abaixo. +*Após finalizar o formulário pressione "Save" para salvar, não "Add Host Name".* + + - Host: nome do cliente; + - Domain: atende.net __(sempre)__; + - IP Address: ip do Apache na rede do cliente. + +![Formulário do DNS Forwarder](../img/configuracao_ambiente_consorcio_firewall_adicionar_dominio_forward.png "Formulário do DNS Forwarder") + + +## reCAPTCHA + +Acesse o site do [Google reCAPTCHA](https://www.google.com/recaptcha/about/) com o e-mail: ipm@ipm.com.br e abra o "v3 Admin Console" na barra de endereços no topo da tela. + +!["v3 Admin Console" na barra de endereços superior.](../img/configuracao_ambiente_consorcio_01_v3_admin_console.png "\"v3 Admin Console\" na barra de endereços superior.") + +Adicione um novo endereço ao reCAPTCHA selecionando o ícone de engrenagem na barra superior da tela. + +![Adição de endereço ao reCAPTCHA.](../img/configuracao_ambiente_consorcio_02_botao_cadastrar_novo_site.png "Adição de endereço ao reCAPTCHA.") + +Troque o tipo da chave de empresarial para clássica. + +![Alteração de chave empresarial para clássica.](../img/configuracao_ambiente_consorcio_03_trocar_para_chave_classica.png "Alteração de chave empresarial para clássica.") + +Então realize o cadastro das duas versões de chaves: v2 e v3. + +__ATENÇÃO__, ao cadastrar um domínio a página exibirá uma chave de __site__ e outra __secreta__, __salve-as__ para uso futuro. + +### V2 + +Para este cadastro, preencha as informações qual o print abaixo, alterando apenas variáveis de cliente, como o código, nome, etc. +Para adicionar os domínios é necessário apertar no símbolo de "mais" à esquerda dele para realmente adicioná-lo. + +![Preenchimento v2.](../img/configuracao_ambiente_consorcio_04_preencher_v2.png) + +Ao apertar em "Enviar" a página exibirá a chave do site e a secreta, nesta mesma ordem. Salve-as como chaves do v2. + +*Adicionarei um print exibindo a tela das chaves.* + +### V3 + +Para cadastrar o v3 apenas troque o tipo de reCAPTCHA para v3 e também o valor na etiqueta e envie novamente. Salve as chaves exibidas do domínio v3. + +![Preenchimento v3.](../img/configuracao_ambiente_consorcio_05_preencher_v3.png "Preenchimento v3.") + +*Adicionarei um print exibindo a tela das chaves.* + +## Script configure_apache.sh + +Para configurar o apache deste novo cliente acesse o Apache dos consórcios e execute o arquivo *configure_apache.sh* na pasta */root*. + +Este código solicitará parâmetros recebidos no chamado que solicitou esta configuração. +Usaremos como exemplo os parâmetros abaixo, embora hajam muitos mais num chamado deste tipo. + +``` +HTTP: 192.168.38.100/28 +TOMCAT: 192.168.38.103/28 +SGDB-ATENDENET: 192.168.38.106/28 + +URL1: ciscel.atende.net +URL2: ciscel.mg.gov.br +BD: 23301_ciscel +``` + +Onde: + - *HTTP* é o endereço do Apache; + - *TOMCAT* é endereço do MSD, pois o TomCat agora é um container; + - *SGBD-ATENDENET* é o endereço do PostgreSQL; + - *URL1* é o domínio primário do cliente; + - *URL2* é o domínio secundário e opicional; + - *BD* é o nome da base de dados do cliente. + +\**Todos os IPs são da rede local do cliente.* + +\*\**O domínio secundário nem sempre será definido, então pode vir em branco. +Se este for o caso apenas selecione "n" no script.* + +### Senhas + +Será solicitado a senha de usuários do PostgreSQL, S3, reCAPTCHA e SVN. + +Para as senha do repositório SVN, consulte no equipamento 00000_atualizacao.atende.net_HTTP: +`Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Serviços do Equipamento » Configuração de Serviço` +E utilize a senha do usuário: atualiza-atende + +Para informar as hashes do "atendenetweb" e "sincronizador" deves acessar o GTT. Há um [passo-a-passo](./consulta_senhas.md) explicando como fazer isso. + +As chaves do reCAPTCHA v2 e v3 foram salvas do processo de cadastro no Google reCAPTCHA. + +### Execução + +```bash +./configure_apache.sh +``` + +![Execução configure_apache.sh](../img/configuracao_ambiente_consorcio_script_configure_apache.png "Execução configure_apache.sh") + +O código realizará o checkout do repositório SVN e realizar a configuração baseando-se nos parâmetros informados, isso levará um tempo. + +### Conferência + +Conferir o arquivo do config padrão do cliente, para garantir que as substituções foram feitas de maneira correta. + +``` +vim /var/www/html/cliente.atende.net/_config.padrao.inc +``` + +## Configuração MSD + +É necessário atualizar os domínios no MSD do cliente, portanto acesse-o e edite nas stacks *"ocr"*, *"sfo"*, *"sfs"*, *"sjr"* e *"swr"* a variável *SIGLA_NOMESERVICO_IPM_PROPERTIES_ENDERECOWEB*. + +Ela terá um valor semelhante a este: +```json +[{"dominio": "https://outrocliente.atende.net/atende.php","cidade": "padrao"},...] +``` +Adicione o domínio colocando este valor, alterando o endereço com o do cliente, logo antes do colchete final: +```json +,{"dominio": "https://cliente.atende.net/atende.php","cidade": "padrao"} +``` + +## SGBD + +### Base + +Crie a base de dados do cliente no SGBD com os seguintes valores: + + - Name: 00000_cliente + - Owner: dbaipm + - Template: template0 + - Tablespace: pg_default + +Apenas troque o código e "cliente" no nome da base pelos respectivos valores do cliente. + +### Extensão + +Acesse a base recém criada e realize a criação das extensões com o SQL abaixo. + +```sql +CREATE EXTENSION postgis; +CREATE EXTENSION postgis_sfcgal; +CREATE EXTENSION pg_buffercache; +CREATE EXTENSION pg_freespacemap; +CREATE EXTENSION pg_stat_statements; +CREATE EXTENSION btree_gist; +CREATE EXTENSION pg_trgm; +CREATE EXTENSION pgcrypto; +``` + +## ATENÇÂO: Reinicialização + +__*APENAS DEPOIS DAS 18H*__ + +### RESTART APACHE + +Reinicie o Apache. + +### RESTART STACKS + +Faça o *pull* e *redeploy* das Stacks. \ No newline at end of file diff --git a/docs/configuracao_apache_0820_cliente.md b/docs/configuracao_apache_0820_cliente.md new file mode 100644 index 0000000..d879cf3 --- /dev/null +++ b/docs/configuracao_apache_0820_cliente.md @@ -0,0 +1,666 @@ +## 00000-clean-app-01-0820.atende.net + +### Acessando o vCenter +>__OBS.__ Acesse um dos endereços abaixo através do navegador, de acordo com o data center ao qual o cliente está sendo configurado. + +```console +https://pr01-ger-vcsa01.atendenet.local/ +https://sp01-ger-vcsa01.atendenet.local/ +``` + +__Atenção__: Conferir a versão do Hardware. +- Virtual machine version: 19 + +Após concluir o clone do servidor, deve-se ajustar as configurações do servidor do cliente. +- vCPU +- Memory +- Hard Disk 2 +- Network Adapter + +>__Obs:__ O disco deve ser ampliado somente se o cliente possuir o sistema IPMSaude S1. + +### Configurando o Servidor + +__1) Ligue a máquina virtual do cliente, acesse o console VMWare do servidor, clicando em `LAUNCH WEB CONSOLE` e informando as credenciais de acesso.__ +>__OBS.__ Através do console web é possível realizar o login com o usuário root e a senha 123456 + +```console +# vim /etc/netplan/00-installer-config.yaml +# :% s/192.168.21.20/192.168.28.132 +# :% s/192.168.21.17/192.168.28.129 +--- +network: + ethernets: + ens192: + addresses: + - 192.168.28.132/28 + nameservers: + addresses: + - 192.168.28.129 + search: + - atende.net + routes: + - to: default + via: 192.168.28.129 + version: 2 +--- +# netplan apply +``` + +__2) Conecte via SSH com o endereço IP da interface INT_RT do Firewall e a respectiva porta NAT para acesso ao servidor. (APP-01 - 9024)__ +>__OBS.__ O login via SSH é permitido somente através do usuário ipm, com a senha Ipm@1234567. +Caso necessite de um nível elevado de acesso no sistema operacional, basta alterar para o usuário root com a senha 123456 + +__3) Ajuste o nome, os domínios de acesso e o endereço IP do Servidor__ +>__OBS.__ Deve-se substituir: O endereço IP do servidor APP, o nome do servidor, o domínio padrão e o domínio gov.br do cliente, conforme informações do chamado +```console +# vim /etc/hosts +# :% s/192.168.21.20/192.168.28.132 +# :% s/00000-clean-app-01-0820/08573-demonstracao-app-01-0820 +# :% s/cliente.atende.net/demonstracao.atende.net +# :% s/cliente.sc.gov.br/demonstracao.sc.gov.br +--- +192.168.28.132 08573-demonstracao-app-01-0820 08573-demonstracao-app-01-0820.atende.net +192.168.28.132 demonstracao.atende.net +192.168.28.132 ws-demonstracao.atende.net +192.168.28.132 origens-demonstracao.atende.net +192.168.28.132 www.demonstracao.atende.net +192.168.28.132 demonstracao.sc.gov.br +192.168.28.132 www.demonstracao.sc.gov.br +--- + +# vim /etc/hostname +# :% s/00000-clean-app-01-0820/08573-demonstracao-app-01-0820 +--- +08573-demonstracao-app-01-0820.atende.net +--- +``` + +__4) Confira a versão do VMWare-Tools__ +```console +# vmtoolsd --version +--- +VMware Tools daemon, version 12.3.5.46049 (build-22544099) +--- +``` + +__5) Reinicie o servidor para aplicar as configurações__ +``` console +# reboot +``` + +### Configurando o serviço do Apache: +>__Obs:__ Todas as configurações do serviço do apache são realizadas através de variáveis de ambiente em um único arquivo denominado __envvars__, algumas variáveis devem ser ajustadas conforme os recursos disponíveis, desta forma utilize a planilha `Manutenção Servidores - 15072025` para obter o cálculo correto para estas configurações. + +__6) Acesse novamente o servidor via SSH e edite o arquivo envvars__ +```console +# vim /etc/apache2/envvars +# :% s/cliente.atende.net/demonstracao.atende.net +# :% s/cliente.sc.gov.br/demonstracao.sc.gov.br +# :% s/00000-clean-app-01-0820/08573-demonstracao-app-01-0820 +# :% s/192.168.21.16/192.168.28.128 +--- +DEFAULT_FQDN=demonstracao.atende.net +SSL_CRT_FILE=star_atende_net/STAR_atende_net.crt +SSL_KEY_FILE=star_atende_net/chaveprivadanova.key +SSL_CA_FILE=star_atende_net/STAR_atende_net.ca-bundle + +GOV_BR_FQDN=demonstracao.sc.gov.br +SSL_GOV_BR_CRT_FILE=www_cliente_sc_gov_br/www_cliente_sc_gov_br.crt +SSL_GOV_BR_KEY_FILE=www_cliente_sc_gov_br/chaveprivadanova.key +SSL_GOV_BR_CA_FILE=www_cliente_sc_gov_br/www_cliente_sc_gov_br.ca-bundle + +APACHE_HOSTNAME=08573-demonstracao-app-01-0820.atende.net +APACHE_SUBNET="192.168.28.128/28" +APACHE_ALLOWED_IPS="127.0.0.1 ; 189.42.20.144/28 ; 179.184.24.0/28 ; 177.11.20.0/22 ; 187.4.207.192/29 ; 179.184.24.80/28 ; 192.168.28.128/28" +APACHE_TRUSTED_IPS="127.0.0.1 189.42.20.144/28 179.184.24.0/28 177.11.20.0/22 187.4.207.192/29 179.184.24.80/28 192.168.28.128/28" + +APACHE_MPM_E_ServerLimit=3 +APACHE_MPM_E_StartServers=2 +APACHE_MPM_E_MaxRequestWorkers=186 +APACHE_MPM_E_MinSpareThreads=38 +APACHE_MPM_E_MaxSpareThreads=93 +APACHE_MPM_E_ThreadsPerChild=62 +APACHE_MPM_E_AsyncRequestWorkerFactor=1 +APACHE_MPM_E_ThreadLimit=124 + +APACHE_MPM_P_StartServers=16 +APACHE_MPM_P_MinSpareServers=16 +APACHE_MPM_P_MaxSpareServers=40 +APACHE_MPM_P_MaxRequestWorkers=184 +APACHE_MPM_P_MaxConnectionsPerChild=0 + +APACHE_MaxKeepAliveRequests=72 +APACHE_KeepAliveTimeout=1 + +APACHE_QS_SrvMaxConnPerIP="56 72" +APACHE_QS_ClientEventBlockCount="72 56" +--- +``` +### Configurando o serviço do PHP 8.2 +>__Obs:__ Deve-se ajustar as configurações de acordo com a planilha `Manutenção Servidores - 15072025` + +__7) Edite o arquivo www.conf__ + +```console +# vim /etc/php/8.2/fpm/pool.d/www.conf +--- +pm.max_children = 40 +pm.start_servers = 12 +pm.min_spare_servers = 12 +pm.max_spare_servers = 32 +--- +``` + +### Configurando os domínios virtuais do Apache. +>__Obs:__ Neste ponto, devemos ter muita atenção, pois o servidor está preparado para funcionar com as mais diversas possibilidades de domínios virtuais para acesso aos sistema IPM, desta forma, fique atento as informações do chamado. [`mais informações`](../../../../../Padroes/src/branch/master/docs/dns-default.md) + +>__Por padrão o servidor vem configurado para operar com os domínios virtuais abaixo:__ +>- cliente.atende.net: Domínio principal para acesso ao sistema Atende.Net +>- ws-cliente.atende.net: Dedicado para utilização de WebServices +>- origens-cliente.atende.net: Dedicado para utilização por microserviços Java/Servlets +>- cliente.sc.gov.br: Sempre que receber uma requisição do domínio Gov.Br, ele será direcionado ao domínio principal + +>__Atenção:__ Caso esteja configurando um ambiente compartilhado, deve-se configurar o domínio mantendo os arquivos originais _cliente.atende.net_ e apenas copia-los ao invés de movê-los para o _nomedocliente.atende.net_. + +__8) Realize o ajuste nos arquivos abaixo__ +>__Domínios padrões__ + +```console +# cd /etc/awstats +# mv awstats.cliente.atende.net.conf awstats.demonstracao.atende.net.conf +# mv awstats.origens-cliente.atende.net.conf awstats.origens-demonstracao.atende.net.conf +# mv awstats.ws-cliente.atende.net.conf awstats.ws-demonstracao.atende.net.conf + +# vim awstats.demonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/demonstracao.atende.net-ssl-access.log" +SiteDomain="demonstracao.atende.net" +HostAliases="demonstracao.atende.net" +--- + +# vim awstats.origens-demonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/origens-demonstracao.atende.net-ssl-access.log" +SiteDomain="origens-demonstracao.atende.net" +HostAliases="origens-demonstracao.atende.net" +--- + +# vim awstats.ws-demonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/ws-demonstracao.atende.net-ssl-access.log" +SiteDomain="ws-demonstracao.atende.net" +HostAliases="ws-demonstracao.atende.net" +--- +``` + +>Se o cliente possuir um dominio dedicado ao IPMFiscal, IPMSaúde, Gov.Br ou outro domínio, deve-se renomear o arquivo ".disabled" para ".conf" no respectivo arquivo + +__8.1) Execute esta etapa, somente se o cliente possuir um domínio dedicado ao IPMFiscal (nfse-demonstracao.atende.net)__ + +```console +# cd /etc/awstats +# mv awstats.nfse-cliente.atende.net.disabled awstats.nfse-demonstracao.atende.net.conf +# vim awstats.nfse-demonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/nfse-demonstracao.atende.net-ssl-access.log" +SiteDomain="nfse-demonstracao.atende.net" +HostAliases="nfse-demonstracao.atende.net" +--- + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/002-nfse-domain.conf +# vim /etc/hosts +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 nfse-demonstracao.atende.net +192.168.28.132 www.nfse-demonstracao.atende.net +--- +``` + +__8.2) Execute esta etapa, somente se o cliente possuir o sistema IPMSaúde S1 ativo (demonstracao.atende.net/saude)__ + +```console +# cd /etc/apache2/conf-enabled/ +# ln -s ../conf-available/saude-alias.conf +``` + +__8.3) Execute esta etapa, somente se o cliente possuir um domínio dedicado ao IPMSaúde (saude-demonstracao.atende.net)__ +>Por padrão, os clientes costumam acessar o sistema IPMSaúde através do domínio principal, apenas informando a pasta onde o sistema está instalado (demonstracao.atende.net/saude) neste caso, __essa etapa não deve ser executada__. + +```console +# cd /etc/awstats +# mv awstats.saude-cliente.atende.net.disabled awstats.saude-demonstracao.atende.net.conf +# vim awstats.saude-demonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/saude-demonstracao.atende.net-ssl-access.log" +SiteDomain="saude-demonstracao.atende.net" +HostAliases="saude-demonstracao.atende.net" +--- + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/001-saude-domain.conf +# vim /etc/hosts +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 saude-demonstracao.atende.net +192.168.28.132 www.saude-demonstracao.atende.net +--- + +# cd /etc/apache2/conf-enabled/ +# ln -s ../conf-available/saude-redirect.conf +``` + +__8.4) Execute esta etapa, somente se o cliente utilizar um domínio Gov.Br como acesso principal (demonstracao.sc.gov.br)__ +>Por padrão, os clientes costumam redirecionar o domínio Gov.Br para o domínio principal, mas existem situações onde o cliente possui especificado em edital o acesso ao sistema através do login Gov.Br, desta forma o sistema precisa estar acessível através de um domínio Gov.Br, execute essa etapa somente nessa situação, caso contrário, __essa etapa não deve ser executada__. + +```console +# cd /etc/awstats +# mv awstats.cliente.sc.gov.br.disabled awstats.demonstracao.sc.gov.br.conf +# vim awstats.demonstracao.sc.gov.br.conf +# :% s/cliente.sc.gov.br/demonstracao.sc.gov.br +--- +LogFile="/var/log/apache2/demonstracao.sc.gov.br-ssl-access.log" +SiteDomain="demonstracao.sc.gov.br" +HostAliases="demonstracao.sc.gov.br" +--- + +# vim /etc/apache2/envvars +# :% s/www_cliente_sc_gov_br/www_demonstracao_sc_gov_br +--- +SSL_GOV_BR_CRT_FILE=www_demonstracao_sc_gov_br/www_demonstracao_sc_gov_br.crt +SSL_GOV_BR_KEY_FILE=www_demonstracao_sc_gov_br/chaveprivadanova.key +SSL_GOV_BR_CA_FILE=www_demonstracao_sc_gov_br/www_demonstracao_sc_gov_br.ca-bundle +--- + +# cd /etc/apache2/sites-enabled/ +# rm -rf 000-redirect-gov-br-domain.conf +# ln -s ../sites-available/000-enable-gov-br-domain.conf +``` + +__8.5) Execute essa etapa, somente se o cliente possuir endereços de acesso ao portal da entidade (camarademonstracao.atende.net)__ +>Endereços específicos para acesso ao portal das entidades surgiram principalmente com o SIAFIC, onde todas as entidades do município foram migradas para dentro do banco de dados da prefeitura, como por exemplo câmaras de vereadores, institutos de previdência e etc, desta forma, se o cliente não possuir um endereço de acesso específico para a entidade, __essa etapa não deve ser executada__. + +```console +# cd /etc/awstats +# mv awstats.camaracliente.atende.net.disabled awstats.camarademonstracao.atende.net.conf +# vim awstats.camarademonstracao.atende.net.conf +# :% s/cliente.atende.net/demonstracao.atende.net +--- +LogFile="/var/log/apache2/camarademonstracao.atende.net-ssl-access.log" +SiteDomain="camarademonstracao.atende.net" +HostAliases="camarademonstracao.atende.net" +--- + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/004-camara-domain.conf +# vim /etc/hosts +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 camarademonstracao.atende.net +192.168.28.132 www.camarademonstracao.atende.net +--- +``` + +__8.6) Execute essa etapa, somente se o cliente possuir um apelido para o endereço de acesso principal (demo.atende.net)__ +>Casos como estes são raros, mas existem, onde por algum motivo o cliente acaba solicitando que o acesso ao sistema por um endereço alternativo (apelido), caso o cliente não possua um endereço alternativo para acesso, __essa etapa não deve ser executada__. + +```console +# cd /etc/awstats +# mv awstats.other.domain.com.disabled awstats.demo.atende.net.conf +# vim awstats.demo.atende.net.conf +# :% s/other.domain.com/demo.atende.net +--- +LogFile="/var/log/apache2/demo.atende.net-ssl-access.log" +SiteDomain="demo.atende.net" +HostAliases="demo.atende.net" +--- + +# cd /etc/apache2/sites-available +# cp 007-other-domain.conf 007-demo-domain.conf +# vim 007-demo-domain.conf +# :% s/other.domain.com/demo.atende.net + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/007-demo-domain.conf +# vim /etc/hosts +# :% s/other.domain.com/demo.atende.net +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 demo.atende.net +192.168.28.132 www.demo.atende.net +--- +``` + +__8.7) Execute essa etapa, somente se o cliente possui o endereço de acesso exclusivo de alguma autarquia (saaedemonstracao.atende.net)__ +>Endereços específicos para acesso ao portal das entidades surgiram principalmente com o SIAFIC, onde todas as entidades do município foram migradas para dentro do banco de dados da prefeitura, como por exemplo câmaras de vereadores, institutos de previdência e etc, desta forma, se o cliente não possuir um endereço de acesso específico para a entidade, __essa etapa não deve ser executada__. + +```console +# cd /etc/awstats +# mv awstats.autarquia.atende.net.disabled awstats.saaedemonstracao.atende.net.conf +# vim awstats.saaedemonstracao.atende.net.conf +# :% s/autarquia.atende.net/saaedemonstracao.atende.net +--- +LogFile="/var/log/apache2/saaedemonstracao.atende.net-ssl-access.log" +SiteDomain="saaedemonstracao.atende.net" +HostAliases="saaedemonstracao.atende.net" +--- + +# cd /etc/apache2/sites-available +# cp 006-autarquia-domain.conf 006-saaedemonstracao-domain.conf +# vim 006-saaedemonstracao-domain.conf +# :% s/autarquia.atende.net/saaedemonstracao.atende.net + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/006-saaedemonstracao-domain.conf +# vim /etc/hosts +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 saaedemonstracao.atende.net +192.168.28.132 www.saaedemonstracao.atende.net +--- +``` + +__8.8) Execute essa etapa, somente se estiver configurando um ambiente compartilhado com vários endereços de acesso__ +>Ambientes compartilhados são utilizados quando temos várias instalaçãoes do Atende.Net, sendo cada uma específica para determinado cliente, onde caqual possui seu endereço de acesso, se o ambeinte não possui vários endereços de acesso, cada um vinculado a uma instalação do Atende.Net com o seu respectivo database, __essa etapa não deve ser executada__. + +>__Atenção:__ Essa etapa deve ser repetida, sempre que for realizada uma nova instalação do Atende.Net para um novo cliente + +```console +# cd /etc/awstats +# cp awstats.cliente.atende.net.conf awstats.nomedocliente.atende.net.conf +# cp awstats.origens-cliente.atende.net.conf awstats.origens-nomedocliente.atende.net.conf +# cp awstats.ws-cliente.atende.net.conf awstats.ws-nomedocliente.atende.net.conf + +# vim awstats.nomedocliente.atende.net.conf +# :% s/cliente.atende.net/nomedocliente.atende.net +--- +LogFile="/var/log/apache2/nomedocliente.atende.net-ssl-access.log" +SiteDomain="nomedocliente.atende.net" +HostAliases="nomedocliente.atende.net" +--- + +# vim awstats.origens-nomedocliente.atende.net.conf +# :% s/cliente.atende.net/nomedocliente.atende.net +--- +LogFile="/var/log/apache2/origens-nomedocliente.atende.net-ssl-access.log" +SiteDomain="origens-nomedocliente.atende.net" +HostAliases="origens-nomedocliente.atende.net" +--- + +# vim awstats.ws-nomedocliente.atende.net.conf +# :% s/cliente.atende.net/nomedocliente.atende.net +--- +LogFile="/var/log/apache2/ws-nomedocliente.atende.net-ssl-access.log" +SiteDomain="ws-nomedocliente.atende.net" +HostAliases="ws-nomedocliente.atende.net" +--- + +# cd /etc/apache2/sites-available +# cp 008-shared-domain.conf 008-nomedocliente-domain.conf +# vim 006-nomedocliente-domain.conf +# :% s/shared.atende.net/nomedocliente.atende.net + +# cd /etc/apache2/sites-enabled +# ln -s ../sites-available/008-nomedocliente-domain.conf +# vim /etc/hosts +--- +# Descomente as linhas respectivas aos domínios dedicados. +192.168.28.132 nomedocliente.atende.net +192.168.28.132 www.nomedocliente.atende.net +``` + +### Configurando o monitoramento através do Zabbix. + +__9) Confira a versão e configure o serviço do zabbix_agent__ + +```console +# zabbix_agent2 -V +zabbix_agent2 (Zabbix) 6.0.34 + +# vim /etc/zabbix/zabbix_agent2.conf +# :% s/192.168.21.17/192.168.28.129 +# :% s/00000-clean-app-01-0820/08573-demonstracao-app-01-0820 +--- +Server=192.168.28.129 +ServerActive=192.168.28.129 +Hostname=08573-demonstracao-app-01-0820 +--- +``` + +### Instalando e configurando o Atende.Net +> __Obs:__ Cada data center possui um servidor de repositório GIT chamado de __DGR__ com os respectivos arquivos relacionados ao Atende.Net, sempre informe o servidor de repositório do respectivo data center ao qual o cliente está sendo configurado +```console +https://pr01-dgr.atende.net/ipm_sistemas_ltda/AtendeNet_Production.git +https://sp01-dgr.atende.net/ipm_sistemas_ltda/AtendeNet_Production.git +``` + +__10) Renomeie a pasta e realize o clone do repositório GIT__ +> __Obs:__ Cada servidor DGR possui um usuário de atualização chamado: __AtendeNet_Atualizacao__ e a sua respectiva senha no formato HASH ao qual está cadastrada no Gerenciador do Data Center __(GTT)__. + +>__Atenção:__ Essa etapa deve ser repetida, sempre que for realizada uma nova instalação do Atende.Net para um novo cliente em ambientes compartilhados. + +```console +# cd /var/www/html/ +# mv cliente.atende.net demonstracao.atende.net +# git clone --branch=master https://XX-dgr.atende.net/ipm_sistemas_ltda/AtendeNet_Production.git /var/www/html/demonstracao.atende.net/ +``` + +__11) Crie os arquivos de configuração__ + +> __Obs:__ O endereço do Memcache deve ser o IP do Cluster e não deve existir a configuração de storage no config. + +```console +# vim /var/www/html/demonstracao.atende.net/_config.padrao.inc + + +# vim /var/www/html/demonstracao.atende.net/atualiza/atualiza_versao_config.inc + +``` + +__12) Ajuste os privilégios da pasta__ + +```console +# chown www-data:www-data -R /var/www/html/demonstracao.atende.net/ +# git config --global --add safe.directory /var/www/html/demonstracao.atende.net +``` + +### Instalando e configurando o IPMSaúde S1 + +__Atenção:__ Estas etapas devem ser executadas somente se o cliente possuir o sistema IPMSaúde S1 ativo. +__Importante:__ Antes de seguir com a instalação do sistema IPMSaúde S1, verifique se o disco __SDB__ foi ampliado. + +- [`Expansão Disco - APP-01-0820`](expansao_disco_app_0820.md) + +>__Resumo:__ +```console +# df -h +/dev/mapper/apache--vg-lv--html 99G 12G 88G 12% /var/www + +# echo 1 > /sys/class/block/sdb/device/rescan +# lsblk +sdb 8:16 0 200G 0 disk +└─apache--vg-lv--html 253:0 0 100G 0 lvm /var/www + +# pvresize /dev/sdb + Physical volume "/dev/sdb" changed + +# lvextend -l +100%FREE /dev/apache-vg/lv-html + Size of logical volume apache-vg/lv-html changed from <100.00 GiB (25599 extents) to <200.00 GiB (51199 extents). + +# xfs_growfs /var/www +data blocks changed from 25952256 to 52427776 + +# lsblk +sdb 8:16 0 200G 0 disk +└─apache--vg-lv--html 253:0 0 200G 0 lvm /var/www + +# df -h +/dev/mapper/apache--vg-lv--html 200G 13G 188G 7% /var/www +``` + +> __Obs:__ Cada data center possui um servidor de repositório GIT chamado de __DGR__ com os respectivos arquivos relacionados ao Atende.Net, sempre informe o servidor de repositório do respectivo data center ao qual o cliente está sendo configurado +```console +https://pr01-dgr.atende.net/ipm_sistemas_ltda/IPMSaude_Production.git +https://sp01-dgr.atende.net/ipm_sistemas_ltda/IPMSaude_Production.git +``` + +__13) Crie a pasta e realize o clone do repositório GIT__ +> __Obs:__ Cada servidor DGR possui um usuário de atualização chamado: __IPMSaude_Atualizacao__ e a sua respectiva senha no formato HASH ao qual está cadastrada no Gerenciador do Data Center __(GTT)__. + +```console +# mkdir -p /var/www/html/demonstracao.atende.net/saude +# git clone --branch=master https://XX-dgr.atende.net/ipm_sistemas_ltda/IPMSaude_Production.git /var/www/html/demonstracao.atende.net/saude/ +``` + +__14) Crie os arquivos de configuração__ + +> __Obs:__ O endereço do Memcache deve ser o IP do Cluster e não deve existir a configuração de storage no config. + +```console +# vim /var/www/html/demonstracao.atende.net/saude/_config.padrao.inc + + +# vim /var/www/html/demonstracao.atende.net/saude/atualiza/sau_atualiza_versao_config.inc + +``` + +__15) Ajuste os privilégios da pasta__ + +```console +# chown www-data:www-data -R /var/www/html/demonstracao.atende.net/saude +# git config --global --add safe.directory /var/www/html/demonstracao.atende.net/saude +``` + +### Configurando o serviço do NFS +> __Obs:__ Por padrão o servidor APP-01 está configurado em modo __Server__, permitindo exportar a pasta de instalação do Atende.Net via NFS. Isso possibilita que sejam adicionados mais servidores APP ao cluster do HAProxy ao qual obterão acesso aos mesmos arquivos instalados no servidor APP-01, desta forma, todos os demais servidores APP serão configurados em modo __Client__ para acessar tais arquivos. + + +__16) Edite o arquivo de exportação NFS e aplique as configurações__ +```console +# vim /etc/exports +# :% s/cliente.atende.net/demonstracao.atende.net/ +--- +/var/www/html/demonstracao.atende.net *(rw,no_root_squash,no_subtree_check) +--- +# exportfs -r +# systemctl restart nfs-server.service +``` + +__16.1) Execute esta etapa, para alterar o modo de funcionamento do serviço NFS para Client, somente se estiver adicionando mais servidores APP ao cluster HAProxy__ +> __Obs:__ Essa etapa __não deve ser executada__ no servidor APP-01, execute esta etapa somente em servidores APP-02 e posteriores. + +```console +# systemctl disable nfs-server.service +# vim /etc/fstab +# :% s/192.168.21.20/192.168.28.132 +# :% s/cliente.atende.net/demonstracao.atende.net +--- +# Descomente a linha do volume compartilhado +192.168.28.132:/var/www/html/demonstracao.atende.net /var/www/html/demonstracao.atende.net nfs rw 0 0 +--- +# mount /var/www/html/demonstracao.atende.net +# chown www-data:www-data /var/www/html/demonstracao.atende.net -R +``` + +### Finalizando a configuração + +__17) Limpe os logs antigos__ + +```console +# rm -rf /var/log/apache2/* && rm -rf /var/log/php8.2-fpm* +``` +__18) Altere a senha do usuário root__ + +```console +# passwd root +``` + +__19) Reinicie o servidor para aplicar as configurações__ +```console +# reboot +``` + +### Ativando o Monitoramento via Zabbix + +Acesse através no navegador o servidor Zabbix do respectivo data center ao qual o ambiente está sendo configurado. + +``` +https://pr01-datacenter.ipm.com.br:8085 +https://sp01-datacenter.ipm.com.br:8085 +``` + +__20) Após acessar o servidor Zabbix, acesse no menu: Configuration > Hosts__ +```console +# Clique em "Create Host" e cadastre as informações do servidor. + +- Host name: 08573-demonstracao-app-01-0820.atende.net +- Templates: Apache by Zabbix agent, Linux by Zabbix agent, PHP-FPM by Zabbix agent, Template TCP UDP sockets +- Groups: demonstracao.atende.net, Virtual machines +- Interfaces + - Agent: 192.168.28.132 +- Monitored by proxy: PX_XXDemonstracao +- Enabled: False + +# Clique em "Add" para concluir +``` + +>A ativação do equipamento ocorrerá somente no momento da transferência para o ambiente de produção. + +![ZABBIXHOST](../img/app_0820_zabbix_create_host.png) + +[`Voltar para Configuração do Ambiente`](criacao_estrutura.md) \ No newline at end of file diff --git a/docs/configuracao_apache_5618_cliente.md b/docs/configuracao_apache_5618_cliente.md new file mode 100644 index 0000000..bf53b52 --- /dev/null +++ b/docs/configuracao_apache_5618_cliente.md @@ -0,0 +1,219 @@ +## 00000-clean-app-01-5618.atende.net + +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + + +Acesse o Console VMWare do servidor: + LAUNCH WEB CONSOLE > Informe usuário e senha (root - 123456): + + # vim /etc/sysconfig/network-scripts/ifcfg-eno16780032 + IPADDR="192.168.XX.XX" - Inserir IP do Apache + PREFIX="28" + GATEWAY="192.168.XX.XX" - Inserir IP do Firewall + DNS1="192.168.XX.XX" - Inserir IP do Firewall + + # reboot + +Após reiniciar a máquina, conectar via SSH com o IP INT_RT configurado no Firewall (porta 9024): + + # vim /etc/resolv.conf + nameserver 192.168.XX.XX - Alterar para o IP do gateway + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + - Substituir o IP do App. Ex: :% s/21.20/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/08573-demonstracao-app-01-5618 + - Substituir domínio do cliente. Ex: :% s/clean.atende.net/cliente.atende.net (conforme URL1 informada no chamado) + - Substituir domínio do cliente. Ex: :% s/clean.sc.gov.br/cliente.sc.gov.br (conforme URL2 informada no chamado) + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/08573-demonstracao-app-01-5618 + +Instalar o VMWare-Tools: +No VCenter, vá na VM do cliente e siga os passos: Actions > Guest OS > Install VMWare Tools. + + # mount /dev/cdrom /mnt + # cd /root + # cp /mnt/VMwareTools-10.....tar.gz /root/ + # tar -xzvf VMwareTools-10.....tar.gz + # cd vmware-tools-distrib/ + # ./vmware-install.pl > yes > ENTER até o fim da instalação + # reboot + +Altere os arquivos de configuração do servidor: +Ajustar os seguintes itens conforme a planilha de manutenção de servidores: + + +Ajuste o arquivo performance.conf: + + # vim /etc/httpd/conf.d/performance.conf + MaxKeepAliveRequests 45 - Alterar conforme planilha MAX KEEPALIVE + + StartServers 20 - Alterar conforme planilha START SERVERS + MinSpareServers 20 - Alterar conforme planilha START SERVERS + MaxSpareServers 40 - Alterar conforme planilha MAX SERVERS + ServerLimit 190 - Alterar conforme planilha MAX CLIENTS + MaxClients 190 - Alterar conforme planilha MAX CLIENTS + MaxRequestsPerChild 4000 + + + +Ajuste o arquivo security.conf: + + # vim /etc/httpd/conf.d/security.conf + ServerTokens Prod - Conferir se o valor está como "Prod" + ServerSignature Off - Conferir se o valor está como "Off" + TraceEnable Off - Conferir se o valor está como "Off" + Directory - Alterar o CLEAN.atende.net pelo do cliente. Ex: :% s/CLEAN.atende.net/cliente.atende.net + + +Ajuste o arquivo qos.conf: + + # vim /etc/httpd/conf.d/qos.conf + QS_SrvMaxConnPerIP 95 115 - Alterar conforme planilha + QS_ClientEventBlockCount 115 95 - Alterar conforme planilha + QS_SrvMaxConnExcludeIP 192.168.XX.XX - Substituir pelo IP do Tomcat. Ex: :% s/21.23/XX.XX + + + SetHandler qos-viewer - Substituir pelo IP do Apache. Ex: :% s/21.20/XX.XX + Order Deny,Allow + Deny from All + Allow from 192.168.XX.XX ; XX.X.XX.XXX/29 ; XX.XX.XX.XXX/28 ; XXX.XXX.XX.X/28 ; XXX.XX.XX.X/22 + + + +Ajuste o arquivo ssl.conf: + + # vim /etc/httpd/conf.d/ssl.conf + Alterar o clean.atende.net pelo endereço do cliente. Ex: :% s/clean.atende.net/cliente.atende.net + + +Ajuste o arquivo status.conf: + + # vim /etc/httpd/conf.d/status.conf + - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + + +Ajuste o arquivo httpd.conf: + + # vim /etc/httpd/conf/httpd.conf + Configurar as informações gerais do servidor, substituindo pelo endereço principal. + Ex: :% s/CLEAN.atende.net/cliente.atende.net ou, se for ambiente compartilhado :% s/CLEAN.atende.net/CAMARAS-01.atende.net + Configurar o domínio virtual, substituindo o clean.atende.net pelo do cliente (cliente.atende.net) e o clean.sc.gov.br para (cliente.sc.gov.br) observando as particularidades de cada cliente (URL2 informado no chamado). + Ex: :% s/clean.atende.net/cliente.atende.net e :% s/clean.sc.gov.br/cliente.sc.gov.br + + +Ajuste o arquivo awstats.conf: + + # vim /etc/httpd/conf.d/awstats.conf + Directory - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + +Renomeie o nome do arquivo para o cliente em questão: + + # cd /etc/awstats + # mv awstats.clean.atende.net.conf awstats.cliente.atende.net.conf - Substituir cliente pelo nome do cliente em questão. + # vim awstats.cliente.atende.net.conf - Substituir a palavra clean pelo nome do cliente. Ex: :% s/clean/cliente + + +Confira configuração do memcache: + + # cat /etc/sysconfig/memcached - CACHESIZE deve estar ="128" + + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agentd.conf + Server=192.168.XX.XX - Alterar para o IP do Firewall + ServerActive=192.168.XX.XX - Alterar para o IP do Firewall + Hostname=00000-clean-app-01-5618 - Alterar o código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/08573-demonstracao-app-01-5618 + + +Ajuste o arquivo apache.conf: + + # vim /etc/ztc/apache.conf + host=192.168.XX.XX - Alterar para o IP do Apache + + +Realize a conferência do arquivo memcache.conf: + + # cat /etc/zabbix/zabbix_agentd.d/memcache.conf + Retorno: UserParameter=memcache[*],/opt/ztc/bin/memcache_status.sh $1 + + +Conferir regras de firewall, caso exista alguma alteração será informado: + + # iptables -L + + +Configurando as pastas/arquivos e o software Atende Net para o cliente: + + # cd /var/www/html/ + +Renomear a pasta para o nome do cliente em questão: + + # mv clean.atende.net cliente.atende.net + + # cd cliente.atende.net/ + + # svn update + +Altere as informações do arquivo de config: + + # vim _config.padrao.inc + $_CONFIG = Array(); + $_CONFIG['banco'] = 'pg'; + $_CONFIG['ip'] = '192.168.XX.XX'; - Substituir pelo IP do Banco de Dados + $_CONFIG['porta'] = 5432; + $_CONFIG['senha_atendenetweb'] = 'HASH_SGBD'; - Substituir pela HASH gerada no GDT + $_CONFIG['senha_sincronizador'] = 'HASH_SGBD'; - Substituir pela HASH gerada no GDT + $_CONFIG['base'] = '00000_clean'; - Substituir pelo nome da base + $_CONFIG['end_birt'] = 'http://192.168.XX.XX:8080/WebReport/'; - Substituir pelo IP do Tomcat + $_CONFIG['end_memcache'] = '127.0.0.1:11211'; + $_CONFIG['https'] = true; + $_CONFIG['session_mode'] = 2; + $_CONFIG['versao_birt'] = 4.4; + $_CONFIG['manutencao'] = 0; + $_CONFIG['captcha_mode'] = 1; // Ativa o Captcha: 1 - Total, 2 - Ignora Restritos. + $_CONFIG['captcha_version'] = 'vh'; // Versao Captcha Google: v2 - Versao 2, v3 Versao 3, vh - Hibrida. + $_CONFIG['captcha_v3_score'] = 0.2; // Score padrao 0.5, valores possíveis de 0.0 a 1.0. + $_CONFIG['captcha_v2_key_site'] = 'HASH_CAPTCHA'; - Substituir pela chave de site do Google para Recaptcha V2 + $_CONFIG['captcha_v2_key_secret'] = 'HASH_CAPTCHA'; - Substituir pela chave secreta do Google para Recaptcha V2 + $_CONFIG['captcha_v3_key_site'] = 'HASH_CAPTCHA'; - Substituir pela chave de site do Google para Recaptcha V3 + $_CONFIG['captcha_v3_key_secret'] = 'HASH_CAPTCHA'; - Substituir pela chave secreta do Google para Recaptcha V3 + $_CONFIG['politica_seguranca'] = 1; + +Conferir o Atualiza: + + # vim atualiza/atualiza_versao_config.inc + +```console + Informe usuário e senha (root - 123456): + + # vim /etc/sysconfig/network-scripts/ifcfg-ens192 + IPADDR="192.168.XX.XX" - Inserir IP informado no chamado + PREFIX="28" + GATEWAY="192.168.XX.XX" - Inserir IP do Firewall + DNS1="192.168.XX.XX" - Inserir IP do Firewall + + # reboot + +Após reiniciar a máquina, conectar via SSH com o IP INT_RT configurado no Firewall (porta 9033): + + # vim /etc/resolv.conf + nameserver 192.168.XX.XX - Alterar para o IP do gateway + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + - Substituir o IP do Bdp. Ex: :% s/21.29/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-bdp-02-1150/08573-demonstracao-bdp-02-1150 + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-bdp-02-1150/08573-demonstracao-bdp-02-1150 + +Conferir a instalação do VMwareTools: + + # ps aux | grep vm + - Ex: root 1194 0.0 0.1 153432 12424 ? Ss 15:24 0:00 /usr/bin/vmtoolsd + # reboot + +Alterando os arquivos de configuração do servidor: +Com o usuário root: + + # vim /var/lib/pgsql/11/data/pg_hba.conf + - Substituir o IP da rede (192.168.21.16/28) para o IP da “REDE” LAN passado no chamado. + - Deixar todos os IPS como trust, até que seja transferido de ambiente. + +Alterar configurações conforme a planilha: + + # vim /var/lib/pgsql/11/data/postgresql.prod + # vim /var/lib/pgsql/11/data/postgresql.mig + - max connections + - shared buffers + - temp buffers + - work mem - Alterar conforme arquivo que estiver editando (prod ou mig) + - maintance work_mem - Alterar conforme arquivo que estiver editando (prod ou mig) + - max worker processes + - max parallel workers per gather + - max parallel workers + - effective cacche_size + +Substituir o arquivo postgresql.conf pelo arquivo postgresql.mig: + + # cp /var/lib/pgsql/11/data/postgresql.mig /var/lib/pgsql/11/data/postgresql.conf + +No pgAdmin: + +- Adicionar o cliente (através do IP da interface de backup e na porta 65433) e conferir os TableSpaces , deverá existir: arquivo/expurgo/índice; +- Alterar o nome da base que estará como 00000_clean para o nome da base do cliente (01234_ipmsaude); +- Conferir extensões, deverão existir as seguintes: btree_gist/pg_buffercache/pg_freespacemap/pg_stat_statements/postgis/postgis_sfcgal; (Caso alguma não exista, execute o SQL: create extension nomedaextensao;) +- Criar senhas para os usuários do banco: as senhas deverão conter caracteres especiais, letras maiúsculas e números. Para cada usuário será necessário criar uma senha, após criar e as salvar num txt, introduza as senhas nos usuários. (Login Roles > Properties > User Definition); + + +Ajustes do Backup (via SSH): +Com o usuário root, conferir se o IP da storage informado no chamado está configurado corretamente (fstab): + + # vim /etc/fstab + +Com o usuário root, conferir se está na versão 3.11 do script de backup: + + # vim /root/bkp_remoto/bkp_remoto.sh + +Com o usuário root conferir se o IP da storage informado no chamado está configurado corretamente (ip_stg_bkp=): + + # vim /root/bkp_remoto/bkp_remoto.cfg + - Obs: No caso de ambientes compartilhados, deve-se alterar a variável dmp_max de 2 para 1. + +Com o usuário root, ajustar o horário do backup (deixar comentado): + + # crontab -e + +Verificar a versão do Zabbix: + + # zabbix_agentd -V + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agentd.conf + - Alterar para o IP do Firewall as opções: "Server" e "ServerActive". Ex: :% s/21.17/XX.XX + - Alterar o Hostname para o os padrões do cliente. Ex: :% s/00000-clean-bdp-02-1150/08573-demonstracao-bdp-02-1150 + +Ajuste o arquivo pgsql.conf: + + # vim /etc/ztc/pgsql.conf + - Informar a senha do usuário monitoramento (senha criada para o usuário do banco): + password=xxxxxx + - Alterar o nome da base: + database=00000_ipmsaude + Obs: Em ambientes compartilhados, deve-se comentar a linha database. + +Confira o tipo do equipamento: + + # vim /root/gdt_agent/cfg/gdt_agent.cfg + - 7 IPMSaude + +Altere a senha do root: + + # passwd root + +Reinicie a máquina: + + # reboot + +Após o servidor reiniciar, deve-se ajustar as configurações do kernel, para isso execute o script: + + # /root/kernelsetup.sh + +Edite o arquivo /etc/sysctl.conf e substitua as informações apresentadas pelas existentes: + + # vim /etc/sysctl.conf + - Ex: vm.swappiness=0 + vm.dirty_ratio=10 + vm.dirty_background_ratio=5 + vm.nr_hugepages=1263 + kernel.shmmax=4096004096 + kernel.shmall=1000001 + kernel.sem=250 32000 100 128 + +Aplique as configurações: + + # sysctl -p + +Ative o uso de “memórias grandes”: + + # vim /var/lib/pgsql/11/data/postgresql.conf + - ALtere: huge_pages = try -> huge_pages = on + + +Reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: + + # systemctl restart postgresql-11.service + +Reinicie o servidor para garantir que as configurações estão corretas: + + # reboot + +### Ativando o Monitoramento via Zabbix + +Acesse através no navegador o servidor Zabbix do respectivo data center ao qual o ambiente está sendo configurado. + +``` +https://pr01-datacenter.ipm.com.br:8085 +https://sp01-datacenter.ipm.com.br:8085 +``` + +__Após acessar o servidor Zabbix, acesse no menu: Configuration > Hosts__ +```console +# Clique em "Create Host" e cadastre as informações do servidor. + +- Host name: 08573-demonstracao-bdp-02-1150.atende.net +- Templates: Linux by Zabbix agent, Template_app_PostgreSQL, Template_IPM_OS_Linux, Template_IPM_PgSQL +- Groups: demonstracao.atende.net, Virtual machines +- Interfaces + - Agent: 192.168.28.141 +- Monitored by proxy: PX_XXDemonstracao +- Enabled: False + +# Clique em "Add" para concluir +``` + +>A ativação do equipamento ocorrerá somente no momento da transferência para o ambiente de produção. + +![ZABBIXHOST](../img/bdp_1150_zabbix_create_host.png) + +[`Voltar para Configuração do Ambiente`](criacao_estrutura.md) \ No newline at end of file diff --git a/docs/configuracao_banco_1600_cliente.md b/docs/configuracao_banco_1600_cliente.md new file mode 100644 index 0000000..35bac81 --- /dev/null +++ b/docs/configuracao_banco_1600_cliente.md @@ -0,0 +1,259 @@ +## 00000-clean-bdp-01-1600.atende.net (Atende.Net) + +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + +Acesse o Console VMWare do servidor: + LAUNCH WEB CONSOLE > Informe usuário e senha: +>(OBS. Nessa nova versão do Banco de Dados PostgreSQL16, o padrão de login via SSH é pelo usuário IPM, com a senha Ipm@1234567. Caso necessite de um nível elevado de acesso no sistema Operacional, basta logar com o usuário root e a senha 123456): + + - Substituir o IP da VM Ex: :% s/21.28/XX.XX + - Substituir o IP do Gateway Ex: :% s/21.17/XX.XX + + # vim /etc/netplan/00-installer-config.yaml + network: + ethernets: + ens192: + addresses: + - 192.168.21.28/XX - Substituir pelo IP do banco passado no chamado + nameservers: + addresses: + - 192.168.21.17 - Substituir pelo IP do Firewall também informado no chamado + search: + - atende.net + routes: + - to: default + via: 192.168.21.17 - Substituir pelo IP do Firewall também informado no chamado + version: 2 + +Após alterado, execute o comando abaixo para aplicar as alterações: + + # netplan apply + + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + - Substituir o IP do Bdp. Ex: :% s/21.28/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-bdp-01-1600/08573-demonstracao-bdp-01-1600 + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-bdp-01-1600/08573-demonstracao-bdp-01-1600 + +Conferir a instalação do VMwareTools: + + # ps aux | grep vm + - Ex: root 1194 0.0 0.1 153432 12424 ? Ss 15:24 0:00 /usr/bin/vmtoolsd + +Realizar o reboot na VM + + # reboot + +Acesse novamente a VM, mas agora através do SSH. + +```console +login as: ipm +ipm@172.16.1.11's password: +ipm@08573-demonstracao-bdp-01-1600:~$ su - root +Password: +root@08573-demonstracao-bdp-01-1600:/root# +``` + +#### ATENÇÃO: + Realizar ajuste de Partição caso necessário conforme o padrão, seguindo a documentação [`Partições BDP16`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/partition-bdp-1600.md) + +Para expandir, você deve analisar qual partição será necessário ampliar. +Após ampliado o disco no VmWare, basta executar os comandos para ampliação no sistema operacional: + + # Expandir ampliando o disco existente + # Listar os discos: + lsblk + + # Realizar o resize dos discos: + pvresize /dev/sdb + pvresize /dev/sdc + pvresize /dev/sdd + + # Listar os discos e os espaços livres: + pvscan + + # Alocar 100% do espaço livre em cada disco: + + lvextend -l +100%FREE /dev/postgresql-vg03/lv-archived + lvextend -l +100%FREE /dev/postgresql-vg02/lv-dados + lvextend -l +100%FREE /dev/postgresql-vg01/lv-indice + + # Expandir o Sistema de arquivos: + + xfs_growfs /var/lib/postgresql + xfs_growfs /var/lib/postgresql/16/tablespaces/indice + xfs_growfs /var/lib/postgresql/16/tablespaces/archived + + # Listas discos: + lsblk + + # Listar pontos de montagens no Linux! (Verifique se a expansão ocorreu de forma adequada.) + df -h + +Alterando os arquivos de configuração do servidor: +Com o usuário root: + + # vim /etc/postgresql/16/main/pg_hba.conf + - Substituir o IP da rede (192.168.21.16/28) para o IP da “REDE” LAN passado no chamado. + - Deixar todos os IPS como trust, até que seja transferido de ambiente. + +Alterar configurações conforme a planilha: + + # vim /etc/postgresql/16/main/postgresql.prod + # vim /etc/postgresql/16/main/postgresql.mig + - max_connections + - shared_buffers + - work_mem + - maintenance_work_mem - Alterar conforme arquivo que estiver editando (prod ou mig) + - min_dynamic_shared_memory + - max_locks_per_transaction - Alterar conforme arquivo que estiver editando (prod ou mig) + - max_worker_processes + - max_parallel_workers_per_gather + - max_parallel_workers + - effective_cache_size + +Substituir o arquivo postgresql.conf pelo arquivo postgresql.mig: + + # cp /etc/postgresql/16/main/postgresql.mig /etc/postgresql/16/main/postgresql.conf + +OBS: Quando for a atualização do servidor existente com o PostgreSQL 11 para o PostgreSQL 16, utilizaremos o arquivo postgresql.prod + + # cp /etc/postgresql/16/main/postgresql.prod /etc/postgresql/16/main/postgresql.conf + + +Ajustes do Backup (via SSH): +Com o usuário root, conferir se o IP da storage informado no chamado está configurado corretamente (fstab): + + # vim /etc/fstab + +Com o usuário root, conferir se está na versão 3.8 do script de backup: + + # cat /root/bkp_remoto/*.sh | grep bkp_version= + +Com o usuário root conferir se o IP da storage informado no chamado está configurado corretamente (ip_stg_bkp=): + + # vim /root/bkp_remoto/bkp_remoto.cfg + - ip_stg_bkp= (172.16.0.247 - Ambiente do PR) e (172.24.0.246 - Ambiente de SP) + - prc_max=3 - Conferir + - dmp_max=2 - Conferir + - vac_max=1 - Conferir + + - Obs: No caso de ambientes compartilhados, deve-se alterar a variável dmp_max de 2 para 1. + +Com o usuário root, ajustar o horário do backup (deixar comentado): + + # crontab -e + +Verificar a versão do Zabbix (Deve corresponder a versão 6.0.13): + + # zabbix_agent2 -V + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agent2.conf + - Alterar para o IP do Firewall as opções: "Server" e "ServerActive". Ex: :% s/21.17/XX.XX + - Alterar o Hostname para o os padrões do cliente. Ex: :% s/00000-clean-bdp-01-1600/08573-demonstracao-bdp-01-1600 + +Altere a senha do root: + + # passwd root + +Reinicie a máquina: + + # reboot + +Após o servidor reiniciar, com o usuário root, deve-se ajustar as configurações do kernel, para isso execute o script: + + # su - root + # /root/kernelsetup.sh + +Edite o arquivo /etc/sysctl.conf e substitua as informações apresentadas pelas existentes: + + # vim /etc/sysctl.conf + - Ex: net.ipv6.conf.all.disable_ipv6=1 + net.ipv6.conf.default.disable_ipv6=1 + net.ipv6.conf.lo.disable_ipv6=1 + net.ipv4.tcp_timestamps=0 + vm.overcommit_memory=0 + vm.swappiness=0 + vm.dirty_ratio=20 + vm.dirty_background_ratio=10 + vm.dirty_expire_centisecs = 500 + vm.dirty_writeback_centisecs = 250 + vm.nr_hugepages=842 + kernel.shmmax=3085770752 + kernel.shmall=753362 + kernel.sem=250 32000 100 128 + +Aplique as configurações: + + # sysctl -p + +Ative o uso de “memórias grandes”: + + # vim /etc/postgresql/16/main/postgresql.conf + - Altere: huge_pages = try -> huge_pages = on + +Reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: + + # systemctl restart postgresql.service + +Verifique o status do Serviço após a reinicialização + + systemctl status postgresql.service + ps aux | grep postgres + +Reinicie o servidor para garantir que as configurações estão corretas: + + # reboot + +Conferir se o huge_pages esta funcional no servidor: + + cat /proc/meminfo | grep -i huge + cat /proc/meminfo | egrep -i "write|cache|dirty" + cat /proc/vmstat | egrep -i "dirty|writeback|cache" + + + No pgAdmin: + +- Adicionar o cliente (através do IP da interface da INT_RT e na porta 65432) e conferir os TableSpaces , deverá existir: corrente/indice/intermediario/permanente; +- Alterar o nome da base que estará como 00000_clean para o nome da base do cliente (01234_cliente); +- Conferir extensões, deverão existir as seguintes: btree_gist/pg_buffercache/pg_freespacemap/pg_stat_statements/pg_trgm/pgcrypto/postgis/postgis_sfcgal; (Caso alguma não exista, execute o SQL: create extension nomedaextensao;) +- Criar senhas para os usuários do banco: as senhas deverão ser geradas através do GTT. Para cada usuário será necessário criar uma senha. (Login Roles > Properties > User Definition); + +### Ativando o Monitoramento via Zabbix + +Acesse através no navegador o servidor Zabbix do respectivo data center ao qual o ambiente está sendo configurado. + +``` +https://pr01-datacenter.ipm.com.br:8085 +https://sp01-datacenter.ipm.com.br:8085 +``` + +__Após acessar o servidor Zabbix, acesse no menu: Configuration > Hosts__ +```console +# Clique em "Create Host" e cadastre as informações do servidor. + +- Host name: 08573-demonstracao-bdp-01-1600.atende.net +- Templates: Linux by Zabbix agent, PostgreSQL by Zabbix agent, Template_IPM_PostgreSQL16 +- Groups: demonstracao.atende.net, Virtual machines +- Interfaces + - Agent: 192.168.28.140 +- Monitored by proxy: PX_XXDemonstracao +- Enabled: False + +# Clique em "Add" para concluir +``` + +>A ativação do equipamento ocorrerá somente no momento da transferência para o ambiente de produção. + +![ZABBIXHOST](../img/bdp_1600_zabbix_create_host.png) + +[`Voltar para Configuração do Ambiente`](criacao_estrutura.md) \ No newline at end of file diff --git a/docs/configuracao_estrutura_new.md b/docs/configuracao_estrutura_new.md new file mode 100644 index 0000000..d8c2838 --- /dev/null +++ b/docs/configuracao_estrutura_new.md @@ -0,0 +1,568 @@ +# Configuração Definitiva dos Servidores + +## AFW 0260 +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + + +Acessar endereço: https://172.XX.X.XXX:9080 (IP INT_RT) +Usuário:admin Senha:123456 +- Interfaces: + WAN: Manter IP CLEAN na interface; + LAN: Alterar IP conforme informações do chamado; + INT_RT: Manter IP CLEAN na interface. + + +- System: + General Setup: Alterar Hostname 00000-clean-afw-01-0260 para código e nome do cliente. Ex: 08573-demonstracao-afw-01-0260. + ![GeneralSetup](../img/generalsetup.png) + + + Advanced > Secure Shell: Habilitar a Flag "Enable Secure Shell" e alterar SSH port para 9021. + ![SSH](../img/ssh.png) + + +- Firewall: + NAT: Editar as regras já existentes, alterando IPs conforme informações do chamado. + ![NAT](../img/nat.png) + + + NAT > Outbound: Conferir se o “Outbound NAT Mode” está como híbrido (Hybrid Outbound NAT rule generation). + ![HIBRID](../img/hibrid.png) + + + NAT > Outbound > Mappings: Alterar para o IP LAN do cliente (informado no chamado). + ![MAPPINGS](../img/mappings.png) + + +- Services: + Zabbix Agent 6: Server e Listen IP > Alterar para IP do Firewall (LAN). + Hostname > Alterar Hostname 00000-clean-afw-01-0260 para código e nome do cliente Ex:08573-demonstracao-afw-01-0260. + ![AGENT](../img/zabbixagent.png) + + Zabbix Proxy 6: Server > Alterar para o IP do server Zabbix informado no chamado. + Listen IP > Alterar para IP do Firewall (LAN). + Hostname > Alterar para o nome do cliente: PX_PMCliente ou PMClienteDois (se não for prefeitura, alterar conforme entidade... CM, PV, FM,etc ). + ![PROXY](../img/zabbixproxy.png) + + FRR Global/Zebra: Alterar Default Router ID para o IP INT_RT do cliente (informado no chamado). + ![OSPF](../img/ospf.png) + + DNS Forwarder > Enable: Habilitar a Flag "Enable DNS forwarder"; + ![DNSENABLE](../img/dnsenable.png) + + + Interfaces: Selecionar "LAN" e clicar em "Save" > "Apply Changes"; + ![DNSLAN](../img/dnslan.png) + + + Host Overrides: Alterar o nome dos servidores e seus respectivos endereços IP. + ![HOSTOVERRIDES](../img/hostoverrides.png) + + +- System: + User Manager > Users: Alterar senha do usuário admin (mesma senha do root configurada nas demais máquinas). + ![USERMANAGER](../img/usermanager.png) + + +- Diagnostics: + Reboot: Reiniciar o servidor. + ![REBOOT](../img/reboot.png) + +## APP 5618 +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + + +Acesse o Console VMWare do servidor: + LAUNCH WEB CONSOLE > Informe usuário e senha (root - 123456): + + # vim /etc/sysconfig/network-scripts/ifcfg-eno16780032 + IPADDR="192.168.XX.XX" - Inserir IP informado no chamado + PREFIX="28" + GATEWAY="192.168.XX.XX" - Inserir IP do Firewall + DNS1="192.168.XX.XX" - Inserir IP do Firewall + + # reboot + +Após reiniciar a máquina, conectar via SSH com o IP INT_RT configurado no Firewall (porta 9024): + + # vim /etc/resolv.conf + nameserver 192.168.XX.XX - Alterar para o IP do gateway + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + - Substituir o IP do App. Ex: :% s/21.20/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/08573-demonstracao-app-01-5618 + - Substituir domínio do cliente. Ex: :% s/clean.atende.net/cliente.atende.net (conforme URL1 informada no chamado) + - Substituir domínio do cliente. Ex: :% s/clean.sc.gov.br/cliente.sc.gov.br (conforme URL2 informada no chamado) + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/08573-demonstracao-app-01-5618 + +Instalar o VMWare-Tools: +No VCenter, vá na VM do cliente e siga os passos: Actions > Guest OS > Install VMWare Tools. + + # mount /dev/cdrom /mnt + # cd /root + # cp /mnt/VMwareTools-10.....tar.gz /root/ + # tar -xzvf VMwareTools-10.....tar.gz + # cd vmware-tools-distrib/ + # ./vmware-install.pl > yes > ENTER até o fim da instalação + # reboot + +Altere os arquivos de configuração do servidor: +Ajustar os seguintes itens conforme a planilha de manutenção de servidores: + + +Ajuste o arquivo performance.conf: + + # vim /etc/httpd/conf.d/performance.conf + MaxKeepAliveRequests 45 - Alterar conforme planilha MAX KEEPALIVE + + StartServers 20 - Alterar conforme planilha START SERVERS + MinSpareServers 20 - Alterar conforme planilha START SERVERS + MaxSpareServers 40 - Alterar conforme planilha MAX SERVERS + ServerLimit 190 - Alterar conforme planilha MAX CLIENTS + MaxClients 190 - Alterar conforme planilha MAX CLIENTS + MaxRequestsPerChild 4000 + + + +Ajuste o arquivo security.conf: + + # vim /etc/httpd/conf.d/security.conf + ServerTokens Prod - Conferir se o valor está como "Prod" + ServerSignature Off - Conferir se o valor está como "Off" + TraceEnable Off - Conferir se o valor está como "Off" + Directory - Alterar o CLEAN.atende.net pelo do cliente. Ex: :% s/CLEAN.atende.net/cliente.atende.net + + +Ajuste o arquivo qos.conf: + + # vim /etc/httpd/conf.d/qos.conf + QS_SrvMaxConnPerIP 95 115 - Alterar conforme planilha + QS_ClientEventBlockCount 115 95 - Alterar conforme planilha + QS_SrvMaxConnExcludeIP 192.168.XX.XX - Substituir pelo IP do Tomcat. Ex: :% s/21.23/XX.XX + + + SetHandler qos-viewer - Substituir pelo IP do Apache. Ex: :% s/21.20/XX.XX + Order Deny,Allow + Deny from All + Allow from 192.168.XX.XX ; XX.X.XX.XXX/29 ; XX.XX.XX.XXX/28 ; XXX.XXX.XX.X/28 ; XXX.XX.XX.X/22 + + + +Ajuste o arquivo ssl.conf: + + # vim /etc/httpd/conf.d/ssl.conf + Alterar o clean.atende.net pelo endereço do cliente. Ex: :% s/clean.atende.net/cliente.atende.net + + +Ajuste o arquivo status.conf: + + # vim /etc/httpd/conf.d/status.conf + - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + + +Ajuste o arquivo httpd.conf: + + # vim /etc/httpd/conf/httpd.conf + Configurar as informações gerais do servidor, substituindo pelo endereço principal. + Ex: :% s/CLEAN.atende.net/cliente.atende.net ou, se for ambiente compartilhado :% s/CLEAN.atende.net/CAMARAS-01.atende.net + Configurar o domínio virtual, substituindo o clean.atende.net pelo do cliente (cliente.atende.net) e o clean.sc.gov.br para (cliente.sc.gov.br) observando as particularidades de cada cliente (URL2 informado no chamado). + Ex: :% s/clean.atende.net/cliente.atende.net e :% s/clean.sc.gov.br/cliente.sc.gov.br + + +Ajuste o arquivo awstats.conf: + + # vim /etc/httpd/conf.d/awstats.conf + Directory - Substituir pelo IP Firewall e do Apache. Ex: :% s/21.17/XX.XX e :% s/21.20/XX.XX + +Renomeie o nome do arquivo para o cliente em questão: + + # cd /etc/awstats + # mv awstats.clean.atende.net.conf awstats.cliente.atende.net.conf - Substituir cliente pelo nome do cliente em questão. + # vim awstats.cliente.atende.net.conf - Substituir a palavra clean pelo nome do cliente. Ex: :% s/clean/cliente + + +Confira configuração do memcache: + + # cat /etc/sysconfig/memcached - CACHESIZE deve estar ="128" + + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agentd.conf + Server=192.168.XX.XX - Alterar para o IP do Firewall + ServerActive=192.168.XX.XX - Alterar para o IP do Firewall + Hostname=00000-clean-app-01-5618 - Alterar o código e nome do cliente. Ex: :% s/00000-clean-app-01-5618/08573-demonstracao-app-01-5618 + + +Ajuste o arquivo apache.conf: + + # vim /etc/ztc/apache.conf + host=192.168.XX.XX - Alterar para o IP do Apache + + +Realize a conferência do arquivo memcache.conf: + + # cat /etc/zabbix/zabbix_agentd.d/memcache.conf + Retorno: UserParameter=memcache[*],/opt/ztc/bin/memcache_status.sh $1 + + +Conferir regras de firewall, caso exista alguma alteração será informado: + + # iptables -L + + +Configurando as pastas/arquivos e o software Atende Net para o cliente: + + # cd /var/www/html/ + +Renomear a pasta para o nome do cliente em questão: + + # mv clean.atende.net cliente.atende.net + + # cd cliente.atende.net/ + + # svn update + +Altere as informações do arquivo de config: + + # vim _config.padrao.inc + $_CONFIG = Array(); + $_CONFIG['banco'] = 'pg'; + $_CONFIG['ip'] = '192.168.XX.XX'; - Substituir pelo IP do Banco de Dados + $_CONFIG['porta'] = 5432; + $_CONFIG['senha_atendenetweb'] = 'HASH_SGBD'; - Substituir pela HASH gerada no GDT + $_CONFIG['senha_sincronizador'] = 'HASH_SGBD'; - Substituir pela HASH gerada no GDT + $_CONFIG['base'] = '00000_clean'; - Substituir pelo nome da base + $_CONFIG['end_birt'] = 'http://192.168.XX.XX:8080/WebReport/'; - Substituir pelo IP do Tomcat + $_CONFIG['end_memcache'] = '127.0.0.1:11211'; + $_CONFIG['https'] = true; + $_CONFIG['session_mode'] = 2; + $_CONFIG['versao_birt'] = 4.4; + $_CONFIG['manutencao'] = 0; + $_CONFIG['storage_end'] = 'https://s3.atende.net:8083'; + $_CONFIG['storage_user'] = '00000_clean'; - Substituir pelo Usuário da Storage + $_CONFIG['storage_pass'] = 'HASH_STORAGE'; - Substituir pela HASH gerada no GDT + $_CONFIG['storage_metodo_valida'] = 2; + $_CONFIG['storage_s3_end'] = 'https://xxxx-s3.atende.net:8083'; - Alterar conforme ambiente (sp01 ou pr01) + $_CONFIG['storage_s3_user'] = '00000_clean'; - Substituir pelo Usuário da Storage + $_CONFIG['storage_s3_pass'] = 'HASH_STORAGE'; - Substituir pela HASH gerada no GDT + $_CONFIG['storage_tipo'] = 2; //1 ou SEM ESTE PARÂMETRO o só a ISILON | 2: Modo hibrido, se existir só a CEPH ele usa só ela. ou seja, é obrigatório este parâmetro 2 tanto se for usar híbrido quanto só a CEPH. + $_CONFIG['captcha_mode'] = 1; // Ativa o Captcha: 1 - Total, 2 - Ignora Restritos. + $_CONFIG['captcha_version'] = 'vh'; // Versao Captcha Google: v2 - Versao 2, v3 Versao 3, vh - Hibrida. + $_CONFIG['captcha_v3_score'] = 0.2; // Score padrao 0.5, valores possíveis de 0.0 a 1.0. + $_CONFIG['captcha_v2_key_site'] = 'HASH_CAPTCHA'; - Substituir pela chave de site do Google para Recaptcha V2 + $_CONFIG['captcha_v2_key_secret'] = 'HASH_CAPTCHA'; - Substituir pela chave secreta do Google para Recaptcha V2 + $_CONFIG['captcha_v3_key_site'] = 'HASH_CAPTCHA'; - Substituir pela chave de site do Google para Recaptcha V3 + $_CONFIG['captcha_v3_key_secret'] = 'HASH_CAPTCHA'; - Substituir pela chave secreta do Google para Recaptcha V3 + $_CONFIG['politica_seguranca'] = 1; + +Conferir o Atualiza: + + # vim atualiza/atualiza_versao_config.inc + +```console + Informe usuário e senha (root - 123456): + + # vim /etc/sysconfig/network-scripts/ifcfg-ens192 + IPADDR="192.168.XX.XX" - Inserir IP informado no chamado + PREFIX="28" + GATEWAY="192.168.XX.XX" - Inserir IP do Firewall + DNS1="192.168.XX.XX" - Inserir IP do Firewall + + # reboot + +Após reiniciar a máquina, conectar via SSH com o IP INT_RT configurado no Firewall (porta 9027): + + # vim /etc/resolv.conf + nameserver 192.168.XX.XX - Alterar para o IP do gateway + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + 192.168.XX.XX 00000-clean-mst-01-7054 00000-clean-mst-01-7054.atende.net + 192.168.XX.XX clean.atende.net + + - Substituir o IP do Tomcat. Ex: :% s/21.23/XX.XX + - Substituir o IP do App. Ex: :% s/21.20/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-mst-01-7054/08573-demonstracao-mst-01-7054 + - Substituir domínio do cliente. Ex: :% s/clean.atende.net/cliente.atende.net + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-mst-01-7054/08573-demonstracao-mst-01-7054 + +Instalar o VMWare-Tools: +No VCenter, vá na VM do cliente e siga os passos: Actions > Guest OS > Install VMWare Tools. + + # mount /dev/cdrom /mnt + # cd /root + # cp /mnt/VMwareTools-10.....tar.gz /root/ + # tar -xzvf VMwareTools-10.....tar.gz + # cd vmware-tools-distrib/ + # ./vmware-install.pl > yes > ENTER até o fim da instalação + # reboot + +Altere os arquivos de configuração do servidor: +Ajustar os seguintes itens conforme a planilha de manutenção de servidores: + + # vim /etc/tomcat/tomcat.conf + JAVA_OPTS="-server -XX:+UseLargePages -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -Xms4608M -Xmx4608M -XX:PermSize=128M -XX:MaxPermSize=512M" + - Conferir/ajustar a configuração conforme planilha. + + +Conferir se existe usuario “ipm” e se tem a senha: + + # vim /etc/tomcat/tomcat-users.xml + + +Conferir a configuração maxThreads: + + # vim /etc/tomcat/server.xml + - Alterar valor maxThreads conforme planilha + +Ajuste o arquivo ipm.properties: + + # vim /etc/tomcat/ipm.properties + - Alterar o domínio no "enderecoWeb". Ex: :% s/clean.atende.net/demonstracao.atende.net + - Alterar valor "limiteFilaD" conforme planilha. + Obs: Se for ambiente compartilhado para câmaras, previdências e outras altarquias, deve-se utilizar 2. + - Alterar valor "limiteFilaN" conforme planilha. + Obs: Se for ambiente compartilhado para câmaras, previdências e outras altarquias, deve-se utilizar 4. + - Alterar valor "qtdeGlobalMaximaProcesso" conforme planilha. + Obs: Se for ambiente compartilhado para câmaras, previdências e outras altarquias, deve-se utilizar 4. + + +Verificar a versão dos applets: + + # lynx http://127.0.0.1:8080/WebReport + # lynx http://127.0.0.1:8080/JobRunner + # lynx http://127.0.0.1:8080/JavaBridge + # lynx http://127.0.0.1:8080/FileOptimizer + # lynx http://127.0.0.1:8080/FileSigner + # lynx http://127.0.0.1:8080/JavaMelody + + +Verificar a versão do Zabbix: + + # zabbix_agentd -V + + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agentd.conf + - Alterar para o IP do Firewall as opções: "Server" e "ServerActive". Ex: :% s/21.17/XX.XX + - Alterar o Hostname para o os padrões do cliente. Ex: :% s/00000-clean-mst-01-7054/08573-demonstracao-mst-01-7054 + + +Ajuste o arquivo tomcat_jmx_proxy.conf: + + # vim /etc/ztc/tomcat_jmx_proxy.conf + - Substituir pelo IP do Tomcat. Ex: :% s/21.23/XX.XX + +Altere a senha do root: + + # passwd root + +Reinicie a máquina: + + # reboot + +## BDP 1150 + +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + +Acesse o Console VMWare do servidor: + LAUNCH WEB CONSOLE > Informe usuário e senha (root - 123456): + + # vim /etc/sysconfig/network-scripts/ifcfg-ens192 + IPADDR="192.168.XX.XX" - Inserir IP informado no chamado + PREFIX="28" + GATEWAY="192.168.XX.XX" - Inserir IP do Firewall + DNS1="192.168.XX.XX" - Inserir IP do Firewall + + # reboot + +Após reiniciar a máquina, conectar via SSH com o IP INT_RT configurado no Firewall (porta 9032): + + # vim /etc/resolv.conf + nameserver 192.168.XX.XX - Alterar para o IP do gateway + +Ajustar nome e IP do Servidor: + + # vim /etc/hosts + - Substituir o IP do Bdp. Ex: :% s/21.28/XX.XX + - Substituir código e nome do cliente. Ex: :% s/00000-clean-bdp-01-1150/08573-demonstracao-bdp-01-1150 + + # vim /etc/hostname + - Substituir código e nome do cliente. Ex: :% s/00000-clean-bdp-01-1150/08573-demonstracao-bdp-01-1150 + +Conferir a instalação do VMwareTools: + + # ps aux | grep vm + - Ex: root 1194 0.0 0.1 153432 12424 ? Ss 15:24 0:00 /usr/bin/vmtoolsd + # reboot + +Alterando os arquivos de configuração do servidor: +Com o usuário root: + + # vim /var/lib/pgsql/11/data/pg_hba.conf + - Substituir o IP da rede (192.168.21.16/28) para o IP da “REDE” LAN passado no chamado. + - Deixar todos os IPS como trust, até que seja transferido de ambiente. + +Alterar configurações conforme a planilha: + + # vim /var/lib/pgsql/11/data/postgresql.prod + # vim /var/lib/pgsql/11/data/postgresql.mig + - max connections + - shared buffers + - temp buffers + - work mem - Alterar conforme arquivo que estiver editando (prod ou mig) + - maintance work_mem - Alterar conforme arquivo que estiver editando (prod ou mig) + - max worker processes + - max parallel workers per gather + - max parallel workers + - effective cacche_size + +Substituir o arquivo postgresql.conf pelo arquivo postgresql.mig: + + # cp /var/lib/pgsql/11/data/postgresql.mig /var/lib/pgsql/11/data/postgresql.conf + +No pgAdmin: + +- Adicionar o cliente (através do IP da interface de backup e na porta 65432) e conferir os TableSpaces , deverá existir: arquivo/expurgo/índice; +- Alterar o nome da base que estará como 00000_clean para o nome da base do cliente (01234_cliente); +- Conferir extensões, deverão existir as seguintes: btree_gist/pg_buffercache/pg_freespacemap/pg_stat_statements/postgis/postgis_sfcgal; (Caso alguma não exista, execute o SQL: create extension nomedaextensao;) +- Criar senhas para os usuários do banco: as senhas deverão conter caracteres especiais, letras maiúsculas e números. Para cada usuário será necessário criar uma senha, após criar e as salvar num txt, introduza as senhas nos usuários. (Login Roles > Properties > User Definition); + + +Ajustes do Backup (via SSH): +Com o usuário root, conferir se o IP da storage informado no chamado está configurado corretamente (fstab): + + # vim /etc/fstab + +Com o usuário root, conferir se está na versão 3.5 do script de backup: + + # vim /root/bkp_remoto/bkp_remoto.sh + +Com o usuário root conferir se o IP da storage informado no chamado está configurado corretamente (ip_stg_bkp=): + + # vim /root/bkp_remoto/bkp_remoto.cfg + - Obs: No caso de ambientes compartilhados, deve-se alterar a variável dmp_max de 2 para 1. + +Com o usuário root, ajustar o horário do backup (deixar comentado): + + # crontab -e + +Verificar a versão do Zabbix: + + # zabbix_agentd -V + +Ajuste o arquivo zabbix_agentd.conf: + + # vim /etc/zabbix/zabbix_agentd.conf + - Alterar para o IP do Firewall as opções: "Server" e "ServerActive". Ex: :% s/21.17/XX.XX + - Alterar o Hostname para o os padrões do cliente. Ex: :% s/00000-clean-bdp-01-1150/08573-demonstracao-bdp-01-1150 + +Ajuste o arquivo pgsql.conf: + + # vim /etc/ztc/pgsql.conf + - Informar a senha do usuário monitoramento (senha criada para o usuário do banco): + password=xxxxxx + - Alterar o nome da base: + database=00000_cliente + Obs: Em ambientes compartilhados, deve-se comentar a linha database. + +Altere o tipo do equipamento: + + # vim /root/gdt_agent/cfg/gdt_agent.cfg + - 2 Atende.Net + - 7 IPMSaude + +Altere a senha do root: + + # passwd root + +Reinicie a máquina: + + # reboot + +Após o servidor reiniciar, deve-se ajustar as configurações do kernel, para isso execute o script: + + # /root/kernelsetup.sh + +Edite o arquivo /etc/sysctl.conf e substitua as informações apresentadas pelas existentes: + + # vim /etc/sysctl.conf + - Ex: vm.swappiness=0 + vm.dirty_ratio=10 + vm.dirty_background_ratio=5 + vm.nr_hugepages=1263 + kernel.shmmax=4096004096 + kernel.shmall=1000001 + kernel.sem=250 32000 100 128 + +Aplique as configurações: + + # sysctl -p + +Ative o uso de “memórias grandes”: + + # vim /var/lib/pgsql/11/data/postgresql.conf + - ALtere: huge_pages = try -> huge_pages = on + + +Reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: + + # systemctl restart postgresql-11.service + +Reinicie o servidor para garantir que as configurações estão corretas: + + # reboot + +- [`Voltar`](../README.md) + diff --git a/docs/configuracao_firewall_0260_cliente.md b/docs/configuracao_firewall_0260_cliente.md new file mode 100644 index 0000000..35b3d80 --- /dev/null +++ b/docs/configuracao_firewall_0260_cliente.md @@ -0,0 +1,78 @@ +## 00000-clean-afw-01-0260.atende.net +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + + +Acessar endereço: https://172.XX.X.XXX:9080 (IP INT_RT) +Usuário:admin Senha:123456 +- Interfaces: + WAN: Manter IP CLEAN na interface; + LAN: Alterar IP conforme informações do chamado; + INT_RT: Manter IP CLEAN na interface. + + +- System: + General Setup: Alterar Hostname 00000-clean-afw-01-0260 para código e nome do cliente. Ex: 08573-demonstracao-afw-01-0260. + ![GeneralSetup](../img/generalsetup.png) + + Advanced > Secure Shell: Habilitar a Flag "Enable Secure Shell" e alterar SSH port para 9021. + ![SSH](../img/ssh.png) + + +- Firewall: + NAT: Editar as regras já existentes, alterando IPs conforme informações do chamado. + ![NAT](../img/nat.png) + + + NAT > Outbound: Conferir se o “Outbound NAT Mode” está como híbrido (Hybrid Outbound NAT rule generation). + ![HIBRID](../img/hibrid.png) + + + NAT > Outbound > Mappings: Alterar para o IP LAN do cliente (informado no chamado). + ![MAPPINGS](../img/mappings.png) + + ALIASES > Após ajustado o IP SSH para a porta 9021, altere a porta de acesso SSH no Aliases do Firewall + + Vá em __Firewall__ > __Aliases__ > __Ports__
+ Altere o fw_ports alterando a porta 9022 para 9021 + ![pfsense-alias-ports](../img/pfsense_alias_ports.png) + ![pfsense-alias-ports-2](../img/pfsense_alias_ports2.png) + + +- Services: + Zabbix Agent 6: Server e Listen IP > Alterar para IP do Firewall (LAN). + Hostname > Alterar Hostname 00000-clean-afw-01-0260 para código e nome do cliente Ex:08573-demonstracao-afw-01-0260. + ![AGENT](../img/zabbixagent.png) + + Zabbix Proxy 6: Server > Alterar para o IP do server Zabbix informado no chamado. + Listen IP > Alterar para IP do Firewall (LAN). + Hostname > Alterar para o nome do cliente: PX_PMCliente ou PMClienteDois (se não for prefeitura, alterar conforme entidade... CM, PV, FM,etc ). + ![PROXY](../img/zabbixproxy.png) + + FRR Global/Zebra: Alterar Default Router ID para o IP INT_RT do cliente (informado no chamado). Após a alteração, ative o mesmo Enable FRR + ![OSPF](../img/ospf.png) + + DNS Forwarder > Enable: Habilitar a Flag "Enable DNS forwarder"; + ![DNSENABLE](../img/dnsenable.png) + + + Interfaces: Selecionar "LAN" e clicar em "Save" > "Apply Changes"; + ![DNSLAN](../img/dnslan.png) + + + Host Overrides: Alterar o nome dos servidores e seus respectivos endereços IP. + ![HOSTOVERRIDES](../img/hostoverrides.png) + + +- System: + User Manager > Users: Alterar senha do usuário admin (mesma senha do root configurada nas demais máquinas). + ![USERMANAGER](../img/usermanager.png) + + +- Diagnostics: + Reboot: Reiniciar o servidor. + ![REBOOT](../img/reboot.png) + +[`Voltar para Configuração do Ambiente`](criacao_estrutura.md) \ No newline at end of file diff --git a/docs/configuracao_firewall_0272_cliente.md b/docs/configuracao_firewall_0272_cliente.md new file mode 100644 index 0000000..2f7eca9 --- /dev/null +++ b/docs/configuracao_firewall_0272_cliente.md @@ -0,0 +1,140 @@ +## 00000-clean-afw-01-0272.atende.net +Acessar o VCenter: https://pr01-ger-vcsa01.atendenet.local/ ou https://sp01-ger-vcsa01.atendenet.local/ + + +Ligue a máquina virtual do cliente e após execute os procedimentos abaixo: + +### Configurando o Servidor +Acessar endereço: https://172.XX.X.XXX:9080 (IP INT_RT) +Usuário:admin Senha:123456 +- __Interfaces:__ + __WAN:__ Mantenha o endereço IP CLEAN na interface; + __LAN:__ Altere o endereço IP conforme informações do chamado; + __INT_RT:__ Mantenha o endereço IP CLEAN na interface. + ![LAN](../img/afw_0272_interfaces_lan.png) + +- __System:__ + - __General Setup:__ + ```console + Altere o Hostname 00000-clean-afw-01-0272 para código e nome do cliente. Ex: 08573-demonstracao-afw-01-0272. + ``` + ![GeneralSetup](../img/afw_0272_system_general_setup.png) + +- __Firewall:__ + - __NAT:__ + ```console + Edite as regras já existentes, alterando IPs conforme informações do chamado. + ``` + ![NAT](../img/afw_0272_firewall_nat_port_forward.png) + + + - __NAT > Outbound:__ + ``` + Confira se o “Outbound NAT Mode” está como híbrido (Hybrid Outbound NAT rule generation). + ``` + ![HIBRID](../img/hibrid.png) + + - __NAT > Outbound > Mappings:__ + ``` + Altere para o endereço IP LAN do cliente (informado no chamado). + ``` + ![MAPPINGS](../img/mappings.png) + +- __Services:__ + - __HAProxy > BackEnd:__ + ``` + Edite o pool de comunicação "http e https", alterando o endereço IP conforme informações do chamado. + Obs: Caso o ambiente opere em cluster, deve-se alterar o modo para "active" e o endereço IP dos demais hosts "app-XX". + ``` + ![HAProxy](../img/afw_0272_services_haproxy_backend.png) + ![HAProxy](../img/afw_0272_services_haproxy_backend_http.png) + ![HAProxy](../img/afw_0272_services_haproxy_backend_https.png) + + - __Zabbix Agent 6:__ + ``` + Server e Listen IP: Altere para IP do Firewall (LAN). + Hostname: Altere o Hostname 00000-clean-afw-01-0272 para o código e o nome do cliente Ex:08573-demonstracao-afw-01-0272. + ```` + ![AGENT](../img/afw_0272_services_zabbix_agent.png) + + - __Zabbix Proxy 6:__ + ``` + Server: Altere para o IP do Zabbix Server informado no chamado. + Listen IP: Altere para IP do Firewall (LAN). + Hostname: Altere para o nome do cliente informado no chamado: Ex: PX_XXDemonstracao + (se não for prefeitura, altere a sigla conforme a entidade... CM, PV, FM,etc ). + ``` + ![PROXY](../img/afw_0272_services_zabbix_proxy.png) + + - __FRR Global/Zebra:__ + ``` + Altere o Default Router ID para o IP da INT_RT do cliente (informado no chamado). + Após a alteração, ative o mesmo, clicando em Enable FRR. + ``` + ![OSPF](../img/ospf.png) + + - __DNS Forwarder:__ + ``` + Enable: Habilite a Flag "Enable DNS forwarder"; + ``` + ![DNSENABLE](../img/dnsenable.png) + + ``` + Interfaces: Selecione "LAN" e clique em "Save" > "Apply Changes"; + ```` + ![DNSLAN](../img/dnslan.png) + + ``` + Host Overrides: Altere o nome dos servidores e seus respectivos endereços IP. + ``` + ![HOSTOVERRIDES](../img/afw_0272_services_dns_forwarder_host_override.png) + + +- __System:__ + - __User Manager > Users:__ + ``` + Altere a senha do usuário admin (mesma senha do root configurada nas demais máquinas). + ``` + ![USERMANAGER](../img/afw_0272_system_user_manager.png) + + +- __Diagnostics:__ + - __Reboot:__ + ``` + Reinicie o servidor. + ``` + ![REBOOT](../img/reboot.png) + +### Ativando o Monitoramento via Zabbix + +Acesse através no navegador o servidor Zabbix do respectivo data center ao qual o ambiente está sendo configurado. + +``` +https://pr01-datacenter.ipm.com.br:8085 +https://sp01-datacenter.ipm.com.br:8085 +``` + +- __Configuration:__ + - __Hosts__ + ``` + # Clique em "Create Host" e cadastre as informações do servidor. + + - Host name: 08573-demonstracao-afw-01-0272.atende.net + - Templates: FreeBSD - PFSense SNMP, FreeBSD by Zabbix agent + - Groups: demonstracao.atende.net, Virtual machines + - Interfaces + - Agent: 192.168.28.129 + - SNMP: 192.168.28.129 + - Monitored by proxy: PX_XXDemonstracao + - Enabled: False + + # Clique em "Add" para concluir + ``` + +>A ativação do equipamento ocorrerá somente no momento da transferência para o ambiente de produção. + +![ZABBIXHOST](../img/afw_0272_zabbix_create_host.png) + + + +[`Voltar para Configuração do Ambiente`](criacao_estrutura.md) \ No newline at end of file diff --git a/docs/configurando_dominios_gov_br.md b/docs/configurando_dominios_gov_br.md new file mode 100644 index 0000000..b566315 --- /dev/null +++ b/docs/configurando_dominios_gov_br.md @@ -0,0 +1,274 @@ +# Configurando domínios GOV.BR +> +> Para padronização, os arquivos de solicitação deverão ser criados no servidor apache do ambiente demonstração. +> + +**IMPORTANTE** Em alguns casos o cliente não utiliza o endereço principal para acesso ao gov.br (www.cliente.sc.gov.br), desta forma, deve-se ajustar o processo conforme o domínio gov.br do cliente (atendenet.cliente.sc.gov.br) + +## No servidor 08573-demonstracao-app-01-0820.atende.net + +Crie a pasta conforme dominio acordado com o cliente: +```console +mkdir -p /usr/certificado/www.cliente.sc.gov.br_2026 +``` +Entre no diretório criado: +```console +cd /usr/certificado/www.cliente.sc.gov.br_2026 +``` +Realize a criação com a senha abaixo: +``` +openssl genrsa -des3 2048 > chaveprivada.key +``` +```console +Enter PEM pass phrase: 2o26@Taj@W4A +Verifying - Enter PEM pass phrase: 2o26@Taj@W4A +``` +Crie o arquivo de solicitação: +``` +openssl req -new -key chaveprivada.key > solicitacao.csr +``` +```console +Enter pass phrase for chaveprivada.key: 2o26@Taj@W4A +You are about to be asked to enter information that will be incorporated +into your certificate request. +What you are about to enter is what is called a Distinguished Name or a DN. +There are quite a few fields but you can leave some blank +For some fields there will be a default value, +If you enter '.', the field will be left blank. +----- +Country Name (2 letter code) [AU]:BR +State or Province Name (full name) [Some-State]:Santa Catarina +Locality Name (eg, city) []:Florianópolis +Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ipm Sistemas LTDA +Organizational Unit Name (eg, section) []:Data Center +Common Name (e.g. server FQDN or YOUR name) []:www.cliente.sc.gov.br +Email Address []:ipm@ipm.com.br + +Please enter the following 'extra' attributes +to be sent with your certificate request +A challenge password []: +An optional company name []: +``` +Processe a chave privada RSA, com o objetivo de remover sua senha: +``` +openssl rsa -in chaveprivada.key -out chaveprivadanova.key +``` +```console +Enter pass phrase for chaveprivada.key: 2o26@Taj@W4A +writing RSA key +``` +Para permitir a cópia para a maquina local, crie a pasta e aplique as permissões: +``` +mkdir /home/ipm/www.cliente.sc.gov.br_2026 +cp * /home/ipm/www.cliente.sc.gov.br_2026 +chown -R ipm:ipm /home/ipm/www.cliente.sc.gov.br_2026/ +``` +## No servidor de acesso remoto sp01-remoto.ipm.com.br + +Através do CMD, realize a cópia e transfira para o OneDrive: Shared > Certificados SSL > 2026 +``` +D:\Importante\certificados\2026\www.cliente.sc.gov.br_2026>pscp -P 9024 ipm@172.24.1.24:/home/ipm/www.cliente.sc.gov.br_2026/* . +ipm@172.24.1.24's password: + +chaveprivada.key | 1 kB | 1.8 kB/s | ETA: 00:00:00 | 100% +chaveprivadanova.key | 1 kB | 1.7 kB/s | ETA: 00:00:00 | 100% +solicitacao.csr | 1 kB | 1.1 kB/s | ETA: 00:00:00 | 100% +``` + +## Gerar Hash de validação de domínio + +Acesse o portal da digicert: https://www.digicert.com/ +Login com e-mail: administracao.dc@ipm.com.br +Senha: consultar arquivo na area de trabalho + +Após o login, vá em: Validação > Domínios > Novo dominio + +![criar_dominio_digicert](../img/criar_dominio_digicert.png) + +__Obs: Cancelar todas as mensagens que aparecerem após clicar em “Submit Validation” __ + +Será gerada uma Hash, a qual deverá ser enviada ao cliente por e-mail conforme exemplo abaixo: + + +![enviar_email_hash_validacao_dominio](../img/enviar_email_hash_validacao_dominio.png) + +**IMPORTANTE:** +1. No arquivo "reuniões_login_gov_br" (pasta Shared > Certificados SSL), documente a hash gerada no portal da digicert. +2. Ainda na pasta Certificados SSL, vá no arquivo do word Geração de Chaves SSL e coloque o retorno do terminal SSH realizado no 08573-demonstracao-app-01-0820.atende.net. Conforme exemplo abaixo: + +```console +Cliente (2026) + +# openssl genrsa -des3 2048 > chaveprivada.key +Enter PEM pass phrase: 2o26@Taj@W4A +Verifying - Enter PEM pass phrase: 2o26@Taj@W4A + +# openssl req -new -key chaveprivada.key > solicitacao.csr +Enter pass phrase for chaveprivada.key: +You are about to be asked to enter information that will be incorporated +into your certificate request. +What you are about to enter is what is called a Distinguished Name or a DN. +There are quite a few fields but you can leave some blank +For some fields there will be a default value, +If you enter '.', the field will be left blank. +----- +Country Name (2 letter code) [AU]:BR +State or Province Name (full name) [Some-State]:Santa Catarina +Locality Name (eg, city) []:Florianópolis +Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ipm Sistemas LTDA +Organizational Unit Name (eg, section) []:Data Center +Common Name (e.g. server FQDN or YOUR name) []:www.cliente.sc.gov.br +Email Address []:ipm@ipm.com.br + +Please enter the following 'extra' attributes +to be sent with your certificate request +A challenge password []: +An optional company name []: + +# openssl rsa -in chaveprivada.key -out chaveprivadanova.key +Enter pass phrase for chaveprivada.key: +writing RSA key +``` + +## Instalando e configurando o certificado no servidor de aplicação do cliente + +### APP-5618 + +1. Instalando o certificado no servidor de aplicação +>Copie o arquivo zip contendo o certificado e as chaves de criptografia para o servidor de aplicação do cliente através do __pscp__ +```console +# cd /usr/certificado/ +# unzip www.cliente.sc.gov.br_2026.zip +# mv www.cliente.sc.gov.br_2026 www.cliente.sc.gov.br +``` + +2. Ajustando as configurações do servidor de aplicação, substituindo o endereço www.cliente.sc.gov.br pelo endereço gov.br do cliente. +```console +# cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.bkp18092025 +# vim /etc/httpd/conf.d/ssl.conf +--- + + +# General setup for the virtual host, inherited from global configuration +DocumentRoot "/var/www/html/cliente.atende.net" +ServerName www.cliente.sc.gov.br +ServerAlias www.cliente.sc.gov.br + +# Use separate log files for the SSL virtual host; note that LogLevel +ErrorLog logs/ssl_www.cliente.sc.gov.br_error.log +TransferLog logs/ssl_www.cliente.sc.gov.br_access.log +LogLevel warn + +# SSL Engine Switch: +SSLEngine on + +# SSL Protocol support: +SSLProtocol all -SSLv2 -SSLv3 + +# SSL Cipher Suite: +SSLCipherSuite "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4" +SSLHonorCipherOrder on +SSLCompression off + +# Server Certificate: +SSLCertificateFile /usr/certificado/www.cliente.sc.gov.br/www.cliente.sc.gov.br.crt +SSLCertificateKeyFile /usr/certificado/www.cliente.sc.gov.br/chaveprivadanova.key +SSLCACertificateFile /usr/certificado/www.cliente.sc.gov.br/www.cliente.sc.gov.br.ca-bundle + + SSLOptions +StdEnvVars + +BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +CustomLog logs/ssl_www.cliente.sc.gov.br_request.log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + +--- + +# vim /etc/httpd/conf/httpd.conf +--- + + ServerAdmin webmaster@www.cliente.sc.gov.br + DocumentRoot /var/www/html/cliente.atende.net + ServerName www.cliente.sc.gov.br + ErrorLog logs/www.cliente.sc.gov.br_error.log + CustomLog logs/www.cliente.sc.gov.br_access.log common + + Options FollowSymLinks + AllowOverride None + SSLRequireSSL + + + Options FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + Redirect 301 / https://www.cliente.sc.gov.br/ + +--- + +# vim /etc/hosts +--- +192.168.21.20 cliente.sc.gov.br +192.168.21.20 www.cliente.sc.gov.br +--- + +# apachectl -t +# apachectl -k graceful +# curl -v https://www.cliente.sc.gov.br +``` +### APP-0820 + +1. Instalando o certificado no servidor de aplicação +>Copie o arquivo zip contendo o certificado e as chaves de criptografia para o servidor de aplicação do cliente através do __pscp__ +```console +# cd /usr/certificado/ +# unzip www.cliente.sc.gov.br_2026.zip +# mv www.cliente.sc.gov.br_2026 www.cliente.sc.gov.br +``` + +2. Ajustando as configurações do servidor de aplicação, substituindo o endereço www.cliente.sc.gov.br pelo endereço gov.br do cliente. +```console +# vim /etc/hosts +# :% s/cliente.sc.gov.br/dominiocliente.sc.gov.br +--- +192.168.21.20 dominiocliente.sc.gov.br +192.168.21.20 www.dominiocliente.sc.gov.br +--- + +# cd /etc/awstats +# mv awstats.cliente.sc.gov.br.disabled awstats.www.dominiocliente.sc.gov.br.conf +# vim awstats.www.dominiocliente.sc.gov.br.conf +# :% s/cliente.sc.gov.br/www.dominiocliente.sc.gov.br +--- +LogFile="/var/log/apache2/www.dominiocliente.sc.gov.br-ssl-access.log" +SiteDomain="www.dominiocliente.sc.gov.br" +HostAliases="www.dominiocliente.sc.gov.br" +--- + +# vim /etc/apache2/envvars +# :% s/cliente.sc.gov.br/dominiocliente.sc.gov.br +--- +GOV_BR_FQDN=www.dominiocliente.sc.gov.br +SSL_GOV_BR_CRT_FILE=www.dominiocliente.sc.gov.br/www.dominiocliente.sc.gov.br.crt +SSL_GOV_BR_KEY_FILE=www.dominiocliente.sc.gov.br/chaveprivadanova.key +SSL_GOV_BR_CA_FILE=www.dominiocliente.sc.gov.br/www.dominiocliente.sc.gov.br.ca-bundle +--- + +# cd /etc/apache2/sites-enabled/ +# rm -rf 000-redirect-gov-br-domain.conf +# ln -s ../sites-available/000-enable-gov-br-domain.conf +``` + +### AFW-0260 / AFW-0272 + +1. Cadastrando o domínio gov.br no serviço de DNS Forwarder do servidor AFW 0260 / 0272 + +- Vá em Services >> DNS Forwarder + - Cadastre o domínio gov.br apontando para o IP do Apache. +```console +www.dominiocliente.sc.gov.br -> 192.168.21.20 +``` \ No newline at end of file diff --git a/docs/consulta_senhas.md b/docs/consulta_senhas.md new file mode 100644 index 0000000..607a13e --- /dev/null +++ b/docs/consulta_senhas.md @@ -0,0 +1,40 @@ +# Consulta de Senhas + +Para acessarmos o SSH, Firewall, PostgreSQL ou outros serviços dos clientes muitas vezes necessitamos das senhas, abertas ou criptografadas. + +Utiliza-se o [GTT](https://datacenter.ipm.com.br/) para isso. Para consultar as senhas dos usuários acessamos a rotina __Manutenção__ -> __Equipamentos__ -> __Equipamento__. + +![Rotina: Manutenção -> Equipamentos -> Equipamento](../img/consulta_senhas_rotina_equipamento.png "Rotina: Manutenção -> Equipamentos -> Equipamento") + +Então use o filtro para buscar pelo cliente desejado. Como Pinhais, por exemplo. + +![Filtrando por Pinhais](../img/consulta_senhas_filtrar_ambiente.png "Filtrando por Pinhais") + +Deste ponto em diante há duas formas de consultar as senhas, que dependem apenas do serviço que desejas se conectar. + +## Usuários do Sistema Operacional + +Para consultar estes usuários, como o *root* ou *admin* do Firewall, podes pressionar o botão direito sobre o servidor que desejas se conectar. Como exemplo a consulta do usuário *root* do Apache de Pinhais: + +![Consulta usuário SO](../img/consulta_senhas_usuarios_so.png "Consulta usuário SO") + +Exibirá então a consulta de usuários do equipamento. + +![Consulta usuários do equipamento](../img/consulta_senhas_usuarios_so_do_equipamento.png "Consulta usuários do equipamento") + +E então visualize o usuário que desejar. + +![Visualizar usuários do equipamento](../img/consulta_senhas_visualizar_usuario_equipamento.png "Visualizar usuários do equipamento") + +## Usuários do PostgreSQL + +O caminho para consultar estes usuários não se difere muito do anterior. Em vez de consultar os usuários do SO, terás de consultar os serviços do equipamento para então "configurar" o serviço do PostgreSQL e listar os seus usuários. + +Então liste os serviços. +![Listar serviços do equipamento](../img/consulta_senhas_servicos_equipamento.png "Listar serviços do equipamento") + +Em seguida configure o serviço. +![Configurar o serviço](../img/consulta_senhas_configurar_servico.png "Configurar o serviço") + +Abrirá esta janela contendo as senhas abertas e criptografadas dos usuários cadastrados. +![Configuração de serviço](../img/consulta_senhas_configuracao_servico.png "Configuração de serviço") \ No newline at end of file diff --git a/docs/contingencia_links_internet.md b/docs/contingencia_links_internet.md new file mode 100644 index 0000000..d42f933 --- /dev/null +++ b/docs/contingencia_links_internet.md @@ -0,0 +1,149 @@ +# Contingência + +Este documento contém informações e procedimentos a serem executados somente em situações de emergência. + +## Links de Internet + +Ambos os data centers (PR01 e SP01) possuem seus links de internet redundantes, com operadoras e roteadores distintos. +Cada data center opera em modo "ativo x ativo" de forma totalmente independente, replicando as informações entre si. + +Desta forma, cada data center possui o seu respectivo bloco IP divulgado publicamente através do protocolo BGP. +- __PR01__: 177.11.20.0/23 +- __SP01__: 177.11.22.0/23 + +Os data centers possuem 2 roteadores responsáveis pelo roteamento BGP ao qual trabalham balanceando o tráfego entre os links de cada operadora. + +Desta forma, caso ocorra alguma falha com um link de um data center, todo o tráfego será direcionado para o link que está ativo, garantindo o funcionamento de todo o ambiente de forma automatizada e transparente aos usuários. + +Em casos de emergência pode ser necessário tomar algumas ações manuais, afim de estabilizar o funcionamento do ambiente. + +### Link Intermitente. + +Existem situações onde o link pode ficar intermitente (falha / ativo), nestes casos quando um link falhar, todo o tráfego daquele data center será direcionado para o outro link e quando o link ficar ativo, as rotas serão propagadas e consequentemente o link começará a receber tráfego novamente. + +Se o link ficar intermitente, o usuário ficará recebendo novas rotas e com isso o acesso aos sistemas IPM se tornarão instáveis. + +Afim de estabilizar o acesso aos sistemas IPM, podemos tomar a ação de derrubar o link que está intermitente, até que a operadora restabeleça o serviço. + +#### Procedimentos + +- __Data Center de Curitiba/PR (PR01)__ +>Primeiro, deve-se identicar o link com falha, onde, várias evidências estarão disponíveis no monitoramento via `Dude` e via `Zabbix`. + + +- __Data Center de Curitiba/PR (SP01)__ + + +__A DOCUMENTAR__ + +``` +# Operação em roteadores +Desativar Link da Algar +Conectar no roteador "pr01-rt-algar01" - "192.168.24.5" +Colocar a VLAN 3 em modo "Shutdown" +pr01-rt-algar01# configure terminal +pr01-rt-algar01 (config)# interface Port-channel1.3 +pr01-rt-algar01 (config-subif)# shutdown +pr01-rt-algar01 (config-subif)# exit +pr01-rt-algar01 (config)# exit +Conferir Roteamento BGP +pr01-rt-algar01# sh ip bgp sum + +BGP router identifier 177.11.20.33, local AS number 262295 +BGP table version is 671612696, main routing table version 671612696 +976476 network entries using 242166048 bytes of memory +976483 path entries using 132801688 bytes of memory +141537/141535 BGP path/bestpath attribute entries using 39630360 bytes of memory +124681 BGP AS-PATH entries using 6798530 bytes of memory +0 BGP route-map cache entries using 0 bytes of memory +0 BGP filter-list cache entries using 0 bytes of memory +BGP using 421396626 total bytes of memory +6 received paths for inbound soft reconfiguration +BGP activity 14404110/13427634 prefixes, 127162975/126186492 paths, scan interval 60 secs + +Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd +100.110.98.2 4 16735 0 0 1 0 0 03:10:02 Idle +177.11.20.42 4 262295 36318226 100069862 671612696 0 0 33w4d 976475 +177.11.20.43 4 262295 0 0 1 0 0 never Idle (Admin) +177.11.20.44 4 262295 0 0 1 0 0 never Idle (Admin) +Ativar Link da Algar +Conectar no roteador "pr01-rt-algar01" - "192.168.24.5" +Colocar a VLAN 3 em modo "Ativo" +pr01-rt-algar01# configure terminal +pr01-rt-algar01 (config)# interface Port-channel1.3 +pr01-rt-algar01 (config-subif)# no shutdown +pr01-rt-algar01 (config-subif)# exit +pr01-rt-algar01 (config)# exit +Conferir Roteamento +pr01-rt-algar01#sh ip bgp sum + +BGP router identifier 177.11.20.33, local AS number 262295 +BGP table version is 669109255, main routing table version 669109255 +982451 network entries using 243647848 bytes of memory +1474994 path entries using 200599184 bytes of memory +220229/145791 BGP path/bestpath attribute entries using 61664120 bytes of memory +191502 BGP AS-PATH entries using 9829366 bytes of memory +1509 BGP community entries using 324938 bytes of memory +126 BGP extended community entries using 12924 bytes of memory +0 BGP route-map cache entries using 0 bytes of memory +0 BGP filter-list cache entries using 0 bytes of memory +BGP using 516078380 total bytes of memory +2 received paths for inbound soft reconfiguration +BGP activity 14398233/13415760 prefixes, 126034559/124559569 paths, scan interval 60 secs + +Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd +100.110.98.2 4 16735 146222 22 669109255 0 0 00:07:26 981390 +177.11.20.42 4 262295 36141286 99872135 669109290 0 0 33w4d 493595 +177.11.20.43 4 262295 0 0 1 0 0 never Idle (Admin) +177.11.20.44 4 262295 0 0 1 0 0 never Idle (Admin) + +``` + +Em casos extremos, onde é necessário fazer com que o link de um data center torne o outro data center visível na internet, através do LAN to LAN. + +``` +# pr01-rt-algar01 + +router bgp 262295 + no neighbor 177.11.20.43 shutdown + no neighbor 177.11.20.44 shutdown + address-family ipv4 + network 177.11.20.0 mask 255.255.252.0 + +# pr01-rt-vivo01 + +router bgp 262295 + no neighbor 177.11.20.43 shutdown + no neighbor 177.11.20.44 shutdown + address-family ipv4 + network 177.11.20.0 mask 255.255.252.0 + +# Palo Alto + +Network > Virtual Routers > OSPF > Export Rules + +######################## + +# sp01-rt-ascenty01 + +router bgp 262295 + no neighbor 177.11.20.41 shutdown + no neighbor 177.11.20.42 shutdown + address-family ipv4 + network 177.11.20.0 mask 255.255.252.0 + +# sp01-rt-ascenty02 + +router bgp 262295 + no neighbor 177.11.20.41 shutdown + no neighbor 177.11.20.42 shutdown + address-family ipv4 + network 177.11.20.0 mask 255.255.252.0 + +# Palo Alto + +Network > Virtual Routers > OSPF > Export Rules +``` + +![PA3220_Virtual_Router_PR01](../img/pa3220_virtual_routers_ospf_export_pr01.png) +![PA3220_Virtual_Router_SP01](../img/pa3220_virtual_routers_ospf_export_sp01.png) \ No newline at end of file diff --git a/docs/criacao_estrutura.md b/docs/criacao_estrutura.md new file mode 100644 index 0000000..9a6f838 --- /dev/null +++ b/docs/criacao_estrutura.md @@ -0,0 +1,306 @@ +# Criação e Configuração da Estrutura do Cliente + + +>### Objetivo da Documentação: +> +> Documentação de toda criação e configuração do ambiente de um cliente no Data Center da IPM. +> + +## Passo a Passo da Criação da Estrutura +> +> Links para documentação de Criação da Estrutura, desde a parte de rede, portgroups e maquinas virtuais! +> +[`1 - Definições de Rede`](#1-definições-de-rede) +[`2 - Criação de PortGroups - VMWare`](#2-criação-de-portgroups-vmware) +[`3 - Criação Maquinas Virtuais - VMWare`](#3-criação-maquinas-virtuais-vmware) +[`4 - Configuração Estrutura do Cliente`](#4-configuração-estrutura-do-cliente) +[`5 - Configuração Backup Cliente`](#5-configuração-backup-cliente) + +## 1 - Definições de Rede + +Para criar a Estrutura do definitiva do cliente, deve ser definido os padrões de rede que a estrutura utilizará, onde será definido os IP's para interface (WAN, LAN e INT_RT). Este controle e documentação esta disponivel para consulta e definição no endereço: + +#### https://datacenter.ipm.com.br + +* (Caminho: Gerenciamento Data Center (GTT) > Configurações > Redes) + +![Configuracao_Padrao](../img/criacao_ambiente_gtt_rede.png) + +Após a definição de IP's, você deve conectar ao VMWare para a criação da estrutura Virtual: + + Data Center PR01: https://pr01-ger-vcsa01.atendenet.local/ + Data Center SP01: https://sp01-ger-vcsa01.atendenet.local/ + +## 2- Criação de Portgroups - VMWare + + ATENÇÃO - SEMPRE REALIZE A CONFIGURAÇÃO DOS PORTGROUP NOS DOIS AMBIENTES DO DATA CENTER - PR01 E SP01 + +Após login no ambiente do VMWare, selecione a opção Networking + +![Configuracao_Padrao](../img/criacao_ambiente_vmware_network.png) + +Os PortGroups sempre serão criados no vSwitch0 . Após isso selecione a Opção de Actions > Distributed Port Group > New Distributed Port Group + +![Configuracao_Padrao](../img/criacao_ambiente_vmware_portgroup_criacao.png) + +Insira o nome do PortGroup seguindo o padrão já estabelecido (Código do Cliente + Nome do cliente) 00000_clean + +![Configuracao_Padrao](../img/criacao_ambiente_vmware_switch.png) + +Realize a configuração do PortGroup: + +* Port binding Static binding +* Port allocation Elastic +* Number of ports 16 Neste campo deve ser informado o numero de portas conforme a mascara de rede, neste exemplo é uma rede /28 +* Network resource pool (default) +* VLAN type VLAN +* VLAN ID Conforme definido no passo [`1 - Definições de Rede`](#1-definições-de-rede) + +![Configuracao_Padrao](../img/criacao_ambiente_vmware_portgroup_config.png) + +Após a configuração, selecione a Opção Network no VMWare, Selecione o vSwtich0 e selecione o PortGroup criado nos passos anteriores e edite o mesmo: + +![Configuracao_Padrao](../img/criacao_ambiente_vmware_portgroup_config.png) + +Em Teaming and failover configure os 2 Uplinks, um como Active e outro como Standby conforme definido no passo [`1 - Definições de Rede`](#1-definições-de-rede) + +![Configuracao_Padrao](../img/criacao_ambiente_vlan_portgroup_failover.png) + +## 3 - Criação Maquinas Virtuais - VMWare + +### Conceito dos Clones + +Para cada estrutura que será criada, utilizaremos as maquinas CLEAN que são os templates padrões para a criação do ambiente: + +[`Servidor Firewall`](#b-u-00000-clean-afw-01-0272-atende-net-u-b) 00000-clean-afw-01-0272.atende.net +[`Servidor Aplicação`](#b-u-00000-clean-app-01-0820-atende-net-u-b) 00000-clean-app-01-0820.atende.net +[`Servidor Banco de Dados`](#b-u-00000-clean-bdp-01-1600-atende-net_v1-u-b) 00000-clean-bdp-01-1600.atende.net_v1 +[`Servidor Micro Serviços`](#b-u-00000-clean-msd-01-2400-atende-net_v1-u-b) 00000-clean-msd-01-2400.atende.net_v1 + +>IMPORTANTE: +> +> Caso o cliente em questão tenha contratado o GED ou o sistema da Educação que possui Inteligência Artificial deve se efetuar o mesmo procedimento de criação/clone usando como base o template CLEAN da VM: 00000-clean-msd-03-2400.atende.net_v1 +> +> Caso o cliente possua o sistema IPM Saúde, o template para criação/clone usado deve ser com base o template CLEAN da VM: > 00000-clean-bdp-02-1150.atende.net +> +> Utilizando a opção Clone do VMWare, iremos clonar os templates informados acima substituindo as configurações conforme padrão! +> +### Procedimento de Clone + +#### 00000-clean-afw-01-0272.atende.net + +Selecione a Maquina Virtual do Firewall e efetuei o clone da mesma: + +![Configuracao_Padrao](../img/criacao_estrutura_clone.png) + +Insira o nome da VM seguindo o padrão já definido em: + +- [`Nomenclatura de Servidores Padrão`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/hostname-default.md) +![Configuracao_Padrao](../img/criacao_estrutura_nomear_vm.png) + +Escolha o Servidor Físico onde essa Maquina Virtual ficará hospedada: + +![Configuracao_Padrao](../img/criacao_estrutura_escolher_servidor.png) + +Selecione o DataStore onde será armazenados os discos dessa Maquina Virtual, sempre visualizando o consumo dos mesmos. +#### ATENÇÃO - SEMPRE SELECIONE A OPÇÃO DE DISK FORMAT COMO THIN PROVISION + +![Configuracao_Padrao](../img/criacao_estrutura_selecao_datastore.png) + +Clique na opção de Customize this Virtual machine's Hardware para que possamos configurar os recursos da Maquina Virtual: + +![Configuracao_Padrao](../img/criacao_estrutura_vm_configurar01.png) + +Configuração de Recursos: +CPU: Informar o valor da CPU conforme necessário, e sempre siga o padrão de Cores per Socket (CPU 2 - Cores per Socket 2) - (CPU 4 - Cores per Socket 2) (CPU 6 - Cores per Socket 6) + +![Configuracao_Padrao](../img/criacao_estrutura_vm_configurar02.png) + +Memoria: Informe o valor da Memória e selecione a opção Reserve all guest memory (All Locked) para reservar a memoria para a VM +Disco: Já foi selecionado no passo anterior +Interface: Neste caso do Firewall selecione as redes: + Network Adapter 1* - WAN + Network Adapter 2* - LAN + Network Adapter 3* - INT_RT + +![Configuracao_Padrao](../img/criacao_estrutura_vm_configurar03.png) + +Após isso clique em Next e aguarde o processo de Clone ser finalizado. + +#### 00000-clean-app-01-0820.atende.net + +Selecione a Maquina Virtual do Apache e efetuei o clone da mesma: + +![Configuracao_Padrao](../img/criacao_estrutura_clone_http.png) + +Insira o nome da VM seguindo o padrão já definido em: + +- [`Nomenclatura de Servidores Padrão`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/hostname-default.md) + +![Configuracao_Padrao](../img/criacao_estrutura_nomear_vm_http.png) + +Escolha o Servidor Físico onde essa Maquina Virtual ficará hospedada: + +![Configuracao_Padrao](../img/criacao_estrutura_escolher_servidor_http.png) + +Selecione o DataStore onde será armazenados os discos dessa Maquina Virtual, sempre visualizando o consumo dos mesmos. +#### ATENÇÃO - SEMPRE SELECIONE A OPÇÃO DE DISK FORMAT COMO THIN PROVISION + +![Configuracao_Padrao](../img/criacao_estrutura_selecao_datastore_http.png) + +Clique na opção de Customize this Virtual machine's Hardware para que possamos configurar os recursos da Maquina Virtual: + +![Configuracao_Padrao](../img/criacao_estrutura_vm_configurar01_http.png) + +Configuração de Recursos: +CPU: Informar o valor da CPU conforme necessário, e sempre siga o padrão de Cores per Socket (CPU 2 - Cores per Socket 2) - (CPU 4 - Cores per Socket 2) (CPU 6 - Cores per Socket 6) + +![Configuracao_Padrao](../img/criacao_estrutura_vm_configurar02_http.png) + +Memoria: Informe o valor da Memória e selecione a opção Reserve all guest memory (All Locked) para reservar a memoria para a VM +Disco: Já foi selecionado no passo anterior +Interface: Neste caso do Apache selecione a rede LAN (PortGroup criado no passo): [`2 - Criação de PortGroups - VMWare`](#2-criação-de-portgroups-vmware) + Network Adapter 1* - LAN + +![Configuracao_Padrao](../img/criacao_estrutura_vm_configurar03_http.png) + +Após isso clique em Next e aguarde o processo de Clone ser finalizado. + +#### 00000-clean-bdp-01-1600.atende.net_v1 + +Selecione a Maquina Virtual do Apache e efetuei o clone da mesma: + +![Configuracao_Padrao](../img/_criacao_estrutura_clone_sgdb.png) + +Insira o nome da VM seguindo o padrão já definido em: + +- [`Nomenclatura de Servidores Padrão`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/hostname-default.md) + +![Configuracao_Padrao](../img/_criacao_estrutura_nomear_vm_sgdb.png) + +Escolha o Servidor Físico onde essa Maquina Virtual ficará hospedada: + +![Configuracao_Padrao](../img/_criacao_estrutura_escolher_servidor_sgdb.png) + +Selecione o DataStore onde será armazenados os discos dessa Maquina Virtual, sempre visualizando o consumo dos mesmos. +#### ATENÇÃO - SEMPRE SELECIONE A OPÇÃO DE DISK FORMAT COMO THIN PROVISION + +![Configuracao_Padrao](../img/_criacao_estrutura_selecao_datastore_sgdb.png) + +Clique na opção de Customize this Virtual machine's Hardware para que possamos configurar os recursos da Maquina Virtual: + +![Configuracao_Padrao](../img/_criacao_estrutura_vm_configurar01_sgdb.png) + +Configuração de Recursos: +CPU: Informar o valor da CPU conforme necessário, e sempre siga o padrão de Cores per Socket (CPU 2 - Cores per Socket 2) - (CPU 4 - Cores per Socket 2) (CPU 6 - Cores per Socket 6) + +![Configuracao_Padrao](../img/_criacao_estrutura_vm_configurar02_sgdb.png) + +Memoria: Informe o valor da Memória e selecione a opção Reserve all guest memory (All Locked) para reservar a memoria para a VM + +Disco: No ambiente do SGDB teremos diversos discos onde terão que ser alterados conforme a planilha de Configuração Padrão: [`Configuração Padrão de Disco`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/partition-bdp-1600.md) + +O padrão de disco e seus recursos são distribuidos da seguinte maneira: + +HardDisk1 = Sistema Operacional +HardDisk2 = Indices +HardDisk3 = Dados +HardDisk4 = Archived (arquivos) + +Interface: Neste caso do Banco de Dados selecione a rede LAN (PortGroup criado no passo): [`2 - Criação de PortGroups - VMWare`](#2-criação-de-portgroups-vmware) + Network Adapter 1* - LAN + +![Configuracao_Padrao](../img/_criacao_estrutura_vm_configurar03_sgdb.png) + +Após isso clique em Next e aguarde o processo de Clone ser finalizado. + +Após a clonagem ser efetuado, necessitamos ajustar o disco (HardDisk4) referente aos arquivos do cliente que serão armazenados em uma Storage dedicada (VMDATA-XT680). + +Para isso, selecione a Maquina Virtual Clonada, com o botão direito clique em Migrate > Change Storage Only + +![Migrate_archived](../img/migrate_storage_archived.png) + +Após selecionar a opção, clique em Configure per Disk, selecione o HardDisk4 que refere-se a partição Archived (partição dos arquivos do cliente) e clique em Configure + +![Migrate_archived](../img/migrate_storage_archived2.png) + +Neste momento iremos verificar um disco para hospedar os arquivos do cliente. Lembrando que SEMPRE deve ser feito esse armazenamento na Storage VMDATA-XT680 nos volumes com nomenclatura DATASTORE (ex: PR01-VMDATA-XT680-03-004-DATASTORE). Para isso, compare o tamanho do HardDisk4 do cliente que você esta fazendo, e garanta que entre a Capacidade do volume escolhido e o espaço Provisionado tenha o suficiente para armazenamento do disco do cliente. + +(OBS. Não utilize volume com a nomenclatura DEDICATED no final, pois são volumes que são usados para outros fins e também volume com o nome RECOVERY pois serão volumes utilizados para armazenar os backups do outro Data Center.) + +![Migrate_archived](../img/migrate_storage_archived3.png) + +Após selecionar as opções, clique em Confirm conforme imagem a cima garantindo que as opções selecionados sejam aplicadas. +Depois de confirmado, será possível observar que os HardDisk 1,2,3 estarão em um volume na Storage, e o HardDisk4 estará na Storage dedicada para armazenamento de arquivos (VMDATA-XT680). + +Clique em Next e aguarde a migração do mesmo. + +![Migrate_archived](../img/migrate_storage_archived4.png) + +#### 00000-clean-msd-01-2400.atende.net_v1 + +Selecione a Maquina Virtual do Apache e efetuei o clone da mesma: + +![Configuracao_Padrao](../img/_criacao_estrutura_clone_tomcat.png) + +Insira o nome da VM seguindo o padrão já definido em: + +- [`Nomenclatura de Servidores Padrão`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/hostname-default.md) + +![Configuracao_Padrao](../img/_criacao_estrutura_nomear_vm_tomcat.png) + +Escolha o Servidor Físico onde essa Maquina Virtual ficará hospedada: + +![Configuracao_Padrao](../img/_criacao_estrutura_escolher_servidor_tomcat.png) + +Selecione o DataStore onde será armazenados os discos dessa Maquina Virtual, sempre visualizando o consumo dos mesmos. +#### ATENÇÃO - SEMPRE SELECIONE A OPÇÃO DE DISK FORMAT COMO THIN PROVISION + +![Configuracao_Padrao](../img/_criacao_estrutura_selecao_datastore_tomcat.png) + +Clique na opção de Customize this Virtual machine's Hardware para que possamos configurar os recursos da Maquina Virtual: + +![Configuracao_Padrao](../img/_criacao_estrutura_vm_configurar01_tomcat.png) + +Configuração de Recursos: +CPU: Informar o valor da CPU conforme necessário, e sempre siga o padrão de Cores per Socket (CPU 2 - Cores per Socket 2) - (CPU 4 - Cores per Socket 2) (CPU 6 - Cores per Socket 6) + +![Configuracao_Padrao](../img/_criacao_estrutura_vm_configurar02_tomcat.png) + +Memoria: Informe o valor da Memória neste caso do Servidor de Micro Serviços não use a opção de reservar a memoria conforme print. +Disco: Já foi selecionado no passo anterior +Interface: Neste caso do Apache selecione a rede LAN (PortGroup criado no passo): [`2 - Criação de PortGroups - VMWare`](#2-criação-de-portgroups-vmware) + Network Adapter 1* - LAN + +![Configuracao_Padrao](../img/_criacao_estrutura_vm_configurar03_tomcat.png) + +Após isso clique em Next e aguarde o processo de Clone ser finalizado. + +Depois de finalizado toda a criação do ambiente, o próximo passo será realizar a configuração da Estrutura criada seguindo os passos do manual a seguir: + + +## 4 - Configuração Estrutura do Cliente + +Para a documentação da configuração de cada servidor específico, deve se seguir as documentações abaixo, seguindo inclusive dos links para tais configurações. + +[`1 - Configuração Servidor Firewall (00000-clean-afw-01-0272.atende.net)`](./configuracao_firewall_0272_cliente.md) + +[`2 - Configuração Servidor Aplicação (00000-clean-app-01-0820.atende.net)`](./configuracao_apache_0820_cliente.md) + +[`3 - Configuração Servidor Banco de Dados (Atende.Net) (00000-clean-bdp-01-1600.atende.net)`](./configuracao_banco_1600_cliente.md) + +[`4 - Configuração Servidor Microserviços (00000-clean-msd-01-2400.atende.net)`](https://documentos.ipm.com.br/data-center/docker/src/branch/master/docs/server-deploy.md) + +Caso o cliente contratou algum módulo específico, deve ser seguido a documentação do processo para a situação em questão: + +[`Módulo Opcionais`](./modulos_opcionais_atendenet.md) + + +## 5 - Configuração Backup Cliente + +Após clonar os equipamentos, eles deverão ser adicionados na planilha [Backup - PPDM e Recovery Point.](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EWzuIrYt2K5Ol4QAbsbRKuUB-l_wIG-KJvvHnva2bA21qw?e=MrqJCL) +IMPORTANTE: Adicionar as VMs ao final da lista, junto com as informações Powered On/Off e o site em que foi criada. Conforme exemplo abaixo: +![CheckListPPDM](../img/checklist_backup_ppdm_recovery_point.png) + + +[`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/criacao_estrutura_migracao.md b/docs/criacao_estrutura_migracao.md new file mode 100644 index 0000000..f9ff1f8 --- /dev/null +++ b/docs/criacao_estrutura_migracao.md @@ -0,0 +1,813 @@ +# Criação Estrutura Temporária - Migração do Cliente + + +>### Objetivo da Documentação: +> +> O intuito dessa documentar é servir de Checklist para todos os passos que são necessários executar para a criação da estrutura de Migração de um novo cliente no Data Center da IPM. +> + +## Servidor que serão configurados: + +[`Servidor Firewall - 99999-srv-cli-XX-afw-01-0272.atende.net`](#99999-srv-cli-xx-afw-01-0272-atende-net) +[`Servidor Apache - 99999-srv-cli-XX-app-01-0820.atende.net`](#99999-srv-cli-xx-app-01-0820-atende-net) +[`Servidor MSD - 99999-srv-cli-XX-msd-01-2400.atende.net`](#99999-srv-cli-xx-msd-01-2400-atende-net) +[`Servidor Banco de Dados - 99999-srv-cli-XX-bdp-01-1600.atende.net`](#99999-srv-cli-xx-bdp-01-1600-atende-net) + +## Requisitos: + +* Verificar se no chamado consta todas as informações necessárias para a configuração/criação do ambiente +* Verificar atentamente o ambiente SRV-CLI que foi informado no chamado para a criação do ambiente +* Seguir o passo a passo com atenção não pulando nenhum passo ou executando algo fora de ordem +* Seguir passo a passo junto da planilha - Guia - MIGRAÇÃO [Manutenção Servidores - 15072025 v1](https://ipmcombr-my.sharepoint.com/:x:/r/personal/alexsandre_constantino_ipm_com_br/_layouts/15/Doc.aspx?sourcedoc=%7B46F183E5-2A51-4FDC-8F73-45197A94FF2B%7D&file=Manuten%C3%A7%C3%A3o%20Servidores%20-%2015072025%20v1.xlsx&action=default&mobileredirect=true) + +----------------------------------------------------------------------------------------- + +## 99999-srv-cli-XX-afw-01-0272.atende.net + +### ✅ Desconectar Interface + +Conecte no VMWARE do ambiente SP https://sp01-ger-vcsa01.atendenet.local/ com suas credências do LDAP. +Busque a VM 99999-srv-cli-XX-afw-01-0272.atende.net (de acordo com o que foi passado no chamado). + +Com a VM selecionado, clique em (Actions > Edit Settings) + +![Edit_settings_firewall](../img/firewall_edit_settings.png) +![Edit_settings_firewall2](../img/firewall_edit_settings2.png) + +Desconecte as interfaces WAN e INT_RT e clique OK +Agora ligue a VM (Actions > Power > Power ON) + +![Edit_settings_firewall3](../img/firewall_edit_settings3.png) + + +### ✅ Configurar IP WAN via Console + +Com a VM ligada, clique em Launch Web Console para conectar no console da mesma via vSphere. +Conectado a máquina, logue com as credênciais padrão e execute os comandos para alterar os IP's: + +``` +Selecione a opção 2 (Set interface(s) IP Address) +Selecione a opção 1 (WAN - vmx0 - static) +Configure IPv4 address WAN interface via DHCP? (y/n): n +Informe o IP da WAN IPv4 address: Exemplo: 177.11.20.XXX +Subnet masks are entered as bit counts (as in CIDR notation) in pfSense: 25 (informe de acordo com o tamanho da rede passado no chamado) +For a WAN, enter the new WAN IPv4 upstream gateway address: Apenas clique enter e não informe nenhum opção +Configure IPv6 address WAN interface via DHCP6 (y/n): n +Enter the new WAN IPV6 Adress: Apenas clique enter e não informe nenhum opção +Do you want to revert to HTTP as the webConfigurator protocol? (y/n): n +``` + +### ✅ Configurar IP INT_RT + +Agora iremos executar o mesmo procedimento acima porém na interface PR01_INT_RT + +``` +Selecione a opção 2 (Set interface(s) IP Address) +Selecione a opção 3 (PR01-INT_RT - opt1 vmx2) +Informe o IP da WAN IPv4 address: Exemplo: 172.24.1.XXX +Subnet masks are entered as bit counts (as in CIDR notation) in pfSense: 13 (informe de acordo com o tamanho da rede passado no chamado) +For a WAN, enter the new WAN IPv4 upstream gateway address: Apenas clique enter e não informe nenhum opção +Enter the new WAN IPV6 Adress: Apenas clique enter e não informe nenhum opção +Do you want to enable the DHCP server on OPT1? (y/n): n +Do you want to revert to HTTP as the webConfigurator protocol? (y/n): n +``` +### ✅ Desligar Servidor + +Após as alterações, selecione a opção 6 Halt system para desligar o servidor. + +### ✅ Ajustar VLAN + +Após desligar o servidor, clique em (Actions > Edit Settings) e ajuste a VLAN da Interface (Network Adapter 1 que refere-se a WAN) conforme a VLAN passada no chamado. + +![Edit_settings_firewall4](../img/firewall_edit_settings4.png) +![Edit_settings_firewall5](../img/firewall_edit_settings5.png) + +### ✅ Conectar interfaces + +Após isso, conecte a todas as Interfaces e clique OK + +![Edit_settings_firewall6](../img/firewall_edit_settings6.png) + +### ✅ Ligar Servidor + +Após as alterações, ligue o servidor (Actions > Power > Power On) + +![Edit_settings_firewall7](../img/firewall_edit_settings7.png) + +### ✅ Ajustar GW Padrão (WAN) + +Após ligar o servidor, acessar via Navegador o endereço https://172.24.1.XXX:9080 (IP da INT_RT deve ser de acordo com o IP configurado nos passos anteriores) e efetue login com as credenciais: + +Usuário: admin +Senha: default datacenter + +![pfsense_login](../img/pfsense_login.png) + +Após efetuado o login, navegue em: (System > Routing > Gateway > Edit) e altera o endereço do Gateway conforme informado no chamado. + +![alteracao_gateway](../img/alteracao_gateway.png) + +Após a alteração, confira se o mesmo ficou de acordo diretamente na interface. Navegue em (Interfaces > WAN (vmx0)) e configra o IPv4 Upstream gateway: + +![alteracao_gateway2](../img/alteracao_gateway2.png) + +### ✅ Alteração DNS Forwarder + +Após o ajuste do Gateway, precisamos ajustar o DNS Forwarder desse ambiente. +Navegue em (Services > DNS Forwarder) + +Altere o nome para o nome do cliente. +Exemplo: + +cliente.atende.net para novocliente.atende.net +origens-cliente.atende.net para origens-novocliente.atende.net +ws-cliente.atende.net para ws-novocliente.atende.net + +![dns_forwarder_config](../img/dns_forwarder_config.png) + +### ⚠️ TEMPORARIAMENTE ⚠️ + +Verificar as seguintes informações: +Services > FRR Global/Zebra: A "Master Password" deve ser referente ao ambiente SP01 (use um cliente de SP para comparar) +Services > FRR OSPF: A "Default Area" também deve ser referente ao ambiente de SP01 (2.2.2.2) +Services > Zabbix Proxy 6: O "Server" deve estar apontando para o zabbix de SP01 (172.24.0.235) + +### ✅ Reboot + +Após alterado as configurações, navegue em (Diagnostics > Reboot) e execute um Normal reboot no ambiente. + +![normal_reboot_pfsense](../img/normal_reboot_pfsense.png) + + +## 99999-srv-cli-XX-app-01-0820.atende.net + +Após a configuração do Firewall, iremos configurar o servidor Apache do cliente. Para isso, ligue a VM 99999-srv-cli-XX-app-01-0820.atende.net. + +![poweron_apache](../img/poweron_apache.png) + +Após iniciado a VM, conecte via Putty (IP: 172.24.1.XXX Porta Padrão: 9024) + +``` +Log com o usuário ipm e senha padrão ###### +``` + +Após login com o usuário ipm, precisamos nos tornar root +``` +su - root + +digite a senha padrão para o ambiente +``` +Após logado no linux, iremos executar uma série de comando para limpeza de logs, arquivos e alterações pertinentes ao cliente atual que estamos configurando. + +### ✅ Limpar logs + +``` +rm -rf /var/log/apache2/* && rm -rf /var/log/php8.2-fpm* +``` + +### ✅ Apagar checkout antigo + +``` +cd /var/www/html +rm -rf cliente.atende.net +``` + +### ✅ Criar pasta referente ao novo cliente + +``` +mkdir novocliente.atende.net +``` + +### ✅ Baixar arquivos na pasta do novo cliente + +``` +git clone --branch=master https://sp01-dgr.atende.net/ipm_sistemas_ltda/AtendeNet_Production.git /var/www/html/novocliente.atende.net/ +``` + +### ✅ Criar config.padrao.inc + +Lembre-se de alterar os parametros: ip = (IP do banco da srv-cli que o cliente está utilizando), base, end_birt e end_memcache (IP do cluster da srv-cli) + +``` +vim /var/www/html/novocliente.atende.net/_config.padrao.inc + + + +``` + +### ✅ Criar config.treinamento.inc + +Lembre-se de alterar os parametros: ip = (IP do banco da srv-cli que o cliente está utilizando), base, end_birt e end_memcache (IP do cluster da srv-cli) + +``` +vim /var/www/html/novocliente.atende.net/_config.treinamento.inc + + + +``` + +### ✅ Criar config do /atualiza + +``` +vim /var/www/html/novocliente.atende.net/atualiza/atualiza_versao_config.inc + + + +``` + +### ✅ Ajuste os privilégios + +``` +chown www-data:www-data -R /var/www/html/novocliente.atende.net/ + +git config --global --add safe.directory /var/www/html/novocliente.atende.net + +``` + +### ✅ Alterar Hosts + +``` +vim /etc/hosts +:% s/cliente/novocliente +``` + +### ✅ Alterar envvars + +``` +vim /etc/apache2/envvars +:% s/cliente/novocliente +``` + +### ✅ Alterar exports + +``` +vim /etc/exports +:% s/cliente/novocliente +``` + +### ✅ Alterar awstats.conf + +``` +cd /etc/awstats/ +mv awstats.cliente.atende.net.conf awstats.novocliente.atende.net.conf +mv awstats.origens-cliente.atende.net.conf awstats.origens-novocliente.atende.net.conf +mv awstats.ws-cliente.atende.net.conf awstats.ws-novocliente.atende.net.conf +vim awstats.novocliente.atende.net.conf +:% s/cliente.atende.net/novocliente.atende.net + +vim awstats.origens-novocliente.atende.net.conf +:% s/cliente.atende.net/novocliente.atende.net + +vim awstats.ws-novocliente.atende.net.conf +:% s/cliente.atende.net/novocliente.atende.net +``` + +### ✅ Se houver contratação do fiscal + +``` +mv awstats.nfse-cliente.atende.net.disabled awstats.nfse-novocliente.atende.net.conf + +vim awstats.nfse-novocliente.atende.net.conf +:% s/cliente.atende.net/novocliente.atende.net + +cd /etc/apache2/sites-enabled +ln -s ../sites-available/002-nfse-domain.conf + +vim /etc/hosts +192.168.14.26 nfse-novocliente.atende.net +192.168.14.26 www.nfse-novocliente.atende.net +``` + +### ✅ Reboot + +``` +reboot +``` + +## 99999-srv-cli-XX-msd-01-2400.atende.net + +### ✅ Alterar o nome do cliente na Variável ENDERCOWEB em todas as Stacks (swr,sjr,sfs,sfo e jsm) + +Nos ajustes do servidor MSD, apenas precisamos ligar a VM, acessar o portainer (https://172.24.1.XXX:9443) alterar a variável IPM_PROPERTIES_ENDERECOWEB das seguintes Stacks: + +Endereço: [{"dominio":"https:\/\/origens-cliente.atende.net\/atende.php","cidade":"padrao"}] + +* 99999-swr-atendenet-v2-01 +* 99999-sjr-atendenet-v2-01 +* 99999-sfs-atendenet-v2-01 +* 99999-sfo-atendenet-v2-01 +* 99999-jsm-atendenet-v2-01 + +Após a alteração da variável é necessário realizar um pull e redeploy da Stack. + +## 99999-srv-cli-XX-bdp-01-1600.atende.net + +Para o servidor de Banco de Dados, iremos ligar a VM 99999-srv-cli-XX-bdp-01-1600.atende.net e realizar o acesso da mesma via SSH: + +Obs: Devido a versão do PostgreSQL 16, necessitamos logar primeiramente com o usuário ipm senha Ipm@1234567 e depois executar o comando su - root para logar com o usuário root do sistema. + +Putty +IP: 172.24.1.XXX +Porta Padrão: 9032 +Usuário: ipm +Senha: Ipm@1234567 + +su - root +Senha: padrão da Migração/datacenter + +### ✅ rm -rf /var/log/postgresql/* + +``` +rm -rf /var/log/postgresql/* +``` + +### ✅ rm -rf /var/lib/postgresql/storage/* + +``` +rm -rf /var/lib/postgresql/storage/* +``` + +### ✅ cp /etc/postgresql/16/main/postgresql.mig /etc/postgresql/16/main/postgresql.conf + +``` +cp /etc/postgresql/16/main/postgresql.mig /etc/postgresql/16/main/postgresql.conf +``` + +### ✅ Aletar pg_hba.conf + +Garantir que todos os IP's informado no arquivo, estejam com a liberação TRUST! +``` +vim /etc/postgresql/16/main/pg_hba.conf +``` + +### ✅ rm -rf /root/*.log + +``` +rm -rf /root/*.log +``` + +### ✅ Reload postgresql + +``` +systemctl reload postgresql.service +``` + +### ⚠️ TEMPORARIAMENTE ⚠️ + +Lembrar de conferir fstab, onde deve estar com IP 172.24.0.246 +Conferir stg_bkp no arquivo: bkp_remoto/bkp_remoto.cfg (172.24.0.246) + + +### ✅ DROP database cliente e treinamento + +Para efetuar o delete dos Database, você deve conectar via PGAdminIII informando as credenciais do ambiente: + +![conexao_postgresql_migracao](../img/conexao_postgresql_migracao.png) + +Após conectar na instância do banco, selecione o database com o botão direito clique em Delete/Drop. + + +### ✅ CREATE database cliente e treinamento + +Após a exclusão, precisamos recriar o database do novo cliente que estamos configurando com os seguintes padrões: + +Base Cliente: +* Name: 00000_cliente +* Owner: dbaipm +* Encoding: LATIN1 +* Template: Template0 +* Tablespace: pg_default + +Base Treinamento: + +* Name: treina_cliente +* Owner: dbaipm +* Encoding: LATIN1 +* Template: Template0 +* Tablespace: pg_default + +![create_database_1](../img/create_database_1.png) +![create_database_2](../img/create_database_2.png) + +### ✅ CREATE EXTENSIONS + +Após a criação das duas databases, devemos criar as extensões nas mesmas: + +Selecione uma base de cada vez e execute o seguinte SQL: + +``` +CREATE EXTENSION postgis; +CREATE EXTENSION postgis_sfcgal; +CREATE EXTENSION pg_buffercache; +CREATE EXTENSION pg_freespacemap; +CREATE EXTENSION pg_stat_statements; +CREATE EXTENSION btree_gist; +CREATE EXTENSION pg_trgm; +CREATE EXTENSION pgcrypto; +``` + +### ✅ Testar mount e umount /var/lib/postgresql/storage/ + +Volte ao acesso via Linux no Banco de Dados do PostgreSQL e execute o comando para testar o mount e umount da storage + +``` +mount /var/lib/postgresql/storage/ +df -h (Obs. Confira se a Storage esta montada corretamente) +umount /var/lib/postgresql/storage/ +``` + +### ✅ Backup e Restore Base Zerada (transferir16.sh) + +Após todas as configurações acima ter sido efetuadas, iremos realizar o Backup/Restore do cliente com referência a base Zerada. + +Para isso, altere o seguinte Script no Linux do Banco de dados: + +``` +vim /root/transferir_16.sh + +Altere as seguintes informações: + +# Verificar se as informações estão corretas: + +#Origem: + +Host_Origem="192.168.25.53" +Porta_Origem="5432" +BD_Origem="zerada" + +# Destino: + +Host_Destino="127.0.0.1" +Porta_Destino="5432" +BD_Destino="00000_cliente" +``` + +Após o ajuste das informações salve e execute o Script em questão: + +``` +cd /root/ +./transferir_16.sh & +``` + +### ✅ Conferência dos Logs do Backup/Restore + +Execute os comandos abaixo para verificar os logs de Backup/Restore: + +``` +cat *.log | grep ERROR +cat *.log | grep Error +cat *.log | grep WARN +cat *.log | grep Warn +``` + +### ✅ InicializaBD Migração + +Será necessário a execução do InicializaBD para o ajustes no ambiente conforme os padrões da IPM. Para executar o mesmo, conecte no acesso remoto do Data Center (sp01-remoto.ipm.com.br:33389), vá em C:\IPM\InicializaBD\inicializabd.exe. + + IMPORTANTE: Sempre executar a ultima versão do InicializaBD disponível. Caso necessite conferir a versão acesse ftp.ipm.com.br + +Obs: Logue com suas credênciais do Dicionário! + +Informe as seguintes configurações: + +* Ambiente: Migração/Conversão +* IP: 172.24.1.XXX +* Porta: 65432 +* Usuário: postgres +* Senha: não precisa pois o banco esta como TRUST +* Database: 00000_cliente + +Opções que precisam ser selecionadas: + +* Atividades pós-restore: + * Executa comandos obrigatórios Atende.Net + * Seta/Revoga permissões + * Cria estrutura monitoração + * Alterar os domínios +* Criação de tabelas: + * Cria ou recriar webbased.tbsession + * Cria tabelas caso não existam + * Ajustar sequences +* Armazenamento de arquivos + * Alterar configuração de uso da Storage - Ação Desativar + * Alterar Estrutura de Armazenamento - Ação - Sim + * Tamanho dos Arquivos / Tamanho das Partições - Deverá ser alterado conforme memória da VM Definitiva (BDP-1600) + Menor que 6GB - Selecionar a opção 32/16MB + De 6GB até 12GB - Selecionar a opção 64/32MB + Se for maior que 12GB - Selecionar a opção 128/64MB + * Iniciar particionamento do schema Arquivo - 26GB por partição + * Habilitar / Desabilitar Agendamentos - Marque para habilitar: 460 e 461 + +![inicializadb_exec_migracao](../img/inicializadb_exec_migracao2.png) + + +### ✅ Script BKP 3.11 + +Após a execução do InicializaBD, voltaremos as configurações do ambiente Linux do Banco de Dados do cliente. +Verifique a versão do Script de Backup do cliente: + +``` +vim /root/bkp_remoto/bkp_remoto.sh + +Conferir: + +## Variaveis +bkp_version="3.11" +``` + +Caso seja necessário atualizar o script, siga os passos abaixo: +``` +cd /root +wget https://datacenter.atende.net/updates/update_scriptbkp_311.zip + +unzip update_scriptbkp_311.zip +``` + +### ✅ Storage Backup + +Conferir a Storage de Backup. Deve estar configurado a Storage: (172.24.0.246) + +``` +vim /etc/fstab +//172.24.0.246/Backup /var/lib/postgresql/storage cifs users,noauto,username=serverlinux,password=*******,domain=ATENDENET,uid=121,gid=125,rw,vers=2.0 0 0 +``` + +### ✅ Crontab -e + +Descomente a linha da cron para que o ambiente possa começar a fazer o Backup da base. + +``` +crontab -e + +Exemplo: + +antes: +#00 19 * * * /root/bkp_remoto/bkp_all_databases.sh + +depois: +00 19 * * * /root/bkp_remoto/bkp_all_databases.sh +``` + +### ✅ Configuração Backup + +Após ativar a cron, iremos agora configurar os Backups do cliente: + +Exclua a configuração de Backup do cliente anterior: + +``` +rm /root/bkp_remoto/00000_cliente/ -rf +``` + +Crie o novo diretório para o novo cliente: + +``` +mkdir -p /root/bkp_remoto/00000_novocliente/cfg/ +``` + +Agora crie o arquivo migracao.cfg. Esse arquivo irá ter a Data de início dos Backups do cliente. + +``` +vim /root/bkp_remoto/00000_clientenovo/cfg/migracao.cfg + +Conteudo do arquivo: + +informar a data no padrão AAAAMMDD + +Exemplo: 20250226 + +Salve o arquivo! +``` + +### ✅ Reboot + +Execute um restart no Servidor do Banco de Dados após finalizar todas as configurações! + +``` +reboot +``` + + +## Demais Configurações + +Após a configuração de todos os Servidores, iremos executar alguns outros procedimentos necessários no ambiente do cliente. + +### ✅ Executar SVN + +Acesse via navegador o cliente https://cliente.atende.net/atualiza/atualiza_versao.php + +Obs. Logue com as credências do dicionário! + +Após isso, selecione a ultima revisão disponível: + +![exec_svn_migracao_cliente_novo](../img/exec_svn_migracao_cliente_novo.png) + +### ✅ Executar Todos Pacotes + +Ao concluir a atualização de SVN, iremos na guia lateral Atualização do Banco de Dados, selecionar todos os pacotes e clicar em Executar Atualização! + +![exec_pacotes_migracao_cliente_novo](../img/exec_pacotes_migracao_cliente_novo.png) + + IMPORTANTE: Caso ocorra algum erro de Atualização ou pacote, deve ser aberto um chamado para o módulo corrigir o mesmo! + +### ✅ Configuração Microserviços + +Precisamos setar o IP da Rede e VIP (Virtual) nos microserviços do sistema Atende.Net desse novo cliente. Para isso, altere o Script abaixo alterando os seguintes valores: + +Obs: Alterar os IP's conforme passados no chamado! + +* IP da Rede: 192.168.40.32 por 192.168.XXX.XXX +* IP VIP: 192.168.40.37 por 192.168.XXX.XXX + +Após alterar os dados, conecte via PGAdminIII na instancia do cliente, e execute o Script via SQL! + +``` +create table public.tbmicrosservicoinstancia_202310 as( + select * from webbased.tbmicrosservicoinstancia +); + +create table public.tbmicrosservicoinstanciasis_202310 as( + select * from webbased.tbmicrosservicoinstanciasis +); + +create table public.tbservletjava_202310 as( + select * from webbased.tbservletjava +); + +delete + from webbased.tbmicrosservicoinstancia + where svjaplicacao in (2,3,4,5,15); +drop table if exists tbdados; + +create temp table tbdados as ( + select '192.168.40.32' as rede, + '192.168.40.37' as cluster +); + +insert into webbased.tbmicrosservicoinstancia + (svjaplicacao, svjnome, msinome, msisequencia, msiendereco, msiativo, msiversao) + (select svjaplicacao, svjnome, svjnome, 1, + case + when svjnome='WebOcrReader' + then 'http://'||tbdados.cluster||':8083' -- OCR + when svjaplicacao = 2 + then 'http://'||tbdados.cluster||':8081' -- WebReport + when svjaplicacao = 3 + then 'http://'||tbdados.cluster||':8082' -- JobRunner + when svjaplicacao = 4 + then 'http://'||tbdados.cluster||':8083' -- FileOptimizer + when svjaplicacao = 5 + then 'http://'||tbdados.cluster||':8084' -- FileSigner + when svjaplicacao = 15 + then 'http://'||tbdados.cluster||':8086' -- JSM + else '' + end, + 1, + null + from webbased.tbservletjava + left join tbdados + on true + where svjaplicacao in (2,3,4,5,15) + order by 1, 2); + +insert into webbased.tbmicrosservicoinstanciasis + (svjaplicacao, svjnome, msisequencia, siscodigo) + (select 2, + 'WebReport', + 1, + siscodigo + from webbased.tbsistemacliente + where sicativo = 1 + group by siscodigo); +``` + +### ✅ Adicionar cliente na Planilha: Release - Ambientes Paralelos + +Após toda a configuração do ambiente, durante todo o perído de Migração do mesmo, esse cliente precisará receber as atualizações de SVN que todos os clientes já em Produção recebem. para isso, precisamos adicionar o mesmo na planilha de CheckList de Atualizações, garantindo assim que o mesmo seja atualizado conforme as solicitações! + +[Release - Ambientes Paralelos](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EcuKtYY12wdIsUd0UCp32H8BvDv9IrHMqFhkogxrbleaTQ?e=SpoiiT) + +### ✅ Ativar Monitoramento Zabbix + +Para ativar o monitoramento do Zabbix desse ambiente, precisamos conectar no Zabbix Server (172.24.0.235 ou https://sp01-datacenter.ipm.com.br:8085) e navegar em: + +Configuration > Hosts > Filtrar pela SRV-CLI-XX que estamos configurando. Selecionar todos os hosts e clicar em Enable. + +![enable_hosts_zabbix](../img/enable_hosts_zabbix.png) + +Obs. Caso o agent do Zabbix venha a NÃO comunicar, será necessário reiniciar o Serviço do Zabbix Proxy no pFSense do cliente: + +Acesse via navegador https://172.24.1.XXX:9080 +Navegue em Status > Service e reinicie o Serviço zabbix_proxy e zabbix_agentd + +![zabbix_service_pfsense](../img/zabbix_service_pfsense.png) + + +### ✅ Enviar e-mail e tramitar chamado com os dados para migração + +Finalizando toda a configuração do ambiente, iremos repassar as informações para o setor de Migração: + +Enviar o Email com os seguintes padrões: + +Informações a ser substituidas relacionados a rede (192.168.25...): + +192.168.25.XXX - 192.168.25.101 - srv-cli-01 +192.168.25.XXX - 192.168.25.102 - srv-cli-02 +192.168.25.XXX - 192.168.25.103 - srv-cli-03 +192.168.25.XXX - 192.168.25.104 - srv-cli-04 + +``` +Destinatários: dielcio.schelter@ipm.com.br, pamela.eichholz@ipm.com.br e como copia administracao.dc@ipm.com.br +Assunto: Estrutura Migração - Cliente + +Texto: + +Boa tarde + +Segue dados da estrutura, favor devolver chamado quando for possível bloquear acesso através do pgAdmin: + +Migração Oficial: +https://cliente.atende.net/?cidade=padrao +IP Destino: 192.168.25.XXX - Porta: 5432 +IP Mongo: 192.168.25.210 - Porta: 27017 +IP Sincronização: 172.24.1.XXX - Porta: 65432 +Base: 00000_cliente + +Apenas um ponto de atenção: esse cliente não irá utilizar Storage, os arquivos deverão ser utilizados no banco prevendo a nova Estrutura. + +Migração Treinamento: +https://treinamento.atende.net/?cidade=treina_cliente +IP Mongo: 192.168.25.230 - Porta: 27017 +Base: treina_cliente + +Quando a base foi migrada anteriormente, restaurar em: +https://cliente.atende.net/?cidade=treinamento +IP Destino: 192.168.25.XXX - Porta: 5432 +Base: treina_cliente + +Quanto aos IP´s de Origem e Mongo ficam a critério do Sr. Dielcio Schelter balancear a carga entre os servidores de acordo com as migrações que estão ocorrendo no momento. + +OBS: O banco está otimizado para inserção, sendo assim foram desabilitadas as funções de SYNC que garantem a integridade do banco. +Enquanto o banco estiver com estas configurações, NÃO deverá ser utilizado o sistema até concluir a migração. +Quando concluir, favor comunicar para que possa estar voltando as configurações e liberando a utilização do sistema Atende.Net. +Foi restaurado a base zerada, atualizado o software via SVN e executado todos os pacotes. +``` + +Com relação ao chamado, iremos tramitar o mesmo para o responsável com as mesmas informações repassadas por Email acima! + +### ✅ Adicionar cliente na planilha do Backup + +Ao finalizar todos os passos anteriores, devemos adicionar esse cliente na planilha de Conferência de Backup seguindo a ordem de código! + +[Auditoria_Backup_2025](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EbQ_iQJB9IZEpYgs1-8SuNsBqB4FM9SNQA3x5VHDAImIUw?e=WI5jcO) + +----------------------------------------------------------------------------------------- + +[`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/criacao_network_portainer.md b/docs/criacao_network_portainer.md new file mode 100644 index 0000000..a24b17c --- /dev/null +++ b/docs/criacao_network_portainer.md @@ -0,0 +1,83 @@ +## Configurando uma Network no Portainer + +### 1. Acessando o Portainer + +Acesse a interface web do servidor Portainer: + +- **Exemplo**: https://172.24.1.24:9443 +- **Observação**: Utilize a mesma senha do usuário `root` do servidor. + +![Acesso ao Portainer](../img/acesso_portainer.png) + +--- + +### 2. Criando a Network + +Na **página inicial (Home)** do Portainer: + +1. Clique sobre o equipamento `msd-01`. +2. No menu lateral esquerdo, acesse **Networks**. +3. Clique em `+ Add network`. + +![Criação da Network no Portainer](../img/criacao_network_portainer.png) + +Preencha os dados da nova network. No exemplo abaixo, estamos criando uma network para o ambiente de demonstração. **Adapte os nomes conforme o ambiente do cliente.** + +- **Name**: `08573-demonstracao-network` +- **Driver**: `Overlay` + +--- + +### 3. Configuração de IPVA (Rede) + +Preencha os campos da rede com os seguintes valores: + +- **Subnet**: `10.0.10.0/24` +- **IP range**: `10.0.10.0/24` +- **Gateway**: `10.0.10.1` + +--- + +### 4. Controle de Acesso + +- **Enable access control**: `true` +- **Authorized teams**: + - Data Center - Coordenador de Análises + - Data Center - Coordenador de Operações + +![Configuração da Network](../img/criacao_network_portainer2.png) + +Clique em `Create the network` para concluir a criação. + +A rede criada deverá aparecer na lista conforme a imagem abaixo: + +![Network criada com sucesso](../img/criacao_network_portainer3.png) + +--- + +### 5. Atualizando Stacks com a Nova Network + +Após a criação da rede, será necessário atualizar a configuração de rede de **todas as stacks existentes no ambiente**. + +#### Exemplo: Stack do File Signer + +1. Acesse a stack desejada: + + ![Acessando Stack](../img/criacao_network_portainer_stack.png) + +2. Procure pela variável de ambiente chamada `NETWORK_NAME`: + + ![Variável NETWORK_NAME](../img/criacao_network_portainer_stack_net.png) + +3. **Atualize o valor da variável** com o nome da nova rede criada, por exemplo: + `08573-demonstracao-network` + +4. Após a alteração, clique em **Pull and redeploy** para aplicar as mudanças. + +--- + +### 6. Observações Importantes + +- Algumas stacks, como **WebReport** e **Gateway da Dara**, possuem a variável `NETWORK_EXTERNAL` com o valor `false`. + - **Altere esse valor para `true`**. + - Atualize também o nome da rede, conforme a nova criada. diff --git a/docs/criacao_usuario_monitor_elastic.md b/docs/criacao_usuario_monitor_elastic.md new file mode 100644 index 0000000..a376c8e --- /dev/null +++ b/docs/criacao_usuario_monitor_elastic.md @@ -0,0 +1,128 @@ +## Criação do Usuário para Monitoramento do Elasticsearch + +Este procedimento descreve como criar o usuário `zbx_monitor` para o monitoramento do Elasticsearch via Zabbix. + +Siga os passos abaixo para realizar a criação do usuário utilizando o Postman. + +--- + +## **Configuração com Postman** + +> **Pré-requisito:** É necessário utilizar o Postman para configurar o cluster e criar os usuários. + +### Observações: +- Todos os clientes já possuem um NAT configurado para acesso à interface `INT_RT` através da porta `9201`. +- Os ambientes globais são acessados diretamente pela porta `9200`. Esse NAT já é criado automaticamente durante o processo de deploy do Elasticsearch. + +--- + +### **1. Desabilitar a verificação de certificado SSL no Postman** + +Acesse as configurações do Postman e desabilite a opção **"SSL certificate verification"**. + +![Desabilitar SSL no Postman](../img/des-elastic-atendenet-postman-settings.png) + +--- + +### **2. Importar a Collection do Postman** + +Importe o arquivo `.json` responsável pela criação do usuário. Faça o download através do link abaixo e siga a documentação. + +**Arquivo:** +- [Criação do Usuário - Zabbix](../docs/Create%20user%20Zabbix.postman_collection.json) + +--- + +### **3. Ajustar a senha na aba Authorization** + +Após importar a collection, acesse a requisição `Elastic - Create user Zabbix` e altere a senha na aba **Authorization**, utilizando a senha definida durante a criação do hash no deploy do container. + +Essa senha pode ser obtida no GDT, no equipamento `01835-GRAVATAI-JITSI`, conforme imagem abaixo: + +![Senha no GDT](../img/create-user-zabbix-elastic_gdt.png) + +Altere a senha no campo correspondente à autenticação básica: + +![Alterando senha no Postman](../img/create-user-zabbix-elastic_auth.png) + +--- +### Realizar o cadastro da senha do usuário no GTT + +1. Realizar o acesso no `https://datacenter.ipm.com.br/` + +2. Acessar a rotina abaixo e buscar pelo cliente +- Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento + +3. No equipamento `cluster` do cliente, Consultar >> Serviços +- Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Serviços do Equipamento + +4. Expandir a stack do Elastic Search, conforme na imagem abaixo +![Expandindo Elastic Search](../img/expandir_elasticsearch_gtt.png) + +5. Com botão direito sobre o serviço do Tipo: Interno - Elastic Search, Configurar o serviço. Como mostra a imagem abaixo +![Expandindo Elastic Search](../img/expandir_elasticsearch_gtt1.png) + +6. Realizar a inclusão do usuário +- + Incluir >> Por template +![Expandindo Elastic Search](../img/expandir_elasticsearch_gtt2.png) + +7. Selecionar o template de Role, clicando na Lupa e selecionando o template com sequência 1 e confirmar. +![Expandindo Elastic Search](../img/expandir_elasticsearch_gtt3.png) + +- Após isso, será realizado a criação de um usuário chamado `zbx_monitor` com a senha aberta e criptografada +--- +--- + +### **4. Configurar variáveis do ambiente** + +Acesse as variáveis do ambiente **"Elastic - Create user Zabbix"** e ajuste os valores conforme o tipo de acesso ao Elasticsearch (ambiente global ou cliente). + +- **URL_ELASTIC:** + `https://INT_RT:9201` para ambientes de cliente + `https://:9200` para ambientes globais + +- **SENHA_MONITORAMENTO:** + Senha definida para o usuário `zbx_monitor` +- A senha do procedimento que foi realizado acima, na inclusão de usuário no GTT. + +Após configurar, clique em **Save** e depois em **Run**, conforme imagens abaixo: + +![Configuração das variáveis](../img/create-user-zabbix-elastic2.png) +![Executando a Collection](../img/create-user-zabbix-elastic3.png) + +--- + +### **5. Resultado esperado** + +A execução correta da Collection deve retornar uma resposta semelhante à imagem abaixo: + +![Resultado esperado](../img/create-user-zabbix-elastic4.png) + +--- + +--- +### Realizar cadastro de Macro e Vincular Template no Zabbix + +1. Acessar o Zabbix para realizar os procedimentos +- PR: https://pr01-datacenter.ipm.com.br:8085/ +- SP: https://sp01-datacenter.ipm.com.br:8085/ + +2. Acessar Configuration >> Hosts e buscar pelo cliente, conforme mostra imagem abaixo +![Remover VM do Zabbix](../img/remover_vm_zabbix.png) + +3. Clicar sobre o equipamento `cluster` e ir na guia `macros`, conforme mostra a imagem abaixo +![Adicionar VM do Zabbix](../img/adicionar_vm_zabbix.png) + +4. Adicionar os macros abaixo: + +- __Macro:__ {$ELASTICSEARCH.HOST} +- __Value:__ 08573-des-atendenet-0870-01.atende.net +- __Description:__ The connection of the Elasticsearch Hostname. + +- __Macro:__ {$ELASTICSEARCH.PASSWORD} +- __Value:__ alterar o tipo para "Secret text" e colar a senha que foi gerada no GTT +- __Description:__ The password of the Elasticsearch. + +4. Adicionar o template `Elasticsearch Cluster by HTTP` no equipamento cluster + +![Adicionar VM do Zabbix](../img/adicionar_vm_zabbix1.png) \ No newline at end of file diff --git a/docs/dominios_fiscalnovo.md b/docs/dominios_fiscalnovo.md new file mode 100644 index 0000000..aa72bdf --- /dev/null +++ b/docs/dominios_fiscalnovo.md @@ -0,0 +1,432 @@ +# Configuração: Domínios Sistemas Fiscal S-2 + +## Cadastro no DNS + +Realizar o cadastro dos domínios nos servidores de DNS, conforme abaixo: +```console +ws-cliente IN A 177.11.20.19 +nfse-cliente IN A 177.11.20.19 +www.nfse-cliente IN A 177.11.20.19 +``` + +## Configuração Firewall + +Edite a regra de NAT já existente, alterando para o IP do respectivo cliente: +![NATWEBSERVICE](../img/natwebservice.png) + +Lembrar de cadastrar os dominios origens, nfse e ws no DNS Forwarder, direcionando para o IP do Apache. Conforme passos abaixo: +Vá em: Services > DNS Forwarder > Host Overrides - Add: +![HOSTOVERRIDES](../img/host_overrides.png) + +Informe o endereço, dominio e ip do apache e clique em "save" conforme exemplo abaixo: +![DOMINIOS](../img/dominio_fiscal.png) + +**Observação: repita esse passo para os seguintes endereços: ws-cliente, nfse-cliente e origens-cliente** + +## Cadastro no Recaptcha + +Cadastrar os domínios no Recaptcha Cliente V2 e V3: ws-cliente.atende.net, origens-cliente.atende.net e nfse-cliente.atende.net. +![RECAPTCHA](../img/recaptcha.png) + +## Configuração Apache + +Insira os novos domínios no host do cliente, conforme abaixo: + +```console +# vim /etc/hosts +192.168.21.20 ws-cliente.atende.net +192.168.21.20 origens-cliente.atende.net +192.168.21.20 nfse-cliente.atende.net +192.168.21.20 www.nfse-cliente.atende.net +Obs: Altere o IP e endereço +Ex: :% s/21.20/XX.XX + :% s/cliente/demonstracao +``` + +Alterar as configurações do arquivo php.ini para permitir uploads de arquivos com até 128MB +```console +#vim /etc/php.ini +post_max_size = 128M +upload_max_filesize = 128M +``` + +Deve-se verificar se é necessário aumentar o recurso do cliente, por conta da implantação do sistema Fiscal S-2. +Se for necessário ampliar recursos, altere os arquivos abaixo conforme planilha de manutenção: +```console +# vim /etc/httpd/conf.d/performance.conf +# vim /etc/httpd/conf.d/qos.conf +``` + +Após, devem ser adicionados os Virtuais Hosts. +Siga os passos abaixo: +```console +# vim /etc/httpd/conf.d/ssl.conf +-------------------------------------------------------------- + + +# General setup for the virtual host, inherited from global configuration +DocumentRoot "/var/www/html/cliente.atende.net" +ServerName ws-cliente.atende.net +ServerAlias ws-cliente.atende.net + +# Use separate log files for the SSL virtual host; note that LogLevel +ErrorLog logs/ssl_ws-cliente.atende.net_error.log +TransferLog logs/ssl_ws-cliente.atende.net_access.log +LogLevel warn + +# SSL Engine Switch: +SSLEngine on + +# SSL Protocol support: +SSLProtocol all -SSLv2 -SSLv3 + +# SSL Cipher Suite: +SSLCipherSuite "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4" +SSLHonorCipherOrder on +SSLCompression off + +# Server Certificate: +SSLCertificateFile /usr/certificado/star_atende_net/STAR_atende_net.crt +SSLCertificateKeyFile /usr/certificado/star_atende_net/chaveprivadanova.key +SSLCACertificateFile /usr/certificado/star_atende_net/STAR_atende_net.ca-bundle + + SSLOptions +StdEnvVars + +BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +CustomLog logs/ssl_ws-cliente.atende.net_request.log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + + + + +# General setup for the virtual host, inherited from global configuration +DocumentRoot "/var/www/html/cliente.atende.net" +ServerName origens-cliente.atende.net +ServerAlias origens-cliente.atende.net + +# Use separate log files for the SSL virtual host; note that LogLevel +ErrorLog logs/ssl_origens-cliente.atende.net_error.log +TransferLog logs/ssl_origens-cliente.atende.net_access.log +LogLevel warn + +# SSL Engine Switch: +SSLEngine on + +# SSL Protocol support: +SSLProtocol all -SSLv2 -SSLv3 + +# SSL Cipher Suite: +SSLCipherSuite "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4" +SSLHonorCipherOrder on +SSLCompression off + +# Server Certificate: +SSLCertificateFile /usr/certificado/star_atende_net/STAR_atende_net.crt +SSLCertificateKeyFile /usr/certificado/star_atende_net/chaveprivadanova.key +SSLCACertificateFile /usr/certificado/star_atende_net/STAR_atende_net.ca-bundle + + SSLOptions +StdEnvVars + +BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +CustomLog logs/ssl_origens-cliente.atende.net_request.log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + + + + +# General setup for the virtual host, inherited from global configuration +DocumentRoot "/var/www/html/cliente.atende.net" +ServerName nfse-cliente.atende.net +ServerAlias nfse-cliente.atende.net + +# Use separate log files for the SSL virtual host; note that LogLevel +ErrorLog logs/ssl_nfse-cliente.atende.net_error.log +TransferLog logs/ssl_nfse-cliente.atende.net_access.log +LogLevel warn + +# SSL Engine Switch: +SSLEngine on + +# SSL Protocol support: +SSLProtocol all -SSLv2 -SSLv3 + +# SSL Cipher Suite: +SSLCipherSuite "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4" +SSLHonorCipherOrder on +SSLCompression off + +# Server Certificate: +SSLCertificateFile /usr/certificado/star_atende_net/STAR_atende_net.crt +SSLCertificateKeyFile /usr/certificado/star_atende_net/chaveprivadanova.key +SSLCACertificateFile /usr/certificado/star_atende_net/STAR_atende_net.ca-bundle + + SSLOptions +StdEnvVars + +BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +CustomLog logs/ssl_nfse-cliente.atende.net_request.log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + +-------------------------------------------------------------- +Obs: Lembrar de substituir o cliente. Ex: :% s/cliente/demonstracao +``` + + +```console +# vim /etc/httpd/conf/httpd.conf +-------------------------------------------------------------- + + ServerAdmin webmaster@nfse-cliente.atende.net + DocumentRoot /var/www/html/cliente.atende.net + ServerName nfse-cliente.atende.net + ErrorLog logs/nfse-cliente.atende.net_error.log + CustomLog logs/nfse-cliente.atende.net_access.log common + + Options FollowSymLinks + AllowOverride None + SSLRequireSSL + + + Options FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + Redirect 301 / https://nfse-cliente.atende.net/ + + + + ServerName www.nfse-cliente.atende.net + Redirect 301 / https://nfse-cliente.atende.net/ + + + + ServerAdmin webmaster@origens-cliente.atende.net + DocumentRoot /var/www/html/cliente.atende.net + ServerName origens-cliente.atende.net + ErrorLog logs/origens-cliente.atende.net_error.log + CustomLog logs/origens-cliente.atende.net_access.log common + + Options FollowSymLinks + AllowOverride None + SSLRequireSSL + + + Options FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + Redirect 301 / https://origens-cliente.atende.net/ + + + + ServerAdmin webmaster@ws-cliente.atende.net + DocumentRoot /var/www/html/cliente.atende.net + ServerName ws-cliente.atende.net + ErrorLog logs/ws-cliente.atende.net_error.log + CustomLog logs/ws-cliente.atende.net_access.log common + + Options FollowSymLinks + AllowOverride None + SSLRequireSSL + + + Options FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + Redirect 301 / https://ws-cliente.atende.net/ + +-------------------------------------------------------------- +Obs: Lembrar de substituir o cliente. Ex: :% s/cliente/demonstracao +``` + +Ajuste os arquivos awstats do cliente: + +```console +# cd /etc/awstats +# cp awstats.cliente.atende.net.conf awstats.ws-cliente.atende.net.conf +# cp awstats.cliente.atende.net.conf awstats.origens-cliente.atende.net.conf +# cp awstats.cliente.atende.net.conf awstats.nfse-cliente.atende.net.conf +Exemplo: cp awstats.demonstracao.atende.net.conf awstats.nfse-demonstracao.atende.net.conf +``` + +Em cada arquivo criado, altere o endereço: +```console +# vim awstats.ws-cliente.atende.net.conf +:% s/cliente/ws-cliente + +# vim awstats.origens-cliente.atende.net.conf +:% s/cliente/origens-cliente + +# vim awstats.nfse-cliente.atende.net.conf +:% s/cliente/nfse-cliente +``` +Confira a sintaxe do Apache: + +```console +# apachectl -t +``` + +Realizar a conferência das configurações abaixo: + +```console +# vim /etc/php.d/opcache.ini +opcache.memory_consumption=2048 +opcache.interned_strings_buffer=128 +opcache.max_accelerated_files=32531 +opcache.consistency_checks=0 +opcache.force_restart_timeout=10 +``` + +```console +# rpm -qa | grep php56w-imap +** Se estiver instalado , não precisa executar o procedimento abaixo +# cd /root/download/php56 +# wget https://datacenter.atende.net/updates/libc-client-2007e-11.3.x86_64.rpm +# wget https://datacenter.atende.net/updates/php56w-imap-5.6.18-1.w7.x86_64.rpm +# rpm -Uvh libc-client-2007e-11.3.x86_64.rpm php56w-imap-5.6.18-1.w7.x86_64.rpm +``` + +```console +# vim /etc/httpd/conf.d/deflate.conf +AddOutputFilterByType DEFLATE application/wasm +``` + +De um Graceful para que as configurações sejam aplicadas: + +```console +# apachectl -k graceful +``` + +Insira a flag abaixo no config padrão: + +```console +# vim /var/www/html/cliente.atende.net/_config.padrao.inc +$_CONFIG['versao_fiscal'] = 'S2'; +``` + +## Banco de Dados Atende.net + +ATENÇÃO: Apenas executar o procedimento abaixo se for necessário ampliar recurso! + +Altere os arquivos de configuração conforme planilha de manutenção: + +```console +# cd /etc/postgresql/16/main +# vim postgresql.prod +# vim postgresql.mig +--- +max connections +shared buffers +work mem +maintenance_work_mem - Alterar conforme arquivo que estiver editando (prod ou mig) +min_dynamic_shared_memory (MB) +max_locks_per_transaction - Alterar conforme arquivo que estiver editando (prod ou mig) +max worker processes +max parallel workers per gather +max parallel workers +effective cache_size +--- +``` + +Substitua pelo novo arquivo: + +```console +# cp postgresql.prod postgresql.conf +y +``` + +Altere o parâmetro huge_pages: + +```console +# vim postgresql.conf +huge_pages -> try +``` + +Reinicie a máquina apenas após o horário de expediente: + +```console +# reboot +``` + +Após o servidor reiniciar, deve-se ajustar as configurações do kernel, para isso execute o script: + +```console +# ./kernelsetup.sh +``` + +Edite o arquivo /etc/sysctl.conf e substitua as informações apresentadas pelas existentes: + +```console +# vim /etc/sysctl.conf +Ajustar conforme Retorno do script +``` + +Aplique as configurações: + +```console +# sysctl -p +``` + +Altere o parâmetro huge_pages: + +```console +# vim postgresql.conf +huge_pages -> on +``` + +Reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: + +```console +# systemctl restart postgresql +``` + +## Configuração Stack + +Acesse o Portainer do cliente e vá em Stacks. Altere o enderecoWeb de cliente.atende.net para origens-cliente.atende.net +Lembre de verificar se é necessário aumentar o recurso, conforme planilha de manutenção. + +## Cadastro no Atende.net + +Faça login no sistema do cliente, por exempo demonstracao.atende.net e após vá em: +IPM > Gerenciamento do Sitema > Sistema > Domínios + +**OBS: Se for realizar o cadastro durante o dia, deixar o dominio DESATIVADO** +**Se for realizar o cadastro após reiniciar os serviços e fora do horário, já pode vir como ativo!** + +Realize o cadastro dos domínios conforme abaixo: + +- Endereço origens + +Trocar o tipo para "Origens/Java Services". + +![ORIGENS](../img/_domonios_fiscalnovo-dominio_origens.png) + +- Endereço ws + +![WS](../img/_domonios_fiscalnovo-dominio_ws.png) + +- Endereço nfse + +Selecionar o sistema "Nota Fiscal Eletrônica" (66) e definir o redirecionamento para o endereço abaixo, trocando apenas o nome do cliente. + +`https://nfse-cliente.atende.net/autoatendimento/servicos/nfse` + +![NFSE](../img/_domonios_fiscalnovo-dominio_nfse.png) + + +- [`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/expansao_disco_app_0820.md b/docs/expansao_disco_app_0820.md new file mode 100644 index 0000000..f091f89 --- /dev/null +++ b/docs/expansao_disco_app_0820.md @@ -0,0 +1,118 @@ +# Expansão de disco no servidor APP-01-0820 + +Caso o cliente possua o sistema IPMSaude S1 deve-se expandir o disco relacionado ao armazenamento de arquivos __SDB__. + +## Expandindo o disco no VmWare. + +__1) Acesse o servidor app-01-0820 através do vmware e edite as suas configurações.__ +>__Obs:__ A ampliação do disco deve ser realizada __somente__ no servidor __app-01__, demais vm´s __(app-02, app-03, ...)__ não devem ser ampliadas! +Essa ampliação pode ser feita com a VM ligada, sem causar nenhum impacto ao ambiente. + +![VmWare_Settings](../img/app_0820_edit_settings.png) + +__2) No campo "Hard Disk 2" informe o novo tamanho do disco__ +>__Obs:__ Geralmente se amplia esse disco para 200GB, a não ser que o cliente possua um volume de arquivos superior a este valor! + +![VmWare_Hard_Disk](../img/app_0820_hard_disk_2.png) + +## Expandindo o disco no Linux. + +__3) Acesse o servidor APP-01-0820 via SSH e obtenha privilégios administrativos__ +```console +$ su - root +Password: +``` + +__4) Confira o tamanho do disco SDB__ +```console +# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +sda 8:0 0 100G 0 disk +├─sda1 8:1 0 1M 0 part +├─sda2 8:2 0 2G 0 part /boot +└─sda3 8:3 0 98G 0 part + ├─ubuntu--vg-ubuntu--root 253:1 0 68G 0 lvm / + ├─ubuntu--vg-lv--var--log 253:2 0 20G 0 lvm /var/log + └─ubuntu--vg-lv--home 253:3 0 10G 0 lvm /home +sdb 8:16 0 100G 0 disk +└─apache--vg-lv--html 253:0 0 100G 0 lvm /var/www +sr0 11:0 1 1024M 0 rom +``` + +__4) Caso o disco não apresente o valor informado no vmware, realize o rescan e confira o tamanho do disco SDB__ +```console +# echo 1 > /sys/class/block/sdb/device/rescan +# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +sda 8:0 0 100G 0 disk +├─sda1 8:1 0 1M 0 part +├─sda2 8:2 0 2G 0 part /boot +└─sda3 8:3 0 98G 0 part + ├─ubuntu--vg-ubuntu--root 253:1 0 68G 0 lvm / + ├─ubuntu--vg-lv--var--log 253:2 0 20G 0 lvm /var/log + └─ubuntu--vg-lv--home 253:3 0 10G 0 lvm /home +sdb 8:16 0 200G 0 disk +└─apache--vg-lv--html 253:0 0 100G 0 lvm /var/www +sr0 11:0 1 1024M 0 rom +``` + +__5) Amplie o disco no linux__ +```console +# pvresize /dev/sdb + Physical volume "/dev/sdb" changed + 1 physical volume(s) resized or updated / 0 physical volume(s) not resized +``` + +__6) Expanda o volume LVM__ +```console +# lvextend -l +100%FREE /dev/apache-vg/lv-html + Size of logical volume apache-vg/lv-html changed from <100.00 GiB (25599 extents) to <200.00 GiB (51199 extents). + Logical volume apache-vg/lv-html successfully resized. + +``` + +__7) Expanda o sistema de arquivos XFS__ +```console +# xfs_growfs /var/www +meta-data=/dev/mapper/apache--vg-lv--html isize=512 agcount=4, agsize=6488064 blks + = sectsz=512 attr=2, projid32bit=1 + = crc=1 finobt=1, sparse=1, rmapbt=0 + = reflink=1 bigtime=0 inobtcount=0 +data = bsize=4096 blocks=25952256, imaxpct=25 + = sunit=0 swidth=0 blks +naming =version 2 bsize=4096 ascii-ci=0, ftype=1 +log =internal log bsize=4096 blocks=12672, version=2 + = sectsz=512 sunit=0 blks, lazy-count=1 +realtime =none extsz=4096 blocks=0, rtextents=0 +data blocks changed from 25952256 to 52427776 +``` + +__8) Confira se o volume e o ponto de montagem foram ampliados corretamente__ +```console +# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +sda 8:0 0 100G 0 disk +├─sda1 8:1 0 1M 0 part +├─sda2 8:2 0 2G 0 part /boot +└─sda3 8:3 0 98G 0 part + ├─ubuntu--vg-ubuntu--root 253:1 0 68G 0 lvm / + ├─ubuntu--vg-lv--var--log 253:2 0 20G 0 lvm /var/log + └─ubuntu--vg-lv--home 253:3 0 10G 0 lvm /home +sdb 8:16 0 200G 0 disk +└─apache--vg-lv--html 253:0 0 200G 0 lvm /var/www +sr0 11:0 1 1024M 0 rom + +# df -h +Filesystem Size Used Avail Use% Mounted on +tmpfs 1.6G 1.9M 1.6G 1% /run +/dev/mapper/ubuntu--vg-ubuntu--root 68G 12G 57G 17% / +tmpfs 7.9G 0 7.9G 0% /dev/shm +tmpfs 5.0M 0 5.0M 0% /run/lock +/dev/sda2 2.0G 375M 1.5G 21% /boot +/dev/mapper/ubuntu--vg-lv--var--log 20G 2.2G 18G 11% /var/log +/dev/mapper/ubuntu--vg-lv--home 10G 105M 9.9G 2% /home +/dev/mapper/apache--vg-lv--html 200G 43G 158G 22% /var/www +tmpfs 1.6G 0 1.6G 0% /run/user/1000 +``` + +- [`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/expansao_disco_postgres_16.md b/docs/expansao_disco_postgres_16.md new file mode 100644 index 0000000..e15ccf8 --- /dev/null +++ b/docs/expansao_disco_postgres_16.md @@ -0,0 +1,143 @@ +## Manual Expansão de Disco Postgres 16 + +> +> Neste processo, iremos expandir o disco do banco de dados PostgreSQL 16 sem necessidade de adicionar um novo disco no VMWARE e também sem a necessidade de reiniciar o servidor. +> + +### Expansão do disco no VMWARE + +Primeiramente será necessário realizar a expansão do disco no VMWARE. Basta selecionar a VM desejada e informar o novo valor para os discos: + +Neste exemplo, iremos ampliar o Hard disk 1 e 2 referentes ao Indice e Dados do PostgreSQL 16 + +![Configuracao_Padrao](../img/disco_vmware.png) + +IMPORTANTE: + +Abaixo a descrição sobre cada disco e sua função dentro da estrutura do banco de dados: + +Hard disk 1 - Sempre será relacionado ao sistema operacional +Hard disk 2 - Sempre será relacionado a partição Indice do Postgres +Hard disk 3 - Sempre será relacionado a partição Dados do Postgres +Hard disk 4 - Sempre será relacionado a partição Archived (Onde é armazenado dos arquivos/anexos no banco de dados) + +Para expandir o disco, deve-se seguir o padrão de partições do PostgreSQL 16 conforme documentado: + +* [Partições - PostgreSQL 16.3](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/partition-bdp-1600.md) + +Após expandido o disco no VMWARE, iremos realizar a expansão diretamente no Linux + +### Expansão do disco no Linux + +Execute o comando para verificar os discos no Linux + + lsblk + + Retorno: + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS + sda 8:0 0 100G 0 disk + ├─sda1 8:1 0 1G 0 part /boot/efi + ├─sda2 8:2 0 2G 0 part /boot + └─sda3 8:3 0 96,9G 0 part + ├─ubuntu--vg-ubuntu--lv 253:3 0 40G 0 lvm / + ├─ubuntu--vg-lv--var--log 253:4 0 40G 0 lvm /var/log + ├─ubuntu--vg-lv--swap 253:5 0 6G 0 lvm [SWAP] + └─ubuntu--vg-lv--home 253:6 0 10G 0 lvm /home + sdb 8:16 0 120G 0 disk + └─postgresql--vg01-lv--indice 253:2 0 120G 0 lvm /var/lib/postgresql/16/tablespaces/indice + sdc 8:32 0 180G 0 disk + └─postgresql--vg02-lv--dados 253:1 0 180G 0 lvm /var/lib/postgresql + sdd 8:48 0 300G 0 disk + └─postgresql--vg03-lv--archived 253:0 0 300G 0 lvm /var/lib/postgresql/16/tablespaces/archived + sr0 11:0 1 1024M 0 rom + +Verifique o disco que você ampliou no VMWARE para realizar o rescan no Linux: + + Esse comando irá rescanear os disco sdb e sdc referente ao indice e dados do SGDB sem a necessidade de reiniciar o sistema operacional + + echo 1 > /sys/class/block/sdb/device/rescan + echo 1 > /sys/class/block/sdc/device/rescan + echo 1 > /sys/class/block/sdd/device/rescan + +Após a execução do rescan, já podemos verificar que os discos tiveram alterações de tamanho: + + lsblk + + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS + sda 8:0 0 100G 0 disk + ├─sda1 8:1 0 1G 0 part /boot/efi + ├─sda2 8:2 0 2G 0 part /boot + └─sda3 8:3 0 96,9G 0 part + ├─ubuntu--vg-ubuntu--lv 253:3 0 40G 0 lvm / + ├─ubuntu--vg-lv--var--log 253:4 0 40G 0 lvm /var/log + ├─ubuntu--vg-lv--swap 253:5 0 6G 0 lvm [SWAP] + └─ubuntu--vg-lv--home 253:6 0 10G 0 lvm /home + sdb 8:16 0 160G 0 disk + └─postgresql--vg01-lv--indice 253:2 0 120G 0 lvm /var/lib/postgresql/16/tablespaces/indice + sdc 8:32 0 240G 0 disk + └─postgresql--vg02-lv--dados 253:1 0 180G 0 lvm /var/lib/postgresql + sdd 8:48 0 300G 0 disk + └─postgresql--vg03-lv--archived 253:0 0 300G 0 lvm /var/lib/postgresql/16/tablespaces/archived + sr0 11:0 1 1024M 0 rom + +Após isso, basta realizarmos o resize dos mesmos: + + pvresize /dev/sdb + pvresize /dev/sdc + pvresize /dev/sdd + +Depois iremos expandir o volume lógico + + lvextend -l +100%FREE /dev/postgresql-vg01/lv-indice + lvextend -l +100%FREE /dev/postgresql-vg02/lv-dados + lvextend -l +100%FREE /dev/postgresql-vg03/lv-archived + +Em seguida iremos expandir o sistema de arquivos: + + xfs_growfs /var/lib/postgresql + xfs_growfs /var/lib/postgresql/16/tablespaces/indice + xfs_growfs /var/lib/postgresql/16/tablespaces/archived + +Após os procedimento, através do comando lsblk já conseguimos verificar que o lvm já esta com o mesmo tamanho alocado no disco do servidor, ou seja, o disco já esta ampliado e disponível para uso: + + lsblk + NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS + sda 8:0 0 100G 0 disk + ├─sda1 8:1 0 1G 0 part /boot/efi + ├─sda2 8:2 0 2G 0 part /boot + └─sda3 8:3 0 96,9G 0 part + ├─ubuntu--vg-ubuntu--lv 253:3 0 40G 0 lvm / + ├─ubuntu--vg-lv--var--log 253:4 0 40G 0 lvm /var/log + ├─ubuntu--vg-lv--swap 253:5 0 6G 0 lvm [SWAP] + └─ubuntu--vg-lv--home 253:6 0 10G 0 lvm /home + sdb 8:16 0 160G 0 disk + └─postgresql--vg01-lv--indice 253:2 0 160G 0 lvm /var/lib/postgresql/16/tablespaces/indice + sdc 8:32 0 240G 0 disk + └─postgresql--vg02-lv--dados 253:1 0 240G 0 lvm /var/lib/postgresql + sdd 8:48 0 300G 0 disk + └─postgresql--vg03-lv--archived 253:0 0 300G 0 lvm /var/lib/postgresql/16/tablespaces/archived + sr0 11:0 1 1024M 0 rom + +Executando o df -h podemos verificar os pontos de montagem no sistema operacional já com o novo tamanho: + + df -h + Filesystem Size Used Avail Use% Mounted on + tmpfs 589M 2,5M 587M 1% /run + /dev/mapper/ubuntu--vg-ubuntu--lv 40G 6,2G 34G 16% / + tmpfs 2,9G 14M 2,9G 1% /dev/shm + tmpfs 5,0M 0 5,0M 0% /run/lock + /dev/sda2 2,0G 300M 1,7G 15% /boot + /dev/sda1 1,1G 6,1M 1,1G 1% /boot/efi + /dev/mapper/ubuntu--vg-lv--var--log 40G 4,4G 36G 11% /var/log + /dev/mapper/postgresql--vg02-lv--dados 240G 153G 88G 64% /var/lib/postgresql + /dev/mapper/ubuntu--vg-lv--home 10G 104M 9,9G 2% /home + /dev/mapper/postgresql--vg01-lv--indice 160G 47G 114G 29% /var/lib/postgresql/16/tablespaces/indice + /dev/mapper/postgresql--vg03-lv--archived 300G 2,3G 298G 1% /var/lib/postgresql/16/tablespaces/archived + tmpfs 589M 0 589M 0% /run/user/1000 + + +### Observação + +No manual acima, expandimos as partições sdb e sdc referentes ao disco do Indice e Dados do Postgres. Caso deseja ampliar o disco do Archive o processo é basicamente o mesmo, somente informando o disco referente a função! + +- [`Voltar`](../README.md) diff --git a/docs/gdc_prorrogacoes.md b/docs/gdc_prorrogacoes.md new file mode 100644 index 0000000..b2639b6 --- /dev/null +++ b/docs/gdc_prorrogacoes.md @@ -0,0 +1,45 @@ +

Prorrogações - Boas Práticas

+ + +Para chamados de prorrogação contratual, sempre observar na abertura do chamado o cliente que o chamado esta se referindo, as datas de início e fim da prorrgação e o numero do contrato. + +Além dos dados mencionados a cima, é de suma importância verificar os módulos que estão sendo prorrogados. + +Exemplo (Chamado 618326): + + + +Neste caso do exemplo, esta sendo renovado os seguintes módulos: + + - Data Center - Principal + - Data Center - IPMSaúde / IPMSocial / IPMVigilância + +Note que realizando uma consulta no cadastro do GDC do cliente, o mesmo não possui o IPM Saúde contratado e o módulo (provimento) Ambiente Paralelo esta vinculado no mesmo contrato. + + + +Como proceder em casos como esse: + +1 - Neste caso devemos enviar um Email para o setor de Contratos/Financeiro que esta localizado na sede Administrativa em Florianópolis, questionando o porque esta sendo prorrogado um contrato para um sistema que o Cliente nem possui que é o caso do IPM Saúde. + +2 - Também devemos questionar se o Módulo (provimento) não informado na abertura do chamado Ambiente Paralelo não será prorrogado ou se inteirar como um todo da situação. + +Para outros casos que estão corretamente informado, exemplo (Chamado 617915) + + + +Basta realizar a prorrogação de forma normal ([`Realizar Prorrogação Contratual`](./procedimento_prorrogacao.md)): + + - Sempre informe o numero do Contrato + - Data de Início de Fim do Contrato + - Justificativa seguinte o padrão: Chamado XXXXXX + +; + + + [`VOLTAR`](../README.md) + + + + + diff --git a/docs/gtt_dashboards.md b/docs/gtt_dashboards.md new file mode 100644 index 0000000..f5a2454 --- /dev/null +++ b/docs/gtt_dashboards.md @@ -0,0 +1,42 @@ +# Dashboards + +O recurso de visualizar dahboards em tempo real é disponibilizado aos clientes através da integração com o zabbix. + +Para o correto funcionamento, todos os passos abaixo, devem ser executados: +- [`Liberação de acesso a usuários`](./gtt_usuarios.md); +- [`Cadastro do usuário no Zabbix`](./zbx_dashboard_user.md) +- [`Configuração do serviço Zabbix Agent no GTT`](./gtt_zabbix_agent.md) +- [`Configuração do serviço Zabbix Server no GTT`](./gtt_zabbix_server.md) + +## Visualização + +Para confirmar o funcionamento, deve-se acessar a ferramenta de gestão do data center. + + +__1)__ Vá em __Gerenciamento Data Center__ » __Manutenção__ » __Instância__. + +__2)__ Selecione a instância que deseja visualizar e clique em __Equipamentos__. + +__3)__ Selecione o equipamento que deseja visualizar o dashboard e clique em __Monitoramento__. + +__4)__ Se tudo ocorrer bem, você verá algo como a tela abaixo, repita o passo 3 para visualizar os demais equipamentos. +![gtt_dashboard](../img/gtt_dashboard.png) + +## Solução de problemas + +- Ao clicar em monitoramento, o dashboard não é exibido. + - Verifique se não existe algum bloqueio de proxy para os endereços: + `https://pr01-datacenter.ipm.com.br:8085 | https://sp01-datacenter.ipm.com.br:8085` + - Verifique se não existe algum bloqueio de porta no firewall para os endereços: + `https://pr01-datacenter.ipm.com.br:8085 | https://sp01-datacenter.ipm.com.br:8085` +- Ao clicar em monitoramento são exibidas as mensagens: + - Não foi configurado um Host ID para o serviço de Zabbix Agent deste equipamento. + - Verifique se a configuração do serviço Zabbix Agent está correta. + - Não foi possível encontrar as credenciais de acesso ao Monitoramento Zabbix deste equipamento! + - Verifique se as configurações do serviço Zabbix Server estão corretas. + +# Conclusão + +Executando todos os passos descritos acima, é possível visualizar os dashboards através da integração com o zabbix. + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/gtt_usuarios.md b/docs/gtt_usuarios.md new file mode 100644 index 0000000..9b0c14d --- /dev/null +++ b/docs/gtt_usuarios.md @@ -0,0 +1,61 @@ +# Liberação de acesso a usuários. + +Este documento, descreve os passos para a liberação de acesso a ferramenta de gestão do data center aos clientes. + +## Procedimento + +Para isto, acesse a ferramenta de Gerenciamento do data center com suas credenciais de acesso. +```console +# https://datacenter.ipm.com.br/ +``` + +__1)__ Vá em: __Gerenciamento Data Center__ » __Manutenção__ » __Usuários__. +- Clique em __Incluir__ + - Selecione a instância ao qual o cliente possui a Instalação Padrão - Atende.Net configurada. + - Informe o CPF recebido no ofício. (Ex. 336.489.309-82) + - Observe que no campo Usuário, deve aparecer o nome do referido usuário. (Ex. PESSOA 7757) + - Clique em __Confirmar__. + ![gtt_cadastrar_usuario](../img/gtt_cadastrar_usuario.png) + +__2)__ Selecione o usuário que você acabou de cadastrar em clique em __Liberações__. +- Clique em __Incluir__ + - __Data de Início__: Informe a data de cadastro (Ex. 21/03/2023) + - __Data de Fim__: Informe a data de término do contrato (Ex. 31/12/2030) + >Gerenciamento Data Center » Manutenção » Liberações » Usuários » Consultar Liberações do Usuário GTT » Incluir Liberações do Usuário GTT + - __Ofício__: Preencha com o número do ofício (Ex. 05/2023) + - __Anexo__: Selecione o ofício recebido do setor jurídico. + - Clique em __Próximo__. + ![gtt_usuario_liberacao](../img/gtt_usuario_liberacao.png) + - __Instância__: Selecione a instância do cliente. + - Clique em __Próximo__. + __Obs__: Caso o cliente possua várias instâncias, todas devem ser selecionadas. (Ex. Prefeitura e Câmara separadas) + ![gtt_usuario_instancia](../img/gtt_usuario_instancia.png) + - Confira se todos os equipamentos do cliente estão na lista. + - Clique em __Confirmar__. + __Obs__: Equipamentos do tipo cluster, são apenas para documentação no GTT, estes devem ser removidos da lista. + ![gtt_usuario_equipamentos](../img/gtt_usuario_equipamentos.png) + + + IMPORTANTE + +Sempre que a liberação de um usuário for realizada via GTT, em backend o mesmo vinculará um perfil para o usuário liberado. Para consultar se o perfil foi corretamente relacionado, siga o procedimento: + +```console +Caminho:Gerenciamento do Sistema » Sistema » Gerenciamento de Usuários » Usuário +Busque pelo nome do usuário > Perfis > Consultar +``` +O perfil vinculado deve ser (477 - Gestão de Data Center - Gestor de Recursos) +![perfis_gtt_backup](../img/perfis_usuario_gtt.png) + + +# Conclusão + +Executando estes procedimentos o usuário conseguirá acessar o sistema de __Gestão do Data Center__ através do login com certificado A3. + +Para que o usuário consiga visualizar os dashboards de monitoramento em tempo real, os procedimentos abaixo devem ser realizados: +- [`Cadastro do usuário no Zabbix`](./zbx_dashboard_user.md) +- [`Configuração do serviço Zabbix Agent no GTT`](./gtt_zabbix_agent.md) +- [`Configuração do serviço Zabbix Server no GTT`](./gtt_zabbix_server.md) +- [`Visualizar Dashboards`](./gtt_dashboards.md); + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/gtt_zabbix_agent.md b/docs/gtt_zabbix_agent.md new file mode 100644 index 0000000..07bed00 --- /dev/null +++ b/docs/gtt_zabbix_agent.md @@ -0,0 +1,44 @@ +# Zabbix Agent - GTT + +Este documento descreve a configuração do serviço zabbix agent no módulo de gerenciamento do data center, possibilitando a visualização dos dashboards de monitoramento em tempo real. + +## Procedimento + +Para isto, acesse a ferramenta de Gerenciamento do data center com suas credenciais de acesso. +```console +# https://datacenter.ipm.com.br/ +``` + +__1)__ Vá em: __Gerenciamento Data Center__ » __Manutenção__ » __Instância__ + +__2)__ Localize a instância do cliente e clique em __Equipamentos__. + +__3)__ Selecione o equipamento e clique em __Serviços do Equipamento__. + +__4)__ Localize o serviço __Zabbix Agent__ e clique em __Configurar Serviço__. + +__5)__ Preencha as informações solicitadas: +- __Zabbix Server__: sp01-int-rt-zbx01.atendenet.local_ZBX6 (Servidor zabbix ao qual é realizado o monitoramento). +- __Host ID__: 10782 +- Clique em __Fechar__. + +__Servidores Zabbix:__ +```console +pr01-int-rt-zbx01.atendenet.local_ZBX6 +sp01-int-rt-zbx01.atendenet.local_ZBX6 +``` +![gtt_config_zabbix_agent](../img/gtt_config_zabbix_agent.png) + Para obter o código do usuário, acesse o servidor zabbix e navegue até __Configuration__ > __Hosts__ e clique sobre o equipamento. + Ao clicar na URL você obterá o código na tag __hostid__. + ![zbx_host_hostid](../img/zbx_host_hostid.png) + +__Atenção__: Repita este procedimento para todos os equipamentos da instância, exceto o equipamento do tipo __cluster__. + +# Conclusão + +Neste ponto, finalizamos a configuração do Zabbix Agent, possibilitando a visualização dos dashboars através do módulo de Gestão de Data Center. + +- [`Configuração do serviço Zabbix Server no GTT`](./gtt_zabbix_server.md) +- [`Visualizar Dashboards`](./gtt_dashboards.md); + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/gtt_zabbix_server.md b/docs/gtt_zabbix_server.md new file mode 100644 index 0000000..1c80aaa --- /dev/null +++ b/docs/gtt_zabbix_server.md @@ -0,0 +1,68 @@ +# Zabbix Server - GTT + +Este documento descreve a configuração do serviço zabbix server no Gerenciamento de Data Center (GTT), ao qual possibilitará a integração com o servidor zabbix, disponibilizando o acesso ao monitoramento em tempo real dos equipamentos dos clientes. + +## Procedimento + +__Atenção__: Antes de seguir com os passos abaixo, garanta que o [`procedimento de criação do usuário no zabbix`](./zbx_dashboard_user.md), já foi realizado. + +Para isto, acesse a ferramenta de Gerenciamento do data center com suas credenciais de acesso. +```console +# https://datacenter.ipm.com.br/ +``` + +__1)__ Vá em: __Gerenciamento Data Center__ » __Manutenção__ » __Equipamentos__ » __Equipamento__ + +__2)__ Localize o equipamentos refente ao Zabbix Zerver no qual o cliente possui o monitoramento configurado e selecione-o. +```console +# pr01-int-rt-zbx01.atendenet.local_ZBX6 +# sp01-int-rt-zbx01.atendenet.local_ZBX6 +``` + +__3)__ Clique em __Configurar__ » __Serviços__. + +__4)__ Selecione o serviço __Zabbix Server__. + +__5)__ Clique em __Configurar Serviço__. +- Em __Grupo de Usuários__, clique em __Incluir__ e preencha os campos. + - __Código__: 23 + - __Nome__: Data Center - Cliente - PM Demonstração + - Clique em __Confirmar__ + ![gtt_config_zabbix_server_user_groups](../img/gtt_config_zabbix_server_user_groups.png) + Para obter o código do grupo, acesse o servidor zabbix e navegue até __User Group__, ao clicar na URL você obterá o código na tag __usrgrpid__. + ![zbx_user_group_usrgrpid](../img/zbx_user_group_usrgrpid.png) + + +- Em __Usuários__, iremos clicar em __Incluir__ e informar as configurações realizadas no zabbix. + - __Usuário__: dash.pm.demonstracao + - __Senha__: Hd%gs$32gSu9 + - __Instância__: PM - DEMONSTRACAO + - __ID Usuário no Zabbix__: 19 + - __Regra de Usuário__: Data Center - DashBoards + - __Grupo de Usuário__: Data Center - Cliente - PM Demonstração | Data Center - DashBoards + - Clique em __Confirmar__ + ![gtt_config_zabbix_server_users](../img/gtt_config_zabbix_server_users.png) + Para obter o código do usuário, acesse o servidor zabbix e navegue até __Administration__ > __Users__, clique no usuário de acesso via dashboard. + Ao clicar na URL você obterá o código na tag __userid__. + ![zbx_user_userid](../img/zbx_user_userid.png) + +- Em __Grupo de Máquinas__, iremos clicar em __Incluir__ e informar os dados. + - __ID HostGroup Zabbix__: 51 + - __Nome__: demonstracao.atende.net + ![gtt_config_zabbix_server_host_group](../img/gtt_config_zabbix_server_host_group.png) + Para obter o código do hostgroup, acesse o servidor zabbix e navegue até __Configuration > Host Groups__, busque pelo grupo de maquinas desejado. Clicando no Host Group filtrado, na URL você obterá o código na tag __update&groupid__ e o nome __Group name__. + ![gtt_config_zabbix_server_host_groups](../img/gtt_config_zabbix_server_host_groups.png) + + - __Hosts__: Selecione todos os mesmos equipamentos, conforme os existentes no Zabbix Server para este ambiente + ![gtt_config_zabbix_server_select_hosts](../img/gtt_config_zabbix_server_select_hosts.png) + ![gtt_config_zabbix_server_select_hosts02](../img/gtt_config_zabbix_server_select_hosts02.png) + - __Usuários__: dash.pm.demonstracao + ![gtt_config_zabbix_server_users_hosts](../img/gtt_config_zabbix_server_users_hosts.png) + +# Conclusão + +Com este procedimento, realizamos a configuração do serviço __Zabbix Server__ no Gerenciamento do Data Center (GTT), possibilitando a integração. + +- [`Visualizar Dashboards`](./gtt_dashboards.md); + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/migracao_dir_elastic.md b/docs/migracao_dir_elastic.md new file mode 100644 index 0000000..85e166f --- /dev/null +++ b/docs/migracao_dir_elastic.md @@ -0,0 +1,130 @@ +# Migração de dados do Elasticsearch (para `/var/lib/docker/local`) + +Este guia descreve como migrar os dados da stack do **Elasticsearch** do diretório padrão (`/var/lib/docker/data`) para o diretório **local** (`/var/lib/docker/local`) no host. +O diretório **local** **não participa do compartilhamento do GlusterFS** (não é replicado entre hosts). Utilize apenas quando for aceitável manter os dados em um único host. + +> **ATENÇÃO** +> +> * Haverá **indisponibilidade** do serviço (a stack será parada). +> * Verifique **espaço em disco** no host de destino antes de migrar (`df -h`). +> * Este procedimento deve ser executado por um usuário com privilégios de **admin** no Portainer e **root** no servidor. + +--- + +## Pré-requisitos + +* Acesso ao **Portainer** do cliente. +* Acesso SSH ao host (ex.: `msd-01`) com usuário **root**. +* Nome da stack e variáveis de volume da aplicação. +* Espaço livre suficiente em `/var/lib/docker/local`. + +--- + +## 1) Acessar o Portainer + +Acesse a interface web do Portainer do cliente: + +* **Exemplo**: `https://172.24.1.24:9443` +* **Observação**: utilize a mesma senha do usuário `root` do servidor. + +![Acesso ao Portainer](../img/acesso_portainer.png) + +--- + +## 2) Parar a stack do Elasticsearch + +**Stack:** `08573-des-atendenet-0870-01` + +No Portainer, abra a stack e clique em **Stop this stack**, conforme a imagem: + +![Stop stack Elastic](../img/stop_stack_elasticsearch.png) + +> **Por quê?** +> Parar a stack evita escrita nos volumes durante a cópia, garantindo a integridade dos dados. + +--- + +## 3) Ajustar os diretórios das variáveis de volume + +Atualize as seguintes variáveis **da stack** para apontar para o diretório **local**: + +* `DES_ELASTICSEARCH_DATA_VOLUME_PATH` +* `DES_ELASTICSEARCH_BACKUP_VOLUME_PATH` +* `DES_ELASTICSEARCH_PLUGINS_VOLUME_PATH` + +**Antes:** apontam para `/var/lib/docker/data` + +**Depois:** devem apontar para `/var/lib/docker/local` + +**Exemplo:** + +``` +DES_ELASTICSEARCH_DATA_VOLUME_PATH=/var/lib/docker/local/08573-des-atendenet-0870-01/data +DES_ELASTICSEARCH_BACKUP_VOLUME_PATH=/var/lib/docker/local/08573-des-atendenet-0870-01/data +DES_ELASTICSEARCH_PLUGINS_VOLUME_PATH=/var/lib/docker/local/08573-des-atendenet-0870-01/data +``` + +![Variáveis stack Elastic](../img/variables_stack_elasticsearch.png) + +Clique em **Save settings**. + +**Não** inicie a stack ainda. + +--- + +## 4) Limpar volumes **não utilizados** no Portainer + +No menu lateral, acesse **Volumes**. + +![Volumes Docker Portainer](../img/volumes_docker_portainer.png) + +Filtre por **Unused** para listar apenas volumes não utilizados por nenhum container: + +![Volumes Docker Portainer](../img/volumes_docker_unused_portainer.png) + +Selecione todos os volumes listados e **remova-os**: + +![Clean Volumes Docker Portainer](../img/clean_volumes_docker_unused_portainer.png) + +> **Nota:** A remoção de volumes marcados como *Unused* **não** apaga os dados salvos diretamente no host (como em `/var/lib/docker/local/...`). É apenas uma limpeza de volumes órfãos do Docker. + +--- + +## 5) Copiar os dados no host (via SSH) + +Acesse via SSH o host do cliente `msd-01` com usuário `root` e execute: + +Atenção para substituir o código do cliente nos comandos executados abaixo + +```bash +mkdir -p /var/lib/docker/local +cd /var/lib/docker/data +cp -ar 08573-des-atendenet-0870-01 /var/lib/docker/local +ls -la /var/lib/docker/local/08573-des-atendenet-0870-01/ +``` + +O procedimento acima pode demorar mais, dependendo o tamanho do cliente e uso do Elastic Search. +--- + +## 6) Iniciar novamente a stack e validar + +Volte ao **Portainer** do cliente e **inicie** a stack. + +* Verifique os **logs** dos serviços e confirme que o status está **running**. +* Valide o Elasticsearch (ex.: health `green`/`yellow` nos logs, operações básicas de leitura/escrita da aplicação). + +--- + +## 07) Necessário realizar atualização também no cadastro do GTT + +Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Serviços do Equipamento » Configuração de Serviço + +## Pós-migração (boas práticas) + +* Monitore espaço em disco de `/var/lib/docker/local`. +* Estratégia de **rollback** simples (basta reverter as variáveis para `/var/lib/docker/data`, parar a stack, e iniciar novamente). + +--- + +**Observação final:** +Como `/var/lib/docker/local` **não** é compartilhado pelo GlusterFS, os dados permanecerão **somente no host atual**. Certifique-se de que isso atende aos requisitos do ambiente e às políticas de continuidade/recuperação. diff --git a/docs/modulos_opcionais_atendenet.md b/docs/modulos_opcionais_atendenet.md new file mode 100644 index 0000000..de4592f --- /dev/null +++ b/docs/modulos_opcionais_atendenet.md @@ -0,0 +1,24 @@ + +# Atende.Net + +> +> Documentação direcionada para procedimentos de Ativação/Desativação de Módulos opcionais do sistema Atende.Net. +> + +## Ativação Módulos: + +- [`Ativação Módulo JITSI`](../docs/ativacao_jitsi.md); +- [`Ativação Módulo PowerBI`](../docs/ativacao_powerbi.md); +- [`Ativação Módulo GED`](../docs/ativacao_ged.md); +- [`Ativação Módulo Educação`](../docs/ativacao_educação.md); +- [`Ativação Módulo Assistente Virtual DARA`](../docs/ativacao_assistente_dara.md); +- [`Ativação Módulo Fiscal S-2`](../docs/dominios_fiscalnovo.md); +- [`Ativação Módulo Fiscal S-2 no PHP 8.2`](../docs/ativacao_fiscal_s2.md); +- [`Ativação Módulo Praça de Atendimento`](../docs/ativacao_pracadeatendimento.md); +- [`Ativação Módulo IA na Saúde`](../docs/ativacao_ia-saude.md); +- [`Ativação Módulo IA Scraper`](../docs/ativacao_ia-scraper.md); +- [`Portal da Transparência`](../docs/portaltransp.md); + +## Desativação Módulos: + +- [`Remoção Módulo GED`](../docs/remocao_ged.md); \ No newline at end of file diff --git a/docs/mon_troubleshooting.md b/docs/mon_troubleshooting.md new file mode 100644 index 0000000..2b2d282 --- /dev/null +++ b/docs/mon_troubleshooting.md @@ -0,0 +1,355 @@ +# Monitoramento e Troubleshooting - Comandos Úteis e Cenários + +> +> Essa documentação tem o intuito de listar comandos úteis para determinadas situações e também exemplo de cenários e ações que podem ser tomadas para identificação e resolução de um problema em questão! +> + +[`1 - Servidores de Firewall`](#1-servidores-de-firewall) +[`2 - Servidores Apache PHP`](#2-servidores-apache-php) +[`3 - Servidores Banco de Dados`](#3-servidores-banco-de-dados) +[`4 - Servidores MSD`](#4-servidores-msd) +[`5 - Comandos Gerais - Linux`](#5-comandos-gerais-linux) + + +## 1 - Sevidores de Firewall + +## 2 - Servidores Apache PHP + +#### ⚙️ Status Serviços +Comandos para verificar status/reiniciar/parar/iniciar Serviço do Apache e PHP + +``` +systemctl stop apache2.service +systemctl start apache2.service +systemctl restart apache2.service +systemctl status apache2.service +apache2ctl -k graceful + +systemctl stop php8.2-fpm.service +systemctl start php8.2-fpm.service +systemctl restart php8.2-fpm.service +systemctl status php8.2-fpm.service +``` + +#### ⚙️ Endereços Úteis - Monitoramento sem necessidade de acesso ao servidor + +Endereços para monitoramento sem necessidade de conexão ao Linux no ambiente Apache e PHP: + +``` +https://cliente.atende.net/server-status +https://cliente.atende.net/qos +https://cliente.atende.net/fpm-status +https://cliente.atende.net/server-info +https://cliente.atende.net/realtime-status +``` + +#### ⚙️ Diretórios e Logs + +Diretórios e Arquivos de Logs: + +Logs do Apache: /var/log/apache2/ + +``` +error.log +modsec_audit.log +cliente.atende.net-ssl-access.log +cliente.atende.net-access.log +cliente.atende.net-ssl-request.log +cliente.atende.net-request.log +ws-cliente.atende.net-ssl-access.log +ws-cliente.atende.net-access.log +ws-cliente.atende.net-ssl-request.log +ws-cliente.atende.net-request.log +origens-cliente.atende.net-ssl-access.log +origens-cliente.atende.net-access.log +origens-cliente.atende.net-ssl-request.log +origens-cliente.atende.net-request.log +nfse-cliente.atende.net-ssl-access.log +nfse-cliente.atende.net-access.log +nfse-cliente.atende.net-ssl-request.log +nfse-cliente.atende.net-request.log +``` + +Logs PHP: /var/log/ + +``` +php8.2-fpm.log +php8.2-fpm-www-slow.log +``` + +#### ⚙️ Log de Segurança modsec_audit.log + +Neste log em questão, teremos a requisição completa (incluindo cabeçalho, corpo e retorno da requisição) que foi efetuada e que só esta listada nesse arquivo pois teve um retorno de erro ou advertencia. Hoje este log esta formatando essas requisições em JSON. + + +Diretório: vim /var/log/apache2/modsec_audit.log + +No exemplo abaixo, a requisição foi listado no log do modsec_audit pois retornou um HTTP 500 no servidor. + +``` +{"transaction":{"time":"20/Aug/2025:16:17:00.578210 --0300","transaction_id":"aKYfLG2RfxYn3hOC3rZ8sgAAARE","remote_address":"192.168.22.73","remote_port":58180,"local_address":"192.168.22.68","local_port":443},"request":{"request_line":"POST /atende.php?cidade=padrao&pg=rest&service=GLWRestAsyncTask&proc=run HTTP/1.1","headers":{"Accept":"application/json","Referer":"www.ipm.com.br","Authorization":"Basic b3RHa3VPTXBDL0VBcVRYaXcwNEk3T2FacFpaN1JLTm46aHF3OWVsUDlXdVpXVHBzZ094cnhSSkk4d3pqTUUxZGUweUFmcnJnSUdNdz0=","Content-Length":"192","Content-Type":"application/x-www-form-urlencoded","Host":"riodosul.atende.net","Connection":"Keep-Alive","User-Agent":"Apache-HttpClient/4.5.2 (Java/1.8.0_352)","Accept-Encoding":"gzip,deflate"},"body":["pathEstrutura=%2Fatende.php&cidade=padrao&ipInterno=177.54.11.78&enderecoHost=https%3A%2F%2Friodosul.atende.net&prioridadeExecucao=3&codigoTarefaAssincrona=5137901&action=asyncRun&rotina=20069"]},"response":{"protocol":"HTTP/1.1","status":500,"headers":{"Pragma":"no-cache","Cache-Control":"no-cache, must-revalidate","Expires":"Mon, 26 Jul 1997 05:00:00 GMT","Data-Servidor":"1755717420000","Exception-Info":"%7B%22Exception%22%3A%22%3Cdiv+class%3D%5C%22mensagem_sistema%5C%22%3EA+tarefa+ass%5Cu00edncrona+foi+cancelada%5C%2Fexpirada+ou+j%5Cu00e1+foi+executada+anteriormente.%3C%5C%2Fdiv%3E%22%2C%22Exception-Sistema%22%3A%22EST%22%2C%22Exception-Params%22%3A%5B%5D%2C%22Exception-Tipo%22%3A%223%22%2C%22Exception-Code%22%3A555%2C%22Exception-Log%22%3Anull%7D","Set-Cookie":"cidade=padrao; path=/; SameSite=lax","Set-Cookie":"PHPSESSID=aekff37apcqiqovl44o5isaovl; path=/; secure; HttpOnly","X-Frame-Options":"sameorigin","Upgrade":"h2,h2c","Connection":"Upgrade, close","X-XSS-Protection":"1; mode=block","Content-Security-Policy":"object-src 'self' data: blob: https://*.atende.net https://*.ipm.com.br https://*.nfs-e.net https://seal.digicert.com; block-all-mixed-content; form-action 'self' *.nfs-e.net https://*.ipm.com.br https://*.atende.net https://*.acesso.gov.br https://*.jucesc.sc.gov.br; frame-ancestors 'self' https://*.nfs-e.net https://*.ipm.com.br https://*.atende.net https://portalservicos.jucisrs.rs.gov.br;","Strict-Transport-Security":"max-age=31586000; includeSubDomains; preload","Transfer-Encoding":"chunked","Content-Type":"application/json","Content-Language":"pt-BR"}},"audit_data":{"handler":"proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost","stopwatch":{"p1":242,"p2":466,"p3":15,"p4":0,"p5":2,"sr":65,"sw":1,"l":0,"gc":0},"producer":["ModSecurity for Apache/2.9.5 (http://www.modsecurity.org/)","OWASP_CRS/3.3.2"],"server":"Apache","engine_mode":"ENABLED"}} +``` + +#### ⚙️ Log de Request/Acesso + +Nos logs de access e request teremos os logs registrados de tudo que conectou no servidor Apache do cliente. Nesses logs conseguiremos saber a requisição que foi efetuada, o IP de Origem, data, hora, retorno e também um ID da conexão que identificamos por um parâmetro chamado ajaxprevent. + +Cada requisição que chega no Apache terá um ajaxprevent único o que facilita o troubleshooting. Esse mesmo ajaxprevent pode ser visto e comparado através da console do navegador onde o sistema esta operando por exemplo! + +Exemplo: + +Após um simples acesso ao sistema, cada tela aberta gera uma nova conexão, e cada conexão possui um ajaxprevent junto dela. No exemplo, o meu acesso ao sistema gerou várias conexões, onde uma dela possui o ajaxprevent 1755717741107 conforme anexo abaixo: + +![logs_apache_ajaxprevent.png](../img/logs_apache_ajaxprevent.png) + +Com base nesse ajaxprevent, conseguimos filtrar nos logs do Apache do cliente e verificar quando essa conexão chegou e de fato foi estabelecidade com o servidor usando o comando cat: + +``` +comando cat: + +ipm@00003-riodosul-app-01-0820:~$ sudo cat /var/log/apache2/riodosul.atende.net-ssl-access.log | grep 1755717741107 +189.42.20.146 - - [20/Aug/2025:16:22:21 -0300] "POST /atende.php?rot=1&aca=1&ajax=t&processo=getListaToursPendenteUsuario&ajaxPrevent=1755717741107 HTTP/2.0" 200 6 +ipm@00003-riodosul-app-01-0820:~$ sudo cat /var/log/apache2/riodosul.atende.net-ssl-request.log | grep 1755717741107 +[20/Aug/2025:16:22:21 -0300] [Remote-Ip: 189.42.20.146] [Client-Ip: 189.42.20.146] [KeepAlive: 1] [TLS: TLSv1.3] [CIPHER: TLS_AES_256_GCM_SHA384] [Pid: 2594195] [R: -] [Request: "POST /atende.php?rot=1&aca=1&ajax=t&processo=getListaToursPendenteUsuario&ajaxPrevent=1755717741107 HTTP/2.0"] [Status: 200] [Bytes: 6] [Duration: 35588 µs] +ipm@00003-riodosul-app-01-0820:~$ +``` + +Esse tipo de troubleshooting é essencial para verificações de falha na entrega de requisições, atrasos, timeout entre outros fatores dentro de um cenário problemático. + +#### ⚙️ Log Syslog + +O log do syslog gravam os logs do sistema operacional onde o PHP e Apache estão rodando. Neste log podemos identificar erros e também ações do sistema Operacional, como por exemplo o encerramento de algum processo no Apache/PHP por algum fator, por exemplo a falta de memória OutOfMemory no servidor. + +Exemplo: + +Neste caso, o cliente em questão estava com a memória baixa e em seguida era liberada: + +![omm_killer_cliente.png](../img/omm_killer_cliente.png) + +Através dos logs do syslog e horário acabamos encontrando uma ação do próprio Kernel de oom-kill evidenciando o encerramento do PID 219842. + +``` +#sudo cat /var/log/syslog | more + +Aug 18 16:25:21 01071-gramado-app-01-0820 kernel: [418817.008973] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=containerd.service,mems_allowed=0,global_oom,task_memcg=/system.slice/php8.2-fpm.service,task=php-fpm8.2,pid=219 +842,uid=33 +Aug 18 16:25:21 01071-gramado-app-01-0820 kernel: [418817.008984] Out of memory: Killed process 219842 (php-fpm8.2) total-vm:3003000kB, anon-rss:703188kB, file-rss:6940kB, shmem-rss:640488kB, UID:33 pgtables:3440kB oom_score_adj:0 +Aug 18 16:25:21 01071-gramado-app-01-0820 systemd[1]: php8.2-fpm.service: A process of this unit has been killed by the OOM killer. +``` + +Após a identificação da situação e o PID em questão, filtramos o mesmo nos logs do PHP (php8.2-fpm.log e php8.2-fpm-www-slow.log), afim de identificar mais detalhes da requisição, onde foi possível encontrar informações como rotina, ação, tempo.. + +``` +# sudo cat /var/log/php8.2-fpm.log | grep "219842" +[18-Aug-2025 16:24:10] WARNING: [pool www] child 219842, script '/var/www/html/gramado.atende.net/atende.php' (request: "POST /atende.php?cidade=padrao&rot=20007&processo=getInfoLancamentoPontoModeloDois&PHPSESSID=6miv8gv4kht5k6mihggunqd8i0&id=WRP021102-673-HEZENUCBIYPQYT-2&aca=107") executing too slow (31.076116 sec), logging +[18-Aug-2025 16:24:10] NOTICE: child 219842 stopped for tracing +[18-Aug-2025 16:24:10] NOTICE: about to trace 219842 +[18-Aug-2025 16:24:10] NOTICE: finished trace of 219842 +[18-Aug-2025 16:25:21] WARNING: [pool www] child 219842 exited on signal 9 (SIGKILL) after 249218.334834 seconds from start + +# sudo cat /var/log/php8.2-fpm-www-slow.log | more +[18-Aug-2025 16:24:10] [pool www] pid 219842 +script_filename = /var/www/html/gramado.atende.net/atende.php +[0x00007f625bc135b0] criaTagsLancamentoPonto() /var/www/html/gramado.atende.net/include/wrp/view/wrp_class_view_report_lancamento_ponto_modelo_dois.inc:38 +[0x00007f625bc134f0] createBody() /var/www/html/gramado.atende.net/estrutura/est_class_view_report.inc:38 +[0x00007f625bc13490] render() /var/www/html/gramado.atende.net/include/wrp/controller/wrp_class_controller_manutencao_relatorio_lancamento_ponto.inc:142 +[0x00007f625bc132d0] getInfoLancamentoPontoModeloDois() /var/www/html/gramado.atende.net/estrutura/est_funcao.inc:503 +[0x00007f625bc13200] callMethod() /var/www/html/gramado.atende.net/estrutura/est_class_formulario.inc:1049 +[0x00007f625bc13160] callControllerForm() /var/www/html/gramado.atende.net/estrutura/est_class_formulario.inc:1026 +[0x00007f625bc130e0] callController() /var/www/html/gramado.atende.net/atende.php:47 + +``` + +#### ⚙️ Log Error + +Nos logs de error.log será gravado os erros reportados pelo sistema, onde iniciando a analise através desse arquivo conseguimos chegar também nos detalhes da requisição/rotina que ocasionaram esse erro em questão. + +Exemplo: + +ipm@00003-riodosul-app-01-0820:~$ sudo cat /var/log/apache2/riodosul.atende.net-ssl-error.log | more + +Se pegarmos um exemplo de requisição, temos o erro em questão e junto dele a informação do ID da request que gerou esse erro: [R:aKXMmG2RfxYn3hOC3rY2sAAAAL4] + +``` +[2025-08-20 10:24:40.982041] [R:aKXMmG2RfxYn3hOC3rY2sAAAAL4] [-:error] [client 54.204.203.58] ModSecurity: Multipart: Skipping invalid part 7f520408aa00 (part name missing): (offset 0, length 0) [hostname "riodosul.atende.net"] [uri "/at +ende.php"] [unique_id "aKXMmG2RfxYn3hOC3rY2sAAAAL4"] +``` + +Com essa informação conseguimos ir até o log de request e ter mais informações sobre a requisição/rotina que foi efetuada e que gerou o erro em questão: + +``` +ipm@00003-riodosul-app-01-0820:~$ sudo cat /var/log/apache2/riodosul.atende.net-ssl-request.log | grep "aKXMmG2RfxYn3hOC3rY2sAAAAL4" +[20/Aug/2025:10:24:40 -0300] [Remote-Ip: 54.204.203.58] [Client-Ip: 54.204.203.58] [KeepAlive: 0] [TLS: TLSv1.2] [CIPHER: ECDHE-RSA-AES256-GCM-SHA384] [Pid: 2594195] [R: aKXMmG2RfxYn3hOC3rY2sAAAAL4] [Request: "POST /atende.php?pg=rest&service=WNERestServiceNFSe&cidade=padrao HTTP/1.1"] [Status: 200] [Bytes: 668] [Duration: 540083 µs] + +``` + +Informações mais detalhadas também podem ser encontradas no log do ModSec. +``` +ipm@00003-riodosul-app-01-0820:~$ sudo cat /var/log/apache2/modsec_audit.log | grep "aKXMmG2RfxYn3hOC3rY2sAAAAL4" +{"transaction":{"time":"20/Aug/2025:10:24:41.519331 --0300","transaction_id":"aKXMmG2RfxYn3hOC3rY2sAAAAL4","remote_address":"54.204.203.58","remote_port":18993,"local_address":"192.168.22.68","local_port":443},"request":{"request_line":"POST /atende.php?pg=rest&service=WNERestServiceNFSe&cidade=padrao HTTP/1.1","headers":{"Content-Type":"multipart/form-data; boundary=---------------------------8dddfd3c59d022f","Host":"riodosul.atende.net","Authorization":"Basic NzU4MDY1NDcwMDAxODg6UmEzNTI1MjE3NCM=","Content-Length":"2274","Connection":"Keep-Alive"},"fake_body":""},"response":{"protocol":"HTTP/1.1","status":200,"headers":{"Pragma":"no-cache","Cache-Control":"no-cache, must-revalidate","Expires":"Mon, 26 Jul 1997 05:00:00 GMT","Data-Servidor":"1755696280000","Set-Cookie":"cidade=padrao; path=/; SameSite=lax","Set-Cookie":"PHPSESSID=7d8m70eski5nl6t9vcec1rfnem; path=/; secure; HttpOnly","X-Frame-Options":"sameorigin","Upgrade":"h2,h2c","Connection":"Upgrade, Keep-Alive","Vary":"Accept-Encoding","X-XSS-Protection":"1; mode=block","Content-Security-Policy":"object-src 'self' data: blob: https://*.atende.net https://*.ipm.com.br https://*.nfs-e.net https://seal.digicert.com; block-all-mixed-content; form-action 'self' *.nfs-e.net https://*.ipm.com.br https://*.atende.net https://*.acesso.gov.br https://*.jucesc.sc.gov.br; frame-ancestors 'self' https://*.nfs-e.net https://*.ipm.com.br https://*.atende.net https://portalservicos.jucisrs.rs.gov.br;","Strict-Transport-Security":"max-age=31586000; includeSubDomains; preload","Keep-Alive":"timeout=1, max=224","Transfer-Encoding":"chunked","Content-Type":"application/json","Content-Language":"pt-BR"}},"audit_data":{"messages":["Multipart: Skipping invalid part 7f520408aa00 (part name missing): (offset 0, length 0)","Multipart: Skipping invalid part 7f5204122cc8 (part name missing): (offset 0, length 0)"],"error_messages":["[file \"apache2_util.c\"] [line 271] [level 3] [client 54.204.203.58] ModSecurity: Multipart: Skipping invalid part 7f520408aa00 (part name missing): (offset 0, length 0) [hostname \"riodosul.atende.net\"] [uri \"/atende.php\"] [unique_id \"aKXMmG2RfxYn3hOC3rY2sAAAAL4\"]","[file \"apache2_util.c\"] [line 271] [level 3] [client 54.204.203.58] ModSecurity: Multipart: Skipping invalid part 7f5204122cc8 (part name missing): (offset 0, length 0) [hostname \"riodosul.atende.net\"] [uri \"/atende.php\"] [unique_id \"aKXMmG2RfxYn3hOC3rY2sAAAAL4\"]"],"handler":"proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost","stopwatch":{"p1":265,"p2":234,"p3":1,"p4":0,"p5":1,"sr":69,"sw":1,"l":0,"gc":0},"producer":["ModSecurity for Apache/2.9.5 (http://www.modsecurity.org/)","OWASP_CRS/3.3.2"],"server":"Apache","engine_mode":"ENABLED"},"uploads":{"info":[{"file_size":1815,"file_name":"G:\\\\ArquivosTemporarios\\\\Fiscal\\\\NFS-e\\\\Envio\\\\0001\\\\\\\\5308-env-lot.xml","content_type":""}],"total":1815}} +``` + +## 3 - Servidores Banco de Dados + +## 4 - Servidores MSD + +## 5 - Comandos Gerais - Linux + +#### ⚙️ Consultar Consumo de Swap + +Este comando lista os processos (PID) que estão consumuindo Swap e o volume deste consumo em KB. +```console +awk 'function pr(){if (s ~ /^[1-9]/) print p,n,s;n="";p="";s=""}BEGIN{FS="\t *";OFS="\t"}/^Name:/{pr();n=$2}/^VmSwap:/{s=$2}/^Pid:/{p=$2}END{pr()}' /proc/*/status | sort -t $'\t' -k3 -n -r | column -t -s $'\t' +``` +Após resultado, para saber mais detalhes dos PID's listados, use: +```console +ps aux | grep PID +``` + +#### ⚙️ Comando para listar Consumo de Memoria e CPU Detalhado: +```console +ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head +dstat -tcpldmsn +``` +Outras opções +```console +htop +atop +iotop +top +``` + +#### ⚙️ Comando para listar processos/status: +```console +netstat +netstat -ant | awk '{print $6}' | sort | uniq -c | sort -n +netstat -n | awk '/^tcp/ {++y[$NF]} END {for(w in y) print w, y[w]}' +``` +Filtrando conexões por porta 5432 (SGDB), 443/80 (APACHE), 11211(Memcache): +```console +netstat -nat | grep 11211 | wc -l | sort | uniq -c | sort -n +netstat -nat | grep 5432 | wc -l | sort | uniq -c | sort -n +netstat -nat | grep 443 | wc -l | sort | uniq -c | sort -n +netstat -nat | grep 80 | wc -l | sort | uniq -c | sort -n +``` + +Identificar/Listar conexões em modo Defunct (Zumbi) Linux: +```console +ps axo stat,ppid,pid,comm | grep -w defunct +``` + +#### ⚙️ Limpeza de Pasta com muitos Arquivos (rm -rf to long) + +Comando usado para limpar pastas que possuem muitos arquivos, onde o rm -rf do Linux não consegui fazer a exclusão. O comando abaixo listará e excluirá arquivo por arquivo, fazendo com que o rm -rf não precise ler todos os arquivos de uma única fez, conseguindo assim realizar a exclusão. + + Obs. Esse comando deve ser executado exatamente na pasta/diretório onde estão os arquivos que devem ser excluido! + +```console +find . -type f -exec rm -v {} \; +``` + +#### ⚙️ Analisar/Listar tamanhos de diretórios ou arquivos: +Lista diretórios e tamanhos de cada arquivo/pasta: +```console +du -h pasta/ +``` +Lista apenas o tamanho total da pasta: +```console +du -sh pasta/ +``` +Lista diretórios montados: +```console +df -h +``` + +#### ⚙️ Comandos para contar numero de Arquivos ou Diretórios: +Filtrar por arquivos: +```console +find diretório -type f | wc -l +``` +Filtrar por diretórios: +```console +find diretório -type d | wc -l +``` + +#### ⚙️ Comandos Permissões: +Comando para permissões no Linux com Chmod, são dividios em 7 níveis: +Obs.(use a expressão -R para recursividade) + +0 = nenhuma permissão; +1 = apenas executar; +2 = apenas gravar; +3 = gravar e executar; +4 = apenas ler; +5 = ler e executar; +6 = ler e gravar; e +7 = ler, gravar e executar. + +Exemplos de comandos: +```console +chmod 700 arquivo ou pasta +chmod 755 arquivo ou pasta +chmod 777 arquivo ou pasta +``` +Comando para permissão em arquivos, usuário e grupos: + +rwx: significa que o usuário tem permissão para leitura, edição e execução); +r-x: somente os usuários do grupo do arquivo podem ler ou executar; +r: qualquer usuário pode ler o arquivo, mas não pode editá-lo e nem executá-lo. + +Exemplo de comandos: +```console +chown usuario.grupo pasta/ +chown usuario.grupo arquivo/ +``` + +#### ⚙️ Comandos de Compactação + +Comandos de Compactação com ZIP + +Compactar +```console +zip -9 -r nomedoarquivo.zip /pasta/arquivos +``` +Extrair +```console +unzip nomedoarquivo.zip +``` + +Comandos de Compactação com TAR + +Compactar +```console +tar cfv nomedoarquivo.tar arquivos +``` +Compactar e Comprimir +```console +tar cfzv nomedoarquivo.tar arquivos +``` +Extrair +```console +tar xvzf nomedoarquivo.tar.gz +``` +Listar conteudo do arquivo compactado +```console +tar tf nomedoarquivo.tar +``` + +#### ⚙️ Comandos Analisar Logs (Filtros) +Comandos para filtrar arquivos de logs: + +Comando cat com grep +```console +cat nomedoarquivo.log | grep "informação filtrada" +``` + +Comando grep filtrando e trazendo o nome do arquivo + +Especificando o nome do arquivo +```console +grep "informação filtrada" | grep nomedoarquivo.logs +``` +Filtrando por qualquer coisa que for .log +```console +grep "informação filtrada" | grep *.log +``` diff --git a/docs/monitoramento_servidores.md b/docs/monitoramento_servidores.md new file mode 100644 index 0000000..0210664 --- /dev/null +++ b/docs/monitoramento_servidores.md @@ -0,0 +1,68 @@ +# Monitoramento Servidores + +Este documento contém informações sobre o ambiente dos clientes, assim como, formas de acesso as ferramentas de monitoramento. + +## 00000-clean-afw-01-0272.atende.net +>Servidores AFW, são os servidores responsáveis por criar um perímetro, garantindo a segurança no ambiente do cliente em data center. Estes servidores operam em modo firewall com regras rígidas, afim de garantir o isolamento das transações específicas daquele cliente. Desta forma, estes servidores são essenciais para o funcionamento do ambiente do cliente, caso este servidor se torne inacessível, todo o ambiente do cliente se tornará inacessível. + +Os servidores __afw__, possuem serviços essenciais, como: +- Firewall / Nat. "pfSense" +- Balanceamento de carga. "HAProxy" +- Monitoramento do ambiente. "Zabbix Proxy" +- Roteamento Interno. "FRR/Ospf" +- Resolução de Nomes. "DNS Forwarder" + +Estes servidores possuem 3 interfaces de rede, ao qual cada interface está vinculada a sua VLAN específica. +- __WAN__: Interface de rede ao qual recebe o endereço de IP público do cliente, este endereço IP será utilizado para acesso as aplicações. +- __LAN__: Interface de rede ao qual recebe o endereço de IP privado do cliente, este endereço IP será utilizado como gateway da rede do cliente. +- __INT-RT__: Interface de rede ao qual recebe o endereço IP privado na rede de manutenções/monitoramento do data center. + +O acesso ao servidor __afw__ será sempre realizado através da interface __INT-RT__, informando a porta de acesso. +- __9080__ - Acesso através do navegador a interface web de gerenciamento do firewall. + - Usuários: __ipm__ / __admin__. +![AFW_Acesso_Web](../img/afw_0272_acesso_web.png) + +- __9021__ - Acesso através do putty a interface ssh de gerenciamento do firewall. + - Usuário: __root__. +![AFW_Acesso_SSH](../img/afw_0272_acesso_ssh.png) + +### Interface Web + +Ao acessar a interface web com o usuário __ipm__ você terá acesso a ferramentas de monitoramento e análise do ambiente. + +No menu __Status__ você terá os acessos abaixo: +- __DashBoard__, informações sobre a saúde do servidor __afw__, tráfego de rede e seus serviços, como por exemplo o __haproxy__. +![AFW_DashBoard](../img/afw_0272_dashboard.png) + +- __HAProxy Stats__, informações sobre o balanceador de carga. +>Nesta tela você encontrará informações sobre o status dos servidores de aplicação `app` no cluster do HAProxy. +Caso algum servidor esteja inacessível, a sua respectiva linha ficará `vermelha`; +Caso o algum servidor tenha oscilações, a sua linha ficará `amarela`; +Se tudo estiver bem com a saúde do servidor, a sua respectiva linha ficará `verde`. + +![AFW_HAProxy_Stats](../img/afw_0272_haproxy_stats.png) + +- __Monitoring__, informações sobre o processamento do servidor. +![AFW_Monitoring](../img/afw_0272_monitoring.png) + +- __System Logs__, acesso a logs do sistema e do firewall. +>Nestes logs você encontrará informações sobre o funcionamento do servidor e seus respectivos serviços, assim como, bloqueios de endereços IP. + +![AFW_System_Logs](../img/afw_0272_system_logs.png) + +No menu __Diagnostics__ você terá os acessos abaixo: +- __ARP Table__: Útil para identificar endereços ARP conhecidos pelas interfaces de rede do servidor. +- __DNS Lookup__: Ferramenta para realizar testes de resoluções de nomes. +- __MTR__: Ferramenta utilizada para analisar a rota até um determinado endereço IP. +- __Packet Capture__; ferramenta utilizada para capturar pacotes de rede ao qual estejam trafegando pelo firewall. +- __pfInfo__: Traz informações referentes as interfaces de rede. +- __pfTop__: Traz informações em tempo real, referentes as conexões ativas no firewall. +- __Ping__: Ferramenta utilizada para realizar testes de conectividade. +- __Routes__: Traz informações sobre as rotas conhecidas pelo firewall. +- __States__: Traz informações detalhadas, sobre as conexões ativas no firewall. +- __States Summary__: Traz informações resumidas, sobre as conexões ativas no firewall. +- __System Activity__: Traz informações sobre os serviços em execução e seus consumos. +- __Test Port__: Ferramenta utilizada para realizar testes de conectividade em portas. +- __Traceroute__: Ferramenta utilizada para identificar a rota até um determinado destino. + + diff --git a/docs/movimentacao_arquivos_bd.md b/docs/movimentacao_arquivos_bd.md new file mode 100644 index 0000000..2c77aeb --- /dev/null +++ b/docs/movimentacao_arquivos_bd.md @@ -0,0 +1,118 @@ +# Movimentação de Arquivos para o Banco de Dados + +Esse procedimento será executado até que todos os clientes possuam seus arquivos armazenados na nova estrutura de armazenamento de arquivos no banco de dados. + +Todas as etapas devem ser executadas analisando minunciosamente o seu retorno, pois qualquer anomalia pode representar um problema e deve ser verificada. + +## Procedimentos + +__Deve-se seguir a planilha de checklist "Movimentação Arquivos - Banco de Dados".__ + +__1) Executar atualização da release__ + +__2) Etapas executadas através do InicializaBD__ + + 2.1) Renomear Tablespace + -- arquivo -> intermediario + -- expurgo -> corrente + + 2.2) Alterar configuração de uso da Storage (DESATIVAR). + + 2.2) Iniciar o particionamento das tabelas no schema arquivo (25GB) + + 2.4) Alterar Estrutura de Armazenamento (Sim) + - Esta opção também pode ser ativada via Atende.Net + -- Configuração: Gerenciamento do Sistema » Sistema » Configurações » Geral » Administração + --- Ativar: Utiliza Nova Estrutura de Armazenamento + + 2.5) Alterar o Armazenamento de Arquivos Grandes (Conforme Cálculo) + - Configuração: Gerenciamento do Sistema » Sistema » Configurações » Geral » Administração + -- Tamanho para Particionamento dos Arquivos Grandes: + -- Tamanho das Partições dos Arquivos Grandes: + +__3) Realizar backup via rclone da pasta Temp e Temp-Preview__ + +Acessar o servidor TASK-09, comentar o cliente atual e adicionar o novo cliente ao qual fará o backup, utilizando as informações do servidor TASK-01. +``` +-- Editar o arquivo "/root/.config/rclone/rclone.conf" +vim /root/.config/rclone/rclone.conf +``` + +Ou Executar a configuração conforme abaixo. +``` +rclone config +N (New Remote) +name: +Storage: 45 +Host: +user: root +port: +SSH Password.....: Digitar "y" +Enter Password: +Confirm Password: +key_pem: Enter +key_file: Enter +Option key_file_pass: Enter +pubkey_file: Enter +key_use_agent: Enter +use_insecure_cipher: Enter +disable_hashcheck: true + +Enter até o final +q para sair +``` + +Executar o script de backup +``` +/root/bkp_files/bkp_files_dc.sh & +``` + +Acompanhar o backup +``` +tail -f /root/bkp_files/log/00593_presidentegetulio-20250224-162245822269890.log +``` + +Ao concluir o backup, deve-se executar o script novamente, onde não pode retornar novos arquivos no backup da pasta "TEMP", exceto arquivos em pastas com nome em maiúsculo e minúsculo. + +__7) Ativar agendamentos no Atende.Net__ +- Agendamentos de Banco de Dados: 459, 460, 461 » Ativar os horários do agendamento + +__8) Acompanhar a movimentação dos arquivos__ +- Gerenciamento do Sistema » Estrutura » Arquivos » Monitoramento » Movimentação de Arquivos para o Banco + +- Enquanto estiver processando a movimentação dos arquivos, execute o SQL abaixo a cada 1hr, ao qual irá retornar as tabelas que necessitam executar o vacuum full. Este procedimento deve ser executado nos clientes ao qual possuem os arquivos armazenados no banco de dados no formato antigo (ByteA). + +``` +set lock_timeout = 5000; +select 'vacuum full '||tabela||';' + from ( + select translate(tabela,'" ','') as tabela + from ( + select unnest(string_to_array(tabelas, '-t')) as tabela + from webbased.fn_lista_tabela_vacuum_full() as tabelas + ) orig + ) orig + where tabela <> '' + and tabela like 'arquivo.%' + order by pg_total_relation_size(tabela) + ``` + + __9) Reprocessar Arquivos "Não Encontrados"__ +- Quanto a movimentação dos arquivos chegar a 100%, analise os casos ao qual ficaram com a "Situação" - "Não encontrado" e/ou "Com Erros". + +- Existem situações ao qual a busca do arquivo pode ter falhado devido a uma instabilidade momentãnea da storage, onde devemos "Reprocessar" todos os arquivos que ficaram com a Situação "Não Encontrado". Hoje essa atividade deve ser executada a partir da ação "Parecer", em breve teremos uma ação para "Reprocessar todos, sem a necessidade de selecionar os arquivos não encontrados". + +__10) Vacuum Full__ +- Após a movimentação chegar a 100% devemos executar o vacuum full em todas as tabelas do schema arquivo. + +- Para isto, execute o SQl abaixo ao qual retornará as tabelas ao qual devem ser executado o vacuum full. +``` +set lock_timeout = 5000; +select 'vacuum full '||schemaname||'.'||tablename||';' + from pg_tables + where schemaname = 'arquivo' + and tablename not like '%shadow' + and tablename not like '%content' + and tablename not like '%contentpart' + order by pg_total_relation_size(schemaname||'.'||tablename) + ``` diff --git a/docs/padronizacao-pfsense.md b/docs/padronizacao-pfsense.md new file mode 100644 index 0000000..55b2aba --- /dev/null +++ b/docs/padronizacao-pfsense.md @@ -0,0 +1,81 @@ +# PfSense + +A estrutura dos clientes, sempre é composta por um firewall virtualizado, responsável por realizar o NAT e a segurança do perímetro de cada cliente, diante disto, realizaremos alguns ajustes necessários para realizar o deploy dos micro serviços em docker, assim como, ativaremos o recurso de resolução de nomes para a rede interna do cliente, algo primordial para o funcionamento do docker e o glusterfs. + +## Ajustes + +Afim de padronizarmos a nomenclatura e a utilização dos endereços IP de cada servidor, será necessário realizar alguns ajustes no firewall. + +Acesse o pfsense através da interface web. +Exemplo: https://172.24.1.24:9080/ + +1.) Ajuste o hostname + - Vá em __System__ > __General Setup__ + __Hostname__: 08573-demonstracao-afw-01-0260 + Clique em __Save__ + ![pfsense-hostname](../img/pfsense-hostname.png) + +2.) Ajuste as configurações do Zabbix-Agent + - Vá em __Services__ > __Zabbix Agent 6__ + __Hostname__: 08573-demonstracao-afw-01-0260.atende.net + Clique em __Save__ + ![pfsense-zabbix-agent](../img/pfsense-zabbix-agent.png) + +3.) Ajuste as regras de NAT + - Vá em __Firewall__ > __NAT__ + Ajuste conforme a [`padronização`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/docs/nat-default.md) de portas e endereços IP. + ![pfsense-nat](../img/pfsense-nat.png) + +4.) Ajuste as regras, movimentando-as corretamente. + - Vá em __Firewall__ > __Rules__ > __INT_RT__ + ![pfsense-rules-int-rt](../img/pfsense-rules-int-rt.png) + - Clique em __Save__ > __Apply Changes__ + +5.) Adicione uma nova regra, liberando acesso a autenticação via LDAP. + - Vá em __Firewall__ > __Rules__ > __LAN__ + ![pfsense-rules-lan](../img/pfsense-rules-lan.png) + - Clique em __Save__ > __Apply Changes__ + +6.) Ajuste a porta de Acesso SSH do Firewall + - Vá em __System__ > __Advanced__ + __SSH Port__: 21 + Clique em __Save__ + ![pfsense-advanced-ssh](../img/pfsense-advanced-ssh.png) + + * Após ajustado, altere a porta de acesso SSH no Alias + + Vá em __Firewall__ > __Aliases__ > __Ports__
+ Altere o fw_ports alterando a porta 9022 para 9021 + ![pfsense-alias-ports](../img/pfsense_alias_ports.png) + ![pfsense-alias-ports-2](../img/pfsense_alias_ports2.png) + +## DNSForwarder + +Ativaremos o __DNSForwarder__, para que a resolução de nomes funcione adequadamente, possibilitando a criação dos clusters com o __docker swarm__ e o __glusterfs__. + +1.) Ative o serviço do DNS Forwarder. + - Vá em __Services__ > __DNS Forwarder__ + __Enable__: Habilitado + __Interfaces__: LAN + ![pfsense-dns-forwarder](../img/pfsense-dns-forwarder.png) + - Clique em __Save__ > __Apply Changes__ + +2.) Cadastre o nome de todos os servidores, com os seus respectivos endereços ip e os domínios abaixo. +```console +# description: Deve apontar para o endereço ip do servidor de aplicação PHP. +cliente.atende.net +# description: Deve apontar sempre para o endereço IP virtual configurado com no keepalived. +ies-api-gateway.atende.net +``` + - Vá em __Host Overrides__ e clique em __add__ + Informe o nome dos servidores e os seus respectivos endereços ip. + ![pfsense-dns-forwarder-domains](../img/pfsense-dns-forwarder-domains.png) + - Clique em __Save__ > __Apply Changes__ + +# Conclusão + +Com estes procedimento, realizamos os ajustes nas configurações do pfsense e ativamos a resolução de nomes para a rede do cliente. + +- [` Ir para Página de Padronização`](./padronizacao-servidores.md) + +- [` Ir para Página Principal`](../README.md) \ No newline at end of file diff --git a/docs/padronizacao-servidores.md b/docs/padronizacao-servidores.md new file mode 100644 index 0000000..8501ccc --- /dev/null +++ b/docs/padronizacao-servidores.md @@ -0,0 +1,136 @@ +# Procedimentos para a padronização dos servidores virtuais. + +Este documento descreve, todas as atividades que serão executadas para que possamos organizar todos os servidores, conforme as novas definições sobre a padronização de servidores virtuais para os clientes Atende.Net. + +Esta padronização é necessária para que possamos integrar o servidor de micro serviços docker _msd_, de forma adequada ao funcionamento do cluster com o docker swarm e o glusterfs. + +Para as definições de nomes, endereços IP e Configurações NAT, utilize [`este documento como referência.`](https://documentos.ipm.com.br/data-center/padroes/src/branch/master/README.md) + +Todos os procedimentos abaixo, foram executados no ambiente __demonstracao.atende.net__. + +## Firewall PfSense + +- [`Ajuste de configurações e adequação a estrutura com o docker`](./padronizacao-pfsense.md); + +## Aplicação PHP + +Acesse o servidor via SSH e execute os procedimentos abaixo: +```console +# vim /etc/hosts +---- +:% s/08573-DEMONSTRACAO-HTTP56/08573-demonstracao-app-01-5618 +---- +# vim /etc/hostname +---- +:% s/08573-DEMONSTRACAO-HTTP56/08573-demonstracao-app-01-5618 +---- +# vim /etc/sysconfig/network-scripts/ifcfg-eno16780032 +---- +DNS1="192.168.28.129" # (ip do gateway) +---- +# vim /etc/zabbix/zabbix_agentd.conf +---- +:% s/08573-DEMONSTRACAO-HTTP56/08573-demonstracao-app-01-5618 +---- +# vim /var/www/html/demonstracao.atende.net/_config.padrao.inc +---- +:% s/192.168.28.138/192.168.28.140 +---- +systemctl restart network.service +systemctl restart zabbix-agent.service +# cat /etc/resolv.conf +---- +nameserver 192.168.28.129 # (ip do gateway) +---- +``` + +## Banco de Dados PostreSQL 11.5 - Atende.Net ou IPMSaúde + +__Obs__: Caso o servidor seja do Atende.Net deve utilizar a nomenclatura bdp-01, se for do IPMSaúde, deve utilizar a nomenclatura bdp-02. + +Acesse o servidor via SSH e execute os procedimentos abaixo: +```console +# vim /etc/hosts +---- +:% s/192.168.28.138/192.168.28.140 +:% s/08573-DEMONSTRACAO-SGDB11-ATENDENET/08573-demonstracao-bdp-01-1150 +---- +# vim /etc/hostname +---- +:% s/08573-DEMONSTRACAO-SGDB11-ATENDENET/08573-demonstracao-bdp-01-1150 +---- +# vim /etc/sysconfig/network-scripts/ifcfg-ens192 +---- +IPADDR="192.168.28.140" +DNS1="192.168.28.129" # (ip do gateway) +---- +# vim /etc/zabbix/zabbix_agentd.conf +---- +:% s/08573-DEMONSTRACAO-SGDB11-ATENDENET/08573-demonstracao-bdp-01-1150 +---- +# reboot + + +Caso necessite reiniciar somente os Serviços, utilize o comando abaixo: + +#systemctl restart NetworkManager.service +#systemctl restart zabbix-agent.service +#cat /etc/resolv.conf + +``` + +__Atenção__: Enquanto o servidor reinicia, você deve acessar o servidor de Aplicação PHP e alterar o endereço IP no arquivo `_config.padrao.inc`. + +```console +# vim /var/www/html/demonstracao.atende.net/_config.padrao.inc +--- +:% s/192.168.28.138/192.168.28.140 +$_CONFIG['ip'] = '192.168.28.140'; +--- +``` + +## Banco de Dados PostreSQL 9.5 - IPMSaúde + +Acesse o servidor via SSH e execute os procedimentos abaixo: +```console +# vim /etc/hosts +---- +:% s/08573-DEMONSTRACAO-SGDB95-IPMSAUDE/08573-demonstracao-bdp-02-0950 +---- +# vim /etc/hostname +---- +:% s/08573-DEMONSTRACAO-SGDB95-IPMSAUDE/08573-demonstracao-bdp-02-0950 +---- +# vim /etc/sysconfig/network-scripts/ifcfg-eno16782080 +---- +DNS1="192.168.28.129" # (ip do gateway) +---- +# vim /etc/zabbix/zabbix_agentd.conf +---- +:% s/08573-DEMONSTRACAO-SGDB95-IPMSAUDE/08573-demonstracao-bdp-02-0950 +---- +# systemctl restart network.service +# systemctl restart zabbix-agent.service +# cat /etc/resolv.conf +---- +nameserver 192.168.28.129 # (ip do gateway) +---- +``` + +## Zabbix + +- Ajustar o nome dos servidor e o endereço IP, conforme configurado. + +## GTT + +- Ajustar o nome dos servidores e o endereço IP, conforme configurado. +- Cadastrar o cluster __docker__ com servidores _msd_. + Quando for ativado o cluster com o servidor de micro serviço docker, deve-se: + - Criar o cluster relacionando todos os equipamentos _msd_. + - Cadastrar o endereço IP virtual do cluster, configurado no keepalived. + +## VmWare + +- Renomear o nome do servidores conforme configurado. + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/portaltransp.md b/docs/portaltransp.md new file mode 100644 index 0000000..f30ea98 --- /dev/null +++ b/docs/portaltransp.md @@ -0,0 +1,163 @@ +# Portal da Transparência / Cidadão + +Este processo consiste em 4 etapas: +1) Cadastro do domínio no Recapcha; +2) Configuração do DNS Forwarder; +3) Configurações do Apache; +4) Configurar Domínio no sistema Atende.Net + + +## 1. Cadastro do domínio no Recapcha + + +* Acesse o seguinte endereço: + +https://accounts.google.com/ServiceLogin/signinchooser?passive=1209600&continue=https%3A%2F%2Fwww.google.com%2Frecaptcha%2Fadmin&followup=https%3A%2F%2Fwww.google.com%2Frecaptcha%2Fadmin&ifkv=ARgdvAtwIBeVXUE3ZRXVOAyQGWfXAlGoDxg67EEF1Ri-xS-M3_J9lqqcNn0ZdlvDIf5B7DAZjMNKzA&flowName=GlifWebSignIn&flowEntry=ServiceLogin + + +* Faça login na conta: +``` +Email: ipm@ipm.com.br +Senha: ****** +``` + +* Localizar e abrir o domínio da prefeitura, conforme a imagem de exemplo abaixo: 00765-Alto Bela Vista - v2 + +![localizar-dominio](../img/localizar-dominio.PNG) + +* Clicar no botão de Configurações (ícone de engrenagem a direita), adicionar o subdomínio da câmara, clicar no sinal de `+` e clicar em `Salvar`, conforme imagem abaixo: + +![dominio](../img/dominio.PNG) + +* Fazer o mesmo processo no domínio v3. + + +## 2. Configuração do DNS Forwarder + +* Acessar o Firewall do cliente; + +* Vá em Services > DNS Forwarder; + +* Adicione um Host conforme exemplo abaixo: + +![dns](../img/DNSForwarder.PNG) + +## 3. Configurações do(s) Apache(s) (Se for cluster, configurar no Apache01 e no Apache02) + +_(Dar sequência no preenchimento da planilha `MANUTENÇÃO DE SERVIDORES, ABA: Domínios Transparência-Cidadão`)_ + +* Acessar servidor Apache da prefeitura via SSH; + +* Editar o arquivo `httpd.conf` e adicionar as seguintes linhas no final do arquivo: + +``` +vim /etc/httpd/conf/httpd.conf +``` +``` + + ServerAdmin webmaster@camaraclean.atende.net + DocumentRoot /var/www/html/clean.atende.net + ServerName camaraclean.atende.net + ErrorLog logs/camaraclean.atende.net_error.log + CustomLog logs/camaraclean.atende.net_access.log common + + Options FollowSymLinks + AllowOverride None + + + Options FollowSymLinks MultiViews + AllowOverride None + Order allow,deny + allow from all + + +``` + +* Substiruir a palavra `clean` por ``; +* Substituit a palavra `camara` por `previdencia` se for uma previdência. + +__*Não usar substituição (:% s)!! Use o Notepad++ para substituir e cole no terminal depois de alterado.__ + + +* Editar o arquivo `ssl.conf` e adicionar as seguintes linhas no final do arquivo: +``` +vim /etc/httpd/conf.d/ssl.conf +``` +``` + + +# General setup for the virtual host, inherited from global configuration +DocumentRoot "/var/www/html/clear.atende.net" +ServerName camaraclear.atende.net +ServerAlias camaraclear.atende.net + +# Use separate log files for the SSL virtual host; note that LogLevel +ErrorLog logs/ssl_camaraclear.atende.net_error.log +TransferLog logs/ssl_camaraclear.atende.net_access.log +LogLevel warn + +# SSL Engine Switch: +SSLEngine on + +# SSL Protocol support: +SSLProtocol all -SSLv2 -SSLv3 + +# SSL Cipher Suite: +SSLCipherSuite "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4" +SSLHonorCipherOrder on +SSLCompression off + +# Server Certificate: +SSLCertificateFile /usr/certificado/star_atende_net/STAR_atende_net.crt +SSLCertificateKeyFile /usr/certificado/star_atende_net/chaveprivadanova.key +SSLCACertificateFile /usr/certificado/star_atende_net/STAR_atende_net.ca-bundle + + SSLOptions +StdEnvVars + +BrowserMatch "MSIE [2-5]" \ + nokeepalive ssl-unclean-shutdown \ + downgrade-1.0 force-response-1.0 + +# Per-Server Logging: +CustomLog logs/ssl_camaraclear.atende.net_request.log \ + "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" + +``` +* Substituir a palavra `clear` por ``: +* Substituit a palavra `camara` por `previdencia` se for uma previdência. + +__*Não usar substituição (:% s)!! Use o Notepad++ para substituir e cole no terminal depois de alterado.__ + +* Verificar integridade do apache: +``` +apachectl -t +``` + +* Reiniciar apache (NÃO REINICIAR DURANTE O DIA). + +## 4. Configurar Domínio no sistema Atende.Net +#### Procedimento abaixo não deve ser realizado caso o cliente ainda esteja em migração. + +Para cadastrar os domínios acessíveis siga os passos abaixo: + +* Acessar cliente.atende.net e logar com seu usuário; + +* Acessar o menu: `Gerenciamento do Sistema > Sistema > Domínios` + +* Clicar em `Incluir`; + +* Configurar os campos abaixo conforme solicitado no chamado e ilustrado na imagem de exemplo abaixo: + +``` +Tipo: Atende.net Padrão / Portal do Cidadão / Portal de Transparência, etc; +Entidade: Selecionar a entidade solicitada no chamado (Camara, Previdência, etc); +Domínio: Informar o domínio configurado; +Selecionar somente a Flag: Ativo. +``` +![dominio-portal](../img/dominio-portal.PNG) + +* Após este procedimento, deve-se organizar para reinicializar o Apache após as 18:00 e acessar o domínio configurado para testar o acesso ao portal solicitado. + +* Tramitar o chamado de volta para quem solicitou informando que o processo foi realizado com sucesso. + +- [`VOLTAR`](../README.md) diff --git a/docs/procedimento_ipmsaude.md b/docs/procedimento_ipmsaude.md new file mode 100644 index 0000000..8d60a16 --- /dev/null +++ b/docs/procedimento_ipmsaude.md @@ -0,0 +1,108 @@ +# Ativação IPM Saúde + +> +>Após a criação do servidor de banco de dados definitivo para o IPM Saúde S-1, seguir os passos abaixo para adequar o ambiente de acordo com as configurações necessárias. +> + + IMPORTANTE: Todos os passos abaixo são baseados no Checklist disponível em: [Manutenção Servidores - 15082024 v1.xlsx > Transferir IPMSaúde](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EV6nDzIq-xpFptwju2S9zG0Ba6iuVFZSv_rhhCXNnOI2sQ?e=3x7GQw) que devem ser marcados como OK na planilha conforme a execução! + +## Configurações - Apache + +### ✅ Criar checkout /saude: +Entre no diretório abaixo, substituindo pelo nome do cliente em questão e realize o comando svn co: +``` +cd /var/www/html/cliente.atende.net/ +``` +``` +svn co https://atualizacao.atende.net/svn/Saude_Producao/1.0.0/ saude/ +``` +### ✅ Config padrão: +Criar config padrão com a HASH: +(Alterar informações com dados do cliente que estão no tramite do chamado) +``` +vim saude/_config.padrao.inc + + +``` +### ✅ Configurar /atualiza: + +Crie o arquivo e cole conforme abaixo: +``` +vim saude/atualiza/sau_atualiza_versao_config.inc + + + Order deny,allow + Deny from all + Allow from none + +``` +### ✅ Instalar biblioteca php: +Para realizar a instalação, execute os comandos abaixo: +``` +cd /root/download/php56/ +wget https://datacenter.atende.net/updates/php56/dbase-5.1.1.tgz +pecl install dbase-5.1.1.tgz +tar -xzvf dbase-5.1.1.tgz +cd dbase-5.1.1/ +/usr/bin/zts-phpize +./configure --with-php-config=/usr/bin/zts-php-config +make && make install +cd /etc/php.d +wget https://datacenter.atende.net/updates/php56/dbase.ini +cd /etc/php-zts.d/ +wget https://datacenter.atende.net/updates/php56/dbase.ini +``` +### ✅ Restart Apache: + +ATENÇÃO: Reiniciar serviço do apache após as 18h⚠️ +``` +systemctl restart httpd.service +``` \ No newline at end of file diff --git a/docs/reativar_replicacao.md b/docs/reativar_replicacao.md new file mode 100644 index 0000000..28efcb9 --- /dev/null +++ b/docs/reativar_replicacao.md @@ -0,0 +1,207 @@ + +# Reativação da replicação de banco de dados (Exemplo 01611_pinhais) + +## Servidor SLAVE + +* Acesse o servidor SLAVE e pare o banco de dados. +``` +$ su - postgres + +$ ssh -p 61100 rep01611@200.233.186.58 + +$ su - root + +# systemctl stop postgresql-11.service + +# exit +``` + +__MUITA ATENÇÃO, tenha certeza que você está executando estes comandos no servidor SLAVE!__ + +* Apague as pastas da base atual e faça o backup dos configs: + + * Limpar tablespaces: + ``` + $ cd /var/lib/pgsql/11/tablespaces + + $ rm -rf arquivo* + + $ rm -rf expurgo* + + $ rm -rf indice/* + ``` + * Limpar pasta bkp: + ``` + $ cd /var/lib/pgsql/11/data + + $ rm -rf bkp* + ``` + * Fazer backup dos arquivos e limpar pasta data: + ``` + $ mkdir bkp + + $ mv postgresql.conf recovery.conf pg_hba.conf bkp/ + + $ rm -rf *.tgz + + $ rm -rf base current_logfiles global pg_commit_ts pg_dynshmem pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase PG_VERSION pg_xact postgresql.* postmaster.* tablespace_map.* + + $ rm -rf log/* + + $ rm -rf archive/* + + $ mkdir bkp/pg_wal + + $ mv pg_wal/* bkp/pg_wal/ + ``` + + +## Servidor MASTER: + +__Caso a replicação a partir do MASTER não esteja funcionando, e exista algum problema, como sem espaço em disco na partição, ou algum arquivo corrompido, executar os passos abaixo:__ +_(ENTENDER A SITUAÇÃO)_ + + +* Conectar via SSH no servidor MASTER e alterar as configurações: + + * Alterar a configuração do postgres.conf para `semreplicacao`: + ``` + # cp /var/lib/pgsql/11/data/postgresql.semreplicacao /var/lib/pgsql/11/data/postgres.conf + ``` + * Reiniciar o serviço do postgres: + ``` + # systemctl restart postgresql-11.service + ``` + * Alterar novamente a configuração do postgres para `comreplicacao`: + ``` + # cp /var/lib/pgsql/11/data/postgresql.comreplicacao /var/lib/pgsql/11/data/postgres.conf + ``` + * Reiniciar novamente o serviço do postgres: + ``` + # systemctl restart postgresql-11.service + ``` + +__Caso a replicação esteja corrompida, não utilizar os comandos acima, continuar a partir dos passos abaixo:__ + +* Iniciar o modo Backup do Banco de dados: + * Conectar via ipmadminbd e executar o seguinte comando SQL: + ``` + SELECT pg_start_backup('rep01611',true); + ``` + +### Compactar e copiar os arquivos da base do Banco Master para o Banco Slave + +* Você pode abrir vários terminais ssh no servidor MASTER para executar cada comando TAR, ou seja, irá transferir em simultâneo cada pasta para o servidor slave: + + * Execute os comandos paara fazer as cópias: + + ``` + # su - postgres + ``` + * Acesse a pasta "tablespaces" e compacte os arquivos: + ``` + $ cd /var/lib/pgsql/11/tablespaces/ + + $ tar -zcvf - arquivo/ |ssh -p 61100 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/tablespaces/arquivo.tgz" + + $ tar -zcvf - expurgo/ |ssh -p 61100 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/tablespaces/expurgo.tgz" + ``` + * Acesse a pasta "indice" e compacte os arquivos: + ``` + $ cd /var/lib/pgsql/11/tablespaces/indice/ + + $ tar -zcvf - * |ssh -p 61100 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/tablespaces/indice/indice.tgz" + ``` + * Acesse a pasta "data" e compacte os arquivos: + ``` + $ cd /var/lib/pgsql/11/data/ + + $ tar -zcvf - backup_label current_logfiles global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_logical pg_multixact pg_notify pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase PG_VERSION pg_xact postgresql.auto.conf postgresql.conf postgresql.mig postgresql.org postgresql.prod postmaster.opts tablespace_map |ssh -p 61100 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/data/all.tgz" + + $ tar -zcvf - base/ |ssh -p 61100 rep01611@200.233.186.58 "cat > /var/lib/pgsql/11/data/base.tgz" + ``` + +## Servidor SLAVE + +* Descompactar os arquivos tranferidos, você também pode abrir vários terminais SSH para cada comando TAR, descompactando vários arquivos ao mesmo tempo. + + * Descompactar arquivos da "tablespaces": + + ``` + $ ssh rep01611@200.233.186.58 -p 61100 + + $ cd /var/lib/pgsql/11/tablespaces/ + + $ tar -xzvf arquivo.tgz + + $ tar -xzvf expurgo.tgz + ``` + + * Descompactar arquivos do "indice": + ``` + $ cd /var/lib/pgsql/11/tablespaces/indice/ + + $ tar -xzvf indice.tgz + ``` + + * Descompactar arquivos da "data": + ``` + $ cd /var/lib/pgsql/11/data/ + + $ tar -xzvf all.tgz + + $ tar -xzvf base.tgz + ``` + +* Ajustar PG_HBA e PostgreSQL.conf + ``` + $ cd bkp/ + + $ cp postgresql.conf recovery.conf pg_hba.conf ../ + ``` + +* Subir o banco no servidor SLAVE: +``` +$ su - root + +# systemctl start postgresql-11.service +``` + * O comando de "start" ficará aguardando a importação de todos os arquivos wal no servidor SLAVE, onde através de outro terminal ssh pode ser acompanhado através dos logs: + ``` + # tail -f /var/lib/pgsql/11/data/log/postgresql-2019-09-23_101612.log + ``` + + * Quando aparecer a seguinte nomenclatura nos logs do SGBD Slave bzip2: Can't open input file /var/lib/pgsql/11/data/archive/0000000100000C43000000A4: No such file or directory é porque a replicação já esta operando e aguardando um arquivo WAL do servidor Master. Após isso execute o comando do próximo passo para completar o Start do SGBD. + + * Ao concluir a cópia, conectar via ipmadminbd no __SERVIDOR MASTER__ e executar o SQL abaixo: + (*executar somente após o banco slave estar ativo e recebendo os arquivos): + ``` + SELECT pg_stop_backup(); + ``` + +* Após o banco estar consistente e recebendo novos arquivos da replicação, deve-se apagar os backups utilizados para transferir a base. + ``` + [ : 31755] 2019-12-06 11:37:41 -03 LOG: consistent recovery state reached at F/D3FC1238 + [ : 31753] 2019-12-06 11:37:41 -03 LOG: database system is ready to accept read only connections + [ : 31755] 2019-12-06 11:37:41 -03 LOG: restored log file "000000010000000F000000D4" from archive + ``` + * Executar os comandos para apagar os backups: + ``` + # rm -rf /var/lib/pgsql/11/data/all.tgz + + # rm -rf /var/lib/pgsql/11/data/base.tgz + + # rm -rf /var/lib/pgsql/11/tablespaces/arquivo.tgz + + # rm -rf /var/lib/pgsql/11/tablespaces/expurgo.tgz + + # rm -rf /var/lib/pgsql/11/tablespaces/indice/indice.tgz + ``` + +* Acompanhamento de Logs + +* O alerta __"Too Many WAL Files"__ pode existir na segunda-feira pela manhã já que no final de semana a rotina de VACUUM gera uma grande movimentação no banco. + + +- [`VOLTAR`](../README.md) + diff --git a/docs/reativar_replicacao_sgdb_ipm_cliente.md b/docs/reativar_replicacao_sgdb_ipm_cliente.md new file mode 100644 index 0000000..2ff3c2e --- /dev/null +++ b/docs/reativar_replicacao_sgdb_ipm_cliente.md @@ -0,0 +1,3 @@ +Reativação replicação + +Documentação em andamento \ No newline at end of file diff --git a/docs/reiniciar_tomcat.md b/docs/reiniciar_tomcat.md new file mode 100644 index 0000000..df198dc --- /dev/null +++ b/docs/reiniciar_tomcat.md @@ -0,0 +1,67 @@ +# Reinicialização do tomcat + +### Definição de variáveis e capturando logs +``` +pid_tomcat=`ls -1 /tmp/*tomcat/` +data=`/bin/date +%Y%m%d` +hora=`/bin/date +%H%M%S%N` +servidor=`/usr/bin/hostname` +user=`cat /etc/tomcat/tomcat-users.xml | grep username | cut -d "\"" -f2` +pass=`cat /etc/tomcat/tomcat-users.xml | grep username | cut -d "\"" -f4` +df -h > /root/disk_usage.log +vmstat -d > /root/disk_state.log +lsof > /root/open_files.log +vmstat -s > /root/memory_state.log +ps auxf > /root/processes_state.log +uptime > /root/load.log +``` +### Coletando informações dos relatórios + +``` +curl "http://127.0.0.1:8080/WebReport/monitoring?format=pdf" -u $user:$pass > /root/$servidor-WebReport.pdf +``` +``` +curl "http://127.0.0.1:8080/FileOptimizer/monitoring?format=pdf" -u $user:$pass > /root/$servidor-FileOptimizer.pdf +``` +``` +curl "http://127.0.0.1:8080/FileSigner/monitoring?format=pdf" -u $user:$pass > /root/$servidor-FileSigner.pdf +``` +``` +curl "http://127.0.0.1:8080/JobRunner/monitoring?format=pdf" -u $user:$pass > /root/$servidor-JobRunner.pdf +``` +### Finalizando serviço do Tomcat + +``` +echo -e "\e[00;31mFinalizando Tomcat - PID: $pid_tomcat.\e[00m" +kill -9 $pid_tomcat +sleep 3 +``` +### Capturando arquivos de logs/relatórios e limpando os diretórios + +``` +zip -9 -r /root/$servidor-log-$data-$hora.zip /var/log/tomcat/catalina* /var/log/messages /root/disk_usage.log /root/open_files.log /root/memory_state.log /root/processes_state.log /root/load.log /root/*.pdf +``` +``` +mv /var/cache/tomcat/temp/javamelody/ /var/cache/tomcat/ +rm -rf /var/cache/tomcat/temp/* +mv /var/cache/tomcat/javamelody /var/cache/tomcat/temp/ +rm -rf /var/cache/tomcat/work/* +rm -rf /var/log/tomcat/* +``` +### Iniciando serviço do Tomcat + +``` +systemctl start tomcat.service +sleep 3 +pid_tomcat=`ls -1 /tmp/*tomcat/` +echo -e "\e[00;31mINFO: Iniciando Tomcat - PID: $pid_tomcat.\e[00m" +systemctl status tomcat.service +``` +### Fazendo download dos logs + +Ex.: +``` +pscp -P 9024 root@172.24.1.2228:/root/04089-POUSOALEGRE-TOMCAT7.atende.net-log-20221020-094455134587218.zip "C:/IPM" +``` + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/docs/release.md b/docs/release.md new file mode 100644 index 0000000..c7e0937 --- /dev/null +++ b/docs/release.md @@ -0,0 +1,236 @@ +# Procedimento Publicação da Release + +Passos para a publicação da release: + +[`1. Simulação e cópia da Release AtendeNet`](#1-simulação-e-cópia-da-release-atendenet) + +[`2. Teste de pacotes da Release AtendeNet`](#2-teste-de-pacotes-da-release-atendenet) + +[`3. Publicação manual da Release AtendeNet`](#3-publicação-manual-da-release-atendenet) + +[`4. Fechamento do Pacote da Release no Dicionário`](#4-fechamento-do-pacote-da-release-no-dicionário) + +[`5. Atualização da Release nos ambientes de qualidade`](#5-atualização-da-release-nos-ambientes-de-qualidade) + +[`6. Atualização da Release em Produção`](#6-atualização-da-release-em-produção) + +[`7. Publicação da Release Saúde`](#7-publicação-da-release-saúde) + + +## 1. Simulação e cópia da Release AtendeNet + +Este processo deve ser iniciado sempre na segunda-feira da semana do fechamento da Release. +Deve ser feito todos os dias da semana em questão, sempre às 12:00 e às 18:00. + +Para verificar a data de fechamento da Release, acesse no dicionário no Menu `Outros > Fábrica > Pacotes de sistemas` e ao expandir `Pacotes de Sistemas` você verá a data de fechamento, conforme na imagem abaixo: + +![Fechamento](../img/fechamento.png) + +Ou seja, no exemplo acima o fechamento fica para dia 02/12/2022, então, olhando no calendário, verificamos que a simulação de cópia da Release será iniciada no dia 28/11/2022, conforme imagem abaixo: + +![Calendario](../img/calendario.png) + +O primeiro passo para realizar a Simulação de Cópia é, no dicionário, selecionar o Grupo desejado, no caso `AtendeNet Web`, conforme imagem abaixo: + +![Grupo](../img/grupo.PNG) + +Após selecionar o grupo vá no menu `Outros > Fábrica > Pacotes de sistemas`, expanda o campo `Pacotes de Sistemas`, clique com o botão direito na Release desejada **(esteja atento as datas!)** e clique em `Liberação de Pacotes`. Conforme imagem abaixo: + +![Liberacao](../img/liberacao.png) + +Após esse processo clique em `Simular Cópia` e na próxima janela clique novamente em `Simular Cópia`. +Aguarde enquanto o processo verifica se possui erros. + +![Liberacao](../img/simular.PNG) + +Caso a simulação da cópia apresente erros nos pacotes, deverá ser aberto chamado para cada módulo com os seus erros conforme na imagem a seguir: + +![Chamado](../img/chamado.PNG) + +Caso a simulação da cópia finalize sem erros, deverá ser efetuado a cópia, clicando no botão `Copiar Produção` conforme a imagem abaixo: + +![copia](../img/copia.png) + +Será solicitado se deseja definir como "Em publicação", porém durante as cópias da semana **NÃO** deve ser definido, somente na última cópia, na sexta-feira, para finalizar o fechamento da release. + +## 2. Teste de pacotes da Release AtendeNet + + Após a finalização da cópia para produção e com o pacote da Release marcado como **"Em Publicação"**, na sexta-feira, deverá ser realizado o teste dos pacotes da Release, acessando o seguinte endereço: + +``` +https://qualidade-atendenet56.ipm.com.br/release/atualiza/atualiza_versao.php?cidade=copia_release +``` +Clicar no menu `Atualização do banco de dados` conforme imagem abaixo: + +![testar1](../img/testar1.png) + +Selecionar todos, ativar a caixa de seleção `Executar pacotes em transação única` e clicar em `Executar Atualização` no final da página, conforme imagem abaixo: + +![testar2](../img/testar2.png) + + +Caso apresente erro em algum pacote, deverá ser aberto um chamado para corrigir o erro. +Assim que o erro for corrigido, a release deverá ser aberta novamente para o técnico inserir o chamado. + +Para esse processo, clique no menu `Outros > Fábrica > Pacotes de sistemas`, expanda o ítem `Pacotes de Sistemas`, selecione o pacote da Release desejada e clique na aba `Manutenção`, conforme imagem abaixo: + +![publicando](../img/publicando.png) + +No campo `Situação` deverá estar marcado como "Publicando", clique no campo e selecione a opção "Aberto" e clique em "Gravar". + +Peça para o técnico inserir o chamado corrigido. + +Após isso, os processo de **Simulação de Cópia** e **Copiar Produção** definindo como **"Em Publicação"** deverão ser realizados novamente. + +Este processo deverá ser rápido para que ninguém insira novos chamados enquanto a Release estiver aberta novamente. + + +## 3. Publicação manual da Release AtendeNet + +### Este processo somente deverá ser executado APÓS o teste dos pacotes em transação única! ### + +Neste processo iremos obter a lista de arquivos para a publicação, editar a lista para adicionar ao SVN, adicionar os arquivos no SVN, comitar o processo e realizar a atualização da release nos ambientes de testes. + +* Obter a lista de arquivos para publicação: + +Acesse o servidor linux Apache da release via SSH: +``` +Endereço: 192.168.13.23 +Porta: 9012 +Usuário: pub_release +Senha: ******* +``` + +* Acessar a pasta da WorkCopy: +``` +$ cd /var/www/html/svn-atendenet56.ipm.com.br/origens-atendenet56.ipm.com.br/release/ +``` + +* Exportar lista de arquivos para txt: +``` +$ svn status | grep ? > /home/pub_release/release_122022.txt +``` +**Alterar o nome do arquivo conforme a necessidade* + +Para fazer o download do arquivo para sua máquina local, utilize o Prompt de comando DOS da sua máquina, acesse sua pasta onde você possui o executável `pscp` e execute o comando abaixo. +``` +$ pscp -P 9012 pub_release@192.168.13.23:/home/pub_release/release_122022.txt "C:\ipm" +``` + +Edite o arquivo com o Notepad++ e remova as seguintes linhas: +-- Remover da lista todos as linhas com os arquivos _config.*.inc +-- Remover da lista tudo que estiver nas pastas: (*tmp* - *temp* - *brasao* - *static*) +-- Remover da lista as pastas *mensagem_sistema* e *marca* (contém arquivos que são criados em tempo de execução) +-- Remover da lista o arquivo *estrutura/js/icones_fa.json* +**Não necessariamente estarão no início do caminho* + +-- Adicionar ao começo de cada linha o comando svn add ... +(Ex: svn add include/wpc/model/wpc_class_model_bo_process_processo_wpc.inc) + +Separar as linhas em grupos de 30. + +### Adicionar arquivos ao SVN para publicação + +Copiar as linhas em grupos de 30 e colar no servidor Apache. Dessa forma será adicionado os arquivos para posteriormente fazer o Commit. + +Para verificar se não ficou nenhuma linha esquecida, execute o seguinte comando que deverá mostrar as linhas que não foram adicionadas, deverá mostrar somente as linhas que foram excluídas do arquivo txt: +``` +$ svn status | grep ?| more +``` + +Para finalizar o processo de Publicação da Release, execute o Commit para enviar os arquivos ao repositório: +``` +$ sudo svn commit -m "Publicacao_Release_Manual" +``` + +Aguarde finalizar e ao final será informada a revisão da Release Publicada. + +## 4. Fechamento do Pacote da Release no Dicionário + +Após a finalização do Commit dos arquivos da Release, informar no dicionário o número do Pacote, numero da Revisão da Release, data e hora da Publicação. Clique no menu `Outros > Supervisor > Registrar Publicação Prod. Release` + +![registrar](../img/registrar.PNG) + +Para identificar qual é o número do pacote, acesse o menu `Outros > Fábrica > Pacotes de sistemas`, expanda o campo `Pacotes de Sistemas` conforme a imagem abaixo mostrando o número do pacote no círculo vermelho. + +![pacote](../img/pacote.PNG) + +## 5. Atualização da Release nos ambientes de qualidade + +A próxima etapa é testar a atualização da Release nos ambientes de qualidade. +Execute a atualização da revisão da Release nos seguintes ambientes: Caso apareça algum erro, deverá ser aberto chamado da mesma forma informada na etapa de simulação de cópia. +``` +https://origens-atendenet56.ipm.com.br:44312/ti01/atualiza/atualiza_versao.php?cidade=sc +https://origens-atendenet56.ipm.com.br:44312/ti01/atualiza/atualiza_versao.php?cidade=pr +https://origens-atendenet56.ipm.com.br:44312/ti01/atualiza/atualiza_versao.php?cidade=rs +https://origens-atendenet56.ipm.com.br:44312/ti01/atualiza/atualiza_versao.php?cidade=copia_release +https://origens-atendenet56.ipm.com.br:44312/ti01/atualiza/atualiza_versao.php?cidade=publicacao_release +``` + +Caso apareça algum erro, deverá ser aberto chamado da mesma forma informada na etapa de simulação de cópia. + + +## 6. Atualização da Release em Produção + +Após a publicação da Release, na próxima segunda-feira, deve ser atualizado os clientes pilotos, respeitando os horários de trabalho das prefeituras que foram informados na planilha de ambientes paralelos e abrir chamados com os erros se ocorrerem. +Para atualizar os clientes, deverá ser seguido o [`roteiro de atualização`](https://documentos.ipm.com.br/data-center/procedimentos/src/branch/master/docs/atualizacao_svn.md#roteiro-de-atualização-dos-clientes). +Lembrando que a lista de cliente pilotos para homologação será definida pelo gerente de fábrica. +Atualizar também os ambientes paralelos. + +__*** IMPORTANTE ***__ +__Atualizar todos primeiro na versão da Release, SOMENTE APÓS todos os ambientes estarem na Release, atualizar na última revisão.__ + +Na noite na quarta-feira atualizar todos os clientes respeitando os horários de trabalho das prefeituras que foram informados na planilha de ambientes paralelos e abrir chamados com os erros se ocorrerem. + +__*** IMPORTANTE ***__ +__Atualizar todos primeiro na versão da Release, SOMENTE APÓS todos os ambientes estarem na Release, atualizar na última revisão.__ + +Mandar e-mail conforme o padrão abaixo: + +![email-release](../img/email-release.PNG) + + +## 7. Publicação da Release Saúde + +A publicação da release IPM Saúde ocorre em paralelo com o Atende.Net, dessa forma o processo também deve ser iniciado sempre na segunda-feira da semana do fechamento. A cópia/homologação irá ocorrer todos os dias da semana nos horários predefinidos (12:00 e 18:00). + +Portanto, é necessário seguir os passos destacados abaixo: + +Selecionar o grupo "Saúde S-1": + +![grupo-saude](../img/grupo-saude.PNG) + +Após selecionar o grupo vá no menu `Outros > Fábrica > Pacotes de sistemas`, expanda o campo `Pacotes de Sistemas`, clique com o botão direito na Release desejada **(esteja atento as datas!)** e clique em `Liberação de Pacotes`. Conforme imagem abaixo: + +![liberacao-saude](../img/liberacao-saude.PNG) + +Após esse processo clique em `Simular Cópia` e na próxima janela clique novamente em `Simular Cópia`. +Aguarde enquanto o processo verifica se possui erros. + +![simular](../img/simular-saude.PNG) + +Caso a simulação da cópia apresente erros nos pacotes, deverá ser aberto chamado para o módulo com os seus erros. Se a simulação da finalizar sem erros, deverá ser efetuado a cópia, clicando no botão `Copiar Produção` conforme a imagem abaixo: + +![copia](../img/copia-saude.PNG) + +Será solicitado se deseja definir como "Em Publicação", porém durante as cópias da semana **NÃO** deve ser definido, somente na última cópia, na sexta-feira, para finalizar o fechamento da release. + +Na sexta-feira, deve ser verificado se todos os chamados foram concluídos e proceder com a simulação e cópia para produção. +Nessa etapa, lembrar de definir como "Em Publicação". Após os testes serem finalizados sem erros, deve-se clicar em "Publicar Produção"; + +![publicacao-saude](../img/publicacao-saude.png) + +Após esse processo, testar atualização selecionando a revisão da Release no seguinte endereço: +``` +https://aplicativo.atende.net/saude/?pg=atualizador +``` + +Enviar e-mail conforme o padrão: + +![email-saude](../img/email-saude.PNG) + + + +- [`VOLTAR`](../README.md) + + diff --git a/docs/release_atendenet.md b/docs/release_atendenet.md new file mode 100644 index 0000000..8a68f8d --- /dev/null +++ b/docs/release_atendenet.md @@ -0,0 +1,180 @@ +# Procedimento Publicação Release Atende.Net + +> +> Documentação do passo a passo para realizar publicação da Release Atende.Net no repositório SVN e GIT +> + + IMPORTANTE: Este processo deve ser iniciado sempre na segunda-feira da semana do fechamento da Release. +Deve ser feito todos os dias da semana em questão, sempre às 12:00 e às 18:00. + +Para verificar a data de fechamento da Release, no dicionário selecione o grupo `AtendeNet Web` e depois vá no Menu `Outros > Fábrica > Pacotes de sistemas` e ao expandir `Pacotes de Sistemas` você verá a data de fechamento de todos os pacotes. + +## 📦 Simulação de Cópia + +Com o grupo selecionado, devemos dar sequencia ao processo de simulação de cópia. + +![Grupo](../img/grupo.PNG) + +Vá no menu `Outros > Fábrica > Pacotes de sistemas`, expanda o campo `Pacotes de Sistemas`, clique com o botão direito na Release desejada **(esteja atento as datas!)** e clique em `Liberação de Pacotes`. Conforme imagem abaixo: + +![Liberacao](../img/liberacao.png) + +Após esse processo clique em `Simular Cópia` e na próxima janela clique novamente em `Simular Cópia`. +Aguarde enquanto o processo verifica se possui erros. + +![Liberacao](../img/simular.PNG) + +#### ⚠️ Caso a simulação da cópia apresente erros nos pacotes, deverá ser aberto chamado para cada módulo com os seus erros conforme na imagem a seguir: + +![Chamado](../img/chamado.PNG) + +## 📦 Cópia da Release + +Se a simulação finalizar sem erros, deverá ser efetuado a cópia, clicando no botão `Copiar Produção` + +![copia](../img/copia.png) + +#### ⚠️ Será solicitado se deseja definir como "Em publicação", porém durante as cópias da semana **NÃO** deve ser definido, somente na última cópia, na quinta-feira, para finalizar o fechamento da release. + +![copia2](../img/executar_copia_release_atendenet.png) + +![copia3](../img/tela_finalizacao_copia.png) + +![copia4](../img/copia_ok.png) + +## 📦 Teste de Pacotes + +No dia do fechamento, a última cópia deverá ser marcada como **Em Publicação**. Após a finalização, deverá ser realizado o teste dos pacotes da Release, acessando o seguinte endereço: +https://origens-qualidade-atendenet56.ipm.com.br:7443/release/atualiza/atualiza_versao.php?cidade=copia_release + +Clicar no menu `Atualização do banco de dados` conforme imagem abaixo: + +![testar1](../img/testar1.png) + +Selecionar todos, ativar a caixa de seleção `Executar pacotes em transação única` e clicar em `Executar Atualização` no final da página, conforme imagem abaixo: + +![testar2](../img/testar2.png) + +Caso apresente erro em algum pacote, deverá ser aberto um chamado para corrigir o erro. +Assim que o erro for corrigido, deverão nos informar para que seja possível inserir o chamado no grupo da release em questão. + +Após isso, os processo de **Simulação de Cópia** e **Copiar Produção** definindo como **"Em Publicação"** deverão ser realizados novamente. + +## 📦 Publicação manual no repositório SVN + +### ⚠️ Este processo somente deverá ser executado APÓS o teste dos pacotes em transação única! + +Neste processo iremos obter a lista de arquivos para a publicação, editar a lista para adicionar ao SVN, adicionar os arquivos no SVN, comitar o processo e realizar a atualização da release nos ambientes de testes. + +🔹Obter a lista de arquivos para publicação: + +Acesse o servidor linux Apache da release via SSH: +``` +Endereço: 192.168.13.23 +Porta: 9012 +Usuário: pub_release +Senha: ******* +``` +⚠️ TEMPORARIAMENTE a senha do usuário pub_release está registrada no https://datacenter.atende.net/, dentro do equipamento JITSI de Gravataí + +🔹Acessar a pasta da WorkCopy: +``` +$ cd /var/www/html/svn-atendenet56.ipm.com.br/origens-qualidade-atendenet56.ipm.com.br/release/ +``` + +🔹Exportar lista de arquivos para txt: +``` +$ svn status | grep ? > /home/pub_release/release_122022.txt +``` +**Alterar o nome do arquivo conforme a necessidade* + +Para fazer o download do arquivo para sua máquina local, utilize o Prompt de comando DOS da sua máquina, acesse sua pasta onde você possui o executável `pscp` e execute o comando abaixo. +``` +$ pscp -P 9012 pub_release@192.168.13.23:/home/pub_release/release_122022.txt "C:\ipm" +``` + +Edite o arquivo com o Notepad++ e remova as seguintes linhas: +🔹Remover da lista todos as linhas com os arquivos: +``` + _config.*.inc +``` +🔹Remover da lista tudo que estiver nas pastas: +``` + - imagem/tmp/... + - imagem/brasao/... + - imagem/marca/... + - temp/... + - static/... + - estrutura/js/mensagem_sistema/... + - estrutura/js/icones_fa.json + - atualiza/atualiza_versao_config.inc +Obs: Não necessariamente estarão no início do caminho +``` +🔹Adicionar ao começo de cada linha o comando svn add ... +``` +Exemplo: +svn add include/wpc/model/wpc_class_model_bo_process_processo_wpc.inc +svn add include/wun/model/wun_class_model_log_familia_formatacao.inc +svn add include/wun/model/wun_class_model_log_familia_formatacao_formatado.inc +svn add include/wun/model/wun_class_model_log_familia_formatacao_historico.inc +svn add include/wun/model/wun_class_model_tribunal_contas.inc +``` +Separar as linhas em grupos de 30 e após, copiar e colar no servidor Apache. Dessa forma será adicionado os arquivos para posteriormente fazer o Commit. + +🔹Para verificar se não ficou nenhuma linha esquecida, execute o seguinte comando que deverá mostrar as linhas que não foram adicionadas, deverá mostrar somente as linhas que foram excluídas do arquivo txt: +``` +$ svn status | grep ?| more +``` + +🔹Para finalizar o processo de Publicação da Release, execute o Commit para enviar os arquivos ao repositório: +``` +$ svn commit -m "Publicacao_Release_Manual" +``` + +Aguarde e ao final será informada a revisão da Release Publicada. + +![exemplo_revisao_svn](../img/exemplo_revisao_svn.png) + +Uma observação importante é que a publicação do SVN pelo dicionário está desativada, então ao clicar em publicar, aparecerá a mensagem abaixo: + +![publicar_git](../img/publicar_git.png) + +Onde deve-se seguir com a publicação da release através do dicionário "Publicar Produção", para que a release seja publicada no Git. + +## 📦 Publicação no GIT, via dicionário + +Após confirmar a mensagem acima, siga os passos listados para realizar a publicação no GIT: + +![publicar_git1](../img/publicar_git_clicar_nao.png) + +Ao exibir a mensagem acima, clique em não, pois será a primeira publicação via dicionario! + +![publicar_git2](../img/publicar_git_buscando_lista.png) + +Confirme o commit dos arquivos: + +![publicar_git3](../img/publicar_git_confirmar_commit.png) + +![publicar_git4](../img/publicar_git_confirmar_commit2.png) + +Após isso, aguarde até que retorne a mensagem com a confirmação da publicação, conforme exemplo abaixo: + +![publicar_git5](../img/publicar_git_mensagem_ok.png) + +## 📦 Fechar pacote no Dicionário + +Neste momento, a relase já estará publicada no SVN e no GIT, ficando pendente o fechamento do pacote. Para que nesse momento, as liberações possam ocorrer normalmente em operação. + +Para realizar este passo, será necessário salvar o numero do pacote, a revisão SVN e a hash GIT! + +A revisão GIT estará informado no campo de manutenção do pacote, na aba de repositórios: + +![pegar_hash_git](../img/pegar_hash_git.png) + +Após salvar as informações necessárias, vá na rotina Outros > Supervisor > Registar Publicação Prod. Release. + +Preencha os campos conforme abaixo: + +![registra_publicacao](../img/registrar_publicacao_svn_git_saude.png) + +### ⚠️ Caso não consiga realizar a publicação pelo Dicionário, utilize este [`link`](./troubleshooting_fechamento_release.md) diff --git a/docs/release_ipmsaude.md b/docs/release_ipmsaude.md new file mode 100644 index 0000000..d7673c9 --- /dev/null +++ b/docs/release_ipmsaude.md @@ -0,0 +1,102 @@ +# Procedimento Publicação Release IPM Saúde S-1 + +> +> Documentação do passo a passo para realizar publicação da Release IPM Saúde S-1 no repositório SVN e GIT +> + + IMPORTANTE: Este processo deve ser iniciado sempre na segunda-feira da semana do fechamento da Release. +Deve ser feito todos os dias da semana em questão, sempre às 12:00 e às 18:00. + +Para verificar a data de fechamento da Release, no dicionário selecione o grupo `Saúde S-1` e depois vá no Menu `Outros > Fábrica > Pacotes de sistemas` e ao expandir `Pacotes de Sistemas` será possivel visualizar a data de fechamento de todos os pacotes. + +## 📦 Simulação de Cópia + +A publicação da release IPM Saúde ocorre em paralelo com o Atende.Net, dessa forma o processo também deve ser iniciado sempre na segunda-feira da semana do fechamento. A cópia/homologação irá ocorrer todos os dias da semana nos horários predefinidos (12:00 e 18:00). + +Portanto, é necessário seguir os passos destacados abaixo: + +Selecionar o grupo "Saúde S-1": + +![grupo-saude](../img/grupo-saude.PNG) + +Após selecionar o grupo vá no menu `Outros > Fábrica > Pacotes de sistemas`, expanda o campo `Pacotes de Sistemas`, clique com o botão direito na Release desejada **(esteja atento as datas)** e clique em `Liberação de Pacotes`. Conforme imagem abaixo: + +![liberacao-saude](../img/liberacao-saude.PNG) + +Após esse processo clique em `Simular Cópia`, e na próxima janela, clique novamente em `Simular Cópia`. +Aguarde enquanto a etapa de consistencia é realizada. + +![simular](../img/simular-saude.PNG) + +![simular2](../img/simular-saude2.PNG) + +Caso a simulação apresente erro na consistencia, abra um chamado para o módulo com o retorno exibido na tela. +Se a simulação finalizar sem erros, deverá ser efetuado a cópia, clicando no botão `Copiar Produção` conforme a imagem abaixo: + +![copia](../img/copia-saude.PNG) + +Será solicitado se deseja definir como "Em Publicação", porém durante as cópias da semana **NÃO** deve ser definido, somente na última cópia, na quinta-feira, para finalizar o fechamento da release. + +## 📦 Publicação no repositório SVN, via Dicionário + +Após a última cópia e o pacote estar definido como **Em Publicação**, deverá seguir com a publicação no repositório SVN através do dicionario. + +![copia](../img/copia_release_saude_finalizada.png) + +Para isso, clique em `Publicar Produção` e siga conforme os prints abaixo: + +![copia](../img/publicar_dicionario_ipmsaude_svn.png) +E então, aguarde enquanto é feito o commit dos arquivos: + +![copia](../img/aguarde_publicacao_svn_ipmsaude.png) + +Atenção, quando finalizar a parte do SVN, será exibida uma mensagem sobre a publicação no GIT. Dessa forma, continue a realizar o processo conforme documentado no tópico abaixo. + +## 📦 Publicação no GIT, via dicionário + +Como é a primeira publicação no GIT, quando aparecer a mensagem abaixo, clique em NÃO! + +![git_saude](../img/publi_git_saude.png) + +Após o carregamento da lista de arquivos, confirme o Commit: + +![git_saude2](../img/commit_arquivos_saude_git.png) + +![git_saude3](../img/commit_arquivos_saude_git2.png) + +E então, aguarde enquanto o processo é finalizado. + +![git_saude4](../img/publicando_saude_git.png) + +![git_saude5](../img/publicando_saude_git_ok.png) + + +## 📦 Fechar pacote no Dicionário + +Neste momento, a relase já estará publicada no SVN e no GIT, ficando pendente o fechamento do pacote. Para que nesse momento, as liberações possam ocorrer normalmente em operação. + +Para realizar este passo, será necessário salvar o numero do pacote, a revisão SVN e a hash GIT! + +A revisão GIT e SVN estarão informados no campo de manutenção do pacote, na aba de repositórios: + +![pegar_hash_git](../img/pegar_hash_git_saude.png) + +Após salvar as informações necessárias, vá na rotina Outros > Supervisor > Registar Publicação Prod. Release. + +Preencha os campos conforme abaixo: + +![registra_publicacao](../img/registrar_publicacao_svn_git_saude.png) + + +## 📦 Teste de Atualização + +Após esse processo, testar atualização selecionando a revisão da Release no seguinte endereço: +``` +https://aplicativo.atende.net/saude/?pg=atualizador +``` + +## 📦 Enviar E-mail Informando a Publicação + +Enviar e-mail conforme o padrão: + +![email-saude](../img/email_saude_publi_release.png) \ No newline at end of file diff --git a/docs/remocao_ged.md b/docs/remocao_ged.md new file mode 100644 index 0000000..2411147 --- /dev/null +++ b/docs/remocao_ged.md @@ -0,0 +1,193 @@ +## ⚙️ Procedimentos para Remoção do GED + +- Atenção pois o procedimento poderá ser executado somente após horário. + +--- +### 📁 Atualização da Planilha + +1. Acesse a planilha **"Manutenção Servidores - 15082024 v1"** Na guia **MSD - Docker** +2. Procure pelo cliente que está sendo removido as configurações do GED +3. Remova a linha com a MSD-03, conforme na imagem abaixo, que foi utilizado como exemplo o cliente PM - Lapa. + +![Remoção MSD-03 Planilha](../img/remocao_msd03_planilha.png) +![Remoção MSD-03 Planilha](../img/remocao_msd03_planilha1.png) + +4. Acessa agora a guia **Stacks Servlets - Docker** e procure novamente pelo cliente +5. Altere o valor da coluna C para `N/A` e o valor da coluna U para `0` +--- +### 🔹 Alterar o endereço dos microsserviços do cliente no AtendeNet + +1. Acessar o AtendeNet do cliente, como no exemplo está sendo utilizado o cliente PM - Lapa +- __URL:__ https://lapa.atende.net + +2. Acesse a rotina de Microsserviços +- __Caminho:__ Gerenciamento do Sistema » Microsserviços » Microsserviços + +3. Realizar alteração nos endereços da aplicação `FileOptimizer`, atualmente esses endereços vão estar todos direcionados para a porta `8085`, devem então ser alterados, ficando na porta `8083`. +- __Nome:__ WebCodeReader +- __Nome:__ WebFileInfo +- __Nome:__ WebOcrReader +- __Nome:__ WebPdfJoin +- __Nome:__ WebThumbnail + +Conforme imagem abaixo: +![Alteração endereços dos Microsserviços](../img/alteracao_enderecos_microservicos.png) +--- + +### 📦 Remover a stack do OCR no portainer do cliente + +1. Acessar o portainer do cliente com usuário `admin` no endereço: https://:9443 +2. Selecionar a stack OCR e remover, conforme mostra a imagem abaixo +![Remoção OCR Portainer](../img/remocao_ocr_portainer.png) +3. Conforme os novos valores de recursos da planilha, realizar ajuste nas stacks. +- WebReport +- JobRunner +- FileSigner +- FileOptimizer + +Realizar o Pull And Redeploy após cada alteração na stack. + +4. Realizar atualização dos valores também no GTT, no equipamento cluster. Rotina para realizar o procedimento: +- Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Serviços do Equipamento » Configuração de Serviço + +--- + +### 🛠️ Remover a máquina MSD-03 do cluster docker swarm e das configurações do GlusterFS + +1. Acessar via SSH todas as VMs MSD pertencentes no ambiente do cliente, como o exemplo está sendo realizado com o cliente PM - Lapa, foi acessado a MSD 01 e 03. +2. Com usuário root, realizar a execução dos comandos abaixo na `MSD-01`. +- __2.1.__ Executar o comando `docker node ls` e verificar quantas máquinas MSD possuem no cluster swarm, caso sejam 3, todas elas estarão como manager, sendo necessário então rebaixar os nodes, executando os comandos abaixo +```bash +docker node demote 00000-cliente-msd-02-2400.atende.net +docker node demote 00000-cliente-msd-03-2400.atende.net +``` + +Como no exemplo estamos utilizando o cliente PM - Lapa, que tem apenas duas máquinas MSD, não será necessário a execução dos comandos acima. +```bash +root@01536-lapa-msd-01-2400:~# docker node ls +ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION +rxyewq1gyoyvyr5nyqzx8f9nm * 01536-lapa-msd-01-2400.atende.net Ready Active Leader 24.0.7 +9cmjx1oq1ksrha5oz07cdfvgh 01536-lapa-msd-03-2400.atende.net Ready Active 24.0.7 +``` + +- __2.2.__ No host manager, drenar node que será excluído do docker swarm +```bash +docker node update --availability drain 01536-lapa-msd-03-2400.atende.net +``` + +- __2.3.__ No host MSD-03 que será excluído, sair do cluster swarm +```bash +docker swarm leave +``` + +- __2.4.__ No host manager, remover node MSD-03: +```bash +docker node rm 01536-lapa-msd-03-2400.atende.net +``` + +- __2.5.__ Executar o comando abaixo novamente para verificar se o servidor foi removido +```bash +docker node ls +``` + +3. Acessar novamente o portainer do cliente com usuário `admin` no endereço https://:9443 e remover o servidor MSD-03 do environment e grupo. +- __3.1.__ Home >> Environments +![Remoção Environment Portainer](../img/remocao_environment_portainer.png) + +4. Via SSH, na MSD que está sendo removida, executar os comandos abaixo para remover as configurações do GlusterFS. +- __4.1.__ Desmonstar o volume do GlusterFS +```bash +umount /var/lib/docker/data +``` + +- __4.2.__ Verificar o status atual do GlusterFS na MSD-01, onde ainda deverá estar a MSD-03 +```bash +gluster volume status +gluster peer status +gluster pool list +``` + +## Atenção nos procedimentos abaixo, pois deve ser analisado quantas VMs MSD o cliente tem. + +- O procedimento é diferente, pois existe alteração no modo do replicação dos arquivos do GlusterFS. + +### Executar os procedimentos abaixo caso o cliente possua duas VMs MSD. + +- __4.3.__ Executar os comandos abaixo na MSD-01, para remover as configurações do GlusterFS +```bash +umount /var/lib/docker/data +gluster volume stop docker-shared +gluster volume delete docker-shared +gluster volume create docker-shared 01536-lapa-msd-01-2400.atende.net:/var/lib/docker/shared force +gluster volume start docker-shared +gluster volume set docker-shared network.ping-timeout "5" +gluster volume set docker-shared performance.stat-prefetch off +mount -t glusterfs localhost:docker-shared /var/lib/docker/data/ +gluster peer detach 01536-lapa-msd-03-2400.atende.net +rm -rf /var/lib/docker/data/.*anonymous* +``` + +__4.4.__ Executar os comandos abaixo, para garantiar o funcionamento do GlusterFS + +```bash +gluster volume info +gluster volume status +gluster peer status +gluster pool list +gluster volume heal docker-shared info +``` +--- +### Executar os procedimentos abaixo caso o cliente possua três VMs MSD. +--- +### 🌐 Remover o cadastro no DSN Forwarder + +1. Acessar o a interface Web do Firewal do cliente, com o endereço https://:9080 + +2. Realizar então a remoção da VM MSD-03, que está sendo removida do ambiente do cliente. +- Services >> DNS Forwarder +![Remoção MSD DNS Forwarder](../img/remocao_msd_dns_forwarder.png) +--- + +--- +### ⚙️ Desligar a VM no VMware vSphere e removê-la. + +1. Acessar o VMWare vSphere +- PR: pr01-ger-vcsa01.atendenet.local +- SP: sp01-ger-vcsa01.atendenet.local + +2. Buscar pelo cliente e encontrar a VM que será desligada +![Desligar VM MSD vSphere](../img/shutdown_vm_vsphere.png) + +__2.1.__ Com botão direito na VM MSD-03 seleciona +- Power >> Shut Down Guest OS +![Desligar VM MSD vSphere](../img/shutdown_vm_vsphere1.png) + +Verificar se a VM deverá ser removida no mesmo momento do desligamento ou aguardar um tempo. +--- + +### ⚙️ Realizar reinicialização das VMs MSD que permaneceram ligadas no ambiente do cliente + +```bash +reboot +``` + +--- +### 📊 Remover o cadastro no Zabbix + +1. Acessar o Zabbix para realizar a exclusão da VM que foi desligada acima +- PR: https://pr01-datacenter.ipm.com.br:8085/ +- SP: https://sp01-datacenter.ipm.com.br:8085/ + +2. Acessar Configuration >> Hosts e buscar pelo cliente, conforme mostra imagem abaixo +![Remover VM do Zabbix](../img/remover_vm_zabbix.png) + +__2.1.__ Selecionar a VM que será removida, como o exemplo está sendo utilizado com o cliente PM - Lapa, será removido a VM: `01536-lapa-msd-03-2400.atende.net` +- Selecionar a VM >> Delete +![Remover VM do Zabbix](../img/remover_vm_zabbix1.png) +--- + +--- +### 📊 Remover o cadastro no GTT + +Verificar como deverá ser realizado o procedimento abaixo. +--- diff --git a/docs/remover_node_slony.md b/docs/remover_node_slony.md new file mode 100644 index 0000000..fa117ec --- /dev/null +++ b/docs/remover_node_slony.md @@ -0,0 +1,31 @@ +# Roteiro de Remoção de um Node + +### IMPORTANTE +Esse roteiro serve para remover um node após o chamado ser retornado com a informação de que a migração foi finalizada. + +## Removendo Node do Slony - Origem + +Edite conforme as informações do node a ser removido: + +``` +# vim /usr/local/slony1/bin/uninstall_node_2.cmd + +cluster name=replication_ipmfiscal; + +node 1 admin conninfo ='dbname=nome_base_origem host=127.0.0.1 user=postgres'; +node 3 admin conninfo ='dbname=nome_base_destino host=172.24.1.24 port=65432 user=postgres'; + +uninstall node (id=3); +drop node (id=3, event node = 1); +``` + +``` +# /usr/local/slony1/bin/slonik /usr/local/slony1/bin/uninstall_node_2.cmd +``` + +O slony apaga o node mas não interrompe a monitoração. Para isso, executar o sql abaixo: +Ele remove da monitoração da replicação qualquer tabela que não tenha um slave. + +```ruby +select replicacao.fn_interrompe_replicacao_tabelas_sem_slave() +``` \ No newline at end of file diff --git a/docs/replicacao_arquivos_ipm_cliente.md b/docs/replicacao_arquivos_ipm_cliente.md new file mode 100644 index 0000000..2e75e55 --- /dev/null +++ b/docs/replicacao_arquivos_ipm_cliente.md @@ -0,0 +1,339 @@ + +# Ativação da Replicação Anexos - PostgreSQL 16 + +Obs. Esse procedimento é voltado ao cliente que não possui nenhum tipo de configuração de replicação feita. Caso o cliente já tenha a replicação do banco de dados ativa, deve ser utilizado o manual abaixo: + +* [` Replicação Arquivos/Anexos + Banco de Dados:`](./replicacao_arquivos_bancodedados.md) + +Caso o mesmo não possua nenhum tipo de configuração de Replicação, basta continuar seguindo este manual! + +## Firewall - PfSense + +Acesse o Firewall do cliente através da INT_RT na porta padrão 9080 passando as credencias para realizar o login + +* Configurar o Firewall para receber a replicação: + +Primeiro passo é criar um Aliases do IP público passado pelo cliente + +``` +Caminho: Firewall / Aliases / IP + +Preencha o nome, IP e descritivo do Alises que você esta criando. +``` +![Aliases](../img/firewall_aliases_ip.png) + +Após a criação do Aliases, será necessária a criação de uma regra na Interface LAN do cliente liberando a porta padrão da replicação 61100: + +``` +Action: Pass +Interface: LAN +Protocol: TCP/UDP +Source: LAN Net +Destination: Single host or alias (Cliente_DC) - aqui você indicara o Aliases criado no passo anterior +Description: Replicacao +``` + OBS: Lembre-se sempre de manter a regra criada na interface acima das regras de bloqueios LAN Net IPv4 e IPv6 + +![Rules_Replicacao](../img/rules_lan_replicacao.png) + +## SGDB - MASTER - PRODUÇÃO + +* Após a criação do Aliases e liberação da porta para a replicação, conecte no SGDB do cliente para realizar as configurações: +* Via Putty conecte no banco master do cliente desejado através do IP INT_RT e a porta padrão 9032. + +Devido a versão 16 do Postgres, primeiro será necessário realizar o login com o usuário ipm, e depois de efetuado o login, você deverá se tornar root + +``` +usuário: ipm +senha: deve ser consultada no datacenter.ipm.com.br +``` + + Caso você execute os passos abaixo e o mesmo não solicite a senha, deve ser verificado se existe comunicação com o banco replicado, através de ping, traceroute ou telnet para testar e garantir a comunicação entre os dois ambientes. + +``` +Realize a conexão ao banco Slave do cliente: + +ssh -p 61100 ipm@XXX.XXX.XXX.XXX +Após executar o comando o mesmo irá solicitar a senha. Passe a senha conforme repassado pelo cliente +``` + +## SGDB - SLAVE + +Após conectar no banco replicado, execute o comando abaixo para se tornar root + +``` +su - root +Após executar o comando o mesmo irá solicitar a senha. Passe a senha conforme repassado pelo cliente +``` + +Logado com o root, crie o usuário para a replicação (Substituia pelo código do cliente e defina uma senha para o usuário): + +``` +useradd rep00000 +passwd rep00000 +``` + +Em seguida, adicione o usuário criado (rep00000) no mesmo grupo e pasta do usuário postgres: + +``` +# vim /etc/passwd + +postgres:x:121:125:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash +rep00000:x:121:125:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash +``` + +Crie a pasta de acesso via SSH no servidor Replicado + +``` +ssh root@127.0.0.1 (yes) + +Será exibido a mensagem abaixo e solicitado a senha: + +The authenticity of host '0.1.2.3 (0.1.2.3)' can't be established. +ED25519 key fingerprint is SHA256:MN8C+wPjLZUq2Zppy8c9qCsrHhnhTqTaY1fyKJO8+RI. +This key is not known by any other names +Are you sure you want to continue connecting (yes/no/[fingerprint])? yes +Warning: Permanently added '0.1.2.3' (ED25519) to the list of known hosts. + +Informe a senha para conexão: + +root@127.0.0.1's password: +Permission denied, please try again. + +Após o alerta de permission denied, clique em ctrl + c para cancelar a operação + +Obs. Mesmo com erro, a operação acima criou a pasta .ssh no usuário root +``` + + IMPORTANTE: O comando abaixo, só deve ser executado caso o ambiente seja exclusivo para a replicação dos arquivos (anexos do sistema). Caso o mesmo já esteja executando a replicação do Banco de Dados ou será configurado junto com a dos arquivos, o passo abaixo NÃO deve ser executado + +``` +systemctl stop postgresql.service +systemctl disable postgresql.service +``` + +Agora iremos realizar algumas configurações e limpezas no ambiente, deixando o mesmo preparado para receber a replicação. + +Ajustar o hosts da maquina, usando o mesmo padrão de nome do Banco de dados master com a palavra SLAVE no final e também substituindo o IP conforme o IP da Interface da VM: + +``` +#vim /etc/hosts + +IP LAN da Maquina Virtual +00000-cliente-bdp-01-1600-slave +``` + +Ajustar o hostname da maquina, usando o mesmo padrão de nome do Banco de dados master com a palavra SLAVE no final: + +``` +#vim /etc/hostname + +00000-cliente-bdp-01-1600-slave.atende.net +``` + +Remover Script Default da IPM que vem junto com o template disponibilizado para o cliente + +``` +rm -rf /root/bkp_remoto/ +``` + +Remover Agendamento do Crontab + +``` +crontab -r +``` + +Remover Configurações de Ponto de Montagem da Storage do FSTAB: + +``` +vim /etc/fstab +//172.16.0.246/Backup /var/lib/postgresql/storage cifs users,noauto,username=serverlinux,password=XXXXXXXXX,domain=ATENDENET,uid=26,gid=26,rw,vers=2.0 0 0 +``` + +No momento do envio das configurações do ambiente para o cliente, é enviado o espaço em disco necessário para replicar os arquivos. Para criar o disco com o espaço disponibilizado pelo cliente, execute os passos abaixo: + +Por padrão, o template da Maquina Virtual já terá um disco de 200GB alocado para a partição, sendo agora necessário apenas a expansão do mesmo: + +``` +# Expandir ampliando o disco existente +# Listar os discos (Identificar o disco referente ao lv postgresql--vg03-lv--archived): + lsblk + + Retorno: + sdd 8:48 0 1,4T 0 disk + └─postgresql--vg03-lv--archived 253:2 0 200GB 0 lvm /var/lib/postgresql/16/tablespaces/archived + +# Após identificado o disco, realize o resize do mesmo: + pvresize /dev/sdd + + # Listar os discos e os espaços livres: + pvscan + + Retorno: + PV /dev/sdd VG postgresql-vg03 lvm2 [<200 GB / 1200 GB free] + + # Após isso, iremos expandir o volume lógico, alocando 100% do espaço livre para o disco: + + lvextend -l +100%FREE /dev/postgresql-vg03/lv-archived + + # Consultando novamente o espaço: + + pvscan + + Retorno: + PV /dev/sdd VG postgresql-vg03 lvm2 [<1,37 TiB / 0 free] + + # Agora iremos expandir o Sistema de arquivos: + + xfs_growfs /var/lib/postgresql/16/tablespaces/archived + + # Listas discos (Agora podemos verificar que o espaço no disco é o mesmo do alocado no volume): + lsblk + + Retorno: + sdd 8:48 0 1,4T 0 disk + └─postgresql--vg03-lv--archived 253:2 0 1,4T 0 lvm /var/lib/postgresql/16/tablespaces/archived + + # Listar pontos de montagens no Linux! (Verifique se a expansão ocorreu de forma adequada.) + df -h + + Retorno: + /dev/mapper/postgresql--vg03-lv--archived 1,4T 11G 1,4T 1% /var/lib/postgresql/16/tablespaces/archived +``` + +Após o ajuste do disco, iremos criar o diretório para receber a replicação dos arquivos/anexos do sistema: + +``` +su - postgres +cd /var/lib/postgresql/16/tablespaces/archived/ +mkdir backup +mkdir -p backup/corrente backup/permanente +chmod 700 backup/ -R +``` + +Após todos os passos, execute um reboot no servidor: + +``` +su - root +reboot +``` + + +## TASK03 - DATA CENTER PR + +Após todo o ambiente configurado, é necessário realizar a configuração da rotina de Copia/Replicação dos Arquivos(Anexos) do sistema: + +Conecte no Servidor TASK03 no ambiente Data Center do PR (172.16.0.103): + +``` +#### Executar no Task03/PR01 ##### +rclone config +n +name> (Database) +Storage> 45 +host> (IP Público do cliente) +user> rep00000 +port> 61100 +SSH Password, Choose an alternative below. Press Enter for the default> (y) Yes, type in my own password +Enter the password: (senha do usuário rep00000) +Confirm the password: (senha do usuário rep00000) +key_pem> +key_file> +Option key_file_pass> (n) +pubkey_file> +key_use_agent> +use_insecure_cipher> +disable_hashcheck> true +ssh> +Edit advanced config? (n) +Configuration complete. (y) +``` + +* Execute o Script Inicial dos arquivos Atuais + +``` +- Transferência de arquivos atuais (Ceph RedHat / Apache) - pasta corrente +rclone sync /storage/pr01-dd6400_01/STORE/Arquivos/rsync/00000_cliente/00000_cliente-full/00000_cliente/arquivo 00000_cliente:/var/lib/postgresql/16/tablespaces/archived/backup/corrente -v --no-update-modtime --size-only &>> /root/bkp_files/log/00000_cliente-20241113-14224000000000.log & +``` + +* Assim que o Script Inicial for executado, deve-se comentar o arquivo de configuração do Rclone do cliente em questão: + +``` +#Comentar Configuração do Rclone do cliente: + +/root/.config/rclone/rclone.conf +``` + +* Após finalizado a replicação manual (inicial) dos arquivos do CEPH Redhat/Apache, descomente a configuração do backup incremental do cliente no arquivo rclone.conf do servidor TASK03 + + +### Arquivos Históricos + +Caso o cliente possua arquivos históricos nas Storage CEPH Ubuntu ou ISILON, os procedimento abaixo devem ser executados: + +``` +Exemplo de Script para Arquivos Históricos - ISILON E Ubuntu - Exemplo com o Cliente São José: + +- Transferência de arquivos antigos (Ceph Ubuntu / Isilon) - pasta permanente +rclone copy /storage/pr01-dd6400_01/STORE/Anual/00000_cliente/00000_cliente-20241113-143000-arquivos-s3-rclone 00000_cliente:/var/lib/postgresql/16/tablespaces/archived/backup/permanente -v &>> /root/bkp_files/log/00000_cliente-20241113-14300000000000.log & + +rclone copy /storage/pr01-dd6400_01/STORE/Anual/00000_cliente/storage/s3/00000_cliente/00000_cliente 00000_cliente:/var/lib/postgresql/16/tablespaces/archived/backup/permanente -v &>> /root/bkp_files/log/00000_cliente-20241113-14300000000000.log & +``` + +## ZABBIX - MONITORAMENTO + +Para o acompanhamento do funcionamento do ambiente Slave, deve ser cadastrado o Equipamento do SGDB Slave do cliente no Monitoramento do Zabbix: + +Devido ao servidor não estar no ambiente do Data Center da IPM, o monitoramento será apenas via ICMP + +Configuration > hosts + +``` +Hostname: 00000-cliente-bdp-01-1600-slave.atende.net +Groups: cliente.atende.net e Virtual Machines +Agent: XXX.XXX.XXX.XXX - Informe o IP Público passado pelo cliente +Monitored by proxy: PX_PMCliente - Adicione no mesmo proy do cliente em questão +``` + + Obs: Caso o IP do cliente não esteja liberado para ICMP deve ser solicitado a liberação para o bloco IP do Data Center 177.11.20.0/22 afim de conseguirmos monitorar o ambiente. + +Exemplo do banco replicado de Pinhais: + +![Zabbix_Slave](../img/zabbix_ambiente_slave.png) + +## GTT - Cadastro Equipamento + +Após todas as configuração dos passos anterior, deve ser cadastrado o equipamento no GTT afins de documentação: + +``` +#Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento +Nome: 00000-cliente-bdp-01-1600.atende.net +Tipo de Equipamento: Banco de dados +Local da Instalação: Selecione o Data Center onde o cliente encontra-se +Classificação: Virtual +Sistema Operacional: Linux - Ubuntu Linux (64-bit) +``` + +![GTT_Equipamento_Cadastro](../img/gtt_sgdb_cadastro.png) + +Em seguida, cadastre os três usuários (root), (ipm) e o (rep00000) criado anteriormente: + +Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Usuários do Equipamento + +![GTT_Equipamento_Usuario](../img/gtt_sgdb_cadastro_user.png) + +Cadastre também as Interfaces de rede (WAN e LAN) do ambiente do cliente (Lembre-se de desmarcar a opção Gerenciar IPv4): + +Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Interfaces do Equipamento + +![GTT_Equipamento_Usuario](../img/gtt_sgdb_cadastro_rede.png) + +Vincule também a instancia do cliente no Equipamento que esta sendo cadastrado: + +Caminho: Gerenciamento Data Center » Manutenção » Equipamentos » Equipamento » Consultar Equipamento x Instância + +![GTT_Equipamento_Usuario](../img/gtt_sgdb_cadastro_instancia.png) + + +- [`VOLTAR`](../README.md) + diff --git a/docs/replicacao_nativa_fiscal_s1.md b/docs/replicacao_nativa_fiscal_s1.md new file mode 100644 index 0000000..8586f62 --- /dev/null +++ b/docs/replicacao_nativa_fiscal_s1.md @@ -0,0 +1,357 @@ +# Roteiro Replicação Nativa - Fiscal S1 + +>Documentação do procedimento de ativação da replicação do sistema Fiscal S-1 para o S-2, para os casos onde a Origem está na versão 11.5 e destino no 16. +Como exemplo: pr.nfs-e.net, rs.nfs-e.net e sc.nfs-e.net + +>Caso deseja ativar replicação com a origem na versão 9.3, deve-se seguir esta documentação [`Ativação Slony Fiscal - Inicial`](./replicacao_slony_fiscal_s1.md) + +## Processos Adicionais +> Os links abaixos são referentes a desativação e remoção da replicação. + +[`1 - Interromper Replicação Nativa`](../docs/replicacao_nativa_interromper.md) +[`2 - Remover Estrutura`](../docs/replicacao_nativa_remover_estrutura.md) + + +## Destino - Banco Cliente Versão 16 (00000-cliente-bdp-01-1600.atende.net) + +No banco do cliente (PostgreSQL16), criar um disco para a replicação do Fiscal: + +>Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +>Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD >crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. + +``` +su - root + +Criando pasta: + +mkdir -p /var/lib/postgresql/16/tablespaces/replicacao + +Adicionando disco: + +lsblk +pvcreate /dev/sde +vgcreate postgresql-vg10 /dev/sde +lvcreate -l +100%FREE -n lv-replicacao postgresql-vg10 +mkfs.xfs /dev/mapper/postgresql--vg10-lv--replicacao +blkid | grep replicacao +blkid | grep replicacao | grep "0cbfc3a7-07d2-483e-885a-73936788b157" +ls -l /dev/disk/by-id/ | grep dm-7 +#Retorno: dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h -> ../../dm-7 + +vim /etc/fstab + +# disco replicacao slony +/dev/disk/by-id/dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h /var/lib/postgresql/16/tablespaces/replicacao xfs defaults,noatime,nodiratime 0 1 + +Montar o disco: +mount /var/lib/postgresql/16/tablespaces/replicacao + +Aplicando permissão para o diretório: + +chown postgres.postgres /var/lib/postgresql/16/tablespaces/replicacao +``` + +Verificar se o IP do banco Master do Fiscal S1 esta liberado no pg_hba.conf +``` +vim /etc/postgresql/16/main/pg_hba.conf +Ex.: host all all 172.16.1.xxx/32 trust (Libera Fiscal S1) + +systemctl reload postgresql.service +``` +Conferir configurações no arquivo postgresql.conf: +``` +cd /etc/postgresql/16/main/ +cp postgresql.conf postgresql.bkp-antesslony +vim postgresql.conf + +wal_level = logical +max_wal_senders = 3 +max_replication_slots = 3 +max_sync_workers_per_subscription = 2 +wal_receiver_status_interval = 60s +wal_receiver_timeout = 300s + +OBSERVAÇÃO: Se o parametro estiver max_worker_processes = 3, deverá ser alterado para max_worker_processes = 4 +``` + + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +(systemctl restart postgresql.service) + +Criar a tablespace replicacao para recebimento dos dados: + +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/postgresql/16/tablespaces/replicacao'; +``` +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` +Liberar porta 65432 no Firewall do cliente, para a conexão entre PG11 x PG16: +Vá em: Firewall > Rules > LAN +Destination: 65432 +Description: Bdp-1150-Fiscal + +![Libera Porta Firewall](../img/libera_porta_firewall_replicacao_nativa.png) + +## Origem - Banco Fiscal S-1 +Liberar IP do cliente no hba, apenas para o usuario replicação. Inserir linha conforme abaixo: +``` +cd /var/lib/pgsql/11/data/ +vim pg_hba.conf + +Ex.: host all replicacao 172.XX.1.XX/32 trust + +systemctl reload postgresql-11.service +``` +Alterar as configurações do postgresql.conf +``` +cd /var/lib/pgsql/11/data/ +cp postgresql.conf postgresql.bkp-antesslony +vim postgresql.conf + +wal_level = logical +max_wal_senders = 5 +max_replication_slots = 6 +max_sync_workers_per_subscription = 2 +``` + + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +(systemctl restart postgresql.service) + + +Criar usuário replicação (via pgadmin): +```ruby + CREATE ROLE replicacao WITH LOGIN + SUPERUSER + INHERIT + REPLICATION + CONNECTION LIMIT -1 + PASSWORD '123456'; + ``` +Deve-se executar o script para criar a estrutura no banco slave, para isto edite o script de backup que fica no servidor master(IPMFiscal) + +```ruby +su - root + +vim backup_estrutura_slony_ipmfiscal.sh + +# Altere +cod_fiscal="XXX" +IP_Destino="172.XX.1.XX" +Porta_Destino="65432" +BD_Destino="00000_cliente" + + +# Execute o script - O backup e o log serão criados na storage de backup "X:\STORE\Transferir\00002_ipmfiscal" +./backup_estrutura_slony_ipmfiscal.sh + +# Ao final, confira os log´s. +cat XX*.log | grep ERROR | uniq -u (Substituir pelo Código do Schema) + +# Conferir se os Schemas foram criados, o comando deve retornar os Schemas restaurados, caso não existe favor verificar +cat XX*.log | grep "creating SCHEMA" | uniq -u (Substituir pelo Código do Schema) +``` +## Validações +Executar scripts abaixo no banco de DESTINO: +```ruby +-- Schema: migracao_fiscal +-- DROP SCHEMA migracao_fiscal; +CREATE SCHEMA migracao_fiscal + AUTHORIZATION dbaipm; + +GRANT ALL ON SCHEMA migracao_fiscal TO dbaipm; +GRANT ALL ON SCHEMA migracao_fiscal TO administradores; +GRANT USAGE ON SCHEMA migracao_fiscal TO consultas; +GRANT ALL ON SCHEMA migracao_fiscal TO migradores; +GRANT ALL ON SCHEMA migracao_fiscal TO sistema; +``` +Setar privilégios schemas fiscal: +```ruby +do +$body$ +declare + r_objeto record; +begin + for r_objeto in (select 'GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO dbaipm; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO administradores; + GRANT USAGE ON SCHEMA "'||pg_namespace.nspname||'" TO consultas; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO migradores; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO sistema;' as cmd, + '"'||pg_namespace.nspname||'"' as nome + from pg_namespace + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico', 'migracao_fiscal', 'migracao_saude') + ) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando grants do schema '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando grants do schema %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; +end; +$body$; +``` + +## Script de teste + +IMPORTANTE: Necessário alterar as informações abaixo, para as desejadas. +Ex.: dbname, 00000_cliente e host + +```ruby +# ORIGEM - Fiscal S1 +create table replicacao.tbteste2(col1 integer primary key, col2 text); +insert into replicacao.tbteste2 values(1,'1'); +select * from replicacao.tbteste2; + +create publication publication_mig_ipm_fiscal_00000_cliente; +alter publication publication_mig_ipm_fiscal_00000_cliente add table replicacao.tbteste2; + +# DESTINO - Cliente bdp-01-1600 +create table replicacao.tbteste2(col1 integer primary key, col2 text); +create subscription subscription_mig_ipm_fiscal_00000_cliente connection 'host=172.16.1.xx port=65432 user=replicacao dbname=00002_ipmfiscal_xx' publication publication_mig_ipm_fiscal_00000_cliente; + +select * from replicacao.tbteste2; + +# ORIGEM - Fiscal S1 +insert into replicacao.tbteste2 values(2,'2'); + +# DESTINO - Cliente bdp-01-1600 +select * from replicacao.tbteste2; + +# ORIGEM - Fiscal S1 +drop publication publication_mig_ipm_fiscal_00000_cliente; +drop table replicacao.tbteste2; + +# DESTINO - Cliente bdp-01-1600 +alter subscription subscription_mig_ipm_fiscal_00000_cliente disable; +drop subscription subscription_mig_ipm_fiscal_00000_cliente; +drop table replicacao.tbteste2; +``` \ No newline at end of file diff --git a/docs/replicacao_nativa_interrompe_ipmsaude.md b/docs/replicacao_nativa_interrompe_ipmsaude.md new file mode 100644 index 0000000..971d9f4 --- /dev/null +++ b/docs/replicacao_nativa_interrompe_ipmsaude.md @@ -0,0 +1,58 @@ +# Roteiro - Interrompendo Replicação Nativa IPMSaude + +### IMPORTANTE +Após a replicação ser finalizada, o chamado deverá retornar informando que podemos interomper a replicação. +Portanto, após o processo descrito abaixo, deve-se tramitar para que o Sr. Richard remova os schemas, após 30 dias - Data acordada entre Data Center e Migração. + +Para remover a estrutura, deve-se seguir [`este documento como referência.`](https://documentos.ipm.com.br/data-center/procedimentos/src/branch/master/docs/replicacao_nativa_remover_estrutura.md) + +## Destino - Banco Cliente Versão 16 (00000-cliente-bdp-01-1600.atende.net) +No banco de destino (bdp-16), via PGAdmin apagar a subscription caso ainda não tenha sido feito: +``` +ALTER SUBSCRIPTION subscription_saude REFRESH PUBLICATION; +ALTER SUBSCRIPTION subscription_saude DISABLE; +DROP SUBSCRIPTION subscription_saude; +``` +Via SSH remover a linha correspondente ao IP da origem no pg_hba.conf +``` +# vim /etc/postgresql/16/main/pg_hba.conf +Ex.: host all all 192.168.xx.xx/32 trust # Libera IpmSaude S1 + +# systemctl reload postgresql.service +``` +Após, deverá ser retornada o arquivo postgresql.conf com as configurações corretas do cliente: +``` +cd /etc/postgresql/16/main/ +cp postgresql.bkp-antes-saude_s1 postgresql.conf +``` + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +``` +systemctl restart postgresql.service +``` + +## Origem - Banco IpmSaude S1 - (00000-cliente-bdp-02-1150.atende.net) +No banco de origem (11.5), deve-se remover a linha correspondente ao usuário replicacao no pg_hba.conf +``` +# vim /var/lib/pgsql/11/data/pg_hba.conf +Ex: host all replicacao 192.168.xx.xx/32 trust # Atende.Net + +# systemctl reload postgresql-11.service +``` +Atenção: Deve-se verificar se há outra replicação feita em paralelo. +Se houver, o processo de substituir os arquivos e reiniciar o serviço do postgresql NÃO pode ser realizado! + +Neste momento, já pode ser deletado o usuário replicacao: +```ruby +DROP ROLE replicacao; +``` +Voltar backup das configurações: +``` +cd /var/lib/pgsql/11/data/ +cp postgresql.bkp-antes-saude_s1 postgresql.conf +``` + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +``` +systemctl restart postgresql-11.service +``` + +[`Início`](replicacao_nativa_saude_s1.md) \ No newline at end of file diff --git a/docs/replicacao_nativa_interromper.md b/docs/replicacao_nativa_interromper.md new file mode 100644 index 0000000..94f6cbc --- /dev/null +++ b/docs/replicacao_nativa_interromper.md @@ -0,0 +1,62 @@ +# Roteiro - Interrompendo Replicação Nativa + +### IMPORTANTE +Após a replicação ser finalizada, o chamado deverá retornar informando que podemos interomper a replicação. +Portanto, após o processo descrito abaixo, deve-se tramitar para que o Sr. Richard remova os schemas, após 30 dias - Data acordada entre Data Center e Migração. + +Para remover a estrutura, deve-se seguir [`este documento como referência.`](https://documentos.ipm.com.br/data-center/procedimentos/src/branch/master/docs/replicacao_nativa_remover_estrutura.md) + +## Destino - Banco Cliente Versão 16 (00000-clean-bdp-01-1600.atende.net) +No banco de destino (bdp-16), via PGAdmin apagar a subscription: +Obs: substituir "00000_cliente" para codigo e nome desejado (Ex: 08573_demonstracao) +``` +DROP SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente; +``` +Via SSH remover a linha correspondente ao IP da origem no pg_hba.conf +``` +# vim /etc/postgresql/16/main/pg_hba.conf +Ex.: host all all 172.16.1.XXX/32 trust + +# systemctl reload postgresql.service +``` +Após, deverá ser retornada o arquivo postgresql.conf com as configurações corretas do cliente: +``` +cd /etc/postgresql/16/main/ +cp postgresql.bkp-antesslony postgresql.conf +``` + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +``` +systemctl restart postgresql.service +``` + +## Master - Banco Fiscal 11.5 +No banco de origem (11.5), deve-se remover a linha correspondente ao IP do cliente no pg_hba.conf +``` +# vim /var/lib/pgsql/11/data/pg_hba.conf +Ex: host all replicacao 172.XX.1.XX/32 trust + +# systemctl reload postgresql-11.service +``` +Atenção: Deve-se verificar se há outra replcação feita em paralelo. +Se houver, o processo de substituir os arquivos e reiniciar o serviço do postgresql NÃO pode ser realizado! + +Voltar backup das configurações: +``` +cd /var/lib/pgsql/11/data/ +cp postgresql.bkp-antesslony postgresql.conf +``` + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +``` +systemctl restart postgresql-11.service +``` +## Importante +No Firewall do cliente, deverá ser excluída a regra correspondente a liberação da porta 65432: +Vá em: Firewall > Rules > LAN +Description: Bdp-1150-Fiscal + +![Libera Porta Firewall](../img/libera_porta_firewall_replicacao_nativa.png) + +Após realizado o processo descrito acima, o chamado deverá ser tramitado para o Richard que ficará responsável pela exclusão dos schemas. +Depois de 30 dias, deve-se dar sequência neste [`documento`](https://documentos.ipm.com.br/data-center/procedimentos/src/branch/master/docs/replicacao_nativa_remover_estrutura.md) para a exclusão da estrutura. + +[`Início`](replicacao_nativa_fiscal_s1.md) \ No newline at end of file diff --git a/docs/replicacao_nativa_remover_estrutura.md b/docs/replicacao_nativa_remover_estrutura.md new file mode 100644 index 0000000..35d578f --- /dev/null +++ b/docs/replicacao_nativa_remover_estrutura.md @@ -0,0 +1,37 @@ +# Roteiro - Removendo Estrutura Replicação Nativa + +## IMPORTANTE +Após a exclusão dos schemas, o chamado será retornado sinalizando que o tablespace pode ser removido. Nesse momento apagamos toda a estrutura criada para a replicação. + +## Destino - Banco Cliente Versão 16 (00000-clean-bdp-01-1600.atende.net) + +Via PGAdmin, conecte na Interface INT_RT e na porta 65432. Abra um console SQL e execute o comando abaixo: +``` +DROP TABLESPACE replicacao; +``` +Via SSH, conecte no servidor de banco de dados do cliente, através da INT_RT e porta 9032. +Execute os comandos abaixo: +``` +umount /var/lib/postgresql/16/tablespaces/replicacao +``` +``` +rm -rf /var/lib/postgresql/16/tablespaces/replicacao +``` +``` +lvremove /dev/postgresql-vg10/lv-replicacao +``` +``` +vgremove postgresql-vg10 +``` +Remova a linha referente ao disco da replicação no FSTAB: +``` +vim /etc/fstab +``` +No VCenter, é necessário apagar disco com tamanho 1234GB, marcando para deletar os arquivos. + +Para isso, selecione a VM BDP do cliente e vá em: Actions > Edit Settings +Identifique o disco referente ao tablespace replicação e remova, conforme passos abaixo: + +![Excluir Disco Slony](../img/RemoverDiscoVCenterDeletandoArquivos.png) +Após remover a estrutura, o chamado pode ser concluído. Lembrando de evidenciar cada processo executado. + diff --git a/docs/replicacao_nativa_saude_s1.md b/docs/replicacao_nativa_saude_s1.md new file mode 100644 index 0000000..92e8b7b --- /dev/null +++ b/docs/replicacao_nativa_saude_s1.md @@ -0,0 +1,431 @@ +# Roteiro Replicação Nativa - IPMSaude S1 + +>Documentação do procedimento de ativação da replicação do sistema IPMSaude S-1 para o S-2, para os casos onde a Origem está na versão 11.5 e destino no 16. + + +## Processos Adicionais +> Os links abaixos são referentes a desativação e remoção da replicação. + +[`1 - Interromper Replicação Nativa`](../docs/replicacao_nativa_interrompe_ipmsaude.md) +[`2 - Remover Estrutura`](../docs/replicacao_nativa_remover_estrutura.md) + +> Banco do IpmSaúde, não deve ter o schema "migracao_saude", se tiver, verificar com a equipe de migração" +> Banco do Atende.Net, não deve ter o schema "migracao_saude", se tiver, verificar com a equipe de migração" + +## Destino - Banco Atende.Net - (00000-cliente-bdp-01-1600.atende.net) + +No banco do cliente (PostgreSQL16), criar um disco para a replicação do IpmSaude: + +> Deve-se adicionar um HD temporário ao servidor do banco de dados de Destino (Atende.Net - PostgreSQL16) ao qual receberá o tablespace replicacao. +> Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. + +``` +su - root + +Criando pasta: + +mkdir -p /var/lib/postgresql/16/tablespaces/replicacao + +Adicionando disco: + +lsblk +pvcreate /dev/sde +vgcreate postgresql-vg10 /dev/sde +lvcreate -l +100%FREE -n lv-replicacao postgresql-vg10 +mkfs.xfs /dev/mapper/postgresql--vg10-lv--replicacao +blkid | grep replicacao +blkid | grep replicacao | grep "0cbfc3a7-07d2-483e-885a-73936788b157" +ls -l /dev/disk/by-id/ | grep dm-7 +#Retorno: dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h -> ../../dm-7 + +vim /etc/fstab + +# disco replicacao +/dev/disk/by-id/dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h /var/lib/postgresql/16/tablespaces/replicacao xfs defaults,noatime,nodiratime 0 1 + +Montando e aplicando permissões para o diretório: +mount /var/lib/postgresql/16/tablespaces/replicacao +chown postgres.postgres /var/lib/postgresql/16/tablespaces/replicacao +``` + +Inserir o IP do banco Master (IpmSaude S1) como TRUST no pg_hba.conf. +Obs: Esta linha deve ser adicionada logo abaixo da linha que possui o endereço "127.0.0.1/32 como trust" +``` +vim /etc/postgresql/16/main/pg_hba.conf +Ex.: +host all all 127.0.0.1/32 trust +host all all 192.168.21.29/32 trust # Libera IpmSaude S1 + +systemctl reload postgresql.service +``` + +Ajustar configurações no arquivo postgresql.conf: +``` +cd /etc/postgresql/16/main/ +cp postgresql.conf postgresql.bkp-antes-saude_s1 +vim postgresql.conf + +OBSERVAÇÃO: Se o parametro estiver max_worker_processes = 3, deverá ser alterado para max_worker_processes = 4 + +Se: max_worker_processes < 10 +wal_level = logical +max_wal_senders = 3 +max_replication_slots = 3 +max_sync_workers_per_subscription = 2 +wal_receiver_status_interval = 60s +wal_receiver_timeout = 300s + +Se: max_worker_processes > 10 +wal_level = logical +max_wal_senders = 5 +max_replication_slots = 6 +max_sync_workers_per_subscription = 2 +max_logical_replication_workers = 4 +wal_receiver_status_interval = 60s +wal_receiver_timeout = 300s +``` + +Criar a tablespace replicacao para recebimento dos dados: +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/postgresql/16/tablespaces/replicacao'; +``` + +Criar o schema replicação e demais tabelas/funções/etc... +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` + +__ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO SOMENTE APÓS AS 18Hrs!__ +``` +systemctl restart postgresql.service +``` + +## Origem - Banco IpmSaude S1 - (00000-cliente-bdp-02-1150.atende.net) + +Deve-se liberar o IP do Banco do Atende.Net (bdp-01) no pg_hba do Banco do IpmSaude S1 (bdp-02), apenas para o usuario replicação após a linha do endereço "127.0.0.1 como trust", inserindo a linha conforme exemplo abaixo: +``` +cd /var/lib/pgsql/11/data/ +vim pg_hba.conf + +Ex.: +host all all 127.0.0.1/32 trust +host all replicacao 192.168.21.28/32 trust # Atende.Net + +systemctl reload postgresql-11.service +``` + +Alterar as configurações do postgresql.conf +``` +cd /var/lib/pgsql/11/data/ +cp postgresql.conf postgresql.bkp-antes-saude_s1 +vim postgresql.conf + +wal_level = logical +max_wal_senders = 3 +max_replication_slots = 3 +max_sync_workers_per_subscription = 2 +``` + +Criar usuário replicação (via pgadmin): +```ruby + CREATE ROLE replicacao WITH LOGIN + SUPERUSER + INHERIT + REPLICATION + CONNECTION LIMIT -1 + PASSWORD '123456'; + ``` + +Deve-se executar o script para criar a estrutura no banco slave, para isto edite o script de backup, o qual será feito download durante o processo de configuração: + +```ruby +cd /root/ +wget https://datacenter.atende.net/updates/backup_estrutura_ipmsaude_s1.sh +chmod 755 backup_estrutura_ipmsaude_s1.sh + +# Altere +IP_Origem="127.0.0.1" +Porta_Origem="5432" +BD_Origem="00000_ipmsaude" + +IP_Destino="192.168.21.28" +Porta_Destino="5432" +BD_Destino="00000_cliente" + +# Execute o script - O backup e o log serão criados na storage de backup "X:\STORE\Transferir\00000_ipmsaude" +./backup_estrutura_ipmsaude_s1.sh & + +# Ao final, confira os log´s. +cat XX*.log | grep ERROR | uniq -u (Substituir XX pelo nome do database de origem) + +# Conferir se os Schemas foram criados, o comando deve retornar os Schemas restaurados, caso não existe favor verificar +cat XX*.log | grep "creating SCHEMA" | uniq -u (Substituir XX pelo nome do database de origem) +``` + +OBS: Os erros abaixo são normais de aparecer, pois relatam a ausência do schema webbased (IpmSaude) e a diferença entre versões do PostgreSQL. + +```ruby +[2025-04-15 17:01:22] pg_restore: [arquivador] não pôde definir default_with_oids: ERROR: tables declared WITH OIDS are not supported +[2025-04-15 17:01:33] pg_restore: [arquivador] não pôde definir default_with_oids: ERROR: tables declared WITH OIDS are not supported +[2025-04-15 17:01:36] pg_restore: [arquivador] não pôde definir default_with_oids: ERROR: tables declared WITH OIDS are not supported +[2025-04-15 17:01:36] pg_restore: [arquivador] não pôde definir default_with_oids: ERROR: tables declared WITH OIDS are not supported +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.insere_registro_sigaf_entrada() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.insere_registro_sigaf_baixa() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.insere_registro_sigaf_imunizacao() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.insere_registro_sigaf_saida() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.insere_registro_sigaf_entrada_atualizacao() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.remove_registro_sigaf_saida() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.remove_registro_sigaf_entrada() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.remove_registro_sigaf_baixa() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: function webbased.remove_registro_sigaf_imunizacao() does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.acao" does not exist +[2025-04-15 17:01:47] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.usuario" does not exist +[2025-04-15 17:01:49] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.acao" does not exist +[2025-04-15 17:01:49] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.rotina" does not exist +[2025-04-15 17:01:50] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.acao" does not exist +[2025-04-15 17:01:51] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.acao" does not exist +[2025-04-15 17:01:51] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.sistema" does not exist +[2025-04-15 17:01:51] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.usuario" does not exist +[2025-04-15 17:01:51] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.sistema" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.usuario" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.acao" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.rotina" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.grupo" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.grupo" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.rotina" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.sistema" does not exist +[2025-04-15 17:01:52] pg_restore: [arquivador (bd)] could not execute query: ERROR: relation "webbased.rotina" does not exist +``` + +## Validações Banco Atende.Net +Executar scripts abaixo no banco de Destino (00000-cliente-bdp-01-1600.atende.net): +```ruby +-- Schema: migracao_saude +-- DROP SCHEMA migracao_saude; +CREATE SCHEMA migracao_saude + AUTHORIZATION dbaipm; + +GRANT ALL ON SCHEMA migracao_saude TO dbaipm; +GRANT ALL ON SCHEMA migracao_saude TO administradores; +GRANT USAGE ON SCHEMA migracao_saude TO consultas; +GRANT ALL ON SCHEMA migracao_saude TO migradores; +GRANT ALL ON SCHEMA migracao_saude TO sistema; +``` + +Setar privilégios schemas saude: +```ruby +do +$body$ +declare + r_objeto record; +begin + for r_objeto in (select 'GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO dbaipm; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO administradores; + GRANT USAGE ON SCHEMA "'||pg_namespace.nspname||'" TO consultas; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO migradores; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO sistema;' as cmd, + '"'||pg_namespace.nspname||'"' as nome + from pg_namespace + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico', 'migracao_fiscal', 'migracao_saude') + ) + loop + --insert into replicacao.tblog (logacao, logquery) values ('Alterando grants do schema '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando grants do schema %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; +end; +$body$; +``` + +__ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO SOMENTE APÓS AS 18Hrs!__ +``` +systemctl restart postgresql-11.service +``` + +## Apagar Checks Not Valid + +No servidor de Destino (Atende.Net), execute o script abaixo: +```ruby +/*Destino*/ +create table tbscriptschecks as + WITH ORIG AS ( + SELECT FORMAT('ALTER TABLE %s DROP CONSTRAINT %s;', CONRELID::REGCLASS::TEXT, CONNAME) AS DROPSCRIPT, + FORMAT('ALTER TABLE %s ADD CONSTRAINT %s %s;', CONRELID::REGCLASS::TEXT, CONNAME, PG_GET_CONSTRAINTDEF(OID)) AS CREATESCRIPT + FROM PG_CONSTRAINT + WHERE CONTYPE = 'c' + AND NOT CONVALIDATED + AND SUBSTRING(CONRELID::REGCLASS::TEXT,1,POSITION('.' IN CONRELID::REGCLASS::TEXT)-1) IN ('saudeweb','saudewebglo','spunico') ) + SELECT ARRAY_TO_STRING(ARRAY(SELECT DROPSCRIPT FROM ORIG),CHR(13)||CHR(10)) DROPSCRIPT, + ARRAY_TO_STRING(ARRAY(SELECT CREATESCRIPT FROM ORIG),CHR(13)||CHR(10)) CREATESCRIPT + +--Executar a saída do comando +select DROPSCRIPT from tbscriptschecks; +``` +## Script de teste + +IMPORTANTE: Necessário alterar as informações abaixo, para as desejadas. +Ex.: dbname=08573_ipmsaude e host="IP LAN do bdp-02-1150" + +```ruby +# ORIGEM - IpmSaude S1 "bdp-02-1150" +create table replicacao.tbteste4(col1 integer primary key, col2 text); +insert into replicacao.tbteste4 values(1,'1'); +select * from replicacao.tbteste4; + +CREATE PUBLICATION publication_saude; +ALTER PUBLICATION publication_saude ADD table replicacao.tbteste4; + +# DESTINO - Atende.Net "bdp-01-1600" +create table replicacao.tbteste4(col1 integer primary key, col2 text); +CREATE SUBSCRIPTION subscription_saude CONNECTION 'host=192.168.xx.xxx port=5432 user=replicacao dbname=00000_cliente' PUBLICATION publication_saude; +select * from replicacao.tbteste4; --Ja deve ter 1 registro + +# ORIGEM - IpmSaude S1 "bdp-02-1150" +insert into replicacao.tbteste4 values(2,'2'); + +# DESTINO - Atende.Net "bdp-01-1600" +select * from replicacao.tbteste4; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# ORIGEM - IpmSaude S1 "bdp-02-1150" +drop PUBLICATION publication_saude; +drop table replicacao.tbteste4; + +# DESTINO - Atende.Net "bdp-01-1600" +ALTER SUBSCRIPTION subscription_saude REFRESH PUBLICATION; +ALTER SUBSCRIPTION subscription_saude DISABLE; +DROP SUBSCRIPTION subscription_saude; +DROP TABLE replicacao.tbteste4; +``` \ No newline at end of file diff --git a/docs/replicacao_sgdb_ipm_cliente.md b/docs/replicacao_sgdb_ipm_cliente.md new file mode 100644 index 0000000..5694d9f --- /dev/null +++ b/docs/replicacao_sgdb_ipm_cliente.md @@ -0,0 +1,504 @@ +# Replicação Banco de Dados (Data Center IPM x Cliente) + +> +> Documentação do passo a passo para ativação da replicação do banco de dados entre a estrutura do Data Center da IPM com a estrutura da Prefeitura do cliente já atualizado para a versão do PostgreSQL 16. +> + + OBS: O manual abaixo refere-se a instalação inicial da replicação. Caso você esteja recriando a mesma devido a algum erro na transferencia ou corrupções de arquivos, utilize o manual sobre a reativação: + +[` Reativar a Replicação:`](./reativar_replicacao_sgdb_ipm_cliente.md) + +### Pré-requisitos + +#### Ambas as partes +- Utilizar Template com PostgreSQL 16.3 +- PostgreSQL na mesma versão nos dois lados +- Rsync nos dois lados +#### Ambiente Cliente (Prefeitura) +- No cliente, NAT na porta 61100 para porta 22 do servidor SGDB +#### Ambiente Data Center IPM +- Criação de alias para o endereço IP do cliente +- Liberação saída na porta 61100 no FW do cliente no Data Center + + +## 00000-cliente-afw-01-0260.atende.net + +Para iniciar o processo de Replicação do banco de dados entre o Data Center da IPM e a Estrutura do cliente, será necessário algumas configurações no Firewall na estrutura do cliente no DC IPM. + +Para acessar o mesmo, conecte via interface INT_RT com a Porta padrão no navegador + + https://172.16.XXX.XXX:9080 ou https://172.24.XXX.XXX:9080 + As credenciais de acesso devem ser consultadas através da ferramenta GTT (https://datacenter.ipm.com.br) + +Será necessário realizar a criação de um Aliases para o IP Público do Cliente: + +Acesse: Firewall > Aliases > IP + + Adicione um novo IP + Name: Cliente_DC + Type: Host(s) + IP or FQDN: XXX.XXX.XXX.XXX Descrição: Replicacao (Deve ser criado informando o IP Público passado pelo cliente) + +![Aliases Firewall](../img/aliases_ip_replicacao.png) + +Após a criação do Aliases, será necessário criar uma regra de Firewall na interface LAN, seguindo o padrão abaixo: + + Action: Pass + Interface: LAN + Address Family: IPV4 + Protocol: TCP/UDP + Source: LAN NET + Source Port Range: From Any to Any + Destination: Singles host or alias (Cliente_DC) - Informar o nome do Aliases criado no passo anterior + Destination Port Range: From Other 61100 To Other 61100 - Liberando o acesso apenas para o IP e Porta específico que esta configurado no cliente + Description: Replicacao + +![Regras LAN Firewall](../img/regra_lan_replicacao.png) + +IMPORTANTE: Lembre-se sempre de após criar uma regra no Firewall, de ajustar a ordem/sequencia da mesma acima das regras de Bloqueio IPV4 e IPV6 para que a mesma funcione de forma adequada. + +Ajustar o nome do servidor no DNS Forwarder do Firewall + +Acesse Services > DNS Forwarder + + Host: 01611-pinhais-bdp-01-1600-master + Domain: atende.net + IP: 192.168.XXX.XXX + + +## 00000-cliente-bdp-01-1600-slave.atende.net (Ambiente Destino - Cliente/Prefeitura) + +Para que seja possível conectar no banco de dados no ambiente da Prefeitura do cliente, você deve conectar inicialmente no Banco de Dados Principal (Em produção no Data Center da IPM) + +Acesse o mesmo através da interface INT_RT Porta padrão 9032 + + Abra o putty + Informe o IP da INT_RT: 172.16.XXX.XXX ou 172.24.XXX.XXX Porta 9032 + + Será solicitado as credenciais: + Usuário: ipm + Senha: deve ser consultada via datacenter.ipm.com.br + + Após conectar execute o comando abaixo passando as informações do Usuário/Senha/IP passadas pelo cliente: + ssh ipm@0.1.2.3 -p 61000 + + Será exibido a mensagem abaixo e solicitado a senha: + + The authenticity of host '0.1.2.3 (0.1.2.3)' can't be established. + ED25519 key fingerprint is SHA256:MN8C+wPjLZUq2Zppy8c9qCsrHhnhTqTaY1fyKJO8+RI. + This key is not known by any other names + Are you sure you want to continue connecting (yes/no/[fingerprint])? yes + Warning: Permanently added '0.1.2.3' (ED25519) to the list of known hosts. + + Informe a senha para conexão: + + ipm@0.1.2.3's password: + +Após conectado, você deve se tornar root para realizar as configurações no ambiente mencionadas abaixo: + + su - root + Senha: Credenciais devem ter sido passadas pelo cliente + +Verificar particionamento para garantir que tenha espaco suficiente para o banco. + + # df -h + Filesystem Size Used Avail Use% Mounted on + tmpfs 294M 2,2M 292M 1% /run + /dev/mapper/ubuntu--vg-ubuntu--lv 40G 6,2G 34G 16% / + tmpfs 1,5G 1,1M 1,5G 1% /dev/shm + tmpfs 5,0M 0 5,0M 0% /run/lock + /dev/sda2 2,0G 300M 1,7G 15% /boot + /dev/sda1 1,1G 6,1M 1,1G 1% /boot/efi + /dev/mapper/ubuntu--vg-lv--var--log 40G 2,1G 38G 6% /var/log + /dev/mapper/ubuntu--vg-lv--home 10G 104M 9,9G 2% /home + /dev/mapper/postgresql--vg02-lv--dados 120G 969M 119G 1% /var/lib/postgresql + /dev/mapper/postgresql--vg01-lv--indice 80G 604M 80G 1% /var/lib/postgresql/16/tablespaces/indice + /dev/mapper/postgresql--vg03-lv--archived 200G 1,5G 199G 1% /var/lib/postgresql/16/tablespaces/archived + tmpfs 294M 0 294M 0% /run/user/1000 + + No caso do servidor clonado deve-se expandir as partições LVM. + + /dev/mapper/postgresql--vg02-lv--dados 120G 969M 119G 1% /var/lib/postgresql + /dev/mapper/postgresql--vg01-lv--indice 80G 604M 80G 1% /var/lib/postgresql/16/tablespaces/indice + /dev/mapper/postgresql--vg03-lv--archived 200G 1,5G 199G 1% /var/lib/postgresql/16/tablespaces/archived + +Procedimento de expansão de disco no padrão do PostgreSQL 16 + + # Expandir ampliando o disco existente + # Listar os discos: + lsblk + + # Realizar o resize dos discos: + pvresize /dev/sdb + pvresize /dev/sdc + pvresize /dev/sdd + + # Listar os discos e os espaços livres: + pvscan + + # Alocar 100% do espaço livre em cada disco: + + lvextend -l +100%FREE /dev/postgresql-vg03/lv-archived + lvextend -l +100%FREE /dev/postgresql-vg02/lv-dados + lvextend -l +100%FREE /dev/postgresql-vg01/lv-indice + + # Expandir o Sistema de arquivos: + + xfs_growfs /var/lib/postgresql + xfs_growfs /var/lib/postgresql/16/tablespaces/indice + xfs_growfs /var/lib/postgresql/16/tablespaces/archived + + # Listas discos: + lsblk + + # Listar pontos de montagens no Linux! (Verifique se a expansão ocorreu de forma adequada.) + df -h + +Após ajustes de disco, deve ser executado todos os procedimentos da planilha BDP16 para realizar a configuração do servidor conforme os padrões IPM: + + Arquivo para seguir o Checklist de Configuração: + Alexsandre Constantino de Paula > CheckList > Manutenção Servidores - 15082024 v1.xlsx > BDP16 + +Após a configuração da VM seguindo o checklist acima, deve ser alterado o arquivo postgresql.conf + + + cd /etc/postgresql/16/main/ + cp postgresql.conf postgresql.bkp-26022025 + vim postgresql.conf + + # Parâmetro para alterar + max_locks_per_transaction = 1000 + +Depois de configurar o ambiente conforme os padrões, será necessário a criação do diretório que receberá a replicação: + + mkdir /var/lib/postgresql/16/replicacao + chown postgres.postgres /var/lib/postgresql/16/replicacao -R + chmod 700 /var/lib/postgresql/16/replicacao -R + +Realizar o download dos scripts e configurações para ativar a replicação. + + cd /root + rm -rf /root/replicacao* + wget https://datacenter.atende.net/updates/replicacao_16.zip + unzip replicacao_16.zip + cp /root/replicacao/slave/* /etc/postgresql/16/main/ + chown postgres.postgres /etc/postgresql/16/main/postgresql.auto.conf /etc/postgresql/16/main/*.sh + +Ajustar pg_hba.conf, liberando somente os endereços IP internos informados pelo cliente. + + vim /etc/postgresql/16/main/pg_hba.conf + +Deve ser criado um usuário fora do padrão para cópia no servidor SLAVE, utilizar a nomenclatura rep00000, sendo 00000 o código do cliente + + useradd rep00000 + passwd rep00000 + +Após criado, realize o login com o mesmo para criação da pasta SSH + + su - rep00000 + ssh ipm@127.0.0.1 (yes) + + Retorno: + + rep00000@000000-cliente-bdp-01-1600-slave:~$ ssh ipm@127.0.0.1 + The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established. + ED25519 key fingerprint is SHA256:MN8C+wPjLZUq2Zppy8c9qCsrHhnhTqTaY1fyKJO8+RI. + This key is not known by any other names + Are you sure you want to continue connecting (yes/no/[fingerprint])? yes + Warning: Permanently added '127.0.0.1' (ED25519) to the list of known hosts. + ipm@127.0.0.1's password: + Permission denied, please try again. + + Após o permission denied, cancele o comando com o ctrl + c + +Após executado, execute um exit para voltar para o usuário root + + exit + +Ainda com o usuário root, coloque o usuário rep00000 no mesmo grupo e pasta de usuario do postgres: + + vim /etc/passwd + postgres:x:121:125:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash + rep00000:x:121:125:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash + +Após a execução de todos os passos acima, iremos parar o banco de dados até que a cópia inicial esteja concluída. + + systemctl stop postgresql.service + +Confira o nome do Servidor Slave, garantindo que tenha o sufixo "slave" no final no seguintes arquivos: + + vim /etc/hosts + 00000-cliente-bdp-01-1600-slave + vim /etc/hostname + 00000-cliente-bdp-01-1600-slave.atende.net + +Após efetuado todo o procedimento, execute dois comandos de exit para voltar para o banco Master: + + exit ( Voltar para o usuário rep00000 ) + exit ( Desconectar do servidor SLAVE ) + + +## 00000-cliente-bdp-01-1600-master.atende.net (Ambiente Origem - Cliente/DataCenter IPM) + +Para realizar a configuração no servidor Master, deve-se realizar o acesso ao mesmo! +Obs. Caso você esteja seguindo o manual, você executou os dois exits informados acima e automaticamente já estará no banco de Produção. Porém caso tenha fechado a sessão ou algo atípico tenha ocorrido, você pode realizar uma nova conexão ao mesmo seguindo os passos abaixo: + + Através da INT_RT Porta padrão 9032 + + 172.16.XXX.XXX 9032 ou 172.24.XXX.XXX 9032 + Usuário: ipm (somente o usuário IPM terá acesso via SSH) + Senha: deve ser consultada via datacenter.ipm.com.br + + Após conectado, você deve se tornar root para alterar as configurações seguintes: + su - root + Senha: deve ser consultada via datacenter.ipm.com.br + +Alterar os arquivos abaixo, adicionando o sufixo "master" no final + + vim /etc/hosts + 00000-clean-bdp-01-1600-master + + vim /etc/hostname + 00000-clean-bdp-01-1600-master.atende.net + +Devido a adição do sufixo acima, precisamos garantir que o nome com o sufixo "master" esteja também alterado na configuração do DNS Forwarder do Firewall do cliente. + + Para conferir, basta acessar o Firewall do cliente através do IP da INT_RT Porta 9080 e acessar a aba Services > DNS Forwarder + +No banco master com o usuário root, crie os diretórios para armazenar os arquivos a serem transferidos para o servidor SLAVE e suas devidas permissões: + + mkdir /var/lib/postgresql/16/replicacao + chown postgres.postgres /var/lib/postgresql/16/replicacao -R + chmod 700 /var/lib/postgresql/16/replicacao -R + +Realizar o download dos scripts e configurações para ativar a replicação. + + cd /root + wget https://datacenter.atende.net/updates/replicacao_16.zip + unzip replicacao_16.zip + cp /root/replicacao/master/* /etc/postgresql/16/main/ + chown postgres.postgres /etc/postgresql/16/main/postgresql.auto.conf /etc/postgresql/16/main/*.sh + +Ajustar as configurações do script de replicação alterando os valores da variável "connection", para o nome do usuário e endereço IP do cliente. + + vim /etc/postgresql/16/main/replicacao_archive.sh + connection=rep00000@0.1.2.3 + + +IMPORTANTE +No primeiro momento, não adicionaremos um disco para a pg_wal. + + +Desativar a execuçãodo vaccumm e reindex antes da execução e ao final deve-se ativar novamente, pois manter a execução dos mesmos pode causar problemas na ativação da replicação (PALIATIVO) + + vim bkp_remoto/bkp_remoto.sh + comentar linhas: + 2103 e 2104 + +Após isso, faça um backup do arquivo postgresql.auto.conf + + mv /var/lib/postgresql/16/main/postgresql.auto.conf /var/lib/postgresql/16/main/postgresql.auto.bkp + +Em seguida, iremos gerar a chave pública no servidor de MASTER com o usuário postgres para realizarmos a conexão com o banco de dados Slave que esta localizado no ambiente da Prefeitura do Cliente sem senha: + + su - postgres + ssh-keygen -t rsa + +Após gerado a chave pública, iremos realizar a copia da mesma entre o servidor MASTER para SLAVE + +Conecte com o usuário rep00000 e a senha definida informando o IP/Porta do servidor Slave + + ssh rep00000@0.1.2.3 -p 61100 + "Será solicitado a senha do mesmo" + exit + +Após teste de conexão com o usuário rep00000 do servidor Master para o Slave, realizaremos a copia da chave: + + cat .ssh/id_rsa.pub | ssh rep00000@0.1.2.3 -p 61100 'cat >> .ssh/authorized_keys' + +Após a copia da chave, a conexão entre o servidor Master e Slave logado com o usuário postgres deverá ocorre sem senha! + +## Copia dos diretórios e arquivos (Processo da replicação) + +Após ter configurado os servidores Master (Origem) e Slave (Destino), seguiremos com a copia dos arquivos para posterior ativação da replicação. + +Após a execução dos processos acima, iremos realizar a copia dos arquivos entre os ambientes conforme os passos abaixo. + +Obs. Sempre fique atento a qual servidor cada processo deve ser executado! + +### Servidor Slave - Processo de Limpeza + +Realizamos a conexão com o servidor Slave através do Servidor Master utilizando a chave pública criada anteriormente. + +Conecte no servidor master com o usuário ipm informando a INT_RT e porta padrão: + + Através da INT_RT Porta padrão 9032 + 172.16.XXX.XXX 9032 ou 172.24.XXX.XXX 9032 + Usuário: ipm (somente o usuário IPM terá acesso via SSH) + Senha: deve ser consultada via datacenter.ipm.com.br + +Após conectado, você deve se tornar root e posterior login via postgres + + su - root + Senha: deve ser consultada via datacenter.ipm.com.br + +Agora logaremos com o usuário postgres no Master não havendo a necessidade de senha: + + su - postgres + +E após a conexão com usuário postgres, iremos chamar o comando de SSH para o banco Slave também sem necessidade de passar a senha: + + ssh rep00000@0.1.2.3 -p 61100 + +Inicialmente, realizaremos a parada do serviço do PostgreSQL e a limpeza do servidor Slave antes de copiar os arquivos do banco de dados Master: + + su - root + systemctl stop postgresql.service + rm -rf /var/lib/postgresql/16/main/* + rm -rf /var/lib/postgresql/16/wal/* + rm -rf /var/lib/postgresql/16/tablespaces/archived/* + rm -rf /var/lib/postgresql/16/tablespaces/fast/* + rm -rf /var/lib/postgresql/16/tablespaces/indice/* + rm -rf /var/lib/postgresql/16/replicacao/* + exit ( Voltar para o usuário rep00000 ) + exit ( Desconectar do servidor SLAVE ) + + +### Servidor Master - Processos + +Ativar Replicação + + ln -s /etc/postgresql/16/main/postgresql.auto.conf /var/lib/postgresql/16/main/postgresql.auto.conf ( Deve se rexecutado no servidor master com o usuário POSTGRES ) + exit ( Voltar para o usuário root no servidor MASTER ) + +Reiniciar o banco de dados Master (Esse procedimento deve ocorrer fora de horário de expediente, evitando paradas ao ambiente de Produção do cliente) + + systemctl restart postgresql.service + +Conectar via pgadmin no database template1 e iniciar o modo backup: (alterar o label para o nome desejado) +IMPORTANTE: Após o start, manter a sessão (janela) no pgadmin aberta com o start até a finalização de todo o processo + + SELECT pg_backup_start('rep00000',true); + +Iniciar a cópia do cluster para Slave em partes. Deve ser substituido o usuário rep00000 e o IP passado pelo cliente. +Essa copia deve ser realizada com o usuário postgres no banco de dados Master: + + su - postgres + cd /var/lib/postgresql/16/tablespaces/ + + tar -zcvf - fast/ |ssh -p 61100 rep00000@0.1.2.3 "cat > /var/lib/postgresql/16/tablespaces/fast.tgz" + tar -zcvf - archived/ |ssh -p 61100 rep00000@0.1.2.3 "cat > /var/lib/postgresql/16/tablespaces/archived.tgz" + tar -zcvf - indice/ |ssh -p 61100 rep00000@0.1.2.3 "cat > /var/lib/postgresql/16/tablespaces/indice.tgz" + + cd /var/lib/postgresql/16/ + + tar -zcvf - main/base main/current_logfiles main/global main/pg_commit_ts main/pg_dynshmem main/pg_logical main/pg_multixact main/pg_notify main/pg_replslot main/pg_serial main/pg_snapshots main/pg_stat main/pg_stat_tmp main/pg_subtrans main/pg_tblspc main/pg_twophase main/PG_VERSION main/pg_wal main/pg_xact main/postmaster.opts wal/pg_wal |ssh -p 61100 rep00000@0.1.2.3 "cat > /var/lib/postgresql/16/main.tgz" + +### Servidor Slave + +Após a compactação de toda a transferencia ter finalizado, conecte no servidor "SLAVE" para realizar a descompactação dos arquivos tranferidos. + + ssh rep00000@0.1.2.3 -p 61100 + cd /var/lib/postgresql/16/tablespaces/ + tar -xzvf fast.tgz + tar -xzvf archived.tgz + tar -xzvf indice.tgz + + cd /var/lib/postgresql/16/ + tar -xzvf main.tgz + +Iremos realizar a configuração de atalhos (links) para a pg_wal e também para a postgresql.auto.conf e a criação do arquivo standby.signal + + cd /var/lib/postgresql/16/main + ln -s /etc/postgresql/16/main/postgresql.auto.conf /var/lib/postgresql/16/main/postgresql.auto.conf + touch /var/lib/postgresql/16/main/standby.signal + ls -la + +Será necessário também a criação de uma pasta para armazenar os arquivos enviados até o momento pelo banco Master até o Slave: + + mv /var/lib/postgresql/16/replicacao /var/lib/postgresql/16/replicacao_tx + mkdir -p /var/lib/postgresql/16/replicacao + chmod 700 /var/lib/postgresql/16/replicacao -R + chown postgres.postgres /var/lib/postgresql/16/replicacao -R + +Após a criação da pasta, executaremos o script que descompactará todos os arquivos da pasta /var/lib/postgresql/16/replicacao_tx para /var/lib/postgresql/16/main/pg_wal: + + cd /etc/postgresql/16/main/ + ./replicacao_restore_all.sh >> /var/log/postgresql/postgresql-restore-all.log & + + tail -f /var/log/postgresql/postgresql-restore-all.log (acompanhar até finalizar a extração completa do arquivos na pasta replicacao_tx) + + +Após a execução do Script, com o root iremos subir o banco no servidor Slave + + su - root + systemctl start postgresql.service + +O comando de "start" ficará aguardando por um tempo e depois será liberado. Para acompanhar o processo, pode ser verificado os arquivos de logs: + + tail -f /var/log/postgresql/postgresql-2024-11-12_145135.log + +Acompanhar até aparecer "database system is ready to accept read-only connections" + + 2024-11-12 15:01:25.660 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: redo in progress, elapsed time: 590.00 s, current LSN: 525/82DDC190 + 2024-11-12 15:01:26.880 -03,"",1748352,2024-11-12 14:51:35 -03,,,,LOG: restartpoint complete: wrote 45663 buffers (5.8%); 0 WAL file(s) added, 92 removed, 0 recycled; write=3.985 s, sync=0.133 s, total=4.349 s; sync files=1386, longest=0.008 s, average=0.001 s; distance=1502862 kB, estimate=1502862 kB; lsn=525/4E72B480, redo lsn=525/2DAA1658 + 2024-11-12 15:01:26.880 -03,"",1748352,2024-11-12 14:51:35 -03,,,,LOG: recovery restart point at 525/2DAA1658 + 2024-11-12 15:01:26.880 -03,"",1748352,2024-11-12 14:51:35 -03,,,,DETAIL: Last completed transaction was at log time 2024-11-12 14:05:39.870876-03. + 2024-11-12 15:01:26.884 -03,"",1748352,2024-11-12 14:51:35 -03,,,,LOG: restartpoint starting: wal + 2024-11-12 15:01:27.890 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: consistent recovery state reached at 525/B4FFF5A8 + 2024-11-12 15:01:27.890 -03,"",1748350,2024-11-12 14:51:34 -03,,,,LOG: database system is ready to accept read-only connections + +Após essa etapa ele começará a restaurar os arquivos da pasta "replicacao" + + 2024-11-12 15:01:28.365 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000B5" from archive + 2024-11-12 15:01:28.826 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000B6" from archive + 2024-11-12 15:01:29.227 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000B7" from archive + 2024-11-12 15:01:29.662 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000B8" from archive + 2024-11-12 15:01:30.170 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000B9" from archive + 2024-11-12 15:01:30.699 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000BA" from archive + 2024-11-12 15:01:31.229 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000BB" from archive + 2024-11-12 15:01:31.713 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000525000000BC" from archive + +Neste momento é possível executar o SQL SELECT pg_backup_stop(); no MASTER via pgadmin (Na mesma sessão que foi solicitado manter aberta durante todo o processo de replicação) + + via pgadmin + SELECT pg_backup_stop(); + +Quando nos logs começarem a aparecer que alguns arquivos não foram encontrados, todo o processo de importação de arquivos wal estará completo. + + 2024-11-12 15:09:44.198 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000528000000FA" from archive + 2024-11-12 15:09:44.805 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000528000000FB" from archive + 2024-11-12 15:09:45.419 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000528000000FC" from archive + 2024-11-12 15:09:46.028 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000528000000FD" from archive + 2024-11-12 15:09:46.215 -03,"",1748352,2024-11-12 14:51:35 -03,,,,LOG: restartpoint complete: wrote 63060 buffers (8.0%); 0 WAL file(s) added, 47 removed, 0 recycled; write=30.049 s, sync=0.040 s, total=30.192 s; sync files=1258, longest=0.003 s, average=0.001 s; distance=773534 kB, estimate=1045990 kB; lsn=528/B4B424D8, redo lsn=528/7B8F6478 + 2024-11-12 15:09:46.215 -03,"",1748352,2024-11-12 14:51:35 -03,,,,LOG: recovery restart point at 528/7B8F6478 + 2024-11-12 15:09:46.215 -03,"",1748352,2024-11-12 14:51:35 -03,,,,DETAIL: Last completed transaction was at log time 2024-11-12 15:09:38.6537-03. + 2024-11-12 15:09:46.233 -03,"",1748352,2024-11-12 14:51:35 -03,,,,LOG: restartpoint starting: wal + 2024-11-12 15:09:46.546 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000528000000FE" from archive + bzip2: Can't open input file /var/lib/postgresql/16/replicacao/0000000100000528000000FF: No such file or directory. + 2024-11-12 15:09:47.072 -03,"",1748354,2024-11-12 14:51:35 -03,,,,LOG: restored log file "0000000100000528000000FE" from archive + bzip2: Can't open input file /var/lib/postgresql/16/replicacao/0000000100000528000000FF: No such file or directory. + +Após a importação finalizar com sucesso, pode-se realizar o processo de limpeza + + cd /var/lib/postgresql/16/tablespaces + rm -rf *.tgz + cd /var/lib/postgresql/16 + rm -rf *.tgz + rm -rf replicacao_tx/ + exit + exit ( Voltar para o usuário rep00000 ) + exit ( Desconectar do servidor SLAVE ) + + +### Servidor master + +Após a execução dos dois exits acima, estaremos novamente no banco de dados Master, onde agora devemos retornar a configuração de Vacuum e Reindex no processo de Backup (PALIATIVO) + + vim bkp_remoto/bkp_remoto.sh + descomentar linhas: + 2103 e 2104 + +### Considerações + +O alerta "Too Many WAL Files" pode existir na segunda-feira pela manhã já que no final de semana a rotina de VACUUM gera uma grande movimentação no banco diff --git a/docs/replicacao_slony_fiscal_s1.md b/docs/replicacao_slony_fiscal_s1.md new file mode 100644 index 0000000..6195fb9 --- /dev/null +++ b/docs/replicacao_slony_fiscal_s1.md @@ -0,0 +1,1187 @@ +# Roteiro Replicação Slony - Fiscal S1 + +> Documentação do roteiro de replicação do sistema Fiscal S1 para o Atende.Net já considerando a versão 16 do PostgreSQL em produção nos clientes. +> +> Esse documento é referente a configuração Inicial do Slony. Caso deseje apenas adicionar uma nova replicação ou remover uma já existente, siga a documentação listada abaixo nos processos adicionais! +> +> Caso deseje ativar a replicação entre o Master 11.5 e Slave 16, deve-se utilizar esta documentação: [`Replicação Nativa - Fiscal S-1`](../docs/replicacao_nativa_fiscal_s1.md) + +## Processos Adicionais +> Os links abaixos são referentes a adição ou remoção de um node. + +[`1 - Adicionando Node`](../docs/replicacao_slonyfiscal_s1_adicionar_node.md) +[`2 - Remover Node`](../docs/replicacao_slonyfiscal_s1_remover_node.md) +[`3 - Remover Estrutura Slony`](../docs/replicacao_slonyfiscal_s1_remover_estrutura_node.md) + +### Abaixo a representação do funcionamento da estrutura: + +![Diagrama_Funcionamento_Replicacao](../img/diagrama_replicacao_postgres16.png) + +## Destino - Banco Fiscal Slony (00002_www.nfs-e.net_SGDB_1150_SLONY - 192.168.23.11) + +Checar se o Slony esta instalado e executando: + +``` +rpm -qi slony1_11 +``` +Caso receba o retorno que a aplicação não está instalada , execute a instalação conforme os passos abaixo: + +``` +cd /root/ +wget https://datacenter.atende.net/updates/slony1_11.zip +unzip slony1_11.zip +cd slony +rpm -Uvh slony1_11-2.2.10-1.rhel8.x86_64.rpm perl-Switch-2.17-10.el8.noarch.rpm perl-DBD-Pg-3.7.4-4.module_el8.3.0+426+0b4e9c0a.x86_64.rpm perl-Text-Balanced-2.03-395.el8.noarch.rpm perl-Filter-1.58-2.el8.x86_64.rpm perl-SelfLoader-1.23-416.el8.noarch.rpm +``` +Verificar se o IP do banco Master do Fiscal S1 esta liberado no pg_hba.conf +``` +vim /var/lib/pgsql/11/data/pg_hba.conf +Ex.: host all all 192.168.23.10/32 trust (Libera Fiscal S1) +Ex: host all all 172.16.XXX.XXX/32 trust (IP INT_RT do Cliente) + +systemctl reload postgresql-11.service +``` +Conferir as configurações do postgresql.conf (/var/lib/pgsql/11/data/postgresql.conf) + +``` +wal_level = logical +max_wal_senders = 3 +max_replication_slots = 3 +max_sync_workers_per_subscription = 2 +``` +Conferir se o usuário replicação existe no Banco de Dados (via pgAdmin): + +``` +login roles > replicacao + +Caso não existe, crie o mesmo: + + CREATE ROLE replicacao WITH LOGIN + SUPERUSER + INHERIT + REPLICATION + CONNECTION LIMIT -1 + PASSWORD '123456'; +``` +Efetue a criação do database conforme o cliente que você esta ativando a replicação via Slony + +``` +Exemplo: 00000_cliente + +CREATE DATABASE "00000_cliente" + WITH OWNER = dbaipm + ENCODING = 'LATIN1' + TABLESPACE = pg_default + LC_COLLATE = 'pt_BR' + LC_CTYPE = 'pt_BR' + CONNECTION LIMIT = -1; +``` + +Setar os defaults privilégios para o Data Base (substituir o nome 00000_cliente pelo código e nome do cliente): + +``` + +GRANT ALL ON DATABASE "00000_cliente" TO dbaipm; +GRANT ALL ON DATABASE "00000_cliente" TO administradores; +GRANT CONNECT ON DATABASE "00000_cliente" TO consultas; +GRANT ALL ON DATABASE "00000_cliente" TO migradores; +GRANT ALL ON DATABASE "00000_cliente" TO sistema; +REVOKE ALL ON DATABASE "00000_cliente" FROM public; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO administradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT ON TABLES + TO consultas WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO migradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO sistema WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO atualizacao; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO administradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT USAGE ON SEQUENCES + TO consultas WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO migradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO sistema WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO atendenetweb; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO public; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO administradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO consultas WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO migradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO sistema WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO dbaipm; +``` + +Criar as extensões +``` +CREATE EXTENSION pg_buffercache; +CREATE EXTENSION pg_freespacemap; +CREATE EXTENSION pg_stat_statements; +CREATE EXTENSION btree_gist; +CREATE EXTENSION postgis; +CREATE EXTENSION postgis_sfcgal; +``` + +Execute o SQL para criação da estrutura (schema replicacao) no SGBD de destino na database criada no passo anterior: + +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` + +Verificar se o disco de 1,2 TB esta adicionado no Destino: + +``` +Disco: /var/lib/pgsql/11/tablespaces/replicacao + +[root@00002-NFSE_SGDB_1150_SLONY ~]# df -h +Sist. Arq. Tam. Usado Disp. Uso% Montado em +devtmpfs 8,8G 0 8,8G 0% /dev +tmpfs 8,8G 12K 8,8G 1% /dev/shm +tmpfs 8,8G 8,8M 8,8G 1% /run +tmpfs 8,8G 0 8,8G 0% /sys/fs/cgroup +/dev/mapper/cl_00000--clean--centos8-root 15G 4,9G 11G 33% / +/dev/mapper/cl_00000--clean--centos8-home 2,4G 50M 2,4G 3% /home +/dev/sda2 976M 179M 731M 20% /boot +/dev/mapper/sgdb04-dados 119G 921M 119G 1% /var/lib/pgsql/11 +/dev/sda1 599M 6,7M 593M 2% /boot/efi +/dev/mapper/sgdb01-pg_log 19G 168M 19G 1% /var/lib/pgsql/11/data/log +/dev/mapper/sgdb03-indices 89G 668M 89G 1% /var/lib/pgsql/11/tablespaces/indice +/dev/mapper/sgdb02-pg_wal 29G 272M 29G 1% /var/lib/pgsql/11/data/pg_wal +/dev/mapper/cl_00000--clean--centos8-var_log 15G 347M 15G 3% /var/log +tmpfs 1,8G 0 1,8G 0% /run/user/0 +/dev/mapper/sgdb10-replicacao 1,3T 8,7G 1,2T 1% /var/lib/pgsql/11/tablespaces/replicacao +[root@00002-NFSE_SGDB_1150_SLONY ~]# + +``` + + IMPORTANTE: EXECUTAR O PASSO ABAIXO APENAS SE O DISCO NÃO EXISTIR NO SERVIDOR LINUX E O TABLESPACE REPLICACAO NÃO EXISTA NO BANCO DE DADOS DE DESTINO! + +Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. +``` +lsblk + +fdisk /dev/sde + +#Dispositivo Inicializar Início Fim Setores Tamanho Id Tipo +#/dev/sde1 2048 2587885567 2587883520 1,2T 8e Linux LVM + +vgcreate sgdb10 /dev/sde1 +lvcreate -L +1233G -n replicacao sgdb10 +mkfs.xfs /dev/mapper/sgdb10-replicacao +vim /etc/fstab +/dev/mapper/sgdb10-replicacao /var/lib/pgsql/11/tablespaces/replicacao xfs defaults 0 1 +mkdir -p /var/lib/pgsql/11/tablespaces/replicacao +mount /var/lib/pgsql/11/tablespaces/replicacao +chown postgres.postgres /var/lib/pgsql/11/tablespaces/replicacao/ -R +chmod 700 /var/lib/pgsql/11/tablespaces/replicacao/ -R +``` +Criar tablespace replicacao: +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/pgsql/11/tablespaces/replicacao'; +``` + + +## Destino - Banco Cliente Versão 16 (00000-clean-bdp-01-1600.atende.net) + +No banco do cliente (PostgreSQL16), criar um disco para a replicação do Fiscal: + +>Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +>Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD >crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. + +``` +su - root + +Criando pasta: + +mkdir -p /var/lib/postgresql/16/tablespaces/replicacao + +Adicionando disco: + +lsblk +pvcreate /dev/sde +vgcreate postgresql-vg10 /dev/sde +lvcreate -l +100%FREE -n lv-replicacao postgresql-vg10 +mkfs.xfs /dev/mapper/postgresql--vg10-lv--replicacao +blkid | grep replicacao +blkid | grep replicacao | grep "0cbfc3a7-07d2-483e-885a-73936788b157" +ls -l /dev/disk/by-id/ | grep dm-7 +#Retorno: dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h -> ../../dm-7 + +vim /etc/fstab + +# disco replicacao slony +/dev/disk/by-id/dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h /var/lib/postgresql/16/tablespaces/replicacao xfs defaults,noatime,nodiratime 0 1 + +Aplicando permissão para o diretório: + +chown postgres.postgres /var/lib/postgresql/16/tablespaces/replicacao +``` + +Verificar se o IP do banco Master do Fiscal S1 esta liberado no pg_hba.conf +``` +vim /etc/postgresql/16/main/pg_hba.conf +Ex.: host all all 172.16.1.18/32 trust (Libera Fiscal S1) + +systemctl reload postgresql.service +``` +Conferir configurações no arquivo postgresql.conf: +``` +cd /etc/postgresql/16/main/ +cp postgresql.conf postgresql.bkp-antesslony +vim postgresql.conf + +wal_level = logical +max_wal_senders = 3 +max_replication_slots = 3 +max_sync_workers_per_subscription = 2 +wal_receiver_status_interval = 60s +wal_receiver_timeout = 300s + +OBSERVAÇÃO: Se o parametro estiver max_worker_processes = 3, deverá ser alterado para max_worker_processes = 4 +``` + + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +(systemctl restart postgresql.service) + +Criar a tablespace replicacao para recebimento dos dados: + +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/postgresql/16/tablespaces/replicacao'; +``` +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` +## Origem - Banco Fiscal (00002_www.nfs-e.net_SGDB - 192.168.23.10) + +Altere os dados conforme os do cliente que irá fazer a replicação: +``` +vim /usr/local/slony1/etc/slon_tools.conf + + $CLUSTER_NAME = 'replication_ipmfiscal'; + add_node( + node => 1, + host => '192.168.23.10', + dbname => '00002_ipmfiscal', + port => 5432, + user => 'postgres', + password => '' + ); + + add_node( + node => 2, + host => '192.168.23.11', + dbname => '00000_teste', + port => 5432, + user => 'postgres', + password => '' + + ); +``` +Quando finalizada a configuração do Slave, deve-se prosseguir com o próximo passo: +``` +/usr/local/slony1/bin/slonik_init_cluster | /usr/local/slony1/bin/slonik +``` +Após, inicie o cluster: +``` +/usr/local/slony1/bin/slon_start 1 +/usr/local/slony1/bin/slon_start 2 +``` + +Atualize as funções no master: + +```ruby +CREATE SCHEMA replicacao; + +CREATE TABLE replicacao.tbclientenode +( + clicodigo integer not null, + nodcodigo integer not null +); +ALTER TABLE replicacao.tbclientenode + ADD CONSTRAINT pk_tbclientenode PRIMARY KEY(nodcodigo); +CREATE UNIQUE INDEX idx_unique_tbclientenode_cliente + ON replicacao.tbclientenode (clicodigo); + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +drop function if exists replicacao.fn_inicia_replicacao(s_contexto text, a_tabelas text[], i_clicodigo integer); + +create or replace function replicacao.fn_get_schema_slony() + returns text as +$body$ +begin + return (select schemaname + from pg_tables + where tablename = 'sl_node'); +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_adiciona_schema_slony_search_path() + returns boolean as +$body$ +declare + s_search_path text; + s_schema_name text; +begin + s_schema_name := (select replicacao.fn_get_schema_slony()); + + s_search_path := pg_catalog.current_setting('search_path'); + s_search_path := s_search_path||', '||s_schema_name; + + PERFORM pg_catalog.set_config('search_path', s_search_path, true); + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_schema_slony_search_path() + returns boolean as +$body$ +declare + s_search_path text; + s_schema_name text; +begin + s_schema_name := (select replicacao.fn_get_schema_slony()); + + s_search_path := pg_catalog.current_setting('search_path'); + s_search_path := replace(s_search_path, ', '||s_schema_name, ''); + + PERFORM pg_catalog.set_config('search_path', s_search_path, true); + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.status() + returns table(cliente integer, lagtime interval, lastevent bigint, lastreceived bigint, sincronizado boolean) as +$body$ +begin + perform (select replicacao.fn_adiciona_schema_slony_search_path()); + + drop table if exists tbreturn; + create temp table tbreturn as + select tbclientenode.clicodigo as cliente, + sl_status.st_lag_time as lagtime, + sl_status.st_last_event as lastevent, + sl_status.st_last_received as lastreceived, + sl_status.st_last_event = sl_status.st_last_received as sincronizado + from sl_status + left join replicacao.tbclientenode + on tbclientenode.nodcodigo = sl_status.st_received; + + perform (select replicacao.fn_remove_schema_slony_search_path()); + + return query(select * from tbreturn); +end; +$body$ + LANGUAGE plpgsql VOLATILE; + + +CREATE OR REPLACE FUNCTION replicacao.fn_get_node_by_clicodigo(i_clicodigo integer) + RETURNS integer AS +$BODY$ +declare + i_node integer; +begin + select nodcodigo + into i_node + from replicacao.tbclientenode + where clicodigo = i_clicodigo; + + if (i_node is null) then + raise exception 'Não foi possível encontrar um node de replicação para o cliente %.', i_clicodigo; + end if; + + return i_node; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_prepara_contexto( + s_contexto text, + a_tabelas text[]) + RETURNS boolean AS +$BODY$ +declare + i_set integer; + s_pk text; + r_tabela record; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_prepara_contexto'); + + lock table sl_event; + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm DISABLE; + end if; + + if exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", já existe.', s_contexto; + else + select coalesce(max(set_id),0)+1 into i_set from sl_set; + perform storeset(i_set, s_contexto); + end if; + + for r_tabela in select unnest(a_tabelas) as nometabela + loop + if (position('webbased.' in lower(r_tabela.nometabela)) > 0) then + raise exception 'A tabela "%", está relacionada ao schema webbased, o qual não deve ser replicado.', r_tabela.nometabela; + end if; + + if (exists(select 1 + from sl_table + where tab_nspname||'.'||tab_relname = r_tabela.nometabela)) then + raise exception 'A tabela "%", já está sendo replicada.', r_tabela.nometabela; + end if; + + select indice.relname + into s_pk + from pg_class tabela + left join pg_namespace + on pg_namespace.oid = tabela.relnamespace + left join pg_index + on pg_index.indrelid = tabela.oid + left join pg_class indice + on indice.oid = pg_index.indexrelid + where pg_namespace.nspname||'.'||tabela.relname = r_tabela.nometabela + and pg_index.indisprimary; + + if coalesce(s_pk,'') = '' then + raise exception 'A tabela "%", não possui chave primária.', r_tabela.nometabela; + end if; + + perform setaddtable(i_set, (select coalesce(max(tab_id),0)+1 from sl_table), r_tabela.nometabela, s_pk, ''); + end loop; + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm ENABLE; + end if; + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_inicia_replicacao_contexto( + s_contexto text, + i_clicodigo integer) + RETURNS boolean AS +$BODY$ +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_inicia_replicacao_contexto'); + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm DISABLE; + end if; + + perform replicacao.fn_adiciona_slave_replicacao(s_contexto, i_clicodigo); + + if exists(select 1 from pg_event_trigger where evtname = 'tg_event_trigger_on_execute_ddl_replicacao_ipm') then + ALTER EVENT TRIGGER tg_event_trigger_on_execute_ddl_replicacao_ipm ENABLE; + end if; + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_interrompe_replicacao(s_contexto text) + RETURNS boolean AS +$BODY$ +declare + i_set integer; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_interrompe_replicacao('''||s_contexto||''')'); + + if not exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", não existe.', s_contexto; + else + select set_id into i_set from sl_set where set_comment = s_contexto; + end if; + + perform dropset(i_set); + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_interrompe_replicacao_tabela(s_tabela text) + RETURNS boolean AS +$BODY$ +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_interrompe_replicacao_tabela('''||s_tabela||''')'); + + if (not exists(select tab_id + from sl_table + where tab_nspname||'.'||tab_relname = s_tabela)) then + raise exception 'A tabela "%", não está sendo replicada.', s_tabela; + end if; + + perform setdroptable((select tab_id + from sl_table + where tab_nspname||'.'||tab_relname = s_tabela)); + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_adiciona_slave_replicacao( + s_contexto text, + i_clicodigo integer) + RETURNS boolean AS +$BODY$ +declare + i_set integer; + i_node_master integer; + i_node_slave integer; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + i_node_master = 1; + i_node_slave = replicacao.fn_get_node_by_clicodigo(i_clicodigo); + + insert into replicacao.tblog (logacao) values ('fn_adiciona_slave_replicacao'); + + if not exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", não existe.', s_contexto; + else + select set_id into i_set from sl_set where set_comment = s_contexto; + + if exists(select 1 from sl_set where set_comment = s_contexto and age(xmin) = 0) then + raise exception 'O contexto "%", não deve ser preparado e iniciado na mesma execução.', s_contexto; + end if; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_master) then + raise exception 'O node de replicação "%", não existe.', i_node_master; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_slave) then + raise exception 'O node de replicação "%", não existe.', i_node_slave; + end if; + + perform subscribeset(i_set, i_node_master, i_node_slave, false, false); + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_interrompe_replicacao_tabelas_sem_slave() + RETURNS boolean AS +$BODY$ +declare + s_objetos text; + r_record record; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + insert into replicacao.tblog (logacao) values ('fn_interrompe_replicacao_tabelas_sem_slave'); + + lock table sl_set; + + for r_record in + select sl_table.tab_nspname||'.'||sl_table.tab_relname as table + from sl_table + left join sl_set + on sl_set.set_id = sl_table.tab_set + left join sl_subscribe + on sl_subscribe.sub_set = sl_set.set_id + where sl_subscribe.sub_receiver is null + loop + perform replicacao.fn_interrompe_replicacao_tabela(r_record.table); + end loop; + + perform replicacao.fn_remove_schema_slony_search_path(); + perform replicacao.fn_adiciona_schema_slony_search_path(); + + for r_record in + select sl_set.set_comment as contexto + from sl_set + left join sl_subscribe + on sl_subscribe.sub_set = sl_set.set_id + where sl_subscribe.sub_receiver is null + loop + perform replicacao.fn_interrompe_replicacao(r_record.contexto); + end loop; + + perform replicacao.fn_remove_schema_slony_search_path(); + + return true; +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + +CREATE OR REPLACE FUNCTION replicacao.fn_remove_slave_replicacao( + s_contexto text, + i_clicodigo integer) + RETURNS text AS +$BODY$ +declare + i_set integer; + i_node_master integer; + i_node_slave integer; +begin + perform replicacao.fn_adiciona_schema_slony_search_path(); + i_node_master = 1; + i_node_slave = replicacao.fn_get_node_by_clicodigo(i_clicodigo); + + insert into replicacao.tblog (logacao) values ('fn_remove_slave_replicacao'); + + if not exists(select 1 from sl_set where set_comment = s_contexto) then + raise exception 'O contexto "%", não existe.', s_contexto; + else + select set_id into i_set from sl_set where set_comment = s_contexto; + + if exists(select 1 from sl_set where set_comment = s_contexto and age(xmin) = 0) then + raise exception 'O contexto "%", não deve ser preparado e iniciado na mesma execução.', s_contexto; + end if; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_master) then + raise exception 'O node de replicação "%", não existe.', i_node_master; + end if; + + if not exists(select 1 from sl_node where no_id = i_node_slave) then + raise exception 'O node de replicação "%", não existe.', i_node_slave; + end if; + + raise notice 'Executar no slave: "select * from _replication_ipmfiscal.unsubscribeset(%, %, false);"', i_set, i_node_slave; + + /*perform unsubscribeset(i_set, i_node_slave, false);*/ + + perform replicacao.fn_remove_schema_slony_search_path(); + + return format('Executar no slave: "select * from _replication_ipmfiscal.unsubscribeset(%s, %s, false);"', i_set, i_node_slave); +end +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + +CREATE OR REPLACE FUNCTION replicacao.fn_event_trigger_on_execute_ddl() + RETURNS event_trigger + LANGUAGE 'plpgsql' + COST 100 + VOLATILE NOT LEAKPROOF +AS $BODY$ +BEGIN + if position((select replicacao.fn_get_schema_slony()) in current_query()) = 0 then + insert into replicacao.tbddl (ddlcomando) values (current_query()); + end if; +END +$BODY$; +``` + +Acessar o banco do fiscal, schema replicação, tabela tbclientenode (alterar o código do cliente) não necessário o SQL abaixo: +```ruby +insert into replicacao.tbclientenode (clicodigo, nodcodigo) values (55, 2); + +clicodigo = (Codigo do sistema) do cliente no Atende.Net +nodcodigo - Código do node criado no slon_tools.conf ou no arquivo relacionado a sua adição no master. + +Obs: Para cada node SLAVE (Destino) adicional deve-se executar o procedimento descrito no chamado: 480647, anexo 9 (Migração Fiscal - Criando Nodes) +``` +Ao final, deve-se executar o script para criar a estrutura no banco slave, para isto edite o script de backup que fica no servidor master(IPMFiscal) +```ruby + +su - postgres + +vim backup_estrutura_slony.sh + +# Altere +cod_fiscal="8043" -- Código do schema (Fiscal) + +# Destino 11 Fiscal Slony +IP_Destino_11="192.168.23.11" (IP do Banco de Dados do Slony intermediário, não precisa ser alterado) +Porta_Destino_11="5432" (Portal default sem necessidade de alterar) +BD_Destino_11="00000_teste" (Informe o database do cliente que irá ativar a replicacao) + +# Destino Cliente Atende +IP_Destino_16="172.16.XXX.XXX ou 172.24.XXX.XXX" (Informe a INT_RT do cliente Atende.Net - Banco de Dados PostgreSQL 16) +Porta_Destino_16="65432" (Porta default) +BD_Destino_16="00000_teste" (Informe o nome da database do cliente) + + +# Execute o script - O backup e o log serão criados na storage de backup "X:\STORE\Transferir\00002_ipmfiscal" +su - postgres +./backup_estrutura_slony.sh + +# Ao final, confira os log´s. +cat 8043*.log | grep ERROR | uniq -u + +# Conferir se os Schemas foram criados, o comando deve retornar os Schemas restaurados, caso não existe favor verificar +cat 8043*.log | grep "creating SCHEMA 8043" | uniq -u (Substituir pelo Código do Schema) +``` +## Validações (00002_www.nfs-e.net_SGDB_1150_SLONY - 192.168.23.11) +Validar Schema e Authorization no banco destino: +```ruby +-- Schema: migracao_fiscal +-- DROP SCHEMA migracao_fiscal; +CREATE SCHEMA migracao_fiscal + AUTHORIZATION dbaipm; + +GRANT ALL ON SCHEMA migracao_fiscal TO dbaipm; +GRANT ALL ON SCHEMA migracao_fiscal TO administradores; +GRANT USAGE ON SCHEMA migracao_fiscal TO consultas; +GRANT ALL ON SCHEMA migracao_fiscal TO migradores; +GRANT ALL ON SCHEMA migracao_fiscal TO sistema; +``` +Setar privilégios schemas fiscal: +```ruby +do +$body$ +declare + r_objeto record; +begin + for r_objeto in (select 'GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO dbaipm; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO administradores; + GRANT USAGE ON SCHEMA "'||pg_namespace.nspname||'" TO consultas; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO migradores; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO sistema;' as cmd, + '"'||pg_namespace.nspname||'"' as nome + from pg_namespace + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico', 'migracao_fiscal', 'migracao_saude') + ) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando grants do schema '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando grants do schema %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; +end; +$body$; +``` +Liberar porta 65434 no Firewall do cliente, para a conexão entre PG11 x PG16: +Vá em: Firewall > Rules > LAN +Destination: 65434 +Description: Bdp-1150-SLONY + +![Libera Porta Firewall](../img/libera_porta_firewall_replicacao.png) + +## Script de teste +```ruby +# Master (Origem) +create table replicacao.tbteste4(col1 integer primary key, col2 text); +insert into replicacao.tbteste4 values(1,'1'); +select * from replicacao.tbteste4; + +# Slave (11.5) +create table replicacao.tbteste4(col1 integer primary key, col2 text); + +# Destino (16) +create table replicacao.tbteste4(col1 integer primary key, col2 text); + +# Master (origem) +select replicacao.fn_prepara_contexto('Teste Inicial 4', string_to_array('replicacao.tbteste4',',')); + +select replicacao.fn_inicia_replicacao_contexto('Teste Inicial 4', 55); --Segundo parametro é o código do cliente (CÓDIGO DO SISTEMA NO GDT) + +# Slave (11.5) +select * from replicacao.tbteste4; --Já deve ter 1 registro + +CREATE PUBLICATION publication_mig_ipm_fiscal_00000_cliente; +ALTER PUBLICATION publication_mig_ipm_fiscal_00000_cliente ADD table replicacao.tbteste4; + +# Destino (16) +CREATE SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente CONNECTION 'host=172.16.1.18 port=65434 user=replicacao dbname=00000_cliente' PUBLICATION publication_mig_ipm_fiscal_00000_cliente; +select * from replicacao.tbteste4; + +# Master (origem) +insert into replicacao.tbteste4 values(2,'2'); + +# Slave (11.5) +select * from replicacao.tbteste4; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# Destino (16) +select * from replicacao.tbteste4; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# Master (origem) +select replicacao.fn_interrompe_replicacao('Teste Inicial 4'); +drop table replicacao.tbteste4; + +# Slave (11.5) +drop PUBLICATION publication_mig_ipm_fiscal_00000_cliente; +drop table replicacao.tbteste4; + +# Destino (16) +ALTER SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente DISABLE; +DROP SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente; +drop table replicacao.tbteste4; +``` +Parar o serviço e iniciar novamente, após, verifique o Lag Time: +``` +/usr/local/slony1/bin/slon_kill + +/usr/local/slony1/bin/slon_start 1 +/usr/local/slony1/bin/slon_start 2 +``` +```ruby +select * from replicacao.status(); +``` \ No newline at end of file diff --git a/docs/replicacao_slonyfiscal_s1_adicionar_node.md b/docs/replicacao_slonyfiscal_s1_adicionar_node.md new file mode 100644 index 0000000..c05cae9 --- /dev/null +++ b/docs/replicacao_slonyfiscal_s1_adicionar_node.md @@ -0,0 +1,783 @@ +# Roteiro - Adicionando Novo Node no Slony + +### IMPORTANTE +Esse manual é um passo a passo do procedimento de inclusão de um novo Node (Cliente) no serviço do Slony já instalado. +Caso precise realizar uma instalação Inicial (partindo do zero) utilize o manual: + +[`Ativação Slony Fiscal - Inicial`](./replicacao_slony_fiscal_s1.md) + + +### Abaixo a representação do funcionamento da estrutura: + +![Diagrama_Funcionamento_Replicacao](../img/diagrama_replicacao_postgres16.png) + + +## Destino - Banco Fiscal Slony (00002_www.nfs-e.net_SGDB_1150_SLONY - 192.168.23.11) + +Checar se o Slony esta instalado e executando: + +``` +rpm -qi slony1_11 +``` +Caso receba o retorno que a aplicação não está instalada , execute a instalação conforme os passos abaixo: + +``` +cd /root/ +wget https://datacenter.atende.net/updates/slony1_11.zip +unzip slony1_11.zip +cd slony +rpm -Uvh slony1_11-2.2.10-1.rhel8.x86_64.rpm perl-Switch-2.17-10.el8.noarch.rpm perl-DBD-Pg-3.7.4-4.module_el8.3.0+426+0b4e9c0a.x86_64.rpm perl-Text-Balanced-2.03-395.el8.noarch.rpm perl-Filter-1.58-2.el8.x86_64.rpm perl-SelfLoader-1.23-416.el8.noarch.rpm +``` +Verificar se o IP do banco Master do Fiscal S1 esta liberado no pg_hba.conf +Também liberar o IP da INT_RT do cliente que esta sendo configurado! + +``` +vim /var/lib/pgsql/11/data/pg_hba.conf +Ex.: host all all 192.168.23.10/32 trust (Libera Fiscal S1) +Ex: host all all 172.16.XXX.XXX/32 trust (IP INT_RT do Cliente) + +systemctl reload postgresql-11.service +``` +Conferir as configurações do postgresql.conf (/var/lib/pgsql/11/data/postgresql.conf) + +``` +wal_level = logical +max_wal_senders = 10 +max_replication_slots = 10 +max_sync_workers_per_subscription = 2 +``` +Conferir se o usuário replicação existe no Banco de Dados (via pgAdmin): + +``` +login roles > replicacao + +Caso não existe, crie o mesmo: + + CREATE ROLE replicacao WITH LOGIN + SUPERUSER + INHERIT + REPLICATION + CONNECTION LIMIT -1 + PASSWORD '123456'; +``` + +Efetue a criação do database conforme o cliente que você esta ativando a replicação via Slony + +``` +Exemplo: 00000_cliente + +CREATE DATABASE "00000_cliente" + WITH ENCODING='LATIN1' + OWNER=dbaipm + TEMPLATE=template0 + TABLESPACE = pg_default + LC_COLLATE = 'pt_BR' + LC_CTYPE = 'pt_BR' + CONNECTION LIMIT=-1; +``` + +Setar os defaults privilégios para o Data Base (substituir o nome 00000_cliente pelo código e nome do cliente): + +``` + +GRANT ALL ON DATABASE "00000_cliente" TO dbaipm; +GRANT ALL ON DATABASE "00000_cliente" TO administradores; +GRANT CONNECT ON DATABASE "00000_cliente" TO consultas; +GRANT ALL ON DATABASE "00000_cliente" TO migradores; +GRANT ALL ON DATABASE "00000_cliente" TO sistema; +REVOKE ALL ON DATABASE "00000_cliente" FROM public; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO administradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT ON TABLES + TO consultas WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO migradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO sistema WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES + TO atualizacao; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO administradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT USAGE ON SEQUENCES + TO consultas WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO migradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO sistema WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT SELECT, UPDATE, USAGE ON SEQUENCES + TO atendenetweb; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO public; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO administradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO consultas WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO migradores WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO sistema WITH GRANT OPTION; + +ALTER DEFAULT PRIVILEGES + GRANT EXECUTE ON FUNCTIONS + TO dbaipm; +``` + +Criar as extensões +``` +CREATE EXTENSION pg_buffercache; +CREATE EXTENSION pg_freespacemap; +CREATE EXTENSION pg_stat_statements; +CREATE EXTENSION btree_gist; +CREATE EXTENSION postgis; +CREATE EXTENSION postgis_sfcgal; +``` + +Execute o SQL para criação da estrutura (schema replicacao) no SGBD de destino na database criada no passo anterior: + +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` + +Verificar se o disco de 1,2 TB esta adicionado no Destino: + +``` +Disco: /var/lib/pgsql/11/tablespaces/replicacao + +[root@00002-NFSE_SGDB_1150_SLONY ~]# df -h +Sist. Arq. Tam. Usado Disp. Uso% Montado em +devtmpfs 8,8G 0 8,8G 0% /dev +tmpfs 8,8G 12K 8,8G 1% /dev/shm +tmpfs 8,8G 8,8M 8,8G 1% /run +tmpfs 8,8G 0 8,8G 0% /sys/fs/cgroup +/dev/mapper/cl_00000--clean--centos8-root 15G 4,9G 11G 33% / +/dev/mapper/cl_00000--clean--centos8-home 2,4G 50M 2,4G 3% /home +/dev/sda2 976M 179M 731M 20% /boot +/dev/mapper/sgdb04-dados 119G 921M 119G 1% /var/lib/pgsql/11 +/dev/sda1 599M 6,7M 593M 2% /boot/efi +/dev/mapper/sgdb01-pg_log 19G 168M 19G 1% /var/lib/pgsql/11/data/log +/dev/mapper/sgdb03-indices 89G 668M 89G 1% /var/lib/pgsql/11/tablespaces/indice +/dev/mapper/sgdb02-pg_wal 29G 272M 29G 1% /var/lib/pgsql/11/data/pg_wal +/dev/mapper/cl_00000--clean--centos8-var_log 15G 347M 15G 3% /var/log +tmpfs 1,8G 0 1,8G 0% /run/user/0 +/dev/mapper/sgdb10-replicacao 1,3T 8,7G 1,2T 1% /var/lib/pgsql/11/tablespaces/replicacao +[root@00002-NFSE_SGDB_1150_SLONY ~]# + +``` + + IMPORTANTE: EXECUTAR O PASSO ABAIXO APENAS SE O DISCO NÃO EXISTIR NO SERVIDOR LINUX E O TABLESPACE REPLICACAO NÃO EXISTA NO BANCO DE DADOS DE DESTINO! + +Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. +``` +lsblk + +fdisk /dev/sde + +#Dispositivo Inicializar Início Fim Setores Tamanho Id Tipo +#/dev/sde1 2048 2587885567 2587883520 1,2T 8e Linux LVM + +vgcreate sgdb10 /dev/sde1 +lvcreate -L +1233G -n replicacao sgdb10 +mkfs.xfs /dev/mapper/sgdb10-replicacao +vim /etc/fstab +/dev/mapper/sgdb10-replicacao /var/lib/pgsql/11/tablespaces/replicacao xfs defaults 0 1 +mkdir -p /var/lib/pgsql/11/tablespaces/replicacao +mount /var/lib/pgsql/11/tablespaces/replicacao +chown postgres.postgres /var/lib/pgsql/11/tablespaces/replicacao/ -R +chmod 700 /var/lib/pgsql/11/tablespaces/replicacao/ -R +``` + +Verificar se o tablespace replicacao existe via PGAdmin. Caso não exista execute a criação da mesma: + +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/pgsql/11/tablespaces/replicacao'; +``` +## Destino - Banco Cliente Versão 16 (00000-clean-bdp-01-1600.atende.net) + +No banco do cliente (PostgreSQL16), criar um disco para a replicação do Fiscal: + +>Deve-se adicionar um HD temporário ao servidor SLAVE (destino) do banco de dados ao qual receberá o tablespace replicacao. +>Como sugestão, adicionar o HD com tamanho de 1234GB, no formato Thin Provision com a controladora SCSI Controller 1, desta forma o HD >crescerá somente o necessário e será fácil de identificá-lo para posterior remoção. + + +Criando pasta: +``` +su - root +``` + +``` +mkdir -p /var/lib/postgresql/16/tablespaces/replicacao +``` + + +Adicionando disco: + +``` +lsblk +pvcreate /dev/sde +vgcreate postgresql-vg10 /dev/sde +lvcreate -l +100%FREE -n lv-replicacao postgresql-vg10 +mkfs.xfs /dev/mapper/postgresql--vg10-lv--replicacao +blkid | grep replicacao +blkid | grep replicacao | grep "0cbfc3a7-07d2-483e-885a-73936788b157" +ls -l /dev/disk/by-id/ | grep dm-7 +#Retorno: dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h -> ../../dm-7 +``` +``` +vim /etc/fstab + +# disco replicacao slony +/dev/disk/by-id/dm-uuid-LVM-My295Ba6z7Vl5TX7eyue3b5bCCOtX1NfqddL0ZoIJLfOjD0N9deI8yySYvvRff3h /var/lib/postgresql/16/tablespaces/replicacao xfs defaults,noatime,nodiratime 0 1 +``` + +Montando o disco: + +``` +mount /var/lib/postgresql/16/tablespaces/replicacao +``` + +Aplicando permissão para o diretório: +``` +chown postgres.postgres /var/lib/postgresql/16/tablespaces/replicacao +``` + +Verificar se o IP do banco Master do Fiscal S1 esta liberado no pg_hba.conf +``` +vim /etc/postgresql/16/main/pg_hba.conf +Ex.: host all all 172.16.1.18/32 trust (Libera Fiscal S1) + +systemctl reload postgresql.service +``` +Conferir configurações no arquivo postgresql.conf: +``` +cd /etc/postgresql/16/main/ +cp postgresql.conf postgresql.bkp-antesslony +vim postgresql.conf + +wal_level = logical +max_wal_senders = 3 +max_replication_slots = 3 +max_sync_workers_per_subscription = 2 +wal_receiver_status_interval = 60s +wal_receiver_timeout = 300s + +OBSERVAÇÃO: Se o parametro estiver max_worker_processes = 3, deverá ser alterado para max_worker_processes = 4 +``` + + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +(systemctl restart postgresql.service) + +Criar tablespace e schema replicacao para recebimento dos dados: + +```ruby +CREATE TABLESPACE replicacao + OWNER postgres + LOCATION '/var/lib/postgresql/16/tablespaces/replicacao'; +``` + +```ruby +--drop SCHEMA replicacao cascade; +CREATE SCHEMA replicacao; + +CREATE SEQUENCE replicacao.sqttblog + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; +CREATE TABLE replicacao.tblog +( + logcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttblog'::regclass), + logdatahora timestamp not null default now(), + logip varchar(30) not null default inet_client_addr(), + logpid bigint not null default pg_backend_pid(), + logacao text not null, + logquery text not null default current_query() +); +COMMENT ON COLUMN replicacao.tblog.logcodigo IS 'Código do log'; +COMMENT ON COLUMN replicacao.tblog.logdatahora IS 'Datahora da ocorrencia'; +COMMENT ON COLUMN replicacao.tblog.logip IS 'Ip do client'; +COMMENT ON COLUMN replicacao.tblog.logpid IS 'Pid da conexao'; +COMMENT ON COLUMN replicacao.tblog.logacao IS 'Acao sendo executada'; +COMMENT ON COLUMN replicacao.tblog.logquery IS 'Query'; + +ALTER TABLE replicacao.tblog + ADD CONSTRAINT pk_tblog PRIMARY KEY(logcodigo); + + +CREATE SEQUENCE replicacao.sqttbddl + INCREMENT 1 + START 1 + MINVALUE 0 + MAXVALUE 9223372036854775807 + CACHE 1; + +CREATE TABLE replicacao.tbddl +( + ddlcodigo bigint NOT NULL DEFAULT nextval('replicacao.sqttbddl'::regclass), + ddlcomando text COLLATE pg_catalog."default" NOT NULL, + ddldatahora timestamp default now(), + CONSTRAINT pk_tbddl PRIMARY KEY (ddlcodigo) +); + + +--Altera o tablespace das tabelas do IPM Fiscal +create or replace function replicacao.fn_altera_tablespace() + returns boolean as +$body$ +declare + r_objeto record; +begin + --Tabelas + for r_objeto in (select 'alter table "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'r' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace da tabela %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + --Índices + for r_objeto in (select 'alter index "'||nspname||'"."'||pg_class.relname||'" set tablespace replicacao;' as cmd, + '"'||nspname||'"."'||pg_class.relname||'"' as nome + from pg_namespace + left join pg_class + on pg_class.relnamespace = pg_namespace.oid + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + and pg_class.relkind = 'i' + and pg_class.reltablespace <> (select oid from pg_tablespace where spcname = 'replicacao') + order by pg_namespace.nspname, + pg_class.relname) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando tablespace da tabela '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando tablespace do índice %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; + + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; + +create or replace function replicacao.fn_remove_relacao_atendenet() + returns boolean as +$body$ +declare + r_fk record; +begin + for r_fk in (select *, + 'alter table "'||schema_filha||'"."'||tabela_filha||'" drop constraint "'||conname||'";' as cmd + from (SELECT pg_constraint.conname, + schema_pai.nspname as schema_pai, + tabela_pai.relname as tabela_pai, + schema_filha.nspname as schema_filha, + tabela_filha.relname as tabela_filha + FROM pg_constraint + INNER JOIN pg_class tabela_filha + ON tabela_filha.oid = pg_constraint.conrelid + INNER JOIN pg_namespace schema_filha + ON schema_filha.oid = tabela_filha.relnamespace + INNER JOIN pg_class tabela_pai + ON tabela_pai.oid = pg_constraint.confrelid + INNER JOIN pg_namespace schema_pai + ON schema_pai.oid = tabela_pai.relnamespace + where pg_constraint.contype = 'f' + and (translate(substr(schema_pai.nspname,1,1),'1234567890','') = '' or + translate(substr(schema_filha.nspname,1,1),'1234567890','') = '' or + schema_pai.nspname in ('saudeweb', 'saudewebglo', 'spunico') or + schema_filha.nspname in ('saudeweb', 'saudewebglo', 'spunico')) + and pg_constraint.confupdtype <> 'c') orig + where translate(schema_pai, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico') + or translate(schema_filha, '1234567890', '') not in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico')) + loop + insert into replicacao.tblog (logacao, logquery) values ('Apagando a FK "'||r_fk.conname||'" da tabela "'||r_fk.schema_filha||'"."'||r_fk.tabela_filha||'".', r_fk.cmd); + raise notice 'Apagando a FK "%" da tabela "%".', r_fk.conname, r_fk.schema_filha||'"."'||r_fk.tabela_filha; + execute r_fk.cmd; + end loop; + return true; +end; +$body$ + LANGUAGE plpgsql VOLATILE; +``` + +## Origem - Banco Fiscal (00002_www.nfs-e.net_SGDB - 192.168.23.10) + +Altere os dados conforme os do cliente que irá fazer a replicação: +``` +vim /usr/local/slony1/etc/slon_tools.conf + + $CLUSTER_NAME = 'replication_ipmfiscal'; + add_node( + node => 1, + host => '192.168.23.10', + dbname => '00002_ipmfiscal', + port => 5432, + user => 'postgres', + password => '' + ); + + add_node( + node => 2, + host => '192.168.23.11', + dbname => '00000_cliente', + port => 5432, + user => 'postgres', + password => '' + + ); +``` +Quando finalizada a configuração do Slave, deve-se prosseguir com o próximo passo: +Navegue até a pasta e crie o arquivo de configuração para criação do novo Node + +No nome do arquivo siga o padrão dos demais (create_node_"numerodonode"_"nomedocliente".cmd) + +cd /usr/local/slony1/bin/ +vim create_node_2_cliente.cmd + +``` +cluster name=replication_ipmfiscal; + +node 1 admin conninfo ='dbname=00002_ipmfiscal host=127.0.0.1 user=postgres'; +node 2 admin conninfo ='dbname=00000_cliente host=192.168.23.11 port=5432 user=postgres'; #(Servidor:00002_www.nfs-e.net_SGDB_1150_SLONY ) +store node (id=2, comment='Node 2 - 00000_cliente@192.168.23.11', event node=1); + +store path(server=1,client=2,conninfo='host=127.0.0.1 dbname=00002_ipmfiscal user=postgres'); +store path(server=2,client=1,conninfo='host=192.168.23.11 port=5432 dbname=00000_cliente user=postgres'); +``` + +Após configurado, salve o arquivo e execute o comando abaixo indicando o arquivo que acabou de ser configurado: + +``` +/usr/local/slony1/bin/slonik /usr/local/slony1/bin/create_node_"numerodonode"_"nomedocliente".cmd +``` + +Acessar o banco do fiscal, e executar o SQL abaixo: + +clicodigo = (Codigo do sistema) do cliente no Atende.Net + +nodcodigo - Código do node criado no slon_tools.conf ou no arquivo relacionado a sua adição no master. + +```ruby +insert into replicacao.tbclientenode (clicodigo, nodcodigo) values (55, 2); +``` + +Ao final, deve-se executar o script para criar a estrutura no banco slave, para isto edite o script de backup que fica no servidor master "IPMFiscal" (Script: backup_estrutura_slony.sh) +```ruby +su - postgres + +vim backup_estrutura_slony.sh + +# Altere +cod_fiscal="8043" -- Código do schema (Fiscal) + +# Destino 11 Fiscal Slony +IP_Destino_11="192.168.23.11" (IP do Banco de Dados do Slony intermediário, não precisa ser alterado) +Porta_Destino_11="5432" (Portal default sem necessidade de alterar) +BD_Destino_11="00000_teste" (Informe o database do cliente que irá ativar a replicacao) + +# Destino Cliente Atende +IP_Destino_16="172.16.XXX.XXX ou 172.24.XXX.XXX" (Informe a INT_RT do cliente Atende.Net - Banco de Dados PostgreSQL 16) +Porta_Destino_16="65432" (Porta default) +BD_Destino_16="00000_teste" (Informe o nome da database do cliente) + + +# Execute o script - O backup e o log serão criados na storage de backup "X:\STORE\Transferir\00002_ipmfiscal" +./backup_estrutura_slony.sh & + +# Ao realizar a conferencia, alguns erros serão normais, pois o Fiscal S1 possui tabelas globais que estão vinculadas a todos os clientes. Na dúvida após a consulta dos logs, verificar com o Richard se trata-se de erros já conhecidos e "normais". + +# Ao final, confira os log´s. +cat 8043*.log | grep ERROR | uniq -u + +# Conferir se os Schemas foram criados, o comando deve retornar os Schemas restaurados, caso não existe favor verificar +cat 8043*.log | grep "creating SCHEMA 8043" | uniq -u (Substituir pelo Código do Schema) +``` + +Com o usuário "root", inicie o node: +```ruby +su - root +/usr/local/slony1/bin/slon_start "numerodonode" +``` + +## Validações (00002_www.nfs-e.net_SGDB_1150_SLONY - 192.168.23.11 e 00000-cliente-bdp-01-1600.atende.net) + +> Validações devem ocorrer nos dois bancos de dados (Fiscal Slony e no Banco de Dados PostgreSQL 16 do cliente.) + +Verificar se o Schema migracao_fiscal esta criado nos dois servidores, caso não execute o create abaixo! + +```ruby +-- Schema: migracao_fiscal +-- DROP SCHEMA migracao_fiscal; +CREATE SCHEMA migracao_fiscal + AUTHORIZATION dbaipm; +``` + +Caso exista ou você acabou de criar, será necessário dar as permissões para o Schema, para isso execute os GRANTS nos dois ambientes: + +```ruby +GRANT ALL ON SCHEMA migracao_fiscal TO dbaipm; +GRANT ALL ON SCHEMA migracao_fiscal TO administradores; +GRANT USAGE ON SCHEMA migracao_fiscal TO consultas; +GRANT ALL ON SCHEMA migracao_fiscal TO migradores; +GRANT ALL ON SCHEMA migracao_fiscal TO sistema; +``` + +Setar privilégios schemas fiscal: +```ruby +do +$body$ +declare + r_objeto record; +begin + for r_objeto in (select 'GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO dbaipm; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO administradores; + GRANT USAGE ON SCHEMA "'||pg_namespace.nspname||'" TO consultas; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO migradores; + GRANT ALL ON SCHEMA "'||pg_namespace.nspname||'" TO sistema;' as cmd, + '"'||pg_namespace.nspname||'"' as nome + from pg_namespace + where translate(pg_namespace.nspname, '1234567890', '') in ('dcarq', '_fiarq', '_gtarq', '_isarq', '_nfarq', '_spunico', '_wgt', '_wnp', '_wsn', 'saudeweb', 'saudewebglo', 'spunico', 'migracao_fiscal', 'migracao_saude') + ) + loop + insert into replicacao.tblog (logacao, logquery) values ('Alterando grants do schema '||r_objeto.nome, r_objeto.cmd); + raise notice 'Alterando grants do schema %.', r_objeto.nome; + execute r_objeto.cmd; + end loop; +end; +$body$; +``` +Liberar porta 65434 no Firewall do cliente, para a conexão entre PG11 x PG16: +Vá em: Firewall > Rules > LAN +Destination: 65434 +Description: Bdp-1150-SLONY + +![Libera Porta Firewall](../img/libera_porta_firewall_replicacao.png) + +## Script de teste +```ruby +# Master (Origem) +create table replicacao.tbteste4(col1 integer primary key, col2 text); +insert into replicacao.tbteste4 values(1,'1'); +select * from replicacao.tbteste4; + +# Slave (11.5) +create table replicacao.tbteste4(col1 integer primary key, col2 text); + +# Destino (16) +create table replicacao.tbteste4(col1 integer primary key, col2 text); + +# Master (origem) +select replicacao.fn_prepara_contexto('Teste Inicial 4', string_to_array('replicacao.tbteste4',',')); + +select replicacao.fn_inicia_replicacao_contexto('Teste Inicial 4', 55); --Segundo parametro é o código do cliente (CÓDIGO DO SISTEMA NO GDT) + +# Slave (11.5) +select * from replicacao.tbteste4; --Já deve ter 1 registro + +CREATE PUBLICATION publication_mig_ipm_fiscal_00000_cliente; +ALTER PUBLICATION publication_mig_ipm_fiscal_00000_cliente ADD table replicacao.tbteste4; + +# Destino (16) +CREATE SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente CONNECTION 'host=172.16.1.18 port=65434 user=replicacao dbname=00000_cliente' PUBLICATION publication_mig_ipm_fiscal_00000_cliente; +select * from replicacao.tbteste4; + +# Master (origem) +insert into replicacao.tbteste4 values(2,'2'); + +# Slave (11.5) +select * from replicacao.tbteste4; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# Destino (16) +select * from replicacao.tbteste4; --Deve ter 2 registro +--Tudo deve estar funcionando. Pode apagar a tabela de teste + +# Master (origem) +select replicacao.fn_interrompe_replicacao('Teste Inicial 4'); +drop table replicacao.tbteste4; + +# Slave (11.5) +drop PUBLICATION publication_mig_ipm_fiscal_00000_cliente; +drop table replicacao.tbteste4; + +# Destino (16) +ALTER SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente DISABLE; +DROP SUBSCRIPTION subscription_mig_ipm_fiscal_00000_cliente; +drop table replicacao.tbteste4; +``` +Após os testes, executar o comando abaixo para verificar o LagTime no Servidor Master. +Esse select irá retornar o tempo de todos os nodes ativos via Slony (replicação). O retorno será apenas o tempo do lagtime e o mesmo deverá sempre estar variando (descendo e subindo), se estiver com mais de 10 minutos acumulado considera que possa haver algum probelma. +```ruby +select * from replicacao.status(); +``` + +[`Início`](replicacao_slony_fiscal_s1.md) \ No newline at end of file diff --git a/docs/replicacao_slonyfiscal_s1_remover_estrutura_node.md b/docs/replicacao_slonyfiscal_s1_remover_estrutura_node.md new file mode 100644 index 0000000..8e459c1 --- /dev/null +++ b/docs/replicacao_slonyfiscal_s1_remover_estrutura_node.md @@ -0,0 +1,42 @@ +# Roteiro - Removendo Estrutura Slony + +## IMPORTANTE +Após a exclusão dos schemas, o chamado será retornado sinalizando que o tablespace pode ser removido. Nesse momento apagamos toda a estrutura criada para a replicação. + + ATENÇÃO: Todo o processo deverá ser documentado no [`CheckList - Remover Estrutura Slony`](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EV6nDzIq-xpFptwju2S9zG0Ba6iuVFZSv_rhhCXNnOI2sQ?e=fwJuN9) + +Abaixo, passo a passo para realizar a remoção da estrutura: + +## Destino - Banco Cliente Versão 16 (00000-clean-bdp-01-1600.atende.net) + +Via PGAdmin, conecte na Interface INT_RT e na porta 65432. Abra um console SQL e execute o comando abaixo: +``` +DROP TABLESPACE replicacao; +``` +Via SSH, conecte no servidor de banco de dados do cliente, através da INT_RT e porta 9032. +Execute os comandos abaixo: +``` +umount /var/lib/postgresql/16/tablespaces/replicacao +``` +``` +rm -rf /var/lib/postgresql/16/tablespaces/replicacao +``` +``` +lvremove /dev/postgresql-vg10/lv-replicacao +``` +``` +vgremove postgresql-vg10 +``` +Remova a linha referente ao disco da replicação no FSTAB: +``` +vim /etc/fstab +``` +No VCenter, é necessário apagar disco com tamanho 1234GB, marcando para deletar os arquivos. + +Para isso, selecione a VM BDP do cliente e vá em: Actions > Edit Settings +Identifique o disco referente ao tablespace replicação e remova, conforme passos abaixo: + +![Excluir Disco Slony](../img/RemoverDiscoVCenterDeletandoArquivos.png) +Após remover a estrutura, o chamado pode ser concluído. Lembrando de evidenciar cada processo executado. + +[`Início`](replicacao_slony_fiscal_s1.md) \ No newline at end of file diff --git a/docs/replicacao_slonyfiscal_s1_remover_node.md b/docs/replicacao_slonyfiscal_s1_remover_node.md new file mode 100644 index 0000000..7841d71 --- /dev/null +++ b/docs/replicacao_slonyfiscal_s1_remover_node.md @@ -0,0 +1,71 @@ +# Roteiro - Removendo Node no Slony + +### IMPORTANTE +Após a instalação do Slony, o chamado deverá retornar informando que a migração foi finalizada e podemos desativar o Slony. +Portanto, a exclusão dos Schemas/Tablespace/Disco, deverá ocorrer após 30 dias - Data acordada entre Data Center e Migração. + +Para remover a estrutura, deve-se seguir [`este documento como referência.`](https://documentos.ipm.com.br/data-center/procedimentos/src/branch/master/docs/replicacao_slonyfiscal_s1_remover_estrutura_node.md) + +Abaixo, passo a passo para realizar a remoção do node: + +## Origem - Banco Fiscal (00002_www.nfs-e.net_SGDB - 192.168.23.10) +Criar script abaixo para remover o node desejado. +Obs: Deve-se substituir o numero do node e o nome do cliente. +``` +# vim /usr/local/slony1/bin/uninstall_node_"numerodonode"_"nomedocliente".cmd + +cluster name=replication_ipmfiscal; + +node 1 admin conninfo ='dbname=00002_ipmfiscal host=127.0.0.1 user=postgres'; +node 3 admin conninfo ='dbname=00000_cliente host=192.168.23.11 port=5432 user=postgres'; + +uninstall node (id=3); +drop node (id=3, event node = 1); + +# /usr/local/slony1/bin/slonik /usr/local/slony1/bin/uninstall_node_"numerodonode"_"nomedocliente".cmd +``` +O slony apaga o node mas não interrompe a monitoração. Para isso, executar o sql abaixo ele remove da monitoração da replicação qualquer tabela que não tenha um slave. +``` +select replicacao.fn_interrompe_replicacao_tabelas_sem_slave() +``` +## Destino - Banco Fiscal Slony (00002_www.nfs-e.net_SGDB_1150_SLONY - 192.168.23.11) +No banco intermediário (11.5), deve-se remover a linha correspondente ao IP do cliente no pg_hba.conf +``` +# vim /var/lib/pgsql/11/data/pg_hba.conf +Ex: host all all 172.XX.1.XX/32 trust + +# systemctl reload postgresql-11.service +``` +Via pgadmin, clique com o botão direito e exclua o database referente ao cliente que está sendo removido: + +![Excluir Database Slony](../img/exlcuir_database_slony.png) + +## Destino - Banco Cliente Versão 16 (00000-clean-bdp-01-1600.atende.net) +No banco de destino (bdp-16), deve-se remover a linha correspondente ao IP da origem no pg_hba.conf +``` +# vim /etc/postgresql/16/main/pg_hba.conf +Ex.: host all all 172.16.1.18/32 trust + +# systemctl reload postgresql.service +``` +Após, deverá ser retornada o arquivo postgresql.conf com as configurações corretas do cliente: +``` +cd /etc/postgresql/16/main/ +cp postgresql.bkp-antesslony postgresql.conf +``` + ATENÇÃO: O RESTART DO SERVIÇO DE BANCO DE DADOS DEVERÁ SER EXECUTADO APÓS AS 18H! +``` +systemctl restart postgresql.service +``` + +## Importante +No Firewall do cliente, deverá ser excluída a regra correspondente a liberação da porta 65434: +Vá em: Firewall > Rules > LAN +Description: Bdp-1150-SLONY + +![Libera Porta Firewall](../img/libera_porta_firewall_replicacao.png) + +Após remover o node, o chamado deverá ser retornado para o Richard que ficará responsável pela exclusão dos schemas. +Depois de 30 dias, deve-se dar sequência neste [`documento`](https://documentos.ipm.com.br/data-center/procedimentos/src/branch/master/docs/replicacao_slonyfiscal_s1_remover_estrutura_node.md) para a exclusão da estrutura. + +[`Início`](replicacao_slony_fiscal_s1.md) \ No newline at end of file diff --git a/docs/restauracao_homologacao.md b/docs/restauracao_homologacao.md new file mode 100644 index 0000000..fb595d1 --- /dev/null +++ b/docs/restauracao_homologacao.md @@ -0,0 +1,312 @@ +# Restauração de base ambiente Homologação + +Este manual visa orientar de forma passo-a-passo o processo de restauração e uma base de cliente para um ambiente de Homologação contratado (Ambiente paralelo). +O primeiro passo para realizar o procedimento de restauração de base do ambiente de Homologação é receber chamado e verificar as informações da abertura como nome do cliente, data de início e expiração do contrato. + +Durante todo o processo, deve-se alimentar a planilha `"Restaurações CNET-DNET" (aba do mês atual)` que está na pasta CheckList, com as etapas que forem sendo avançadas. + +### ✅ Definição e escolha do servidor de Banco de dados + +A estrutura do ambiente de Homologação consiste em 15 Servidores no total, conforme abaixo: + +|Nº | Acesso SSH | Servidor | Porta Banco | IP LAN | +|---| --------------- | ------------- | ------------- | ------------| +| | 172.24.0.5 | Firewall | |192.168.40.33| +| | 172.24.0.5:9024 | Apache | | | +|01 | 172.24.0.5:9032 | Banco01-AtendeNet | 65432 |192.168.40.60| +|02 | 172.24.0.5:9033 | Banco02-Saúde | 65433 |192.168.40.61| +|03 | 172.24.0.5:9034 | Banco03-AtendeNet | 65434 |192.168.40.59| +|04 | 172.24.0.5:9035 | Banco04-AtendeNet | 65435 |192.168.40.58| +|05 | 172.24.0.5:9036 | Banco05-AtendeNet | 65436 |192.168.40.57| +|06 | 172.24.0.5:9037 | Banco06-AtendeNet | 65437 |192.168.40.56| +|07 | 172.24.0.5:9038 | Banco07-AtendeNet | 65438 |192.168.40.55| +|08 | 172.24.0.5:9039 | Banco08-AtendeNet | 65439 |192.168.40.54| +|09 | 172.24.0.5:9040 | Banco09-AtendeNet | 65440 |192.168.40.53| +|10 | 172.24.0.5:9041 | Banco10-AtendeNet | 65441 |192.168.40.52| +|11 | 172.24.0.5:9042 | Banco11-AtendeNet | 65442 |192.168.40.51| +|12 | 172.24.0.5:9043 | Banco12-AtendeNet | 65443 |192.168.40.50| +|13 | 172.24.0.5:9044 | Banco13-AtendeNet | 65444 |192.168.40.49| +|14 | 172.24.0.5:9045 | Banco14-AtendeNet | 65445 |192.168.40.48| +|15 | 172.24.0.5:9046 | Banco15-AtendeNet | 65446 |192.168.40.47| +|16 | 172.24.0.5:9047 | Banco16-AtendeNet | 65447 |192.168.40.46| + +A escolha de qual banco de dados será utilizado para receber a restauração da base será pela quantidade de espaço livre em disco. Na planilha (na pasta CheckList) `"Release - Ambientes Paralelos" na aba "Ambiente Homologação - Controle"` é possível verificar qual servidor possui mais espaço livre em disco e após a escolha deve-se preencher na planilha o nome da base, a data de expiração e a volumetria da base. + +Passos para calcular a volumetria: +Volumetria= BASE - EXPURGO - INDICE - CORRENTE - INTERMEDIARIO - PERMANENTE +Necessário verificar se também tem espaço na partição de Indices antes de proceder com a restauração. + +Para Verificar o tamanho da base e demais schemas/tablespaces: `IPMAdminBD > Base do cliente` (Conforme imagem de exemplo abaixo): + +![tamanho_base](../img/tamanho_base.PNG) + +EXEMPLO DE CALCULO 00003_riodosul: +Total database = 2545G +Expurgo = 329G +Corrente = 364G +Indice = 184G +Intermediario = 470G +Permanente = 1005G + +Dessa forma, teremos: +2545 - 329 - 364 - 184 - 470 - 1005 = 193 + +Será utilizado em torno de 193G da partição dos dados e 184G da partição de indices. + +### ✅ Transferência do arquivo de Backup + +O próximo passo é copiar o arquivo de Backup da Base referente a data informada no chamado (ou a mais recente se não for informada) para a sua pasta "TEMP" da Storage de SP (ambiente Homologação está em SP). + +Se o cliente for a de SP, utilizar um Task de SP. +Se o cliente for a do PR, utilizar um Task do PR. + +**Acessar pasta do backup e copiar o arquivo para a Temp:** + +Se o cliente for de SP, utilizar um Task de SP. +Se o cliente for do PR, utilizar um Task do PR. + +Ex.: +Acessar pasta do backup: +``` +$ cd /storage/sp01-dd6400_01/STORE/Diario/01249_santoaugusto/ +``` +Copiar arquivo para a temp na storage: +``` +$ cp 01249_santoaugusto-20221108-220501.zip /storage/sp01-dd6400_01/TEMP/allan.rostirola/ +``` +Para copiar o backup da storage do PR para a storage de SP, utilizar o comando de exemplo abaixo: +``` +$ scp /storage/dd6400_01/STORE/Diario/00084_saobentodosul/00084_saobentodosul-20230104-200502.zip root@172.24.0.101:/storage/sp01-dd6400_01/TEMP/allan.rostirola +``` + +**Acessar a sua pasta Temp e descompactar o arquivo:** + +Se a storage for a de SP, utilizar um Task de SP. +Se a storage for a do PR, utilizar um Task do PR. + +Ex.: +Acessar pasta Temp: +``` +$ cd /storage/sp01-dd6400_01/TEMP/allan.rostirola/ +``` +Descompactar o arquivo: +``` +$ unzip 01249_santoaugusto-20221108-220501.zip +``` +### ✅ Configurar script de restauração e ajustes no Servidor Homologação Apache + +Acessar o Banco do servidor escolhido e editar o script `"restore_16.sh"`nas linhas abaixo: + +Ex.: +``` +BD_Destino="01249_santoaugusto_transf" (nome da base) +Folder="01249_santoaugusto-20221108-220501" (pasta do backup extraido) +Dir_BKP="$Dir_Storage/TEMP/allan.rostirola" (local onde se encontra a pasta do backup extraido) + +Procs_Max="2" (se for durante o dia) +Procs_Max="4" (se for durante a noite) +``` + +### ✅ Alteração config.inc + +Acessar servidor Homologação Apache e acessar a pasta: +``` +$ cd /var/www/html/homologacao.atende.net +``` + +Verificar se já existe um arquivo `_config.cliente` para o cliente em questão, senão, copiar algum arquivo `_config.cliente` que esteja no mesmo Datacenter. + +Ex.: +``` +$ cp _config.lagoavermelha.inc _config.santoaugusto.inc +``` + +Alterar o arquivo `_config.cliente` com os dados abaixo: +``` +$_CONFIG['ip'] = '192.168.39.11'; (alterar conforme IP LAN do banco em que está a base) +$_CONFIG['base'] = '01249_santoaugusto_transf'; (informar a base do cliente) +$_CONFIG['manutencao'] = 1; (ativar modo manutenção) +$_CONFIG['data_ini_libera_acesso_cpf_teste'] = '22/11/2022'; (data do inicio do contrato) +$_CONFIG['data_fim_libera_acesso_cpf_teste'] = '22/12/2022'; (data do fim do contrato) +``` + +### ✅ Criar database + +Abrir PGadmin, Acessar o servidor Homologação escolhido, Criar a base com o nome `cod_cliente_transf` (ex: 01249_santoaugusto_transf): +```ruby +CREATE DATABASE "01249_santoaugusto_transf" + WITH OWNER = dbaipm + ENCODING = 'LATIN1' + TABLESPACE = pg_default + LC_COLLATE = 'pt_BR' + LC_CTYPE = 'pt_BR' + CONNECTION LIMIT = -1; + +CREATE EXTENSION postgis; +CREATE EXTENSION postgis_sfcgal; +CREATE EXTENSION pg_buffercache; +CREATE EXTENSION pg_freespacemap; +CREATE EXTENSION pg_stat_statements; +CREATE EXTENSION btree_gist; +CREATE EXTENSION pg_trgm; +CREATE EXTENSION pgcrypto; +``` +Executar script e acompanhar os logs de restauração e vacuum. +``` +$ ./restore_16.sh & +``` +### ✅ Conferir logs do restore + +Após finalizar, verificar se apresentou algum erro nos logs: +``` +cat *.log | grep ERROR +cat *.log | grep Error +cat *.log | grep WARN +cat *.log | grep Warn +``` +### ✅ Executar o inicializa + +Abrir o InicializaDB: + +``` +Ambiente: Homologacao +IP: 172.24.0.5 +Porta: 65434 (Banco03-AtendeNet) +Usuario: postgres +Senha: +Databases: 01249_santoaugusto_transf + +- Conferir Flags: + - Atividades pós-restore > Executa comandos obrigatórios Atende.Net + - Atividades pós-restore > Seta/Revoga permissões + - Atividades pós-restore > Cria estrutura monitoração + - Atividades pós-restore > Desabilitar agendamentos + - Atividades pós-restore > Alterar configurações + - Atividades pós-restore > Executa validações necessárias + - Atividades pós-restore > Remover contatos mobile + - Atividades pós-restore > Limpar registros desnecessários + - Atividades pós-restore > Alterar os domínios + + - Criação de Tabelas > Cria ou recria a webbased.tbsession + - Criação de Tabelas > Cria tabelas caso não existam + - Criação de Tabelas > Ajustar sequences + + - Particionamento > Ajustar Particionamento + + - Armazenamento de Arquivos > Alterar configuração de uso da Storage - Ação: Desativar + - Armazenamento de Arquivos > Alterar Estrutura de Armazenamento - Ação: Sim + - Armazenamento de Arquivos > Tamanho dos Arquivos / Tamanho das Partições - Deverá ser alterado conforme memória da VM Definitiva (BDP-1600) + Menor que 6GB - Selecionar a opção 32/16MB + De 6GB até 12GB - Selecionar a opção 64/32MB + Se for maior que 12GB - Selecionar a opção 128/64MB + - Armazenamento de Arquivos > Iniciar particionamento do schema Arquivo - Manter em 26G + - Armazenamento de Arquivos > Habilitar / Desabilitar Agendamentos + Marque para habilitar: 460 e 461 +``` +_* É possível que apresente o erro abaixo por motivos de que não obteve acesso ao GDT para buscar os dados. Clique em OK e Execute novamente._ + +![erro-inicializa](../img/erro-inicializa.PNG) + +### ✅ Renomear database + +No PGAdmin: Alterar o nome da Base (Remover o "_transf"), Caso apresente erro, abrir o server status e matar as conexões abertas referentes a esta base. + +### ✅ Modo manutenção + +Acessar o Homologacao-Apache e alterar o _config.cliente: +``` +$_CONFIG['base'] = '01249_santoaugusto'; (remover o _transf) +$_CONFIG['manutencao'] = 0; (desativar modo manutenção) +- Conferir as datas +``` + +- Atualizar a base na revisão da Release se necessário; +- Atualizar na última revisão dos ambientes Homologação (Conforme planilha "Release - Ambientes Paralelos"); +- Adicionar a linha do ambiente na planilha "Release - Ambientes Paralelos"; + +### ✅ Setando Microserviços para o Funcionamento dos recursos (WebReport, JobRunner, FileSigner e FileOptimizer) + +Para que os relatórios, agendamentos, assinaturas e outros recursos do "Tomcat" funcionem no cliente, é necessário ajustar os Ip's nos Microserviços do Atende.Net do ambiente. Sendo assim, basta executar o Script abaixo! caso necessário deve ser alterado os endereços IP's conforme o ambiente que esta sendo executado! + +```ruby +create table public.tbmicrosservicoinstancia_202310 as( + select * from webbased.tbmicrosservicoinstancia +); + +create table public.tbmicrosservicoinstanciasis_202310 as( + select * from webbased.tbmicrosservicoinstanciasis +); + +create table public.tbservletjava_202310 as( + select * from webbased.tbservletjava +); + +delete + from webbased.tbmicrosservicoinstancia + where svjaplicacao in (2,3,4,5,15); + +drop table if exists tbdados; + +create temp table tbdados as ( + select '192.168.40.32' as rede, + '192.168.40.37' as cluster +); + +insert into webbased.tbmicrosservicoinstancia + (svjaplicacao, svjnome, msinome, msisequencia, msiendereco, msiativo, msiversao) + (select svjaplicacao, svjnome, svjnome, 1, + case + when svjnome='WebOcrReader' + then 'http://'||tbdados.cluster||':8083' -- OCR + when svjaplicacao = 2 + then 'http://'||tbdados.cluster||':8081' -- WebReport + when svjaplicacao = 3 + then 'http://'||tbdados.cluster||':8082' -- JobRunner + when svjaplicacao = 4 + then 'http://'||tbdados.cluster||':8083' -- FileOptimizer + when svjaplicacao = 5 + then 'http://'||tbdados.cluster||':8084' -- FileSigner + when svjaplicacao = 15 + then 'http://'||tbdados.cluster||':8086' -- JSM + else '' + end, + 1, + null + from webbased.tbservletjava + left join tbdados + on true + where svjaplicacao in (2,3,4,5,15) + order by 1, 2); + +insert into webbased.tbmicrosservicoinstanciasis + (svjaplicacao, svjnome, msisequencia, siscodigo) + (select 2, + 'WebReport', + 1, + siscodigo + from webbased.tbsistemacliente + where sicativo = 1 + group by siscodigo); + +``` + +### ✅ Configuração Microsserviços Mapas +Na rotina `Gerenciamento do Sistema » Microsserviços » Microsserviços`, na aplicação Mapas o deve ser avaliado e configurado conforme ambiente: + +🌐 SP01: +- MapnikTiles: https://sp01-maps.atende.net/mapnik/ +- MapsGeocoding: https://sp01-maps.atende.net/nominatim/ +- MapsRouting: https://sp01-maps.atende.net/osrm/ +- MapsServices: https://sp01-js.atende.net/nmp-ipmmaps-backend-v2/ +- PeliasGeocoding: https://sp01-maps.atende.net/pelias/ +- VectorTiles: https://sp01-maps.atende.net/mapnik/ + +### ✅ Chamado + +- Tramitar chamado para o solicitante informando o endereço de acesso do ambiente do cliente: + +Ex.: https://homologacao.atende.net/?cidade=santoaugusto + + +- [`VOLTAR`](../README.md) + \ No newline at end of file diff --git a/docs/siafic.md b/docs/siafic.md new file mode 100644 index 0000000..a9ec05e --- /dev/null +++ b/docs/siafic.md @@ -0,0 +1,121 @@ + +# Configurações para migração do Siafic + +Este procedimento consiste em 6 etapas: + +1) Enviar arquivos para Storage; +2) Ativar modo manutenção no cliente; +3) Alterar o nome da Database; +4) Configurar e executar script para o Backup da base; +5) Compactar a pasta dos arquivos da Storage; +6) Ampliar número máximo de conexões do Banco; + +## 1. Enviar arquivos para Storage + +__Para enviar os arquivos para a storage siga os passos abaixo:__ + +* Acesse o portal do cliente (cliente.atende.net) e logue com o seu usuário; +* Acesse o menu: `Gerenciamento do Sistema > Sistema > Agendamento de Tarefas`; +* Localize e selecione o agendamento `119 - Envio de Arquivos para Storage` e clique em executar, conforme imagem abaixo: + +![executar](../img/executar.png) + +* Verifique nos logs se todos os arquivos foram enviados, caso contrário execute várias vezes até que não existam mais arquivos para serem enviados na storage. Para verificar o log da execução do agendamento, selecione o agendamento `119 - Envio de Arquivos para Storage`, clique no botão `Histórico > Execuções`, selecione a última execução e clique no botão `Log`, conforme ilustrado na imagem abaixo: + +![log](../img/log.png) + +## 2. Ativar modo manutenção no cliente + +_Coloque o cliente em modo manutenção rapidamente após enviar os arquivos para a Storage, para garantir que nenhum usuário continuará adicionando novos arquivos!_ + +* Acesse o servidor Apache do cliente via SSH; +* Edite o arquivo `_config.padrão.inc` alterando o valor da seguinte linha para `1`: + +``` +vim /var/www/html/cliente.atende.net/_config.padrao.inc (Alterar para o nome do cliente) +``` +``` +... +$_CONFIG['manutencao'] = 0; (Alterar para "1") +... +``` + +## 3. Alterar nome da Database + +* Nesta etapa é necessário alterar o nome da Database afim de garantir que ninguém irá acessá-la. +* Acesse via PGAdmin o servidor de banco de dados do cliente e localize a Database correspondente; +* Clique com o botão direito na base, vá em `Propriedades`, altere o nome para `00000_cliente_mig`, conforme imagem abaixo. + +![database](../img/database.png) + +## 4. Configurar e executar script para o Backup da base + +* Acesse o servidor de Banco de dados do cliente via SSH; +* Edite o script `transferir_11.sh` com as configurações necessárias para realizar o Backup da base na pasta solicitada no chamado, conforme o exemplo abaixo: + +``` +vim /root/transferir_11.sh +``` +``` +... +Host_Origem="127.0.0.1" +Porta_Origem="5432" +BD_Origem="09074_previdenciaitapoa_mig" +Usuario_Origem="postgres" + +Host_Destino="127.0.0.1" +Porta_Destino="5432" +BD_Destino="00000_clean" +Usuario_Destino="postgres" +Folder="$BD_Origem-$data-$hora" + +Dir_Storage="/var/lib/pgsql/11/storage" +Dir_BKP="$Dir_Storage/TEMP/dielcio.schelter/Arquivos_SIAFIC" +Dir_Pgsql="/usr/pgsql-11/bin/" +Dir_Log="/root" +File_Check="$Dir_Log/check_files.list" +Procs_Max="4" + +``` +* Execute o Script; +``` +./transferir_11.sh +``` +* Ao finalizar verifique se o arquivo foi para a pasta selecionada. + +## 5. Compactar a pasta dos arquivos da Storage + +* Acesse algum Servidor Task e execute os seguintes comandos para compactar a pasta de arquivos do cliente diretamente na pasta de destino solicitada no chamado, conforme o exemplo abaixo: + +``` +cd /storage/s3/09074_previdenciaitapoa +zip -9 -r /storage/dd6400_01/TEMP/dielcio.schelter/Arquivos_SIAFIC/09074_previdenciaitapoa_arquivos_full.zip 09074_previdenciaitapoa/ +``` +* Ao finalizar, verifique se o arquivo foi para a pasta selecionada. + + +## 6. Ampliar número máximo de conexões do Banco + +* Acesse o Servidor de Banco de dados da Prefeitura via SSH; +* Edite o arquivo `postgresql.conf` na linha `max_connections` para o valor `32` coforme exemplo abaixo: +``` +vim /var/lib/pgsql/11/data/postgresql.conf +``` +``` +... +max_connections = 32 +... +``` + +* Reinicie o serviço do Postgres para aplicar as configurações; +``` +systemctl restart postgresql-11.service +``` +* Após executar todos os processos acima, desative o cliente no GDT e desmarcar o permite atualização, conforme imagem abaixo: + +![gdt](../img/gdt.png) + +Desativar as duas flags indicadas; + + +- [`VOLTAR`](../README.md) diff --git a/docs/ssl_mtls_cloud.md b/docs/ssl_mtls_cloud.md new file mode 100644 index 0000000..38ec232 --- /dev/null +++ b/docs/ssl_mtls_cloud.md @@ -0,0 +1,214 @@ +# Ambiente MTLS - Cloud + +### Descritivo: + +Documento criado para registrar o ambiente mtls-cloud.ipm.com.br criado para o setor de Arrecadação para integração com entidades de Banco para funcionalidade do PIX. + +Solicitação feita através do Chamado 598838 + +## Certificado SSL + +Este ambiente possui as cadeias certificadoras do domínio *ipm.com.br e também dos bancos que estão realizando integração com esse ambiente. +Sendo assim, em todo processo de atualização do Certificado SSL seja de domínio da IPM ou de entidades terceiras (Bancos), deve se manter todos os CA dentro do mesmo arquivo: + +Segue exemplo: + +``` +# Entre na pasta onde fica localizado os certificados: +cd /usr/certificado/star_ipm_com_br + +# Entre no arquivo onde são armazenados os CA +vim STAR_ipm_com_br.ca-bundle + +Certicadora CA domínio IPM: + +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEyDCCA7CgAwIBAgIQDPW9BitWAvR6uFAsI8zwZjANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0yMTAzMzAwMDAwMDBaFw0zMTAzMjkyMzU5NTlaMFkxCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxMzAxBgNVBAMTKkRpZ2lDZXJ0IEdsb2Jh +bCBHMiBUTFMgUlNBIFNIQTI1NiAyMDIwIENBMTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMz3EGJPprtjb+2QUlbFbSd7ehJWivH0+dbn4Y+9lavyYEEV +cNsSAPonCrVXOFt9slGTcZUOakGUWzUb+nv6u8W+JDD+Vu/E832X4xT1FE3LpxDy +FuqrIvAxIhFhaZAmunjZlx/jfWardUSVc8is/+9dCopZQ+GssjoP80j812s3wWPc +3kbW20X+fSP9kOhRBx5Ro1/tSUZUfyyIxfQTnJcVPAPooTncaQwywa8WV0yUR0J8 +osicfebUTVSvQpmowQTCd5zWSOTOEeAqgJnwQ3DPP3Zr0UxJqyRewg2C/Uaoq2yT +zGJSQnWS+Jr6Xl6ysGHlHx+5fwmY6D36g39HaaECAwEAAaOCAYIwggF+MBIGA1Ud +EwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHSFgMBmx9833s+9KTeqAx2+7c0XMB8G +A1UdIwQYMBaAFE4iVCAYlebjbuYP+vq5Eu0GF485MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwdgYIKwYBBQUHAQEEajBoMCQG +CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQAYIKwYBBQUHMAKG +NGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEdsb2JhbFJvb3RH +Mi5jcnQwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybDMuZGlnaWNlcnQuY29t +L0RpZ2lDZXJ0R2xvYmFsUm9vdEcyLmNybDA9BgNVHSAENjA0MAsGCWCGSAGG/WwC +ATAHBgVngQwBATAIBgZngQwBAgEwCAYGZ4EMAQICMAgGBmeBDAECAzANBgkqhkiG +9w0BAQsFAAOCAQEAkPFwyyiXaZd8dP3A+iZ7U6utzWX9upwGnIrXWkOH7U1MVl+t +wcW1BSAuWdH/SvWgKtiwla3JLko716f2b4gp/DA/JIS7w7d7kwcsr4drdjPtAFVS +slme5LnQ89/nD/7d+MS5EHKBCQRfz5eeLjJ1js+aWNJXMX43AYGyZm0pGrFmCW3R +bpD0ufovARTFXFZkAdl9h6g4U5+LXUZtXMYnhIHUfoyMo5tS58aI7Dd8KvvwVVo4 +chDYABPPTHPbqjc1qCmBaZx2vN4Ye5DUys/vZwP9BFohFrH/6j/f3IL16/RZkiMN +JCqVJUzKoZHm1Lesh3Sz8W2jmdv51b2EQJ8HmA== +-----END CERTIFICATE----- + +Entidade Certificadora Banco BB: +-----BEGIN CERTIFICATE----- +MIIHtDCCBZygAwIBAgIJANjGl6F55VD+MA0GCSqGSIb3DQEBDQUAMIGYMQswCQYD +VQQGEwJCUjETMBEGA1UECgwKSUNQLUJyYXNpbDE9MDsGA1UECww0SW5zdGl0dXRv +IE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3JtYWNhbyAtIElUSTE1MDMG +A1UEAwwsQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2 +MTAwHhcNMjMwMzIyMTgwOTExWhcNMzIwNzAxMTIwMDU5WjB3MQswCQYDVQQGEwJC +UjETMBEGA1UEChMKSUNQLUJyYXNpbDE1MDMGA1UECxMsQXV0b3JpZGFkZSBDZXJ0 +aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2MTAxHDAaBgNVBAMTE0FDIFNPTFVU +SSBTU0wgRVYgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDHv3Kv +oEPrNrzImIPn17GI5vdoVxghsm6EVLMUjnM4JdCpDED+0BqZF0kycyZaiWt7jqSR +vcGm66RKzSGcHJlUgahp9qcXAmSwMn00pwvgBKb+4htp48vQc1/5MWpaBzQW4Di/ +tWvNkh9URtMyhtltf2u3s9r5vgF12ff7mCu3oj0bDBIaGs/a9EtMKoCfw/ziKUp7 +11JYu1fbIWVOgbW9iHE24oiE33LGLm+uToCWpjGL3n9D+q+ryfIYFoes6gPCYYSt +udDUB9lfpe83IOVcVslL3DmYd2oEncGCogO3qzaMSH3OVLMO4Rg5edERpMw5U0tA +MeyO0k5/tmnFfUM476lZl+ce2Ol56p7R2yjKxHJizeCOSmwDE5FXz7ll+Zq9C7QW +UzoPQtyT739UGEeBRTAz4KsO77frCtdifGRvX3lMfI8qeMnfvf08BK9e2dRkCHwD +iv23Aw7QIixDS9PiSsMxObgjHwroEqAAN2Mwz1B1zAuzZVUH7k6MyQQ/II/GDUpT +jT4VKnhjdIfz5aEFHx7By2XjMkx1hyeONLS/2SoDnKitE9yY/PASqWDCPCpSoJ+x +fEdyZvoawEbJfL+CMhU5I7IXgf9f7gibghIc2CG4bf6dfVAdPcGkYkcjw21dtq/G +1V2dHpOX67BbihThAVr8Z7NTgVAv4nC6MPpAywIDAQABo4ICHzCCAhswggEHBgNV +HSAEgf8wgfwwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0cDovL2FjcmFpei5p +Y3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwUAYGYEwBAYECMEYwRAYIKwYB +BQUHAgEWOGh0dHA6Ly9jY2QuYWNzb2x1dGkuY29tLmJyL2RvY3MvZHBjLWFjLXNv +bHV0aS1zc2wtZXYucGRmMFAGBmBMAQIBcDBGMEQGCCsGAQUFBwIBFjhodHRwOi8v +Y2NkLmFjc29sdXRpLmNvbS5ici9kb2NzL2RwYy1hYy1zb2x1dGktc3NsLWV2LnBk +ZjAHBgVngQwBATAIBgZngQwBAgIwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cDovL2Fj +cmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFjcmFpenYxMC5jcmwwHwYDVR0jBBgw +FoAUdPN+//yfU3rxfOurPqSm2hi6RWMwHQYDVR0OBBYEFP4GuSyVfi/m0Lio8S+3 +8i6F1dfAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQW +MBQGCCsGAQUFBwMBBggrBgEFBQcDAjBMBggrBgEFBQcBAQRAMD4wPAYIKwYBBQUH +MAKGMGh0dHA6Ly9hY3JhaXouaWNwYnJhc2lsLmdvdi5ici9JQ1AtQnJhc2lsdjEw +LmNydDANBgkqhkiG9w0BAQ0FAAOCAgEAABxayeHitwL18QeXSQvRZ2eiNb82IlYT +uvER4JRMzZDWoamKOqmD7KXSSj+sdBThYiRkkNiVFiMn2qoYAdylI2I4w1npbxyr +ukfXQ7tadTEiMCFva0uHHw9lpBx+oyy9rcLM7qC5qquksyhC222Yt3WbqC6Fla+L +o3GlTOpogqexeyc9hgvAQxeMmq+xyDcjSLzKmmRmMKQ9y3w7wpufXTO/0K5uOLLZ +sfyXZTw+MYYeIk2+GNv1qQBbWo3gmwlD1W0pJEHe+/KxiCRkDHpJY7Lk2Rm4bSDZ +Rr4Bn8bk/XJWpiu7Fm9b8piPKjTtstDYTzu40ccPRh9UCWDUz4nKF97dXjIgYf+a +TA0vnKdlnpPUDeBVpfyXavhGf/akFh5AO7/v6xkzWOUlawn5g614mWhOQ6ITwmua +y1spnpBO684d0bynFQfMoZGS5fdKoYKKDzp29xhBm3s9WD1f/oP79Ie0eDribpOv +j3Xsjz72MTG4+UVxuv0OIYuXDc8x1foMzVOco6DxuLel6KG5RH+m0tWmX4ouCgBK +TNUQC70AWHBa4PCF5YA7H8qVnH2EUBPo3rxOY0wN6GzyMbg9+D9l5e2Xcg7/ytqY +BIBnZKLPjzS3OqUsM9UgUKGwcEnaHnmRxH8vyVEMGnoK1cZNf9uDM9sMGgQUzKwV +wixwyINOM8U= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIITzCCBjegAwIBAgIKEd4kAidrnYRJVjANBgkqhkiG9w0BAQ0FADB3MQswCQYD +VQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE1MDMGA1UECxMsQXV0b3JpZGFk +ZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2MTAxHDAaBgNVBAMTE0FD +IFNPTFVUSSBTU0wgRVYgRzQwHhcNMjQwMjI5MjA1NDAwWhcNMjUwMjI4MjA1NDAw +WjCBsjELMAkGA1UEBhMCQlIxGzAZBgNVBAoMEkJhbmNvIGRvIEJyYXNpbCBTQTEL +MAkGA1UECAwCREYxETAPBgNVBAcMCEJyYXNpbGlhMRcwFQYDVQQFEw4wMDAwMDAw +MDAwMDE5MTEeMBwGA1UEAwwVYXBpLndlYmhvb2suYmIuY29tLmJyMRgwFgYDVQQP +DA9CdXNpbmVzcyBFbnRpdHkxEzARBgsrBgEEAYI3PAIBAxMCQlIwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCy4SQDtrk4B4exWBaZXCy230PgC7q86tdZ +U3Mcfmj7Cu2rESi++DXKl9wBuUnOF4jjNNbCZkf9XtO5ASRPhcBG2YXa2K+cb0Ex +pRkay7TyZX69JfL7Ee0XR/x1wFKHQDDESSQvfI/9v6kR+OoLKlxGuQmycaY0A1XO +WfFknt3IFEBvxqTpcsLbInso728M7/qbVllmjaLcT04EUQv+OmKY9M5gy0hxjLqA +RfqF93zjy/8QzTHkQ3lHJgveL9L8ZO/la1ojNfx6W+4yD6c/c5D1fNKos8yyHq7Q +1rEIgrFH8GpEhm3TN7fX0KNolarTlj++WbHQMm+9cHUCS9ndb715AgMBAAGjggOf +MIIDmzAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFP4GuSyVfi/m0Lio8S+38i6F1dfA +MIGABggrBgEFBQcBAQR0MHIwRgYIKwYBBQUHMAKGOmh0dHA6Ly9jY2QuYWNzb2x1 +dGkuY29tLmJyL2xjci9hYy1zb2x1dGktc3NsLWV2LXYxMC1nNC5jcnQwKAYIKwYB +BQUHMAGGHGh0dHA6Ly9vY3NwMy5hY3NvbHV0aS5jb20uYnIwIAYDVR0RBBkwF4IV +YXBpLndlYmhvb2suYmIuY29tLmJyMGQGA1UdIARdMFswBwYFZ4EMAQEwUAYGYEwB +AgFwMEYwRAYIKwYBBQUHAgEWOGh0dHA6Ly9jY2QuYWNzb2x1dGkuY29tLmJyL2Rv +Y3MvZHBjLWFjLXNvbHV0aS1zc2wtZXYucGRmMB0GA1UdJQQWMBQGCCsGAQUFBwMC +BggrBgEFBQcDATCBkAYDVR0fBIGIMIGFMECgPqA8hjpodHRwOi8vY2NkLmFjc29s +dXRpLmNvbS5ici9sY3IvYWMtc29sdXRpLXNzbC1ldi12MTAtZzQuY3JsMEGgP6A9 +hjtodHRwOi8vY2NkMi5hY3NvbHV0aS5jb20uYnIvbGNyL2FjLXNvbHV0aS1zc2wt +ZXYtdjEwLWc0LmNybDAdBgNVHQ4EFgQUrJLyQZi1wiX3/NsGaojWFghf3ckwDgYD +VR0PAQH/BAQDAgWgMIIBfwYKKwYBBAHWeQIEAgSCAW8EggFrAWkAdwBOdaMnXJoQ +wzhbbNTfP1LrHfDgjhuNacCx+mSxYpo53wAAAY37RCMQAAAEAwBIMEYCIQDfxe1W +kDjCn4RLn5R40j/2+KO79Eu9y5zjdsz3rDTisgIhAKU2dM+nx2940k33+XgfJknl +lOuw0MiT1KjfJFmG0lmHAHYA4JKz/AwdyOdoNh/eYbmWTQpSeBmKctZyxLBNpW1v +VAQAAAGN+0QlwQAABAMARzBFAiBkNYL0Lr86orlRRWdnUEeXVACCUIX8N1DQD2nf +WGHKhwIhAJW25fTwYkACYyMV9atO+sIM/RKdrEX3c37r4caYuLnOAHYAzxFW7tUu +fK/zh1vZaS6b6RpxZ0qwF+ysAdJbd87MOwgAAAGN+0QqlgAABAMARzBFAiEAsYRW +7g/EMkmhAOzWifnXlfzN0wsdopPvZD5Fib5w5IsCIDU4S5QoaSjsUzHU8Jpq4qM7 +62/mdCahdkAbvB5uEXHVMA0GCSqGSIb3DQEBDQUAA4ICAQBbV2wIMi1LEb7ji9/9 +atd6xX2umdv1cJRgTl7ZIB8XU0cwb95MOxcZDF+FnGVhKezJijis7AvnLncebzW/ +dWhMI/hRXLi19kCGuWKHKJCgr7KmdLucCX2gdHfksCwNxP1uNCER288qsDgJ1Zzl +6gLwtAaN034L0uapMKl6DTsWhIopIhNXR7TIOfuklxioegw4o9hLZCKfrAHwyT8n +nOelaEeIPVry8kIIAGzLHXTIw+C/rapKslruuUbjwexs6hYjf3iZB0CC4jWmVaWo +me7AZwB2Q8DZDS3uokBRn+Vjdsp7K5mwghOxCGHl9lcAC1q+fWXJLt+dCnbnltSA +e89zWdFX3DXbl+NjGtJpM2ndyjAnrRXm8+CWvcUwRNaiz7/akll3sJMRWLL0h7la +f1dknWwgVIQLcxjwu1Y/7sNABiIc0x7jc5Tg/1QnJoZjm8IpY4ajnH/lFAU4lrm4 +vCwIqw+BVgB7EuA0FggIBsD1HrG5ku9+PO2f0Q3tdRYVPambvmWIxKcf8Uqkx+8D +X/74OScrfm3im/QJ4XYRvMHMphXqHuDiTrewkK9lmbwWUzxxh7wX+Ir2ELrqtZaU +Zj0yzpsRu5nFEVyBTXjsSf3fmAcHQfpR569MS7u5j/JGc9ODM5jOaOMxfi+xPQxJ +WCFWDnuWvVcvQa9zqir9yBQCrA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGrDCCBJSgAwIBAgIJANLVi0S/gZNCMA0GCSqGSIb3DQEBDQUAMIGYMQswCQYD +VQQGEwJCUjETMBEGA1UECgwKSUNQLUJyYXNpbDE9MDsGA1UECww0SW5zdGl0dXRv +IE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3JtYWNhbyAtIElUSTE1MDMG +A1UEAwwsQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXogQnJhc2lsZWlyYSB2 +MTAwHhcNMTkwNzAxMTkxNTU5WhcNMzIwNzAxMTIwMDU5WjCBmDELMAkGA1UEBhMC +QlIxEzARBgNVBAoMCklDUC1CcmFzaWwxPTA7BgNVBAsMNEluc3RpdHV0byBOYWNp +b25hbCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxNTAzBgNVBAMM +LEF1dG9yaWRhZGUgQ2VydGlmaWNhZG9yYSBSYWl6IEJyYXNpbGVpcmEgdjEwMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAk3AxKl1ZtP0pNyjChqO7qNkn ++/sClZeqiV/Kd7KnnbkDbI2y3VWcUG7feCE/deIxot6GH6JXncRG794UZl+4doD0 +D0/cEwBd4DvrDSZm0RT40xhmYYOTxZDJxv+coTHdmsT5aNmSkktfjzYX4HQHh/7M +em+kTOpT/3E4K6B7KVs9HkOT7nXx5yU1qYbVWqI0qpJM9mOTSFx8C9HiKcHvLCvt +1ioXKPAmFuHPkayOcXP2MXeb+VRNjWKU4E+L2t5uZPKVx1M/9i1DztlLb4K8OfYg +GaPDUSF1sxnoGk5qZHLleO6KjCpmuQepmgsBvxi2YNO7X2YUwQQx1AXNSolgtkAR +5gt+1WzxhbFUhItQqlhqxgWHefLmiT5T/Ctz/P2v+zSO4efkkIzsi1iwD+ypZvM2 +lnIvB24RcSN6jzmCahLPX4CwjwIK6JsSoMVxIhpZHCguUP4LXqP8IWUZ6WgS/4zB +7B9E0EICl2rM1PRy+6ulv+ZOW256e8a0pijUB+hXM1msUq9L92476FAAX8va3sP7 ++Uut94+bGHmubcTLImWUPrxNT7QyrvE3FyHicfiHioeFL2oV4cXTLZrEq2wS8R4P +KPdSzNn5Z9e2uMEGYQaSNO+OwvVycpIhOBOqrm12wJ9ZhWKtM5UOo34/o37r5ZBI +TYXAGbhqQDB9mWXwH+0CAwEAAaOB9jCB8zBOBgNVHSAERzBFMEMGBWBMAQEAMDow +OAYIKwYBBQUHAgEWLGh0dHA6Ly9hY3JhaXouaWNwYnJhc2lsLmdvdi5ici9EUENh +Y3JhaXoucGRmMEAGA1UdHwQ5MDcwNaAzoDGGL2h0dHA6Ly9hY3JhaXouaWNwYnJh +c2lsLmdvdi5ici9MQ1JhY3JhaXp2MTAuY3JsMB8GA1UdIwQYMBaAFHTzfv/8n1N6 +8Xzrqz6kptoYukVjMB0GA1UdDgQWBBR0837//J9TevF866s+pKbaGLpFYzAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQ0FAAOCAgEA +eCNhBSuy/Ih/T+1VOtAJju85SrtoE3vET1qXASpmjQllDHG/ph7VFNRAkC+gha+B +CbjoA5oJ/8wwl+Qdp1KGz6nXXFTLx3osU+kjm0srmBf9nyXHPqvFyvBeB0A7sYb7 +TmII9GKD20oCxsdkccR/oE/JuTaNnGq0GYZ2aDb5v62uLi21Y6P9UBiTxZqQ4ojW +ET6kXNjlK238jpXv17FR8Sg3VusCvX7Q8eJkavvHHZDeWck2fSA+ycAc2JeL2Z0B +MSxGWpH32WM9J8+6XqCJUXHiWEV0zCE8wDYiYC+047pTxQI/gB/FcU7jvylh98DJ +kQPHd/Tp6Og3ynlDA9n9uBbxYHVRZs9vsZ/7xTFaxRe+zk8dhgKgZ/3RrcMFB570 +2t8LFbyuUE/kQVY6rZ0QJ9qMWQ7VPLRwRhiMeU3k8WDJb/tBbOXHBqldTbWyQ+mp +MEDWhbrzE/IED82wAuO23Tb05cYk2xC7+Izef8fSc3XdJDuPSbcDpWukzyCDtSEH +isLiGEtIbYRiPsF3czlQPsnIEVoTTCWxHCH1zYR6zScSv18Qh69qVe2J40K5jZoP +GEOhq/oKhVJQAdvAFW5Odp7mF3Tk9nivjjsctJSxY26LFiV5GRV+07SSse4ti0aO +jO5PLg5SWjfcOtBG2rz02EIvQAmLcb0kGBtfdj0lW/w= +-----END CERTIFICATE----- + + +``` + +Em uma atualização do Certificado IPM que é substituida toda a pasta localizada em /usr/certificado/star_ipm_com_br, deve ser sempre ajustado este arquivo. + +Obs. No Chamado esta descrito no Trâmite 7 todas as configurações efetuadas nesse ambiente para o funcionamento da integração através do endereço https://mtls-cloud.ipm.com.br + +- [`Voltar`](../README.md) \ No newline at end of file diff --git a/docs/transferencia_ambiente_compartilhado.md b/docs/transferencia_ambiente_compartilhado.md new file mode 100644 index 0000000..9a89d22 --- /dev/null +++ b/docs/transferencia_ambiente_compartilhado.md @@ -0,0 +1,577 @@ +# Transferência Ambiente Compartilhado (Atende.Net) + +> +> Documentação do passo a passo para realizar a transferência de um cliente para o ambiente compartilhado, Consorcios-01, Consorcios-02, etc.. +> + + IMPORTANTE: Antes de prosseguir com os passos abaixo, garanta que todos os procedimento de configuração do ambiente definitivo foram executados conforme o manual: [`Configuração do Ambiente dos Consórcios`](./configuracao_ambiente_consorcio.md) + +Todos os passos abaixo são baseados no Checklist disponível em: [Manutenção Servidores - 15082024 v1.xlsx > TRANSFERIR Compartilhados NOVO](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EV6nDzIq-xpFptwju2S9zG0Ba6iuVFZSv_rhhCXNnOI2sQ?e=bEuWtQ) que devem ser marcados como OK na planilha conforme a execução! + +ATENÇÃO: Seguir os passos da forma que estão descritos, para que o processo finalize com êxito. + +### ✅ Colocando sistema em Modo Manutenção + +Será necessário colocar o sistema em Modo Manutenção pra evitar que usuários utilizem o sistema durante a transferencia. Para isso, conecte no servidor Apache (APP) do mesmo utilizando a porta padrão (9024) + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Altere o parâmetro de 0 para 1 + +$_CONFIG['manutencao'] = 1; +``` +Para validar se o sistema ficou em modo manutenção, basta acessar o endereço do mesmo https://cliente.atende.net/ e verificar se a mensagem de manutenção é exibida! + +### ✅ Abrir PG_HBA + +Será necessário abrir o pg_hba para restaurar a base no ambiente definitivo. + +```console +vim /etc/postgresql/16/main/pg_hba.conf + +Altere os valores MD5 para TRUST. Segue exemplo abaixo: + +host all all 127.0.0.1/32 ident map=local +host all all 127.0.0.1/32 trust +host all all 192.168.31.32/28 trust +host all all 192.168.131.0/24 trust +host all all 192.168.25.0/24 trust +host all all 192.168.24.0/24 trust +host all all 192.168.20.0/24 trust +host all all 192.168.19.0/24 trust +host all all 172.16.0.0/12 trust +``` +Para aplicar a liberação feita no hba, execute: +```console +systemctl reload postgresql.service +``` + +### ✅ Liberar porta 5432 + +No Firewall do ambiente definitivo, vá em: Firewall > Rules > LAN +Crie uma regra com os seguintes parâmetros: + +```console +Regra Interface LAN: + +Action: Pass +Interface: LAN +Address Family: IPv4 +Protocol: TCP +Source: LAN Net +Destination: Any +Destination Port Range: other 5432 other 5432 +Description: SGDB TEMP +``` + +### ✅ Execução do Script BKP (DUMP/RESTORE) + +Para realizarmos a transferência (backup/restore) entre os ambientes, precisamos conectar no servidor de Banco de Dados do cliente (Definitivo) + +Na pasta HOME do usuário root teremos o script transferir_16.sh +Altere os parâmetros do mesmo: + +```console +vim transferir_16.sh + +Obs: Altere apenas os parâmetros passados no manual: + +Host_Origem="192.168.25.XX" (Altere conforme o IP informado no chamado) +Porta_Origem="5432" +BD_Origem="00000_cliente" (Alterar conforme repassado no chamado) + +Host_Destino="127.0.0.1" +Porta_Destino="5432" +BD_Destino="00000_cliente" (Alterar conforme repassado no chamado) + +Após alterado, execute o script (Sempre utilize o & no final do comando, garantindo que a execução será feita em segundo plano) + +./transferir_16.sh & +``` + +Obs: Explicando o Script: Esse script irá conectar no ambiente de Migração (informado no e-mail) onde o cliente esta, irá realizar o Backup na Storage do Data Center, e logo após irá fazer a restauração no ambiente Definitivo do cliente. + +### ✅ Conferencia dos Logs da execução do Script + +Assim que o Script for finalizado, deve ser efetuado a conferencia dos logs para garantir que a transferência ocorreu com sucesso: + +```console +cat *.log | grep ERROR +cat *.log | grep Error +cat *.log | grep WARN +cat *.log | grep Warn +``` + +### ✅ Execução InicializaDB + +Após os ajustes, agora iremos executar o processo do InicializaDB na base do cliente. + +Ambiente: Produção +IP: 172.16.1.XXX +Porta: 65432 (Padrão) +Usuário: postgres +Senha: (neste momento o banco ainda estará como trust sendo assim não é necessário informar a senha) +Database: 00000_cliente + +Após informar os dados, o mesmo irá conectar no banco de dados do cliente. Onde já vai trazer algumas opções marcadas no checkbox, e precisamos garantir que as opções abaixo estejam marcadas conforme também o Checklist na planilha (Demais opções que já vieram marcados devem continuar marcadas!): + +- Atividades pós-restore > Seta/Revoga permissões +- Atividades pós-restore > Cria estrutura de monitoração +- Consistências > Consistir tablespaces de índices e PKs +- Criação de Tabelas > Cria ou recria a webbased.tbsession +- Criação de Tabelas > Cria tabelas caso não existam +- Criação de Tabelas > Ajustar sequences +- Particionamento > Particionar as Tabelas +- Armazenamento de Arquivos > Alterar configuração de uso da Storage +- Armazenamento de Arquivos > Alterar Estrutura de Armazenamento +Deverá ser alterado conforme memória da VM Definitiva (BDP-1600) + Menor que 6GB - Selecionar a opção 32/16MB + De 6GB até 12GB - Selecionar a opção 64/32MB + Se for maior que 12GB - Selecionar a opção 128/64MB +- Armazenamento de Arquivos > Iniciar Particionamento do shema Arquivo +- Armazenamento de Arquivos > Habilitar/Desabilitar Agendamentos (desativar apenas o agendamento 459) + +Após tudo conferido e marcado, pode clicar em Iniciar + +### ✅ Tirando sistema do Modo Manutenção + +Após executar as etapas anteriores, tire o sistema de modo manutenção: + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Altere o parâmetro de 1 para 0 + +$_CONFIG['manutencao'] = 0; +``` + +### ✅ Teste Acesso - Atende.Net + +Realize o teste de acesso ao Sistema garantindo que o Atende.Net esta acessível e funcionando de forma adequada: + +Via navegador: https://cliente.atende.net + +### ✅ Executar Atualização - SVN + +Neste ponto iremos executar a atualização SVN (Software Atende.Net) do cliente em questão. + +Acesse via navegador: https://cliente.atende.net/atualiza/atualiza_versao.php +Realize o login com as credênciais (Código IPM e Senha) e selecione a ultima revisão e execute a atualização: + +![execucao_svn](../img/executar_svn_producao.png) + +### ✅ Alterar IP´s Servlets + +Para alterar os microserviços no Atende.Net, executaremos o SQL abaixo, onde de forma automatizada já setará todos os Ip's corretamente. + +Execute o SQL abaixo no Banco de Dados do cliente alterando os seguintes dados: + +Alterar o IP: 192.168.40.32 para o IP da LAN passado no chamado +Alterar o IP 192.168.40.46 para o IP Virtual passado no chamado + +```console +CREATE TABLE public.tbmicrosservicoinstancia_202310 AS ( + SELECT * + FROM webbased.tbmicrosservicoinstancia +); + +CREATE TABLE public.tbmicrosservicoinstanciasis_202310 AS ( + SELECT * + FROM webbased.tbmicrosservicoinstanciasis +); + +CREATE TABLE public.tbservletjava_202310 AS ( + SELECT * + FROM webbased.tbservletjava +); + +DELETE +FROM webbased.tbmicrosservicoinstancia +WHERE svjaplicacao IN (2, 3, 4, 5, 15); + +DROP TABLE IF EXISTS tbdados; + +CREATE TEMP TABLE tbdados AS ( + SELECT '192.168.40.32' AS rede, + '192.168.40.46' AS cluster +); + +INSERT INTO webbased.tbmicrosservicoinstancia ( + svjaplicacao, svjnome, msinome, msisequencia, msiendereco, msiativo, msiversao +) ( + SELECT svjaplicacao, + svjnome, + svjnome, + 1, + CASE + WHEN svjnome = 'WebOcrReader' THEN 'http://' || tbdados.cluster || ':8083' -- OCR + WHEN svjaplicacao = 2 THEN 'http://' || tbdados.cluster || ':8081' -- WebReport + WHEN svjaplicacao = 3 THEN 'http://' || tbdados.cluster || ':8082' -- JobRunner + WHEN svjaplicacao = 4 THEN 'http://' || tbdados.cluster || ':8083' -- FileOptimizer + WHEN svjaplicacao = 5 THEN 'http://' || tbdados.cluster || ':8084' -- FileSigner + WHEN svjaplicacao = 15 THEN 'http://' || tbdados.cluster || ':8086' -- JSM + ELSE '' + END, + 1, + NULL + FROM webbased.tbservletjava + LEFT JOIN tbdados ON TRUE + WHERE svjaplicacao IN (2, 3, 4, 5, 15) + ORDER BY 1, 2 +); + +INSERT INTO webbased.tbmicrosservicoinstanciasis ( + svjaplicacao, svjnome, msisequencia, siscodigo +) ( + SELECT 2, + 'WebReport', + 1, + siscodigo + FROM webbased.tbsistemacliente + WHERE sicativo = 1 + GROUP BY siscodigo +); + +``` + +### ✅ Nova Estrutura de arquivos + +No Atende.Net, acesse o sistema e confira/configure conforme abaixo: +https://cliente.atende.net + + ⚙️ Conferir/Alterar flag "Utiliza Nova Estrutura de Armazenamento" + + `Gerenciamento do Sistema » Sistema » Configurações » Geral » Administrador` + + ⚙️ Conferir/Alterar "Tamanho dos Arquivos Grandes" + + `Gerenciamento do Sistema » Sistema » Configurações » Geral » Administrador` + + *Tamanho para Particionamento dos Arquivos Grandes* + *Tamanho das Partições dos Arquivos Grandes* + + ATENÇÃO: Deverá ser alterado conforme memória da VM Definitiva (BDP-1600): + Menor que 6GB - Selecionar a opção 32/16MB + De 6GB até 12GB - Selecionar a opção 64/32MB + Se for maior que 12GB - Selecionar a opção 128/64MB + + ⚙️ Configurar / Ativar Agendamentos de Banco de Dados: 459, 460, 461 + + `Gerenciamento do Sistema » Sistema » Agendamento de Tarefas` + + Obs: Agendamento 459 deverá ser DESATIVADO. + + ⚠️ ATENÇÃO: Cada agendamento deverá ter o seu horário especifico para execução! + + Para definir a CRON, consulte esta [planilha](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/ERfKvZtAhRVLhkqFuUSL23EBSyxVzjYuHwK4L845If4Plw?e=LcfFmM), a qual será responsavel por organizar os agendamentos dos ambientes COMPARTILHADOS. + +### ✅ Emissão de Relatório (Teste funcionamento) + +Teste a emissão de um relatório qualquer para verificarmos o funcionamento. + +Exemplo, na rotina `Gerenciamento do Sistema » Microsserviços » Microsserviços` + +Clique no ícone de Impressora localizado no rodapé da página e confirme a impressão: + +![impressao_relatorio_teste](../img/impressao_relatorio_teste.png) + +Após a finalização, confira se imprimiu corretamente! + +![impressao_relatorio_teste2](../img/impressao_relatorio_teste2.png) + +## ✅ Removendo Regra Temporária (Porta 5432) + +Nos passos anteriores, criamos uma regra liberando a porta 5432 na Interface LAN do Firewall para a transferência do cliente. Como o processo já foi finalizado, removeremos essa regra: + +Navegue em: Firewall > Rules > LAN +Remova a regra criada anteriormente para a porta 5432 + +### ✅ Script Backup + +⚙️ Configurando arquivo ".cfg" + +O arquivo abaixo deverá ser configurado para que todas as manutenções sejam realizadas após a transferência de ambiente. + +Altere o DATABASE para o nome padrão do cliente (00000_cliente) +```console +mkdir -p /root/bkp_remoto//cfg/ +``` + +Após, crie o arquivo manutencao.cfg. Neste arquivo iremos inserir a data no padrão ANO/MES/DIA (Ex: 20250515). Isso fará com que o Script verifique essa data e após esse primeiro Backup o mesmo passe a realizar todas as manutenções necessárias na Base. + +```console +vim /root/bkp_remoto//cfg/manutencao.cfg +``` + +### ✅ Fechar o PG_HBA + +Necessário fechar o PG_HBA para que após isso solicite a senha para realizar qualquer conexão no banco de dados. + +```console +vim /etc/postgresql/16/main/pg_hba.conf + +Altera os valores TRUST para MD5 mantendo apenas a rede 127.0.0.1/32 como trust. Segue exemplo abaixo: + +host all all 127.0.0.1/32 ident map=local +host all all 127.0.0.1/32 trust +host all all 192.168.31.32/28 md5 +host all all 192.168.131.0/24 md5 +host all all 192.168.25.0/24 md5 +host all all 192.168.24.0/24 md5 +host all all 192.168.20.0/24 md5 +host all all 192.168.19.0/24 md5 +host all all 172.16.0.0/12 md5 +``` + +### ✅ Versão bkp_remoto.sh + +Ainda no banco de dados definitivo, confira a versão do script de backup, garantindo que esteja atualizado na versão (3.11). Para isso, execute: + +```console +cat bkp_remoto/*.sh | grep "bkp_version=" +``` + +Retorno: +bkp_version="3.11" +bkp_version="3.11" +bkp_version="3.11" + +### ✅ GTT Agent (Conferência) + +Verificar a execução do GTT_AGENT nesse ambiente. Para isso, execute: + +```console +systemctl status gtt_agente.service +``` + +Retorno: +![gtt_agente_status](../img/gtt_agente_status.png) + + +### ✅ HASH _config.padrao (Apache) + +Agora no servidor Apache, iremos alterar as HASH do _config.padrao.inc do cliente. Para isso, execute: + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Altere os parâmetros: + +$_CONFIG['senha_atendenetweb'] = 'HASH'; (Altere para HASH cadastrada em datacenter.ipm.com.br) +$_CONFIG['senha_sincronizador'] = 'HASH'; (Altere para HASH cadastrada em datacenter.ipm.com.br) +``` + +### ✅ Chave Cripto - Cliente + +Precisamos definir uma senha para a chave_crypto_cliente no GTT. Essa chave esta presente em TODOS os clientes com o intuíto de ocultar informações sigilósas pertencendo a LGPD. + +Para isso, acesse https://datacenter.ipm.com.br/ e navegue: + +```console +Gerenciamento Data Center > Manutenção > Equipamentos > Equipamento: +Encontre o equipamento do Apache do cliente: 00000-cliente-app-01-5618.atende.net). + +Clique em Consultar > Serviços > Selecione o Apache e clique em Configurar Serviço: + +Incluir: +Usuário: chave_crypto_cliente +Senha: Clique no iclone ao lado para gerar uma senha automaticamente +Ativo: Sim +``` + +![chave_crypto_gtt](../img/chave_crypto_gtt.png) + +Após realizado o cadastro do usuário e senha no GTT, vá até a VM do Banco de Dados do cliente e execute o comando abaixo para conectarmos via psql: + +```console +Altere o nome da database do cliente: + +psql -h localhost -U postgres -d 00000_cliente +``` + +Agora execute o comando substituindo a "senha" pelo senha cadastrada anteriormente no GTT: + +```console +SELECT MD5('senha'); +exit +``` +Após o retorno, execute o comando exit para desconectar da instancia do banco de dados: + +Colete a senha (HASH) gerada, e adicione no campo comentário com (aspas duplas) no GTT: + +![chave_crypto_gtt2](../img/chave_crypto_gtt2.png) + +Após gerado e realizado o cadastro da senha, iremos informar no _config.padrao.inc do Apache do cliente. Para isso, acesse: + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc +``` + +Informe o valor hash substituindo pelo valor gerado no passo anterior e que colocamos no campo comentário do GTT (sem aspas duplas). + +```console + $_CONFIG['chave_crypto_cliente']= 'hash'; +``` + +### ✅ Elastic Global + +- Cadastrar usuário e senha no GDT antigo exemplo: "01216_riogrande_d" gerar a senha e copiar o hash para colocar no config. +- Criar usuários e senhas no Postman: + Importar o arquivo: "Elastic - Criação Roles/Usuários - Cluster Global Admin". + Informar a senha do Elastic Global, dados de usuário do cliente e variáveis com endereço IP dependendo do Datacenter. + +-Adicionar as linhas de usuário e senha no .config_padrao.inc do apache: + $_CONFIG['elastic_user'] = '08573-avaliacao'; + $_CONFIG['elastic_pass'] = ''; + +- Configurar endereços no microserviços do Elastic Global no portal do atende: +Caminho: `Gerenciamento do Sistema » Microsserviços » Microsserviços` + https://sp01-svc.atende.net:9200 + https://pr01-svc.atende.net:9200 + +### ✅ Cadastrar GDT - Cliente / Storage + +No sistema antigo de gerenciamento https://datacenter.atende.net, deve-se cadastrar o cliente e vincular a storage de backup que ele utilizará. Tal procedimento é necessário devido a rotina de download dos backups. + +Para isso, siga os processos abaixo: + +⚙️ Gerenciamento do Data Center » Manutenção » Clientes » Botão Incluir Cliente + +1. Insira a URL do cliente e clique na lupa; +Após isso, ele irá buscar via webservice as informações. + +2. Informe o código fiscal; + +3. Padronize o Nome Fantasia conforme a entidade que estiver cadastrando (PM - CM - SE - XX); + +4. Informe a storage de backup conforme o ambiente. +🌐 PR01 - pr01-dd6900-01 (Código 8) +🌐 SP01 - sp01-dd6400-01 (Código 6) + +![exemplo_cadastro_gdt](../img/exemplo_cadastro_gdt.png) + +### ✅ Cadastrar Analytics + +Necessário realizar cadastro no Analytics para obter as metricas. + +No navegador, acesse: https://analytics.google.com/analytics/web/?hl=pt-br +Utilize uma das contas: analytics01@ipm.com.br, analytics02@ipm.com.br ou analytics03@ipm.com.br + +Para realizar o cadastro, vá na ⚙️ » Administrador » Criar » Conta +- Nome da Conta: SC - Prefeitura de "Cliente" (Substituir Estado e Cliente conforme necessidade) +- Nome da Propriedade: Usar mesmo nome da Conta +- Categoria: Internet e telecomunicações +- Escolha seus objetivos de negócios: Outros objetivos de negócios +- Começar a coletar dados: Selecione opção WEB +- URL do site: cliente.atende.net / Nome do Fluxo: Mesmo nome da conta "SC - Prefeitura de "Cliente"" + +Após criar, será gerado um ID da Métrica (Ex: G-01XNDTQG2C), o qual deve ser informado no sistema do cliente! Para isso, acesse: https://cliente.atende.net + +Vá em: `Gerenciamento do Sistema » Sistema » Configurações » Geral » Serviços Externos` +Preencha conforme exemplo e após, clique em confirmar. + +![servico_analytics](../img/servico_analytics.png) + +### ✅ Liberação IPMAdminBD + +Para realizar a liberação do IPMAdminBD, acesse o Dicionário (localmente na maquina da IPM). + +No botão superior clique em Manutenção Clientes e filtre o cliente em questão. Selecione o cliente e com o botão esquerdo clique em: IPMAdminBD > Técnicos: + +![ipmadminbd_liberacao_1.png](../img/ipmadminbd_liberacao_1.png) + +Com o botão direito na nova janela aberta, selecione a opção (Copiar privilégios de outro cliente) + +![ipmadminbd_liberacao_2.png](../img/ipmadminbd_liberacao_2.png) + +Busque o cliente Rio do Sul como Template, selecione o mesmo e clique em Selecionar + +![ipmadminbd_liberacao_3.png](../img/ipmadminbd_liberacao_3.png) + +Após a seleção, o Dicionário ira nos avisar que essa configuração irá substituir os privilégios do cliente em questão pelos privilégios do template selecionado (Cliente Rio do Sul) + +![ipmadminbd_liberacao_3.png](../img/ipmadminbd_liberacao_4.png) + +Após isso, o cliente possuirá os privilégios adequados de acesso via IPMAdminBD. + +### ✅ Ajustar/Conferir Agendamentos +Vá em: Gerenciamento do Sistema » Sistema » Agendamento de Tarefas + +Após, selecione o agendamento desejado e clique em "Horários". Perceba que já existe uma Configuração Padrão, para definir o horário desejado deve-se ir em "Incluir Horário da Execução de uma Tarefa". + +Os horários dos agendamentos listados abaixo, devem ser conforme informado no chamado: +Exemplo: *Senha Financeira: 12:10 - 00:10* + *Demais Agendamentos: XX:10* + +![exemplo_alteracao_agendamento.png](../img/exemplo_alteracao_agendamento.png) + +⚙️ 6 - Contatos do Usuário: +Descrição: Semanal Todos os Sábados - Manual +Expressão Cron: 0 10 12 ? * 7 * (Atenção: sempre alterar os minutos conforme informação do chamado) +Após configurar, ative o horário incluindo de forma manual e desative o padrão de fábrica. Utilize a opção "Gerenciar". + +![exemplo_alteracao_agendamento_ativacao.png](../img/exemplo_alteracao_agendamento_ativacao.png) + +⚙️ 4 - Estatísticas de Uso: +Descrição: Semanalmente - Manual +Expressão Cron: 0 10 1 ? * * * (Atenção: sempre alterar os minutos conforme informação do chamado) +Após configurar, ative o horário incluindo de forma manual e desative o padrão de fábrica. Utilize a opção "Gerenciar". + +![exemplo_alteracao_agendamento_ativacao2.png](../img/exemplo_alteracao_agendamento_ativacao2.png) + +⚙️ 3 - Validação de Senha de Acesso: +Descrição: Diariamente, duas vezes ao dia - Ajuste Manual +Expressão Cron: 0 10 0,12 ? * * * (Atenção: sempre alterar os minutos conforme informação do chamado) +Após configurar, ative o horário incluindo de forma manual e desative o padrão de fábrica. Utilize a opção "Gerenciar". + +![exemplo_alteracao_agendamento_ativacao3.png](../img/exemplo_alteracao_agendamento_ativacao3.png) + +Ainda no Agendamento de Tarefas, confira se os listados abaixo estão desativados. +⚙️ 119 - Envio de Arquivos para Storage +⚙️ 158 - Gerenciamento de Arquivos Temporários +⚙️ 178 - Processamento de OCR +⚙️ 198 - Exclusão de Arquivos da Storage + +Se não estiverem, execute o SQL: +```console +update webbased.tbtarefacron set tcrativo = 0 where tagcodigo in (158, 119, 198, 178) and tagtipo = 1 +``` + +### ✅ Execução dos Agendamentos +Através da rotina `Gerenciamento do Sistema » Microsserviços » Monitoramento » Docker » Agendamentos`, será possível verificar Última Execução e a Próxima Execução. Caso não liste nada na consulta, revise os microsserviçosou reinicie as stacks. + +### ✅ Cadastrar Domínios de Acesso +Na rotina Gerenciamento do Sistema » Sistema » Domínios, inclua os domínios do cliente. +**Importante, deve-se sempre iniciar pelo principal cliente.atende.net** + +![exemplo_cadastro_dominio.png](../img/exemplo_cadastro_dominio.png) + +### ✅ Ativar Nível Máximo de Segurança +Na rotina `Gerenciamento do Sistema » Sistema » Configurações » Geral » Segurança`, alterar: +⚙️ Nível de Segurança = Máximo +- Expiração de Usuários Internos = 90 +- Expiração de Usuários Externos = 0 + +![nivel_maximo_de_seuranca](../img/nivel_maximo_de_seuranca.png) + +### ✅ Configuração Microsserviços Mapas +Na rotina `Gerenciamento do Sistema » Microsserviços » Microsserviços`, na aplicação Mapas o deve ser avaliado e configurado conforme ambiente: + +🌐 PR01: +- MapnikTiles: https://pr01-maps.atende.net/mapnik/ +- MapsGeocoding: https://pr01-maps.atende.net/nominatim/ +- MapsRouting: https://pr01-maps.atende.net/osrm/ +- MapsServices: https://pr01-js.atende.net/nmp-ipmmaps-backend-v2/ +- PeliasGeocoding: https://pr01-maps.atende.net/pelias/ +- VectorTiles: https://pr01-maps.atende.net/mapnik/ + +🌐 SP01: +- MapnikTiles: https://sp01-maps.atende.net/mapnik/ +- MapsGeocoding: https://sp01-maps.atende.net/nominatim/ +- MapsRouting: https://sp01-maps.atende.net/osrm/ +- MapsServices: https://sp01-js.atende.net/nmp-ipmmaps-backend-v2/ +- PeliasGeocoding: https://sp01-maps.atende.net/pelias/ +- VectorTiles: https://sp01-maps.atende.net/mapnik/ + +Após configurado, vá em: `Gerenciamento do Sistema » Sistema » Configurações » Geral` e altere o API de Mapas para: IPM Maps Service diff --git a/docs/transferencia_cliente_producao.md b/docs/transferencia_cliente_producao.md new file mode 100644 index 0000000..ef98f14 --- /dev/null +++ b/docs/transferencia_cliente_producao.md @@ -0,0 +1,743 @@ +# Transferência Cliente - Ambiente de Produção (Atende.Net) + +> +> Documentação do passo a passo para realizar a transferência de um cliente do ambiente de Migração para Produção referente ao sistema Atende.Net +> + + IMPORTANTE: Antes de prosseguir com os passos abaixo, garanta que todos os procedimento de configuração/criação do ambiente definitivo foram executados conforme o manual: [`Criação e Configuração - Estrutura do Cliente`](./criacao_estrutura.md) + +Todos os passos abaixo são baseados no Checklist disponível em: [Manutenção Servidores - 15082024 v1.xlsx > TRANSFERIR Atende.Net](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EV6nDzIq-xpFptwju2S9zG0Ba6iuVFZSv_rhhCXNnOI2sQ?e=HjB6dA) que devem ser marcados como OK na planilha conforme a execução! + +É crucial e de extrema importância que o passo a passo abaixo seja seguido exatamente na sequencia, pois é a mesma sequencia da planilha de Checklist e é a ordem correta de executar as atividades para que tudo ocorra de forma correta! + +------------------------------------------ +### Etapas do Processo: + +[`1. Preparação para a transferência`](#1-preparação-para-a-transferência) + +[`2. Transferência do Ambiente`](#2-transferência-do-ambiente) + +[`3. Ajustes Configuração Ambiente Definitivo`](#3-ajustes-configuração-ambiente-definitivo) + +------------------------------------------ + +## 1 - Preparação para a transferência: + +Neste cenário, deve ser identificado em qual ambiente de Migração este cliente em questão esta instalado (Essa informação é passada via Chamado): + +- 99999-srv-cli-01 +- 99999-srv-cli-02 +- 99999-srv-cli-03 +- 99999-srv-cli-04 + +Após identificado o ambiente, devemos acessar o banco de dados do mesmo! +Para isso, identifique o IP da INT_RT e conecte no banco de dados via porta padrão (9032) para desabilitarmos a rotina de Backup: + +IMPORTANTE: Antes de comentar a cron da rotina de Backup, garanta que o Backup não esteja executando no ambiente: + + +### - Desabilitando rotina de Backup +```console +ssh 172.16.1.2 Porta: 9032 +Usuário: ipm +Senha: Ipm@1234567 + +Após logado com o IPM se torne root para alteração do crontab + +su - root +Senha: (senha padrão do root dos servidores da Migração) + +ps aux | grep .sh + +Caso o script bkp_remoto.sh ou bkp_all_databases.sh esteja em execução, execute o comando Kill -9 no PID do mesmo! +``` + +Após a conferência ou até mesmo o encerramento da rotina, iremos comentar a mesma para que o processo de Backup não inicie durante a transferência dos ambientes! + +```console +crontab -e + +Comente a linha onde esta o horário agendado do mesmo: + +de +55 22 * * * /root/bkp_remoto/bkp_all_databases.sh +para +#55 22 * * * /root/bkp_remoto/bkp_all_databases.sh +``` + +### - Colocando sistema em Modo Manutenção + +Após desabilitarmos a rotina de Backup, precisamos colocar o sistema em Modo Manutenção pra evitar que usuários utilizem o sistema durante a transferencia. Para isso, conecte no servidor Apache (APP) do mesmo utilizando a porta padrão (9024) + +```console +ssh 172.16.1.2 Porta: 9024 +Usuário: root +Senha: (senha padrão do root dos servidores da Migração) + +vim /var/www/html/srv-cli-XX.atende.net/_config.padrao.inc + +Altere o parâmetro de 0 para 1 + +$_CONFIG['manutencao'] = '1'; + +Para validar se o sistema ficou em modo manutenção, basta acessar o endereço do mesmo https://cliente.atende.net/ e verificar se a mensagem de manutenção é exibida! +``` + +### - Liberação da Porta 65432 para Transferência (Ambiente Definitivo do Cliente) + +Antes de realizarmos a transferência, precisamos liberar a porta 65432 para que seja possível realizar o Backup/Restore entre o ambiente de Migração do cliente e o Ambiente definitivo: + +Para esse caso, precisamos identificar o ambiente já DEFINITIVO do cliente no VMWARE (00000-cliente) e através da INT_RT que estará com o IP CLEAN (172.16.1.2) conectar no Firewall: + +```console +Acesse o Firewall do cliente através do IP da INT_RT e Porta Padrão (9080) + +https://172.16.1.2:9080 +Usuário: admin +Senha: (deve ser consultada no cadastro que já estará feito no GTT https://datacenter.ipm.com.br/) +``` + +Após realizado o login, navegue em: Firewall > Rules > LAN +Crie uma regra com os seguintes parâmetros: + +```console +Regra Interface LAN: + +Action: Pass +Interface: LAN +Address Family: IPv4 +Protocol: TCP +Source: LAN Net +Destination: Any +Destination Port Range: other 65432 other 65432 +Description: SGDB TEMP +``` +Após executado os passos acima, agora o ambiente esta pronto para iniciarmos a transferência! + +## 2 - Transferência do Ambiente: + +### - Execução do Script BKP (DUMP/RESTORE) + +Para realizarmos a transferência (backup/restore) entre os ambientes, precisamos conectar no servidor de Banco de Dados do cliente (Definitivo) + +```console +Acesse o servidor de Banco de Dados (BDP) do cliente através do IP da INT_RT (CLEAN) e Porta Padrão (9032) + +ssh 172.16.1.2 Porta: 9032 +Usuário: ipm +Senha: Ipm@1234567 + +Após logado com o IPM se torne root para alteração do script + +su - root +Senha: (senha padrão do root dos servidores da Migração) +``` + +Na pasta HOME do usuário root teremos o script transferir_16.sh +Altere os parâmetros do mesmo: + +```console +vim transferir_16.sh + +Obs: Altere apenas os parâmetros passados no manual: + +Host_Origem="172.16.1.XX" (Altere conforme o IP da INT_RT do ambiente SRV-CLI que o cliente em questão esta em Migração) +Porta_Origem="65432" +BD_Origem="00000_cliente" (Alterar conforme repassado no chamado) + +Host_Destino="127.0.0.1" +Porta_Destino="5432" +BD_Destino="00000_cliente" (Alterar conforme repassado no chamado) + +Após alterado, execute o script (Sempre utilize o & no final do comando, garantindo que a execução será feita em segundo plano) + +./transferir_16.sh & +``` + +Obs: Explicando o Script: Esse script irá conectar no ambiente de Migração (srv-cli) onde o cliente esta, irá realizar o Backup na Storage do Data Center, e logo após irá fazer a restauração no ambiente Definitivo do cliente. + +### - Conferencia dos Logs da execução do Script + +Assim que o Script for finalizado, deve ser efetuado a conferencia dos logs para garantir que a transferência ocorreu com sucesso: + +```console +cat *.log | grep ERROR +cat *.log | grep Error +cat *.log | grep WARN +cat *.log | grep Warn +``` + +### - Desligar Estrutura Migração + +Após a conferência dos logs e garantir que todo processo foi executado com sucesso, iremos desligar o ambiente de Migração (SRV-CLI) completo. + +IMPORTANTE: Desligue apenas o ambiente de Migração referente aquele cliente em questão que esta sendo feito a transferencia, pois podem existir mais servidores de migração ligados. + +Acesso o VMWARE onde o Ambiente esta localizado: + +PR: https://pr01-ger-vcsa01.atendenet.local/ +ou +SP: https://sp01-ger-vcsa01.atendenet.local/ + +Selecione as VM's relacionadas aquele ambiente e desligue as mesmas: + +Power > Shut Down Guest OS + +![Desligamento VM](../img/desligando_ambiente_mig.png) + +## 3 - Ajustes Configuração Ambiente Definitivo: + +Após os passos anteriores, agora iremos reconfgurar e ajustar as configurações do ambiente que será Definitivo para o cliente que estamos realizando a transferência: + + +### - Ajustes IP (WAN e INT_RT) + +Acesse o Firewall do ambiente definitivo do cliente através do IP CLEAN (172.16.1.2) Porta 9080 + +```console +https://172.16.1.2:9080 +Usuário: admin +Senha: (deve ser consultada no cadastro que já estará feito no GTT https://datacenter.ipm.com.br/) +``` + +Após acessar devemos alterar o IP da Interface WAN e INT_RT + +WAN: + +```console +Acesse Interface > WAN +Altere: IPv4 Address: 177.11.XXX.XXX (Altere para o IP passado no Chamado - Sempre fique atento ao tamanho da rede pois ela pode ser /25 ou /24) + +Gateway WAN: +Verifique se o Gateway faz parte da mesma rede/bloco em questão. Caso não, você deve alterar o mesmo: +System > Routing > Gateways +WANGW: (Altere para o IP passado no Chamado) +Garanta que o gateway esteja vinculado na Interface WAN do cliente +``` +![wan_interface_config](../img/wan_interface_config.png) + +INT_RT: + +Agora realizaremos a alteração do IP INT_RT do cliente + +```console +Acesse Interface > INT_RT +Altere: IPv4 Address: 172.16.1.XXX ou 172.24.1.XXX (Altere para o IP passado no chamado) +``` +IMPORTANTE: Após a alteração do IP da INT_RT, perderemos a conexão com o Firewall. Sendo assim, é necessário reconectar no mesmo agora utilizando o IP INT_RT alterado acima: + +https://172.16.1.XXX:9080 ou https://172.24.1.XXX:9080 + +![intrt_interface_config](../img/int_rt_interface_config.png) + +### - Ajustes VLAN - Interface WAN + +Após os ajustes das Interfaces no Firewall do cliente, teremos que conferir ou se necessário ajustar a VLAN no VMWARE. Ajuste conforme a VLAN passada no Chamado. + +Para conhecimento segue os padrões de VLAN da Interface WAN: + +- IP Iniciando em: 177.11.20.XXX (VLAN 1005) +- IP Iniciando em: 177.11.21.XXX (VLAN 1001) +- IP Iniciando em: 177.11.22.XXX (VLAN 1002) +- IP Iniciando em: 177.11.23.XXX (VLAN 1008) + +Altere a configuração da VLAN no VMWARE conforme exemplo abaixo e salve a configuração! + +![vlan_interface_wan_config](../img/vlan_interface_wan_config.png) + +### - Removendo Regra Temporária (Porta 65432) + +Nos passos anteriores, criamos uma regra liberando a porta 65432 na Interface LAN do Firewall para a transferência do cliente. Como o processo já foi finalizado, removeremos essa regra: + +Acesse o Firewall do cliente através do IP da INT_RT e Porta Padrão (9080) + +```console +https://172.16.1.XXX:9080 +Usuário: admin +Senha: (deve ser consultada no cadastro que já estará feito no GTT https://datacenter.ipm.com.br/) +``` + +Após realizado o login, navegue em: Firewall > Rules > LAN +Remova a regra criada anteriormente para a porta 65432 + +### - Ativação Recurso OSPF (Roteamento) + +Ainda logado no Firewall (PfSense) do cliente, iremos ativar o recurso do OSPF FRR: + +Navegue em: Services > FRROSPF > OSPF +Marque a Opção: Enable OSPF Routing +Salve a alteração + +### - Conferirência Rotas OSPF + +Nessa mesma tela, acesse a guia Status e verifique as rotas no OSPF: + +### - Reboot Firewall + +Após as alterações anteriores serem feitas, realize o reboot no Firewall do cliente: + +Navegue em: Diagnostics > Reboot +Reboot method: Normal reboot (Submit) + +### - Execução InicializaDB + +Após os ajustes, agora iremos executar o processo do InicializaDB na base do cliente. + +O software esta disponível no WTS do DataCenter do PR e SP, identifique em qual ambiente esse cliente esta instalado e utilize o mesmo dentro do ambiente correto! (pr01-remoto.ipm.com.br:33389 ou sp01-remoto.ipm.com.br:33389) + +Diretório: C:\IPM\InicializaBD\inicializabd.exe + +Inicie o software logando com as credências do seu Dicionário/CódigoIPM. + +Após aberto, informe as opções: + +Ambiente: Produção +IP: 172.16.1.XXX ou 172.24.1.XXX +Porta: 65432 (Padrão) +Usuário: Postgres +Senha: (neste momento o banco ainda estará como trust sendo assim não é necessário informar a senha) +Database: 00000_cliente + +Após informar os dados, o mesmo irá conectar no banco de dados do cliente. O mesmo irá trazer algumas opções marcadas no checkbox, e precisamos garantir que as opções abaixo estejam marcadas conforme também o Checklist na planilha (Demais opções que já vieram marcados devem continuar marcadas!): + +- Atividades pós-restore > Seta/Revoga permissões +- Atividades pós-restore > Cria estrutura de monitoração +- Consistências > Consistir tablespaces de índices e PKs +- Consistências > Consistir tablespaces das Tabelas +- Criação de Tabelas > Cria ou recria a webbased.tbsession +- Criação de Tabelas > Cria tabelas caso não existam +- Criação de Tabelas > Ajustar sequences +- Particionamento > Particionar as Tabelas + +Após tudo conferido e marcado, pode clicar em Iniciar + +### - Execução Agendamento 158 + +Após a execução correta do InicializaDB no passo anterior, precisamos avaliar o ambiente para o passo relacionado ao agendamento 158. +No chamado iremos receber a informação se o cliente utilizará ou não a Storage de Arquivos. Com isso temos duas opções: + +1 - Caso o cliente NÃO utilize a Storage esse passo deve ser IGNORADO! +2 - Caso o cliente utilize a Storage de Arquivos, deve se seguir o procedimento abaixo: + +Realize o login no Atende.Net do cliente (cliente.atende.net) e realize o login com as credências (Código IPM) +Após login navegue: Gerenciamento do Sistema > Sistema > Agendamento de Tarefas + +Insira o filtro por (Código da Tarefa - Igual - 158) e clique em executar + +![agendamento158](../img/agendamento_158.png) + +Após isso, é possivel consultar o Status e log da Execução clicando em (Histórico > Execução) + +### - Clientes que utilizam Storage (Data Center SP) + +OBS: Caso o cliente que você esta migrando NÃO utilize Storage, pule este passo! + +Ainda sobra os clientes que utilizam Storage neste caso específicamente os clientes de SP, deve ser executado os passos abaixo: + +- (Trocando a senha padrão da Storage de Arquivos) Trocar a senha do usuário (Acesse: https://192.168.140.32:8443 com as credenciais padrão do Data Center) + Navegue em: Object Gateway > Users (encontre o cliente) + Selecione o Usuário > Edit > Encontre a Opção Keys e clique em Show (icone com olhos) + Digite a senha desejada e realize a alteração! + +- (Alterando a configuração para realização dos Backups dos Arquivos/Anexos do cliente) Acesse o servidor SP01-TASK10 (172.24.0.110) e altere a senha na config do Rlonce: + vim /root/.config/rclone/rclone.conf + + [00000-cliente] + type = s3 + provider = Ceph + access_key_id = 00000-cliente + secret_access_key = *********** (Altere a senha conforme alterado na Storage no passo anterior) + endpoint = https://sp01-s3-rhcs-01.atende.net:8083 + acl = private + +### - Teste Acesso - Atende.Net + +Realize o teste de acesso ao Sistema garantindo que o Atende.Net esta acessível e funcionando de forma adequada: + +Via navegador: https://cliente.atende.net + +### - Executar Atualização - SVN + +Neste ponto iremos executar a atualização SVN (Software Atende.Net) do cliente em questão. + +Acesse via navegador: https://cliente.atende.net/atualiza/atualiza_versao.php +Realize o login com as credênciais (Código IPM e Senha) e selecione a ultima revisão e execute a atualização: + +![execucao_svn](../img/executar_svn_producao.png) + +### - Alteração dos endereços dos MicroServiços (Atende.Net) + +Para alterar os microserviços no Atende.Net, executaremos o SQL abaixo, onde de forma automatizada já setará todos os Ip's corretamente. + +Obs: Caso o cliente tenha GED Contratado, deve ser verificado os Microserviços referentes ao mesmos e alterar de forma manual via Atende.Net (sistema) para a porta 8085 do serviço! + +Serviços que trabalham na porta 8085 (SOMENTE SE TIVER O GED CONTRATADO) + +- WebCodeReader Porta 8085 +- WebFileInfo Porta 8085 +- WebOcrReader Porta 8085 +- WebPdfJoin Porta 8085 +- WebThumbnail Porta 8085 + +Caso o cliente NÃO possua GED e tenha apenas o MSD01, a execução do Script abaixo será suficiente e não será necessário a alteração manual via sistema conforme informado acima + +Execute o SQL abaixo no Banco de Dados do cliente alterando os seguintes dados: + +Alterar o IP: 192.168.40.32 para o IP da LAN passado no chamado +Alterar o IP 192.168.40.46 para o IP Virtual passado no chamado + +```console +CREATE TABLE public.tbmicrosservicoinstancia_202310 AS ( + SELECT * + FROM webbased.tbmicrosservicoinstancia +); + +CREATE TABLE public.tbmicrosservicoinstanciasis_202310 AS ( + SELECT * + FROM webbased.tbmicrosservicoinstanciasis +); + +CREATE TABLE public.tbservletjava_202310 AS ( + SELECT * + FROM webbased.tbservletjava +); + +DELETE +FROM webbased.tbmicrosservicoinstancia +WHERE svjaplicacao IN (2, 3, 4, 5, 15); + +DROP TABLE IF EXISTS tbdados; + +CREATE TEMP TABLE tbdados AS ( + SELECT '192.168.40.32' AS rede, + '192.168.40.46' AS cluster +); + +INSERT INTO webbased.tbmicrosservicoinstancia ( + svjaplicacao, svjnome, msinome, msisequencia, msiendereco, msiativo, msiversao +) ( + SELECT svjaplicacao, + svjnome, + svjnome, + 1, + CASE + WHEN svjnome = 'WebOcrReader' THEN 'http://' || tbdados.cluster || ':8083' -- OCR + WHEN svjaplicacao = 2 THEN 'http://' || tbdados.cluster || ':8081' -- WebReport + WHEN svjaplicacao = 3 THEN 'http://' || tbdados.cluster || ':8082' -- JobRunner + WHEN svjaplicacao = 4 THEN 'http://' || tbdados.cluster || ':8083' -- FileOptimizer + WHEN svjaplicacao = 5 THEN 'http://' || tbdados.cluster || ':8084' -- FileSigner + WHEN svjaplicacao = 15 THEN 'http://' || tbdados.cluster || ':8086' -- JSM + ELSE '' + END, + 1, + NULL + FROM webbased.tbservletjava + LEFT JOIN tbdados ON TRUE + WHERE svjaplicacao IN (2, 3, 4, 5, 15) + ORDER BY 1, 2 +); + +INSERT INTO webbased.tbmicrosservicoinstanciasis ( + svjaplicacao, svjnome, msisequencia, siscodigo +) ( + SELECT 2, + 'WebReport', + 1, + siscodigo + FROM webbased.tbsistemacliente + WHERE sicativo = 1 + GROUP BY siscodigo +); + +UPDATE webbased.tbservletjava +SET svjfaixaipentrada = ( + SELECT rede || '/28' + FROM tbdados +) +WHERE svjaplicacao IN (2, 3, 4, 5, 15); +``` + +### - Emissão de Relatório (Teste funcionamento) + +Após alterado os Microserviços no Atende.Net, iremos realizar a emissão de um relatório qualquer para verificarmos o funcionamento do mesmo. + +Para isso, acesse o portal do cliente (https://cliente.atende.net) e logue com suas credênciais! + +Navegue em: Gerenciamento do Sistema > Sistema > Administração > Microsserviços > Microsserviços + +Agora clique no ícone de Impressora localizado no rodapé da página e confirme a impressão: + +![impressao_relatorio_teste](../img/impressao_relatorio_teste.png) + +Após a impressão, confira se a mesma imprimiu corretamente! + +![impressao_relatorio_teste2](../img/impressao_relatorio_teste2.png) + + +### - IP Storage (Backup - FSTAB) - Banco de Dados do Cliente + +Voltando aos ajustes nas Máquinas Virtuais do cliente, acesse o servidor de Banco de Dados do mesmo com o mesmo padrão de usuários e senha já passados nos passos anteriores, e confira ou caso necessário ajuste o IP da Storage de Backup do cliente, garantindo que a mesma estará apontando para o local correto: +Caso necessite adicionar a Storage no fstab, insira a linha abaixo alterando o password que foi ocultado nesta documentação! + +```console +vim /etc/fstab + +//172.16.0.247/Backup /var/lib/postgresql/storage cifs users,noauto,username=serverlinux,password=********,domain=ATENDENET,uid=121,gid=125,rw,vers=2.0 0 0 +``` + +### - DMP_MAX - Configuração de Backup + +Também iremos conferir ou se necessário ajustar a configuração de Backup do cliente: + +```console +vim /root/bkp_remoto/bkp_remoto.cfg +Garanta que as configuração abaixo estejam exatamente com os valores informados: + +# Numero maximo de processos em execucao. "Minimo: 3 - Maximo: 3" +prc_max=3 +# Numero maximo de processos de backup em execucao. "Minimo: 1 - Maximo: 4" +dmp_max=2 +# Numero maximo de processos de vacuum em execucao. "Minimo: 1 - Maximo: 3" +vac_max=1 +``` +### - Configurando Backup (CFG) + +Para que após a transferência o cliente passe a fazer o Backup de forma automática, precisamos configurar o arquivo abaixo, para que nos próximos Backups após a Migração para ambiente de Produção o mesmo realize todas as manutenções necessárias no ambiente do cliente. + +Altere o DATABASE para o nome padrão do cliente (00000_cliente) +```console +mkdir -p /root/bkp_remoto//cfg/ +``` + +Após isso crie o arquivo manutencao.cfg. Neste arquivo iremos inserir a data no padrão ANO/MES/DIA (Ex: 20241217). Isso fará com que o Script verifique essa data e após esse primeiro Backup o mesmo passe a realizar todas as manutenções necessárias na Base. + +```console +vim /root/bkp_remoto//cfg/manutencao.cfg +``` + +### - Ativação Backup Agendado (Crontab) + +Após a configuração dos arquivos, podemos agora ativar a crontab que irá disparar o Script de Backup de forma diária no ambiente do cliente. + +Para isso, basta acessar a crontab e descomentar a linha que estará informando a data e o Script em questão + +```console +Exemplo: + +De: +#20 20 * * * /root/bkp_remoto/bkp_all_databases.sh + +Para: +20 20 * * * /root/bkp_remoto/bkp_all_databases.sh +``` + +### - Fechar o PG_HBA + +Após ativado o Backup, iremos agora fechar o PG_HBA para que após isso seja necessário informar a senha para realizar qualquer conexão no banco de dados. + +```console +vim /etc/postgresql/16/main/pg_hba.conf + +Altera os valores TRUST para MD5 mantendo apenas a rede 127.0.0.1/32 como trust. Segue exemplo abaixo: + +host all all 127.0.0.1/32 ident map=local +host all all 127.0.0.1/32 trust +host all all 192.168.31.32/28 md5 +host all all 192.168.131.0/24 md5 +host all all 192.168.25.0/24 md5 +host all all 192.168.24.0/24 md5 +host all all 192.168.20.0/24 md5 +host all all 192.168.19.0/24 md5 +host all all 172.16.0.0/12 md5 +``` + +### - Arquivo de Configuração (postgresql.conf) + +Após alterado o pg_hba, iremos alterar a configuração do PostgreSQL para o padrão de Produção. Para isso execute o comando abaixo: + +```console +cp /etc/postgresql/16/main/postgresql.prod /etc/postgresql/16/main/postgresql.conf + +Confirme a substituição do Arquivo +``` +### - Ative o uso do Huge Pages + +```console +vim /etc/postgresql/16/main/postgresql.conf + - Altere: huge_pages = try -> huge_pages = on +``` +Reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: +```console +systemctl restart postgresql.service +``` + +### - Versão Script Backup (Conferência) + +Iremos também, conferir a versão do Backup, garantindo que a mesma esta atualizada na versão (3.7). Para isso, execute: + +```console +cat bkp_remoto/*.sh | grep "bkp_version=" +``` + +Retorno: +bkp_version="3.7" +bkp_version="3.7" +bkp_version="3.7" + +### - GTT Agent (Conferência) + +Também iremos verificar a versão do GTT_AGENTE nesse ambiente. Para isso, execute: + +```console +systemctl status gtt_agente.service +``` + +Retorno: +![gtt_agente_status](../img/gtt_agente_status.png) + +### - HASH _config.padrao (Apache) + +Agora no servidor Apache, iremos alterar as HASH do _config.padrao.inc do cliente. Para isso, execute: + + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Altera os parâmetros: + +$_CONFIG['senha_atendenetweb'] = 'HASH'; (Altere para HASH cadastrada em datacenter.ipm.com.br) +$_CONFIG['senha_sincronizador'] = 'HASH'; (Altere para HASH cadastrada em datacenter.ipm.com.br) +``` + +### - Chave Cripto - Cliente + +Precisamos definir uma senha para a chave_crypto_cliente no GTT. Essa chave esta presente em TODOS os clientes com o intuíto de ocultar informações sigilósas pertencendo a LGPD. + +Para isso, acesse https://datacenter.ipm.com.br/ e navegue: + +```console +Gerenciamento Data Center > Manutenção > Equipamentos > Equipamento: +Encontre o equipamento do Apache do cliente: 00000-cliente-app-01-5618.atende.net). + +Clique em Consultar > Serviços > Selecione o Apache e clique em Configurar Serviço: + +Incluir: +Usuário: chave_crypto_cliente +Senha: Clique no iclone ao lado para gerar uma senha automaticamente +Ativo: Sim +``` + +![chave_crypto_gtt](../img/chave_crypto_gtt.png) + +Após realizado o cadastro do usuário e senha no GTT, vá até a VM do Banco de Dados do cliente e execute o comando abaixo para conectarmos na instancia do banco de dados do mesmo: + +```console +Altere o nome da database do cliente: + +psql -h localhost -U postgres -d 00000_cliente +``` + +Agora execute o comando substituindo a "senha" pelo senha cadastrada anteriormente no GTT: + +```console +SELECT MD5('senha'); +exit +``` +Após a execução execute o comando exit para desconectar da instancia do banco de dados: + +Colete a senha (HASH) gerada, e adicione no campo comentário com (aspas duplas) no GTT: + +![chave_crypto_gtt2](../img/chave_crypto_gtt2.png) + +Após gerado e realizado o cadastro da senha, iremos informar a mesma na _config.padrao.inc do Apache do cliente. Para isso, acesse: + +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Informe o valor hash substituindo pelo valor gerado no passo anterior e que colocamos no campo comentário do GTT (sem aspas duplas). + +```console + $_CONFIG['chave_crypto_cliente']= 'hash'; +``` + +### **🚩 Elastic Global (VERIFICAR COM O ALEX)** + +Será verificado a necessidade de documentar esse processo pois o mesmo pode estar sendo feito antes do processo de transferencia em sí + +### - Reboot Servidores + +Após todas as configurações, iremos realizar um reboot no servidor do Banco de Dados do cliente: + +Execute: +```console + reboot +``` + +### - Verificar Logs - Banco de Dados + +Após o reboot, iremos verificar os logs do Banco de Dados, para isso, execute: + +Normalmente o log terá o padrão de nome postgresql-2024-12-17_000000 (Com Data e Hora) +```console +vim /var/log/postgresql/postgresql-2024-12-17_000000.log +``` + +### - Execução de Pacotes (SVN) + +Após conferência dos logs do Banco de Dados, iremos executar os pacotes via SVN. Para isso, acesse via navegador: + +https://cliente.atende.net/atualiza/atualiza_versao.php + +Logue com o Usuário/Senha (Código IPM) +Selecione a opção no menu lateral (Atualização do Banco de Dados) e grife a opção Pacote. + +Isso fará com que o mesmo selecione todos os pacotes. Após isso, clique no botão (Executar Atualização) no final da página + +![atualizacao_pacote_svn](../img/atualizacao_pacote_svn.png) + +Aguarde a execução de todos os pacotes e caso ocorra algum erro, deve ser verificado com o Setor responsável pelo Módulo. + +### **🚩 Cadastro GDT, GTT e Zabbix (VERIFICAR COM O ALEX)** + + + +### - Liberação IPMAdminBD + +Para realizar a liberação do IPMAdminBD, acesse o Dicionário (localmente na maquina da IPM). + +No botão superior clique em Manutenção Clientes e filtre o cliente em questão. Selecione o cliente e com o botão esquerdo clique em: IPMAdminBD > Técnicos: + +![ipmadminbd_liberacao_1.png](../img/ipmadminbd_liberacao_1.png) + +Com o botão direito na nova janela aberta, selecione a opção (Copiar privilégios de outro cliente) + +![ipmadminbd_liberacao_2.png](../img/ipmadminbd_liberacao_2.png) + +Busque o cliente Rio do Sul como Template, selecione o mesmo e clique em Selecionar + +![ipmadminbd_liberacao_3.png](../img/ipmadminbd_liberacao_3.png) + +Após a seleção, o Dicionário ira nos avisar que essa configuração irá substituir os privilégios do cliente em questão pelos privilégios do template selecionado (Cliente Rio do Sul) + +![ipmadminbd_liberacao_3.png](../img/ipmadminbd_liberacao_4.png) + +Após isso, o cliente possuirá os privilégios adequados de acesso via IPMAdminBD. + + + + + + + + + + + + + + + + + + + + diff --git a/docs/transferencia_cliente_producao_nova_estrutura.md b/docs/transferencia_cliente_producao_nova_estrutura.md new file mode 100644 index 0000000..3f99008 --- /dev/null +++ b/docs/transferencia_cliente_producao_nova_estrutura.md @@ -0,0 +1,911 @@ +# Transferência Cliente - Ambiente de Produção (Atende.Net) + +> +> Documentação do passo a passo para realizar a transferência de um cliente do ambiente de Migração para Produção referente ao sistema Atende.Net +> + + IMPORTANTE: Antes de prosseguir com os passos abaixo, garanta que todos os procedimento de configuração/criação do ambiente definitivo foram executados conforme o manual: [`Criação e Configuração - Estrutura do Cliente`](./criacao_estrutura.md) + +Todos os passos abaixo são baseados no Checklist disponível em: [Manutenção Servidores - 15082024 v1.xlsx > TRANSFERIR Atende.Net NOVA EST](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EV6nDzIq-xpFptwju2S9zG0Ba6iuVFZSv_rhhCXNnOI2sQ?e=HjB6dA) que devem ser marcados como OK na planilha conforme a execução! + +ATENÇÃO: Seguir os passos da forma que estão descritos, para que o processo finalize com êxito. + +## Preparação do ambiente (deve ser executado antes das 18h no dia da transferência) + +Neste cenário, deve ser identificado em qual ambiente de Migração este cliente em questão esta instalado (Informação passada via Chamado): + +🌐 99999-srv-cli-01 +🌐 99999-srv-cli-02 +🌐 99999-srv-cli-03 +🌐 99999-srv-cli-04 + +Após identificado o ambiente, acesse o banco de dados. Para isso, identifique o IP da INT_RT e conecte na porta padrão (9032) para desabilitar a rotina de Backup: + +IMPORTANTE: Antes de comentar a cron da rotina de Backup, garanta que o Backup não esteja executando no ambiente: + +### ✅ Desabilitando rotina de Backup +```console +ssh 172.16.1.XX Porta: 9032 +Usuário: ipm +Senha: Ipm@1234567 + +Após logado com o IPM se torne root para alteração do crontab + +su - root +Senha: (senha padrão do root dos servidores da Migração) + +ps aux | grep .sh + +Caso o script bkp_remoto.sh ou bkp_all_databases.sh esteja em execução, execute o comando Kill -9 no PID do mesmo! +``` +Depois da conferência/encerramento do script, o mesmo deverá ser comentado para que não inicie no processo de transferência que será realizado posteriormente. + +```console +crontab -e + +Comente a linha onde esta o horário agendado do mesmo: + +de +55 22 * * * /root/bkp_remoto/bkp_all_databases.sh +para +#55 22 * * * /root/bkp_remoto/bkp_all_databases.sh +``` + +### ✅ Liberação da Porta 65432 para Transferência (Ambiente Definitivo do Cliente) + +Para que seja possível realizar o Backup/Restore entre o ambiente de Migração e o Ambiente Definitivo, precisamos liberar a porta 65432: + +Para esse caso, precisamos identificar o ambiente DEFINITIVO do cliente no VMWARE (00000-cliente) e através da INT_RT que estará com o IP CLEAN (172.16.1.2) conectar no Firewall: + +```console +No navegador, acesse o Firewall do cliente através do IP da INT_RT e Porta Padrão (9080) + +https://172.16.1.2:9080 +Usuário: admin +Senha: (deve ser consultada no cadastro que já estará feito no GTT https://datacenter.ipm.com.br/) +``` + +Após realizado o login, navegue em: Firewall > Rules > LAN +Crie uma regra com os seguintes parâmetros: + +```console +Regra Interface LAN: + +Action: Pass +Interface: LAN +Address Family: IPv4 +Protocol: TCP +Source: LAN Net +Destination: Any +Destination Port Range: other 65432 other 65432 +Description: SGDB TEMP +``` + +### ✅ Nova Estrutura de arquivos + +No Atende.Net, acesse o sistema e confira/configure conforme abaixo: +https://cliente.atende.net + + ⚙️ Conferir/Alterar flag "Utiliza Nova Estrutura de Armazenamento" + + `Gerenciamento do Sistema » Sistema » Configurações » Geral » Administrador` + + ⚙️ Conferir/Alterar "Tamanho dos Arquivos Grandes" + + `Gerenciamento do Sistema » Sistema » Configurações » Geral » Administrador` + + *Tamanho para Particionamento dos Arquivos Grandes* + *Tamanho das Partições dos Arquivos Grandes* + + ATENÇÃO: Deverá ser alterado conforme memória da VM Definitiva (BDP-1600): + Menor que 6GB - Selecionar a opção 32/16MB + De 6GB até 12GB - Selecionar a opção 64/32MB + Se for maior que 12GB - Selecionar a opção 128/64MB + + ⚙️ Conferir / Ativar Agendamentos de Banco de Dados: 459, 460, 461 + +`Gerenciamento do Sistema » Sistema » Agendamento de Tarefas` + +### ✅ Executar Atualização +Para evitar erros após a transferencia, verifique se já foi atualizado a Release no cliente. +Se já estiver atualizado, então basta escolher a ultima revisão disponível. +Caso ainda não tenho sido executado, então atualize primeiro a revisão da Release e após a conclusão, poderá ser escolhida a última revisão. + +### ✅ Executar Pacotes +Acesse o /atualiza do clientes e execute a atualização de todos os pacotes! + +Exemplo: Via navegador https://cliente.atende.net/atualiza/atualiza_versao.php + +Logue com o Usuário/Senha (Código IPM) +Selecione a opção no menu lateral (Atualização do Banco de Dados) e grife a opção Pacote. + +Isso fará com que o mesmo selecione todos os pacotes. Após isso, clique no botão (Executar Atualização) no final da página + +![atualizacao_pacote_svn](../img/atualizacao_pacote_svn.png) + +Aguarde a execução de todos os pacotes e caso ocorra algum erro, deve ser verificado com o Setor responsável pelo Módulo. + +### ✅ IP Storage Backup (FSTAB) + +Conecte no servidor de banco de dados e confira o IP da Storage de backup no fstab, caso necessário, insira a linha abaixo alterando o password que foi ocultado nesta documentação! + +```console +ssh 172.16.1.2 Porta: 9032 +Usuário: ipm +Senha: Ipm@1234567 + +Após logado com o IPM se torne root para alteração do crontab + +su - root +Senha: (senha poderá ser consultada no GTT) +``` + +🌐 PR01: +```console +vim /etc/fstab + +//172.16.0.247/Backup /var/lib/postgresql/storage cifs users,noauto,username=serverlinux,password=********,domain=ATENDENET,uid=121,gid=125,rw,vers=2.0 0 0 +``` + +🌐 SP01: +```console +vim /etc/fstab + +//172.24.0.246/Backup /var/lib/postgresql/storage cifs users,noauto,username=serverlinux,password=********,domain=ATENDENET,uid=121,gid=125,rw,vers=2.0 0 0 +``` + +### ✅ Script Backup + +Conferir ou se necessário, ajustar a configuração de Backup do cliente: + +⚙️ DMP_MAX + +```console +vim /root/bkp_remoto/bkp_remoto.cfg +Garanta que as configuração abaixo estejam exatamente com os valores informados: + +# Numero maximo de processos em execucao. "Minimo: 3 - Maximo: 3" +prc_max=3 +# Numero maximo de processos de backup em execucao. "Minimo: 1 - Maximo: 4" +dmp_max=2 +# Numero maximo de processos de vacuum em execucao. "Minimo: 1 - Maximo: 3" +vac_max=1 +``` +⚙️ Configurando arquivo ".cfg" + +O arquivo abaixo deverá ser configurado para que todas as manutenções sejam realizadas após a transferência de ambiente. + +Altere o DATABASE para o nome padrão do cliente (00000_cliente) +```console +mkdir -p /root/bkp_remoto//cfg/ +``` + +Após, crie o arquivo manutencao.cfg. Neste arquivo iremos inserir a data no padrão ANO/MES/DIA (Ex: 20250515). Isso fará com que o Script verifique essa data e após esse primeiro Backup o mesmo passe a realizar todas as manutenções necessárias na Base. + +```console +vim /root/bkp_remoto//cfg/manutencao.cfg +``` + +### ✅ Versão bkp_remoto.sh + +Ainda no banco de dados definitivo, confira a versão do script de backup, garantindo que esteja atualizado na versão (3.11). Para isso, execute: + +```console +cat bkp_remoto/*.sh | grep "bkp_version=" +``` + +Retorno: +bkp_version="3.11" +bkp_version="3.11" +bkp_version="3.11" + +### ✅ GTT Agent (Conferência) + +Verificar a execução do GTT_AGENT nesse ambiente. Para isso, execute: + +```console +systemctl status gtt_agente.service +``` + +Retorno: +![gtt_agente_status](../img/gtt_agente_status.png) + + +### ✅ HASH _config.padrao (Apache) + +Agora no servidor Apache, iremos alterar as HASH do _config.padrao.inc do cliente. Para isso, execute: + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Altere os parâmetros: + +$_CONFIG['senha_atendenetweb'] = 'HASH'; (Altere para HASH cadastrada em datacenter.ipm.com.br) +$_CONFIG['senha_sincronizador'] = 'HASH'; (Altere para HASH cadastrada em datacenter.ipm.com.br) +``` + +### ✅ Chave Cripto - Cliente + +Precisamos definir uma senha para a chave_crypto_cliente no GTT. Essa chave esta presente em TODOS os clientes com o intuíto de ocultar informações sigilósas pertencendo a LGPD. + +Para isso, acesse https://datacenter.ipm.com.br/ e navegue: + +```console +Gerenciamento Data Center > Manutenção > Equipamentos > Equipamento: +Encontre o equipamento do Apache do cliente: 00000-cliente-app-01-5618.atende.net). + +Clique em Consultar > Serviços > Selecione o Apache e clique em Configurar Serviço: + +Incluir: +Usuário: chave_crypto_cliente +Senha: Clique no iclone ao lado para gerar uma senha automaticamente +Ativo: Sim +``` + +![chave_crypto_gtt](../img/chave_crypto_gtt.png) + +Após realizado o cadastro do usuário e senha no GTT, vá até a VM do Banco de Dados do cliente e execute o comando abaixo para conectarmos via psql: + +```console +Altere o nome da database do cliente: + +psql -h localhost -U postgres -d 00000_cliente +``` + +Agora execute o comando substituindo a "senha" pelo senha cadastrada anteriormente no GTT: + +```console +SELECT MD5('senha'); +exit +``` +Após o retorno, execute o comando exit para desconectar da instancia do banco de dados: + +Colete a senha (HASH) gerada, e adicione no campo comentário com (aspas duplas) no GTT: + +![chave_crypto_gtt2](../img/chave_crypto_gtt2.png) + +Após gerado e realizado o cadastro da senha, iremos informar no _config.padrao.inc do Apache do cliente. Para isso, acesse: + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc +``` + +Informe o valor hash substituindo pelo valor gerado no passo anterior e que colocamos no campo comentário do GTT (sem aspas duplas). + +```console + $_CONFIG['chave_crypto_cliente']= 'hash'; +``` + +### ✅ Elastic Global + +- Cadastrar usuário e senha no GDT antigo exemplo: "01216_riogrande_d" gerar a senha e copiar o hash para colocar no config. +- Criar usuários e senhas no Postman: + Importar o arquivo: "Elastic - Criação Roles/Usuários - Cluster Global Admin". + Informar a senha do Elastic Global, dados de usuário do cliente e variáveis com endereço IP dependendo do Datacenter. + +-Adicionar as linhas de usuário e senha no .config_padrao.inc do apache: + $_CONFIG['elastic_user'] = '08573-avaliacao'; + $_CONFIG['elastic_pass'] = ''; + +- Configurar endereços no microserviços do Elastic Global no portal do atende: +Caminho: `Gerenciamento do Sistema » Microsserviços » Microsserviços` + https://sp01-svc.atende.net:9200 + https://pr01-svc.atende.net:9200 + +### ✅ Configuração Microsserviços Mapas +Ainda na rotina `Gerenciamento do Sistema » Microsserviços » Microsserviços`, na aplicação Mapas o deve ser avaliado e configurado conforme ambiente: + +🌐 PR01: +- MapnikTiles: https://pr01-maps.atende.net/mapnik/ +- MapsGeocoding: https://pr01-maps.atende.net/nominatim/ +- MapsRouting: https://pr01-maps.atende.net/osrm/ +- MapsServices: https://pr01-js.atende.net/nmp-ipmmaps-backend-v2/ +- PeliasGeocoding: https://pr01-maps.atende.net/pelias/ +- VectorTiles: https://pr01-maps.atende.net/mapnik/ + +🌐 SP01: +- MapnikTiles: https://sp01-maps.atende.net/mapnik/ +- MapsGeocoding: https://sp01-maps.atende.net/nominatim/ +- MapsRouting: https://sp01-maps.atende.net/osrm/ +- MapsServices: https://sp01-js.atende.net/nmp-ipmmaps-backend-v2/ +- PeliasGeocoding: https://sp01-maps.atende.net/pelias/ +- VectorTiles: https://sp01-maps.atende.net/mapnik/ + +Após configurado, vá em: `Gerenciamento do Sistema » Sistema » Configurações » Geral` e altere o API de Mapas para: IPM Maps Service + +### ✅ Ajustar/Conferir Agendamentos +Vá em: Gerenciamento do Sistema » Sistema » Agendamento de Tarefas + +Após, selecione o agendamento desejado e clique em "Horários". Perceba que já existe uma Configuração Padrão, para definir o horário desejado deve-se ir em "Incluir Horário da Execução de uma Tarefa". + +Os horários dos agendamentos listados abaixo, devem ser conforme informado no chamado: +Exemplo: *Senha Financeira: 12:10 - 00:10* + *Demais Agendamentos: XX:10* + +![exemplo_alteracao_agendamento.png](../img/exemplo_alteracao_agendamento.png) + +⚙️ 6 - Contatos do Usuário: +Descrição: Semanal Todos os Sábados - Manual +Expressão Cron: 0 10 12 ? * SAT * (Atenção: sempre alterar os minutos conforme informação do chamado) +Após configurar, ative o horário incluindo de forma manual e desative o padrão de fábrica. Utilize a opção "Gerenciar". + +![exemplo_alteracao_agendamento_ativacao.png](../img/exemplo_alteracao_agendamento_ativacao.png) + +⚙️ 4 - Estatísticas de Uso: +Descrição: Semanalmente - Manual +Expressão Cron: 0 10 1 ? * * * (Atenção: sempre alterar os minutos conforme informação do chamado) +Após configurar, ative o horário incluindo de forma manual e desative o padrão de fábrica. Utilize a opção "Gerenciar". + +![exemplo_alteracao_agendamento_ativacao2.png](../img/exemplo_alteracao_agendamento_ativacao2.png) + +⚙️ 3 - Validação de Senha de Acesso: +Descrição: Diariamente, duas vezes ao dia - Ajuste Manual +Expressão Cron: 0 10 0,12 ? * * * (Atenção: sempre alterar os minutos conforme informação do chamado) +Após configurar, ative o horário incluindo de forma manual e desative o padrão de fábrica. Utilize a opção "Gerenciar". + +![exemplo_alteracao_agendamento_ativacao3.png](../img/exemplo_alteracao_agendamento_ativacao3.png) + +⚙️ 158 - Gerenciamento de Arquivos Temporários +Apenas verificar, garantindo que está ativado. Deverá vir assim da base zerada e pode-se manter o horário padrão. + +Ainda no Agendamento de Tarefas, confira se os listados abaixo estão desativados. +⚙️ 119 - Envio de Arquivos para Storage +⚙️ 178 - Processamento de OCR +⚙️ 198 - Exclusão de Arquivos da Storage + +Se não estiverem, execute o SQL: +```console +update webbased.tbtarefacron set tcrativo = 0 where tagcodigo in (119, 198, 178) and tagtipo = 1 +``` + +### ✅ Cadastrar Domínios de Acesso +Na rotina Gerenciamento do Sistema » Sistema » Domínios, inclua os domínios do cliente. +**Importante, deve-se sempre iniciar pelo principal cliente.atende.net** + +![exemplo_cadastro_dominio.png](../img/exemplo_cadastro_dominio.png) + +No caso do cliente possuir fiscal, cadastre também os domínios abaixo: + +⚙️ Endereço origens + +Trocar o tipo para "Origens/Java Services". + +![ORIGENS](../img/_domonios_fiscalnovo-dominio_origens.png) + +⚙️ Endereço ws + +![WS](../img/_domonios_fiscalnovo-dominio_ws.png) + +⚙️ Endereço nfse + +Selecionar o sistema "Nota Fiscal Eletrônica" (66) e definir o redirecionamento para o endereço abaixo, trocando apenas o nome do cliente. + +`https://nfse-cliente.atende.net/autoatendimento/servicos/nfse` + +![NFSE](../img/_domonios_fiscalnovo-dominio_nfse.png) + + +### ✅ Ativar Nível Máximo de Segurança +Na rotina `Gerenciamento do Sistema » Sistema » Configurações » Geral » Segurança`, alterar: +⚙️ Nível de Segurança = Máximo +- Expiração de Usuários Internos = 90 +- Expiração de Usuários Externos = 0 + +![nivel_maximo_de_seuranca](../img/nivel_maximo_de_seuranca.png) + +### ✅ Cadastrar Analytics + +Necessário realizar cadastro no Analytics para obter as metricas. + +No navegador, acesse: https://analytics.google.com/analytics/web/?hl=pt-br +Utilize uma das contas: analytics01@ipm.com.br, analytics02@ipm.com.br ou analytics03@ipm.com.br + +Para realizar o cadastro, vá na ⚙️ » Administrador » Criar » Conta +- Nome da Conta: SC - Prefeitura de "Cliente" (Substituir Estado e Cliente conforme necessidade) +- Nome da Propriedade: Usar mesmo nome da Conta +- Categoria: Internet e telecomunicações +- Escolha seus objetivos de negócios: Outros objetivos de negócios +- Começar a coletar dados: Selecione opção WEB +- URL do site: cliente.atende.net / Nome do Fluxo: Mesmo nome da conta "SC - Prefeitura de "Cliente"" + +Após criar, será gerado um ID da Métrica (Ex: G-01XNDTQG2C), o qual deve ser informado no sistema do cliente! Para isso, acesse: https://cliente.atende.net + +Vá em: `Gerenciamento do Sistema » Sistema » Configurações » Geral » Serviços Externos` +Preencha conforme exemplo e após, clique em confirmar. + +![servico_analytics](../img/servico_analytics.png) + +### ✅ Cadastrar GDT - Cliente / Storage + +No sistema antigo de gerenciamento https://datacenter.atende.net, deve-se cadastrar o cliente e vincular a storage de backup que ele utilizará. Tal procedimento é necessário devido a rotina de download dos backups. + +Para isso, siga os processos abaixo: + +⚙️ Gerenciamento do Data Center » Manutenção » Clientes » Botão Incluir Cliente + +1. Insira a URL do cliente e clique na lupa; +Após isso, ele irá buscar via webservice as informações. + +2. Informe o código fiscal; + +3. Padronize o Nome Fantasia conforme a entidade que estiver cadastrando (PM - CM - SE - XX); + +4. Informe a storage de backup conforme o ambiente. +🌐 PR01 - pr01-dd6900-01 (Código 8) +🌐 SP01 - sp01-dd6400-01 (Código 6) + +![exemplo_cadastro_gdt](../img/exemplo_cadastro_gdt.png) + +### ✅ Conferir Zabbix + +Analise o site em que o cliente vai estar, e acesse o zabbix responsavel pelo monitoramento daquele ambiente. + +🌐 PR01 - https://pr01-datacenter.ipm.com.br:8085 +🌐 SP01 - https://sp01-datacenter.ipm.com.br:8085 + +Vá em: Configuration » Hosts - busque pelo host group do cliente que vai ser transferido + +Após validar os hosts, vá em: Monitoring » Maps - Deverá ter um mapa com o nome do cliente e também cadastrado no mapa global conforme ambiente. + +🌐 PR01 - pr01.atende.net +🌐 SP01 - sp01.atende.net + +### ✅ Alterar IP´s Servlets - SOMENTE PRÓXIMO AS 18H + +**ATENÇÃO: após realizados esse processo, os serviços vinculados aos servlets ficarão indisponíveis até que o processo de transferência seja finalizado!** + +Para alterar os microserviços no Atende.Net, executaremos o SQL abaixo, onde de forma automatizada já setará todos os Ip's corretamente. + +Obs: Caso o cliente tenha GED Contratado, deve ser verificado os Microserviços referentes ao mesmos e alterar de forma manual via Atende.Net (sistema) para a porta 8085 do serviço! + +Execute o SQL abaixo no Banco de Dados do cliente alterando os seguintes dados: + +Alterar o IP: 192.168.40.32 para o IP da LAN passado no chamado +Alterar o IP 192.168.40.46 para o IP Virtual passado no chamado + +```console +CREATE TABLE public.tbmicrosservicoinstancia_202310 AS ( + SELECT * + FROM webbased.tbmicrosservicoinstancia +); + +CREATE TABLE public.tbmicrosservicoinstanciasis_202310 AS ( + SELECT * + FROM webbased.tbmicrosservicoinstanciasis +); + +CREATE TABLE public.tbservletjava_202310 AS ( + SELECT * + FROM webbased.tbservletjava +); + +DELETE +FROM webbased.tbmicrosservicoinstancia +WHERE svjaplicacao IN (2, 3, 4, 5, 15); + +DROP TABLE IF EXISTS tbdados; + +CREATE TEMP TABLE tbdados AS ( + SELECT '192.168.40.32' AS rede, + '192.168.40.46' AS cluster +); + +INSERT INTO webbased.tbmicrosservicoinstancia ( + svjaplicacao, svjnome, msinome, msisequencia, msiendereco, msiativo, msiversao +) ( + SELECT svjaplicacao, + svjnome, + svjnome, + 1, + CASE + WHEN svjnome = 'WebOcrReader' THEN 'http://' || tbdados.cluster || ':8083' -- OCR + WHEN svjaplicacao = 2 THEN 'http://' || tbdados.cluster || ':8081' -- WebReport + WHEN svjaplicacao = 3 THEN 'http://' || tbdados.cluster || ':8082' -- JobRunner + WHEN svjaplicacao = 4 THEN 'http://' || tbdados.cluster || ':8083' -- FileOptimizer + WHEN svjaplicacao = 5 THEN 'http://' || tbdados.cluster || ':8084' -- FileSigner + WHEN svjaplicacao = 15 THEN 'http://' || tbdados.cluster || ':8086' -- JSM + ELSE '' + END, + 1, + NULL + FROM webbased.tbservletjava + LEFT JOIN tbdados ON TRUE + WHERE svjaplicacao IN (2, 3, 4, 5, 15) + ORDER BY 1, 2 +); + +INSERT INTO webbased.tbmicrosservicoinstanciasis ( + svjaplicacao, svjnome, msisequencia, siscodigo +) ( + SELECT 2, + 'WebReport', + 1, + siscodigo + FROM webbased.tbsistemacliente + WHERE sicativo = 1 + GROUP BY siscodigo +); +``` + +## Tranferência para Produção (deve ser executado após as 18h) + +### ✅ Colocando sistema em Modo Manutenção + +Será necessário colocar o sistema em Modo Manutenção pra evitar que usuários utilizem o sistema durante a transferencia. Para isso, conecte no servidor Apache (APP) do mesmo utilizando a porta padrão (9024) + +```console +ssh 172.16.1.2 Porta: 9024 +Usuário: root +Senha: (senha padrão do root dos servidores da Migração) + +vim /var/www/html/srv-cli-XX.atende.net/_config.padrao.inc + +Altere o parâmetro de 0 para 1 + +$_CONFIG['manutencao'] = '1'; + +Para validar se o sistema ficou em modo manutenção, basta acessar o endereço do mesmo https://cliente.atende.net/ e verificar se a mensagem de manutenção é exibida! +``` +#### ⚠️ IMPORTANTE +Se houver virada de DNS, deverá ser colocado em modo manutenção nas duas estruturas: SRV-CLI e Ambiente Definitivo. + +### ✅ Execução do Script BKP (DUMP/RESTORE) + +Para realizarmos a transferência (backup/restore) entre os ambientes, precisamos conectar no servidor de Banco de Dados do cliente (Definitivo) + +```console +Acesse o servidor de Banco de Dados (BDP) do cliente através do IP da INT_RT (CLEAN) e Porta Padrão (9032) + +ssh 172.16.1.2 Porta: 9032 +Usuário: ipm +Senha: Ipm@1234567 + +Após logado com o IPM se torne root para alteração do script + +su - root +Senha: (senha padrão do root dos servidores da Migração) +``` + +Na pasta HOME do usuário root teremos o script transferir_16.sh +Altere os parâmetros do mesmo: + +```console +vim transferir_16.sh + +Obs: Altere apenas os parâmetros passados no manual: + +Host_Origem="172.16.1.XX" (Altere conforme o IP da INT_RT do ambiente SRV-CLI que o cliente em questão esta em Migração) +Porta_Origem="65432" +BD_Origem="00000_cliente" (Alterar conforme repassado no chamado) + +Host_Destino="127.0.0.1" +Porta_Destino="5432" +BD_Destino="00000_cliente" (Alterar conforme repassado no chamado) + +Após alterado, execute o script (Sempre utilize o & no final do comando, garantindo que a execução será feita em segundo plano) + +./transferir_16.sh & +``` + +Obs: Explicando o Script: Esse script irá conectar no ambiente de Migração (srv-cli) onde o cliente esta, irá realizar o Backup na Storage do Data Center, e logo após irá fazer a restauração no ambiente Definitivo do cliente. + +### ✅ Conferencia dos Logs da execução do Script + +Assim que o Script for finalizado, deve ser efetuado a conferencia dos logs para garantir que a transferência ocorreu com sucesso: + +```console +cat *.log | grep ERROR +cat *.log | grep Error +cat *.log | grep WARN +cat *.log | grep Warn +``` + +### ✅ Desligar Estrutura Migração + +Após a conferência dos logs e garantir que todo processo foi executado com sucesso, iremos desligar o ambiente de Migração (SRV-CLI) completo. + +IMPORTANTE: Desligue apenas o ambiente de Migração referente aquele cliente em questão que esta sendo feito a transferencia (podem existir mais servidores de migração ligados). + +Acesso o VMWARE onde o Ambiente esta localizado: + +🌐 PR01: https://pr01-ger-vcsa01.atendenet.local/ +ou +🌐 SP01: https://sp01-ger-vcsa01.atendenet.local/ + +Selecione as VM's relacionadas aquele ambiente e desligue as mesmas: + +Power > Shut Down Guest OS + +![Desligamento VM](../img/desligando_ambiente_mig.png) + +### ✅ Ajustes IP (WAN e INT_RT) + +Após os passos anteriores, agora iremos reconfgurar e ajustar as configurações do ambiente que será Definitivo para o cliente que estamos realizando a transferência: + +Acesse o Firewall do ambiente definitivo do cliente através do IP CLEAN (172.16.1.2) Porta 9080 + +```console +https://172.16.1.2:9080 +Usuário: admin +Senha: (deve ser consultada no cadastro que já estará feito no GTT https://datacenter.ipm.com.br/) +``` + +Após acessar devemos alterar o IP da Interface WAN e INT_RT + +WAN: + +```console +Acesse Interface > WAN +Altere: IPv4 Address: 177.11.XXX.XXX (Altere para o IP passado no Chamado - Sempre fique atento ao tamanho da rede pois ela pode ser /25 ou /24) + +Gateway WAN: +Verifique se o Gateway faz parte da mesma rede/bloco em questão. Caso não, você deve alterar o mesmo: +System > Routing > Gateways +WANGW: (Altere para o IP passado no Chamado) +Garanta que o gateway esteja vinculado na Interface WAN do cliente +``` +![wan_interface_config](../img/wan_interface_config.png) + +INT_RT: + +Agora realizaremos a alteração do IP INT_RT do cliente + +```console +Acesse Interface > INT_RT +Altere: IPv4 Address: 172.16.1.XXX ou 172.24.1.XXX (Altere para o IP passado no chamado) +``` +IMPORTANTE: Após a alteração do IP da INT_RT, perderemos a conexão com o Firewall. Sendo assim, é necessário reconectar no mesmo agora utilizando o IP INT_RT alterado acima: + +https://172.16.1.XXX:9080 ou https://172.24.1.XXX:9080 + +![intrt_interface_config](../img/int_rt_interface_config.png) + +### ✅ Ajustes VLAN - Interface WAN + +Após os ajustes das Interfaces no Firewall do cliente, teremos que conferir ou se necessário ajustar a VLAN no VMWARE. Ajuste conforme a VLAN passada no Chamado. + +Para conhecimento segue os padrões de VLAN da Interface WAN: + +🌐 IP Iniciando em: 177.11.20.XXX (VLAN 1005) +🌐 IP Iniciando em: 177.11.21.XXX (VLAN 1001) +🌐 IP Iniciando em: 177.11.22.XXX (VLAN 1002) +🌐 IP Iniciando em: 177.11.23.XXX (VLAN 1008) + +Altere a configuração da VLAN no VMWARE conforme exemplo abaixo e salve a configuração! + +![vlan_interface_wan_config](../img/vlan_interface_wan_config.png) + +### ✅ Removendo Regra Temporária (Porta 65432) + +Nos passos anteriores, criamos uma regra liberando a porta 65432 na Interface LAN do Firewall para a transferência do cliente. Como o processo já foi finalizado, removeremos essa regra: + +Acesse o Firewall do cliente através do IP da INT_RT e Porta Padrão (9080) + +```console +https://172.16.1.XXX:9080 +Usuário: admin +Senha: (deve ser consultada no cadastro que já estará feito no GTT https://datacenter.ipm.com.br/) +``` + +Após realizado o login, navegue em: Firewall > Rules > LAN +Remova a regra criada anteriormente para a porta 65432 + +### ✅ Reboot Firewall + +Após as alterações anteriores serem feitas, realize o reboot no Firewall do cliente: + +Navegue em: Diagnostics > Reboot +Reboot method: Normal reboot (Submit) + +### ✅ Conferirência Rotas OSPF + +Logado no Firewall (PfSense) do cliente, vamos verificar as rotas OSPF + +Navegue em: Services > FRR OSPF > OSPF +Acesse a guia Status e verifique as rotas no OSPF + +### ✅ Execução InicializaDB + +Após os ajustes, agora iremos executar o processo do InicializaDB na base do cliente. + +O software esta disponível no WTS do DataCenter do PR e SP, identifique em qual ambiente esse cliente esta instalado e utilize o mesmo dentro do ambiente correto! (pr01-remoto.ipm.com.br:33389 ou sp01-remoto.ipm.com.br:33389) + +Diretório: C:\IPM\InicializaBD\inicializabd.exe + +Inicie o software logando com as credências do seu Dicionário/CódigoIPM. + +Após aberto, informe as opções: + +Ambiente: Produção +IP: 172.16.1.XXX ou 172.24.1.XXX +Porta: 65432 (Padrão) +Usuário: Postgres +Senha: (neste momento o banco ainda estará como trust sendo assim não é necessário informar a senha) +Database: 00000_cliente + +Após informar os dados, o mesmo irá conectar no banco de dados do cliente. O mesmo irá trazer algumas opções marcadas no checkbox, e precisamos garantir que as opções abaixo estejam marcadas conforme também o Checklist na planilha (Demais opções que já vieram marcados devem continuar marcadas!): + +- Atividades pós-restore > Seta/Revoga permissões +- Atividades pós-restore > Cria estrutura de monitoração +- Consistências > Consistir tablespaces de índices e PKs +- Consistências > Consistir tablespaces das Tabelas +- Criação de Tabelas > Cria ou recria a webbased.tbsession +- Criação de Tabelas > Cria tabelas caso não existam +- Criação de Tabelas > Ajustar sequences +- Particionamento > Particionar as Tabelas + +Após tudo conferido e marcado, pode clicar em Iniciar + +### ✅ Retirando sistema de Modo Manutenção + +Será necessário tirar o sistema do modo manutenção, para isso, edite o arquivo _config.padrão + +```console +vim /var/www/html/cliente.atende.net/_config.padrao.inc + +Altere o parâmetro de 1 para 0 + +$_CONFIG['manutencao'] = '0'; +``` + +### ✅ Executar Atualização - SVN + +Neste ponto iremos executar a atualização SVN (Software Atende.Net) do cliente em questão. + +Acesse via navegador: https://cliente.atende.net/atualiza/atualiza_versao.php +Realize o login com as credênciais (Código IPM e Senha) e selecione a ultima revisão e execute a atualização: + +![execucao_svn](../img/executar_svn_producao.png) + +### ✅ Ativação do GED se o cliente tiver contratado + +Acesse o sistema e vá em: `Gerenciamento do Sistema » Microsserviços » Microsserviços` + +Na aplicação FileOptimizer, altere as portas conforme abaixo: +- WebCodeReader > Porta 8085 +- WebFileInfo > Porta 8085 +- WebOcrReader > Porta 8085 +- WebPdfJoin > Porta 8085 +- WebThumbnail > Porta 8085 + +Obs: Caso o cliente NÃO possua GED e tenha apenas o MSD01, a execução do Script abaixo será suficiente e não será necessário a alteração manual via sistema conforme informado acima. + +### ✅ Emissão de Relatório (Teste funcionamento) + +Teste a emissão de um relatório qualquer para verificarmos o funcionamento. + +Ainda na rotina `Gerenciamento do Sistema » Microsserviços » Microsserviços` + +Clique no ícone de Impressora localizado no rodapé da página e confirme a impressão: + +![impressao_relatorio_teste](../img/impressao_relatorio_teste.png) + +Após a finalização, confira se imprimiu corretamente! + +![impressao_relatorio_teste2](../img/impressao_relatorio_teste2.png) + +### ✅ Ativação Backup Agendado (Crontab) + +Devemos ativar a crontab que irá disparar o Script de Backup de forma diária no ambiente do cliente. + +Para isso, basta acessar a crontab e descomentar a linha que estará informando a data e o Script em questão + +```console +Exemplo: + +De: +#20 20 * * * /root/bkp_remoto/bkp_all_databases.sh + +Para: +20 20 * * * /root/bkp_remoto/bkp_all_databases.sh +``` + +### ✅ Fechar o PG_HBA + +Após ativado o Backup, iremos agora fechar o PG_HBA para que após isso seja necessário informar a senha para realizar qualquer conexão no banco de dados. + +```console +vim /etc/postgresql/16/main/pg_hba.conf + +Altera os valores TRUST para MD5 mantendo apenas a rede 127.0.0.1/32 como trust. Segue exemplo abaixo: + +host all all 127.0.0.1/32 ident map=local +host all all 127.0.0.1/32 trust +host all all 192.168.31.32/28 md5 +host all all 192.168.131.0/24 md5 +host all all 192.168.25.0/24 md5 +host all all 192.168.24.0/24 md5 +host all all 192.168.20.0/24 md5 +host all all 192.168.19.0/24 md5 +host all all 172.16.0.0/12 md5 +``` + +### ✅ Arquivo de Configuração (postgresql.conf) + +Altere a configuração do PostgreSQL para o padrão de Produção. Para isso execute o comando abaixo: + +```console +cp /etc/postgresql/16/main/postgresql.prod /etc/postgresql/16/main/postgresql.conf + +Confirme a substituição do Arquivo +``` + +### ✅ Ative o uso do Huge Pages + +```console +vim /etc/postgresql/16/main/postgresql.conf + - Altere: huge_pages = try -> huge_pages = on +``` +Se já estiver como "ON", não será necessário fazer qualquer alteração, caso contrário, reinicie o banco com as novas configurações. Se nenhum erro for apresentado, tudo ocorreu bem: +```console +systemctl restart postgresql.service +``` + +### ✅ Reboot Servidores + +Após todas as configurações, iremos realizar um reboot no servidor do Banco de Dados do cliente: + +Execute: +```console + reboot +``` + +### ✅ Teste Acesso - Atende.Net + +Realize o teste de acesso ao Sistema garantindo que o Atende.Net esta acessível e funcionando de forma adequada: + +Via navegador: https://cliente.atende.net + + +### ✅ Verificar Logs - Banco de Dados + +Após o reboot, iremos verificar os logs do Banco de Dados, para isso, execute: + +Normalmente o log terá o padrão de nome postgresql-2024-12-17_000000 (Com Data e Hora) +```console +vim /var/log/postgresql/postgresql-2024-12-17_000000.log +``` + +### ✅ Execução dos Agendamentos +Através da rotina `Gerenciamento do Sistema » Microsserviços » Monitoramento » Docker » Agendamentos`, será possível verificar Última Execução e a Próxima Execução. Caso não liste nada na consulta, revise os microsserviçosou reinicie as stacks. + +### ✅ Liberação IPMAdminBD + +Para realizar a liberação do IPMAdminBD, acesse o Dicionário (localmente na maquina da IPM). + +No botão superior clique em Manutenção Clientes e filtre o cliente em questão. Selecione o cliente e com o botão esquerdo clique em: IPMAdminBD > Técnicos: + +![ipmadminbd_liberacao_1.png](../img/ipmadminbd_liberacao_1.png) + +Com o botão direito na nova janela aberta, selecione a opção (Copiar privilégios de outro cliente) + +![ipmadminbd_liberacao_2.png](../img/ipmadminbd_liberacao_2.png) + +Busque o cliente Rio do Sul como Template, selecione o mesmo e clique em Selecionar + +![ipmadminbd_liberacao_3.png](../img/ipmadminbd_liberacao_3.png) + +Após a seleção, o Dicionário ira nos avisar que essa configuração irá substituir os privilégios do cliente em questão pelos privilégios do template selecionado (Cliente Rio do Sul) + +![ipmadminbd_liberacao_3.png](../img/ipmadminbd_liberacao_4.png) + +Após isso, o cliente possuirá os privilégios adequados de acesso via IPMAdminBD. + +### ✅ Desativar/Ativar Monitoramento Zabbix +Ative o monitoramento do cliente que foi transferido para produção e desative o monitoramento de srv-cli-xx que foi desligada. + +Em: Monitoring » Host - Verifique se está havendo coleta através dos gráficos. +Caso não haja e o status Availabitily não esteja com ZBX na cor verde, reinicie o serviço do proxy no Firewall do cliente. + +Na aba Status » Services - Reinicie o zabbix_proxy (Zabbix Proxy Collection Daemon) + +![servico_zabbix_proxy.png](../img/servico_zabbix_proxy.png) + +### ✅ TEMPORARIAMENTE - Ativar atualização via GTT + +Até ser liberada versão final do Wizard, a atualização do cliente via GTT deve ser habilitada somente ao final. + +No sistema https://datacenter.ipm.com.br , vá em `Gerenciamento Data Center » Manutenção » Instância » Consultar Serviços da Instância`: + +Selecione a instalação padrão Atende.Net e Depois `Endereços` +Altere o dominio principal: cliente.atende.net e marque a flag `Permite Atualizar`, após, confirme a tela e NÃO envie os domínios para o cliente. \ No newline at end of file diff --git a/docs/transferencia_ipm_saude.md b/docs/transferencia_ipm_saude.md new file mode 100644 index 0000000..4d87dd4 --- /dev/null +++ b/docs/transferencia_ipm_saude.md @@ -0,0 +1,239 @@ +# Transferência Cliente - Ambiente de Produção (IPM Saúde) + +> +> Documentação do passo a passo para realizar a transferência de um cliente do ambiente de Migração para Produção referente ao sistema IPM Saúde +> + + IMPORTANTE: Antes de prosseguir com os passos abaixo, garanta que todos os procedimento de configuração/criação do ambiente definitivo foram executados conforme o manual: [`Ativação IPM Saúde`](./procedimento_ipmsaude.md) + +Todos os passos abaixo são baseados no Checklist disponível em: [Manutenção Servidores - 15082024 v1.xlsx > Transferir IPMSaúde](https://ipmcombr-my.sharepoint.com/:x:/g/personal/alexsandre_constantino_ipm_com_br/EV6nDzIq-xpFptwju2S9zG0Ba6iuVFZSv_rhhCXNnOI2sQ?e=3x7GQw) que devem ser marcados como OK na planilha conforme a execução! + +ATENÇÃO: Seguir os passos da forma que estão descritos, para que o processo finalize com êxito. + +### ✅ Renomear database: _transferir + +Conecte via pgAdmin no servidor informado pela migração (normalmente 192.168.25.100:5432), após, edite o nome de 00000_ipmsaude para 00000_ipmsaude_transferir. + +![exemplo_renomear_database_transferir](../img/exemplo_renomear_database_transferir.png) + + +### ✅ Transferir base: + +Via SSH, conecte na maquina informada pela migração (192.168.25.100 na porta padrão 22) e execute o script de transferencia: +```console +su - postgres +``` +Edite o script com as informações de origem e destino: +```console +vim transferir.sh + +BD_Origem="00000_ipmsaude_transferir" +Host_Destino="172.24.1.24"(Alterar para INT_RT do cliente) +BD_Destino="00000_ipmsaude" +``` +Execute em segundo plano, dessa forma poderá acompanhar os logs através do tail: +```console +./transferir.sh & +``` + +### ✅ Conferencia dos Logs da execução do Script + +Assim que o Script for finalizado, deve ser efetuado a conferencia dos logs para garantir que a transferência ocorreu com sucesso: + +```console +cat *.log | grep ERROR +cat *.log | grep Error +cat *.log | grep WARN +cat *.log | grep Warn +``` + +### ✅ Execução InicializaDB + +O software esta disponível no WTS do DataCenter do PR e SP, identifique em qual ambiente esse cliente esta instalado e utilize o mesmo dentro do ambiente correto! (pr01-remoto.ipm.com.br:33389 ou sp01-remoto.ipm.com.br:33389) + +Diretório: C:\IPM\InicializaBD\inicializabd.exe + +Inicie o software logando com as credências do seu Dicionário/CódigoIPM. + +Após aberto, informe as opções: + +Ambiente: Produção +IP: 172.16.1.XXX ou 172.24.1.XXX +Porta: 65433 +Usuário: Postgres +Senha: (neste momento o banco ainda estará como trust sendo assim não é necessário informar a senha) +Database: 00000_ipmsaude + +Após informar os dados, o mesmo irá conectar no banco de dados do cliente. O mesmo irá trazer algumas opções marcadas no checkbox, e precisamos garantir que as opções abaixo estejam marcadas conforme também o Checklist na planilha (Demais opções que já vieram marcados devem continuar marcadas!): + +- Atividades pós-restore > Seta/Revoga permissões +- Atividades pós-restore > Cria estrutura de monitoração +- Atividades pós-restore > Criar estrutura de funções(vacuum e reindex) +- Consistências > Consistir tablespaces de índices e PKs + +Após tudo conferido e marcado, pode clicar em Iniciar + +### ✅ Teste Acesso - IPM Saude + +Realize o teste de acesso ao Sistema garantindo que o sistema esta acessível e funcionando de forma adequada: + +Via navegador: https://cliente.atende.net/saude + +### ✅ Ativação Backup Agendado (Crontab) + +Devemos ativar a crontab que irá disparar o Script de Backup de forma diária no ambiente do cliente. + +Para isso, basta acessar a crontab e descomentar a linha que estará informando a data e o Script em questão + +```console +Exemplo: + +De: +#20 20 * * * /root/bkp_remoto/bkp_all_databases.sh + +Para: +20 20 * * * /root/bkp_remoto/bkp_all_databases.sh +``` + +### ✅ Script Backup + +O arquivo abaixo deverá ser configurado para que todas as manutenções sejam realizadas após a transferência de ambiente. + +Altere de DATABASE para o nome padrão do banco de dados informado no chamado (00000_ipmsaude) +```console +mkdir -p /root/bkp_remoto/DATABASE/cfg/ +``` + +Após, crie o arquivo manutencao.cfg. Neste arquivo iremos inserir a data no padrão ANO/MES/DIA (Ex: 20250515). Isso fará com que o Script verifique essa data e após esse primeiro Backup o mesmo passe a realizar todas as manutenções necessárias na Base. + +```console +vim /root/bkp_remoto/DATABASE/cfg/manutencao.cfg +``` + +### ✅ Versão bkp_remoto.sh + +Ainda no banco de dados definitivo, confira a versão do script de backup, garantindo que esteja atualizado na versão (3.11). Para isso, execute: + +```console +cat bkp_remoto/*.sh | grep "bkp_version=" +``` + +Retorno: +bkp_version="3.11" +bkp_version="3.11" +bkp_version="3.11" + +### ✅ IP Storage Backup (FSTAB) + +Apenas para exemplo dos IPs a serem utilizados conforme o site, caso necessário, a senha deverá ser consultada em outro servidor, pois está oculta na documentação. + +🌐 PR01: +```console +vim /etc/fstab + +//172.16.0.247/Backup /var/lib/pgsql/11/storage cifs users,noauto,username=serverlinux,password=*******,domain=ATENDENET,uid=26,gid=26,rw,vers=2.0 0 0 +``` + +🌐 SP01: +```console +vim /etc/fstab + +//172.24.0.246/Backup /var/lib/pgsql/11/storage cifs users,noauto,username=serverlinux,password=*******,domain=ATENDENET,uid=26,gid=26,rw,vers=2.0 0 0 +``` + +### ✅ Testar mount da storage + +Depois de realizar o mount, pode ser conferido o ponto de montagem através do df -h: + +```console +mount /var/lib/pgsql/11/storage + +umount /var/lib/pgsql/11/storage +``` + +### ✅ Fechar o PG_HBA + +Após ativado o Backup, iremos agora fechar o PG_HBA para que após isso seja necessário informar a senha para realizar qualquer conexão no banco de dados. + +```console +vim /var/lib/pgsql/11/data/pg_hba.conf + +Altera os valores TRUST para MD5 mantendo apenas a rede 127.0.0.1/32 como trust. Segue exemplo abaixo: + +# TYPE DATABASE USER ADDRESS METHOD + +# "local" is for Unix domain socket connections only +local all all trust +# IPv4 local connections: +host all all 127.0.0.1/32 trust +host all all 192.168.28.128/28 md5 +host all all 192.168.131.0/24 md5 +host all all 192.168.25.0/24 md5 +host all all 192.168.24.0/24 md5 +host all all 192.168.20.0/24 md5 +host all all 172.16.0.0/12 md5 +``` + +### ✅ Arquivo de Configuração (postgresql.conf) + +Altere a configuração do PostgreSQL para o padrão de Produção. Para isso execute o comando abaixo: + +```console +cp /var/lib/pgsql/11/data/postgresql.prod /var/lib/pgsql/11/data/postgresql.conf + +Confirme a substituição do Arquivo +``` + +### ✅ Conferir chave criptografica SSH + +Tente conectar no apache, através do servidor de banco. Utilize o comando abaixo, substituindo pelo IP da VM do apache do cliente: + +```console +ssh root@192.168.XX.XX +``` + +### ✅ GDT Agent (Conferência) + +Verificar a versão do GDT Agent: + +```console +vim /root/gdt_agent/gdt_agent.sh +``` + +Realize também a conferência do tipo_equipamento, que deve estar como 7 - IPM Saude: + +```console +vim /root/gdt_agent/cfg/gdt_agent.cfg + +# Informe o Tipo do Equipamento conforme legenda. (1 - HTTP / 2 - SGDB - Atende.Net / 3 - TOMCAT / 4 - FIREWALL / 5 - HTTP-SGDB-TOMCAT / 6 - SGDB - Slave / 7 - SGDB - IPMSaude ) +tipo_equipamento=7 +``` + +### ✅ Reiniciar servidor de banco + +Após realizar todos os passos acima, realize um reboot no servidor bdp-02-1150. + +### ✅ Executar Atualização - SVN + +Neste ponto iremos executar a atualização SVN (Software IPM Saude) do cliente em questão. + +Acesse via navegador: https://cliente.atende.net/saude/?pg=atualizador +Realize o login com as credênciais (Código IPM e Senha) e selecione a ultima revisão e execute a atualização. + +### ✅ Executar Pacotes + +Ainda no pg=atualizador do cliente, vá na aba "Atualização de Pacotes (PAI)" e execute a atualização de todos os pacotes! + +### ✅ Liberar IPMAdminBD + +Acessar dicionario > Manutenção Clientes > Pesquisar pelo cliente (Municipio) > Botão direito > IPMAdminBD > Técnicos > Filtrar + +Verificar se estão adicionados Técnicos do sistema IPM Saude. + +Caso não estiver clicar com botão direito > Copiar de outro cliente > Selecionar cliente Rio do Sul + +### ✅ Liberar Banners + +Acessar https://cliente.atende.net > Governo Digital > Portal do Cidadão > Configurações > Gerais > Banners Saúde + +Marcar todas as 3 opções \ No newline at end of file diff --git a/docs/troubleshooting_fechamento_release.md b/docs/troubleshooting_fechamento_release.md new file mode 100644 index 0000000..d4bb148 --- /dev/null +++ b/docs/troubleshooting_fechamento_release.md @@ -0,0 +1,118 @@ + +## 📦 Publicação manual no repositório GIT + +### ⚠️ Este processo somente deverá ser executado caso não consiga realizar a publicação pelo Dicionário + +Após a cópia através do dicionário, acessar o servidor APP-04 na pasta: /var/www/html/qualidade-atendenet82.ipm.com.br/release +``` +Endereço: 192.168.13.14 +Porta: 9004 +Usuário: pub_release +Senha: ******* +``` + +🔹Acessar a pasta da WorkCopy: +``` +cd /var/www/html/qualidade-atendenet82.ipm.com.br/release + +git status (verificar status, caso não apareçam arquivos, consulte o pessoal do Dicionario) +``` + +🔹Semelhante ao SVN, deverá ser adicionado os arquivos com git add... +``` +git add ... -> arquivos e/ou pastas que serão adicionados -> orienta-se adicionar individualmente para evitar que sejam enviados arquivos que não deveriam ser enviados +``` + +🔹Para finalizar o processo, execute o Commit para enviar os arquivos ao repositório: +``` +git commit -m "Comentário" + +git push +``` + +### ⚠️ Troubleshooting + +#### 🧾 Exemplo dos comando executados na Release de 03/03/2025 a 04/04/2025 + +```console +# cd /var/www/html/qualidade-atendenet82.ipm.com.br/release +# git status +warning: untracked cache is disabled on this system or location +On branch release +Your branch is ahead of 'origin/release' by 1 commit. + (use "git push" to publish your local commits) +nothing to commit, working tree clean +``` + +Neste caso a publicação através do dicionário já havia executado o commit, onde conferimos através dos comandos abaixo: +```console +# git log +commit 9a343197bf00cd4933b75493dc7fd003d067371f (HEAD -> release) +Author: ipm.automacao +Date: Fri Apr 4 11:28:23 2025 -0300 + Release(380-atendenet_release_de_03032025_a_04042025_10042025) 1318 +commit de032c26dd78ca3cb1dc26ab611f60acb1d2fe7c (origin/release) +Merge: 19007d983 be254a33e +Author: ipm.automacao +Date: Thu Apr 3 09:16:11 2025 -0300 + 765040-marcelo.kiefer +commit be254a33ed44825dd5b71a00c83bc4954256b0a1 (origin/master, origin/HEAD) +Merge: dcf663367 c5f1c2786 +Author: ipm.automacao +Date: Thu Apr 3 09:15:58 2025 -0300 + 765040-marcelo.kiefer +``` + +Para conferência, pode-se exportar os arquivos da maneira abaixo: +```console +# git diff-tree --no-commit-id --name-only -r 9a343197bf00cd4933b75493dc7fd003d067371f >> /root/release_380-atendenet_release_de_03032025_a_04042025_10042025.txt +``` + +Após garantir que está tudo correto, pode-se realizar o "push": +```console +# git push +Enumerating objects: 10283, done. +Counting objects: 100% (10283/10283), done. +Delta compression using up to 8 threads +Compressing objects: 100% (5639/5639), done. +Writing objects: 100% (7666/7666), 54.39 MiB | 5.25 MiB/s, done. +Total 7666 (delta 3492), reused 4514 (delta 2022), pack-reused 0 +remote: Resolving deltas: 100% (3492/3492), completed with 2395 local objects. +remote: Checking connectivity: 7666, done. +remote: +remote: Create a new pull request for 'release': +remote: https://cnet-dgr.ipm.com.br/ipm_sistemas_ltda/AtendeNet_Staging/compare/master...release +remote: +remote: . Processing 1 references +remote: Processed 1 references in total +To https://cnet-dgr.ipm.com.br/ipm_sistemas_ltda/AtendeNet_Staging.git + de032c26d..9a343197b release -> release +``` + +Através do Dicionario, deve-se realizar o delivery para os demais repositórios: + +![delivery_git](../img/delivery_git.png) + +Como finalizamos o processo manualmente, neste caso, escolheremos "SIM" e informaremos a HASH: 9a343197bf00cd4933b75493dc7fd003d067371f + +Para obter a HASH, execute o comando abaixo no servidor APP-04: + +```console +# git log +commit 9a343197bf00cd4933b75493dc7fd003d067371f (HEAD -> release, origin/release) +Author: ipm.automacao +Date: Fri Apr 4 11:28:23 2025 -0300 +``` + +![hash_git_commit](../img/hash_git_commit.png) + + +Para conferir se o Delivery foi feito corretamente para os DGR's, pode-se acessar os ambientes abaixo: + +https://cnet-dgr.ipm.com.br | https://dnet-dgr.ipm.com.br | https://pr01-dgr.atende.net | https://sp01-dgr.atende.net + +Utilizar o usuário `AtendeNet_Atualizacao` e senha que está na Área de Trabalho do WTS PR01 "DGR-GIT.txt". +Ao realizar login, será possível visualizar o commit em: ipm_sistemas_ltda/AtendeNet_Production. +Em todos os repositórios devera ter o commit conforme abaixo. + +![commit_git](../img/commit_git.png) \ No newline at end of file diff --git a/docs/zbx_dashboard_user.md b/docs/zbx_dashboard_user.md new file mode 100644 index 0000000..dfe4574 --- /dev/null +++ b/docs/zbx_dashboard_user.md @@ -0,0 +1,52 @@ +# Usuários com acesso aos dashboards + +Este documento descreve os procedimentos necessários para a criação de usuários com privilégio de acesso aos dashboards. +Possibilitando a integração entre o módulo de Gerenciamento do data center e o zabbix para acompanhamento dos recursos em tempo real. + +## Procedimentos + +__1)__ Acesse o servidor zabbix ao qual o cliente possui o monitoramento configurado. + Observe que existem servidores dedicados para cada data center. +```console +# https://pr01-datacenter.ipm.com.br:8085/ +# https://sp01-datacenter.ipm.com.br:8085/ +``` + +__2)__ No menu lateral esquerdo, acesse: __Administration__ >> __User Groups__. +- Clique em __Create User Group__. +- Em __User Group__ preencha os campos abaixo: + - __Group Name__: Data Center - Cliente - PM Demonstração + - __Frontend access__: Internal + - __Enabled__: Ativo + ![zbx_add_user_group](../img/zbx_add_user_group.png) +- Em __Permissions__ informe o grupo de servidores ao qual será disponibilizado o acesso. + - __Grupo de servidores__: demonstracao.atende.net + - __Selecione o privilégio__: Read + - __Adicione o privilégio__: Add + ![zbx_add_user_group_permissions](../img/zbx_add_user_group_permissions.png) +- Para finalizar clique em: __Add__ + ![zbx_add_user_group_add](../img/zbx_add_user_group_add.png) + +__3)__ No menu lateral esquerdo, acesse: __Administration__ >> __Users__. +- Clique em __Create User__. +- Em __User__ preencha os campos abaixo: + - __Username__: dash.pm.demonstracao + - __Name__: Dashboards + - __Last name__: PM Demonstração + - __Groups__: Data Center - Cliente - PM Demonstração | Data Center - DashBoards + - __Password__: (Ex. Hd%gs$32gSu9 ) + ![zbx_create_user](../img/zbx_create_user.png) +- Em __Permissions__ selecione as regras de acesso: + - __Role__: Data Center - DashBoards + ![zbx_add_user_permissions](../img/zbx_add_user_permissions.png) +- Para finalizar clique em: __Add__ + +# Conclusão + +A partir deste momento já temos um usuário e um grupo de usuários configurados com as devidas permissões para a visualização dos dashboards. + +- [`Configuração do serviço Zabbix Agent no GTT`](./gtt_zabbix_agent.md) +- [`Configuração do serviço Zabbix Server no GTT`](./gtt_zabbix_server.md) +- [`Visualizar Dashboards`](./gtt_dashboards.md); + +- [`VOLTAR`](../README.md) \ No newline at end of file diff --git a/img/DNSForwarder.PNG b/img/DNSForwarder.PNG new file mode 100644 index 0000000..230ebca Binary files /dev/null and b/img/DNSForwarder.PNG differ diff --git a/img/RemoverDiscoVCenterDeletandoArquivos.png b/img/RemoverDiscoVCenterDeletandoArquivos.png new file mode 100644 index 0000000..326611e Binary files /dev/null and b/img/RemoverDiscoVCenterDeletandoArquivos.png differ diff --git a/img/_criacao_estrutura_clone_sgdb.png b/img/_criacao_estrutura_clone_sgdb.png new file mode 100644 index 0000000..f8f3bc4 Binary files /dev/null and b/img/_criacao_estrutura_clone_sgdb.png differ diff --git a/img/_criacao_estrutura_clone_tomcat.png b/img/_criacao_estrutura_clone_tomcat.png new file mode 100644 index 0000000..22037e7 Binary files /dev/null and b/img/_criacao_estrutura_clone_tomcat.png differ diff --git a/img/_criacao_estrutura_escolher_servidor_sgdb.png b/img/_criacao_estrutura_escolher_servidor_sgdb.png new file mode 100644 index 0000000..0054d6f Binary files /dev/null and b/img/_criacao_estrutura_escolher_servidor_sgdb.png differ diff --git a/img/_criacao_estrutura_escolher_servidor_tomcat.png b/img/_criacao_estrutura_escolher_servidor_tomcat.png new file mode 100644 index 0000000..a9ca61c Binary files /dev/null and b/img/_criacao_estrutura_escolher_servidor_tomcat.png differ diff --git a/img/_criacao_estrutura_nomear_vm_sgdb.png b/img/_criacao_estrutura_nomear_vm_sgdb.png new file mode 100644 index 0000000..b64629c Binary files /dev/null and b/img/_criacao_estrutura_nomear_vm_sgdb.png differ diff --git a/img/_criacao_estrutura_nomear_vm_tomcat.png b/img/_criacao_estrutura_nomear_vm_tomcat.png new file mode 100644 index 0000000..8e29914 Binary files /dev/null and b/img/_criacao_estrutura_nomear_vm_tomcat.png differ diff --git a/img/_criacao_estrutura_selecao_datastore_sgdb.png b/img/_criacao_estrutura_selecao_datastore_sgdb.png new file mode 100644 index 0000000..dc00201 Binary files /dev/null and b/img/_criacao_estrutura_selecao_datastore_sgdb.png differ diff --git a/img/_criacao_estrutura_selecao_datastore_tomcat.png b/img/_criacao_estrutura_selecao_datastore_tomcat.png new file mode 100644 index 0000000..63b0aed Binary files /dev/null and b/img/_criacao_estrutura_selecao_datastore_tomcat.png differ diff --git a/img/_criacao_estrutura_vm_configurar01_sgdb.png b/img/_criacao_estrutura_vm_configurar01_sgdb.png new file mode 100644 index 0000000..28dc082 Binary files /dev/null and b/img/_criacao_estrutura_vm_configurar01_sgdb.png differ diff --git a/img/_criacao_estrutura_vm_configurar01_tomcat.png b/img/_criacao_estrutura_vm_configurar01_tomcat.png new file mode 100644 index 0000000..281152a Binary files /dev/null and b/img/_criacao_estrutura_vm_configurar01_tomcat.png differ diff --git a/img/_criacao_estrutura_vm_configurar02_sgdb.png b/img/_criacao_estrutura_vm_configurar02_sgdb.png new file mode 100644 index 0000000..bf50249 Binary files /dev/null and b/img/_criacao_estrutura_vm_configurar02_sgdb.png differ diff --git a/img/_criacao_estrutura_vm_configurar02_tomcat.png b/img/_criacao_estrutura_vm_configurar02_tomcat.png new file mode 100644 index 0000000..bea5050 Binary files /dev/null and b/img/_criacao_estrutura_vm_configurar02_tomcat.png differ diff --git a/img/_criacao_estrutura_vm_configurar03_sgdb.png b/img/_criacao_estrutura_vm_configurar03_sgdb.png new file mode 100644 index 0000000..d2386df Binary files /dev/null and b/img/_criacao_estrutura_vm_configurar03_sgdb.png differ diff --git a/img/_criacao_estrutura_vm_configurar03_tomcat.png b/img/_criacao_estrutura_vm_configurar03_tomcat.png new file mode 100644 index 0000000..7f32335 Binary files /dev/null and b/img/_criacao_estrutura_vm_configurar03_tomcat.png differ diff --git a/img/_domonios_fiscalnovo-dominio_nfse.png b/img/_domonios_fiscalnovo-dominio_nfse.png new file mode 100644 index 0000000..f1de080 Binary files /dev/null and b/img/_domonios_fiscalnovo-dominio_nfse.png differ diff --git a/img/_domonios_fiscalnovo-dominio_origens.png b/img/_domonios_fiscalnovo-dominio_origens.png new file mode 100644 index 0000000..6c995d5 Binary files /dev/null and b/img/_domonios_fiscalnovo-dominio_origens.png differ diff --git a/img/_domonios_fiscalnovo-dominio_ws.png b/img/_domonios_fiscalnovo-dominio_ws.png new file mode 100644 index 0000000..555ca8b Binary files /dev/null and b/img/_domonios_fiscalnovo-dominio_ws.png differ diff --git a/img/acesso_informacao1.PNG b/img/acesso_informacao1.PNG new file mode 100644 index 0000000..fefafe3 Binary files /dev/null and b/img/acesso_informacao1.PNG differ diff --git a/img/acesso_informacao2.PNG b/img/acesso_informacao2.PNG new file mode 100644 index 0000000..59872f2 Binary files /dev/null and b/img/acesso_informacao2.PNG differ diff --git a/img/acesso_portainer.png b/img/acesso_portainer.png new file mode 100644 index 0000000..3ddfcde Binary files /dev/null and b/img/acesso_portainer.png differ diff --git a/img/adicionar_vm_zabbix.png b/img/adicionar_vm_zabbix.png new file mode 100644 index 0000000..f0e7766 Binary files /dev/null and b/img/adicionar_vm_zabbix.png differ diff --git a/img/adicionar_vm_zabbix1.png b/img/adicionar_vm_zabbix1.png new file mode 100644 index 0000000..3c044d9 Binary files /dev/null and b/img/adicionar_vm_zabbix1.png differ diff --git a/img/afw_0272_acesso_ssh.png b/img/afw_0272_acesso_ssh.png new file mode 100644 index 0000000..776adad Binary files /dev/null and b/img/afw_0272_acesso_ssh.png differ diff --git a/img/afw_0272_acesso_web.png b/img/afw_0272_acesso_web.png new file mode 100644 index 0000000..be58651 Binary files /dev/null and b/img/afw_0272_acesso_web.png differ diff --git a/img/afw_0272_dashboard.png b/img/afw_0272_dashboard.png new file mode 100644 index 0000000..bdf1ce0 Binary files /dev/null and b/img/afw_0272_dashboard.png differ diff --git a/img/afw_0272_firewall_nat_port_forward.png b/img/afw_0272_firewall_nat_port_forward.png new file mode 100644 index 0000000..a67c20e Binary files /dev/null and b/img/afw_0272_firewall_nat_port_forward.png differ diff --git a/img/afw_0272_haproxy_stats.png b/img/afw_0272_haproxy_stats.png new file mode 100644 index 0000000..a50773f Binary files /dev/null and b/img/afw_0272_haproxy_stats.png differ diff --git a/img/afw_0272_interfaces_lan.png b/img/afw_0272_interfaces_lan.png new file mode 100644 index 0000000..e7d9346 Binary files /dev/null and b/img/afw_0272_interfaces_lan.png differ diff --git a/img/afw_0272_monitoring.png b/img/afw_0272_monitoring.png new file mode 100644 index 0000000..80fea0b Binary files /dev/null and b/img/afw_0272_monitoring.png differ diff --git a/img/afw_0272_services_dns_forwarder_host_override.png b/img/afw_0272_services_dns_forwarder_host_override.png new file mode 100644 index 0000000..52a0b99 Binary files /dev/null and b/img/afw_0272_services_dns_forwarder_host_override.png differ diff --git a/img/afw_0272_services_haproxy_backend.png b/img/afw_0272_services_haproxy_backend.png new file mode 100644 index 0000000..c5d84e7 Binary files /dev/null and b/img/afw_0272_services_haproxy_backend.png differ diff --git a/img/afw_0272_services_haproxy_backend_http.png b/img/afw_0272_services_haproxy_backend_http.png new file mode 100644 index 0000000..cc29d04 Binary files /dev/null and b/img/afw_0272_services_haproxy_backend_http.png differ diff --git a/img/afw_0272_services_haproxy_backend_https.png b/img/afw_0272_services_haproxy_backend_https.png new file mode 100644 index 0000000..c65f610 Binary files /dev/null and b/img/afw_0272_services_haproxy_backend_https.png differ diff --git a/img/afw_0272_services_zabbix_agent.png b/img/afw_0272_services_zabbix_agent.png new file mode 100644 index 0000000..42edc66 Binary files /dev/null and b/img/afw_0272_services_zabbix_agent.png differ diff --git a/img/afw_0272_services_zabbix_proxy.png b/img/afw_0272_services_zabbix_proxy.png new file mode 100644 index 0000000..9197042 Binary files /dev/null and b/img/afw_0272_services_zabbix_proxy.png differ diff --git a/img/afw_0272_system_general_setup.png b/img/afw_0272_system_general_setup.png new file mode 100644 index 0000000..982fadc Binary files /dev/null and b/img/afw_0272_system_general_setup.png differ diff --git a/img/afw_0272_system_logs.png b/img/afw_0272_system_logs.png new file mode 100644 index 0000000..2c34fcd Binary files /dev/null and b/img/afw_0272_system_logs.png differ diff --git a/img/afw_0272_system_user_manager.png b/img/afw_0272_system_user_manager.png new file mode 100644 index 0000000..0443801 Binary files /dev/null and b/img/afw_0272_system_user_manager.png differ diff --git a/img/afw_0272_zabbix_create_host.png b/img/afw_0272_zabbix_create_host.png new file mode 100644 index 0000000..135ce44 Binary files /dev/null and b/img/afw_0272_zabbix_create_host.png differ diff --git a/img/agendamento_158.png b/img/agendamento_158.png new file mode 100644 index 0000000..f16aeba Binary files /dev/null and b/img/agendamento_158.png differ diff --git a/img/aguarde_publicacao_svn_ipmsaude.png b/img/aguarde_publicacao_svn_ipmsaude.png new file mode 100644 index 0000000..71a36c6 Binary files /dev/null and b/img/aguarde_publicacao_svn_ipmsaude.png differ diff --git a/img/aliases_ip_replicacao.png b/img/aliases_ip_replicacao.png new file mode 100644 index 0000000..6da2eee Binary files /dev/null and b/img/aliases_ip_replicacao.png differ diff --git a/img/alteracao_enderecos_microservicos.png b/img/alteracao_enderecos_microservicos.png new file mode 100644 index 0000000..d64bad5 Binary files /dev/null and b/img/alteracao_enderecos_microservicos.png differ diff --git a/img/alteracao_gateway.png b/img/alteracao_gateway.png new file mode 100644 index 0000000..77b5833 Binary files /dev/null and b/img/alteracao_gateway.png differ diff --git a/img/alteracao_gateway2.png b/img/alteracao_gateway2.png new file mode 100644 index 0000000..a76f09e Binary files /dev/null and b/img/alteracao_gateway2.png differ diff --git a/img/app_0820_edit_settings.png b/img/app_0820_edit_settings.png new file mode 100644 index 0000000..6b3b847 Binary files /dev/null and b/img/app_0820_edit_settings.png differ diff --git a/img/app_0820_hard_disk_2.png b/img/app_0820_hard_disk_2.png new file mode 100644 index 0000000..b71aaa1 Binary files /dev/null and b/img/app_0820_hard_disk_2.png differ diff --git a/img/app_0820_zabbix_create_host.png b/img/app_0820_zabbix_create_host.png new file mode 100644 index 0000000..4e3535c Binary files /dev/null and b/img/app_0820_zabbix_create_host.png differ diff --git a/img/arquivo_copia_dne.png b/img/arquivo_copia_dne.png new file mode 100644 index 0000000..4725644 Binary files /dev/null and b/img/arquivo_copia_dne.png differ diff --git a/img/arquivos_delimitado_copia.png b/img/arquivos_delimitado_copia.png new file mode 100644 index 0000000..fed200c Binary files /dev/null and b/img/arquivos_delimitado_copia.png differ diff --git a/img/arquivos_ordem_01.png b/img/arquivos_ordem_01.png new file mode 100644 index 0000000..90dda23 Binary files /dev/null and b/img/arquivos_ordem_01.png differ diff --git a/img/atencao.jpg b/img/atencao.jpg new file mode 100644 index 0000000..04368b4 Binary files /dev/null and b/img/atencao.jpg differ diff --git a/img/atende_net_config_microservico_FileOptimizer.png b/img/atende_net_config_microservico_FileOptimizer.png new file mode 100644 index 0000000..d183475 Binary files /dev/null and b/img/atende_net_config_microservico_FileOptimizer.png differ diff --git a/img/atende_net_config_microservico_FileOptimizer1.png b/img/atende_net_config_microservico_FileOptimizer1.png new file mode 100644 index 0000000..edca41f Binary files /dev/null and b/img/atende_net_config_microservico_FileOptimizer1.png differ diff --git a/img/atende_net_config_microservico_PowerBiAdapter.png b/img/atende_net_config_microservico_PowerBiAdapter.png new file mode 100644 index 0000000..c423fd3 Binary files /dev/null and b/img/atende_net_config_microservico_PowerBiAdapter.png differ diff --git a/img/atende_net_config_microservico_PowerBiAdapter1.png b/img/atende_net_config_microservico_PowerBiAdapter1.png new file mode 100644 index 0000000..98b370a Binary files /dev/null and b/img/atende_net_config_microservico_PowerBiAdapter1.png differ diff --git a/img/atualiza2_gdt.PNG b/img/atualiza2_gdt.PNG new file mode 100644 index 0000000..7ec4942 Binary files /dev/null and b/img/atualiza2_gdt.PNG differ diff --git a/img/atualiza_gdt.PNG b/img/atualiza_gdt.PNG new file mode 100644 index 0000000..c5d3fc5 Binary files /dev/null and b/img/atualiza_gdt.PNG differ diff --git a/img/atualiza_qualidade.png b/img/atualiza_qualidade.png new file mode 100644 index 0000000..02d5f7e Binary files /dev/null and b/img/atualiza_qualidade.png differ diff --git a/img/atualizacao_pacote_svn.png b/img/atualizacao_pacote_svn.png new file mode 100644 index 0000000..801377d Binary files /dev/null and b/img/atualizacao_pacote_svn.png differ diff --git a/img/atualizacao_svn.PNG b/img/atualizacao_svn.PNG new file mode 100644 index 0000000..8767e62 Binary files /dev/null and b/img/atualizacao_svn.PNG differ diff --git a/img/bdp_1150_zabbix_create_host.png b/img/bdp_1150_zabbix_create_host.png new file mode 100644 index 0000000..07475c5 Binary files /dev/null and b/img/bdp_1150_zabbix_create_host.png differ diff --git a/img/bdp_1600_zabbix_create_host.png b/img/bdp_1600_zabbix_create_host.png new file mode 100644 index 0000000..ea71bc7 Binary files /dev/null and b/img/bdp_1600_zabbix_create_host.png differ diff --git a/img/cadastro_clientes_wizard_gtt_01.png b/img/cadastro_clientes_wizard_gtt_01.png new file mode 100644 index 0000000..8c3c537 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_01.png differ diff --git a/img/cadastro_clientes_wizard_gtt_02.png b/img/cadastro_clientes_wizard_gtt_02.png new file mode 100644 index 0000000..569e485 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_02.png differ diff --git a/img/cadastro_clientes_wizard_gtt_03.png b/img/cadastro_clientes_wizard_gtt_03.png new file mode 100644 index 0000000..91bd4e3 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_03.png differ diff --git a/img/cadastro_clientes_wizard_gtt_04.png b/img/cadastro_clientes_wizard_gtt_04.png new file mode 100644 index 0000000..2b573b8 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_04.png differ diff --git a/img/cadastro_clientes_wizard_gtt_05.png b/img/cadastro_clientes_wizard_gtt_05.png new file mode 100644 index 0000000..10a3f85 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_05.png differ diff --git a/img/cadastro_clientes_wizard_gtt_06.png b/img/cadastro_clientes_wizard_gtt_06.png new file mode 100644 index 0000000..c9e78f5 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_06.png differ diff --git a/img/cadastro_clientes_wizard_gtt_07.png b/img/cadastro_clientes_wizard_gtt_07.png new file mode 100644 index 0000000..c399354 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_07.png differ diff --git a/img/cadastro_clientes_wizard_gtt_08.png b/img/cadastro_clientes_wizard_gtt_08.png new file mode 100644 index 0000000..12ffe7b Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_08.png differ diff --git a/img/cadastro_clientes_wizard_gtt_09.png b/img/cadastro_clientes_wizard_gtt_09.png new file mode 100644 index 0000000..d010288 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_09.png differ diff --git a/img/cadastro_clientes_wizard_gtt_10.png b/img/cadastro_clientes_wizard_gtt_10.png new file mode 100644 index 0000000..87ad7ce Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_10.png differ diff --git a/img/cadastro_clientes_wizard_gtt_11.png b/img/cadastro_clientes_wizard_gtt_11.png new file mode 100644 index 0000000..bb64652 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_11.png differ diff --git a/img/cadastro_clientes_wizard_gtt_12.png b/img/cadastro_clientes_wizard_gtt_12.png new file mode 100644 index 0000000..16cb902 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_12.png differ diff --git a/img/cadastro_clientes_wizard_gtt_13.png b/img/cadastro_clientes_wizard_gtt_13.png new file mode 100644 index 0000000..2ff8655 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_13.png differ diff --git a/img/cadastro_clientes_wizard_gtt_14.png b/img/cadastro_clientes_wizard_gtt_14.png new file mode 100644 index 0000000..4a6d2e7 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_14.png differ diff --git a/img/cadastro_clientes_wizard_gtt_15.png b/img/cadastro_clientes_wizard_gtt_15.png new file mode 100644 index 0000000..154c990 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_15.png differ diff --git a/img/cadastro_clientes_wizard_gtt_16.png b/img/cadastro_clientes_wizard_gtt_16.png new file mode 100644 index 0000000..4742693 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_16.png differ diff --git a/img/cadastro_clientes_wizard_gtt_17.png b/img/cadastro_clientes_wizard_gtt_17.png new file mode 100644 index 0000000..6d9764f Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_17.png differ diff --git a/img/cadastro_clientes_wizard_gtt_18.png b/img/cadastro_clientes_wizard_gtt_18.png new file mode 100644 index 0000000..077f09d Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_18.png differ diff --git a/img/cadastro_clientes_wizard_gtt_19.png b/img/cadastro_clientes_wizard_gtt_19.png new file mode 100644 index 0000000..bae3649 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_19.png differ diff --git a/img/cadastro_clientes_wizard_gtt_20.png b/img/cadastro_clientes_wizard_gtt_20.png new file mode 100644 index 0000000..53f6e46 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_20.png differ diff --git a/img/cadastro_clientes_wizard_gtt_21.png b/img/cadastro_clientes_wizard_gtt_21.png new file mode 100644 index 0000000..2156745 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_21.png differ diff --git a/img/cadastro_clientes_wizard_gtt_22.png b/img/cadastro_clientes_wizard_gtt_22.png new file mode 100644 index 0000000..08497ab Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_22.png differ diff --git a/img/cadastro_clientes_wizard_gtt_22_1.png b/img/cadastro_clientes_wizard_gtt_22_1.png new file mode 100644 index 0000000..c78c090 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_22_1.png differ diff --git a/img/cadastro_clientes_wizard_gtt_23.png b/img/cadastro_clientes_wizard_gtt_23.png new file mode 100644 index 0000000..98fdac0 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_23.png differ diff --git a/img/cadastro_clientes_wizard_gtt_24.png b/img/cadastro_clientes_wizard_gtt_24.png new file mode 100644 index 0000000..76f3819 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_24.png differ diff --git a/img/cadastro_clientes_wizard_gtt_24_1.png b/img/cadastro_clientes_wizard_gtt_24_1.png new file mode 100644 index 0000000..38a5384 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_24_1.png differ diff --git a/img/cadastro_clientes_wizard_gtt_24_2.png b/img/cadastro_clientes_wizard_gtt_24_2.png new file mode 100644 index 0000000..71ecff1 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_24_2.png differ diff --git a/img/cadastro_clientes_wizard_gtt_24_3.png b/img/cadastro_clientes_wizard_gtt_24_3.png new file mode 100644 index 0000000..999545b Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_24_3.png differ diff --git a/img/cadastro_clientes_wizard_gtt_25.png b/img/cadastro_clientes_wizard_gtt_25.png new file mode 100644 index 0000000..0c5ba75 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_25.png differ diff --git a/img/cadastro_clientes_wizard_gtt_26.png b/img/cadastro_clientes_wizard_gtt_26.png new file mode 100644 index 0000000..be27199 Binary files /dev/null and b/img/cadastro_clientes_wizard_gtt_26.png differ diff --git a/img/cadastro_msd02_gtt_01.png b/img/cadastro_msd02_gtt_01.png new file mode 100644 index 0000000..7f0e375 Binary files /dev/null and b/img/cadastro_msd02_gtt_01.png differ diff --git a/img/cadastro_msd02_gtt_02.png b/img/cadastro_msd02_gtt_02.png new file mode 100644 index 0000000..b49020f Binary files /dev/null and b/img/cadastro_msd02_gtt_02.png differ diff --git a/img/cadastro_msd02_gtt_03.png b/img/cadastro_msd02_gtt_03.png new file mode 100644 index 0000000..5f30ad1 Binary files /dev/null and b/img/cadastro_msd02_gtt_03.png differ diff --git a/img/cadastro_msd02_gtt_04.png b/img/cadastro_msd02_gtt_04.png new file mode 100644 index 0000000..00c9d73 Binary files /dev/null and b/img/cadastro_msd02_gtt_04.png differ diff --git a/img/cadastro_msd02_gtt_05.png b/img/cadastro_msd02_gtt_05.png new file mode 100644 index 0000000..ec711e6 Binary files /dev/null and b/img/cadastro_msd02_gtt_05.png differ diff --git a/img/cadastro_msd02_gtt_06.png b/img/cadastro_msd02_gtt_06.png new file mode 100644 index 0000000..43e4f75 Binary files /dev/null and b/img/cadastro_msd02_gtt_06.png differ diff --git a/img/cadastro_msd02_zabbix_01.png b/img/cadastro_msd02_zabbix_01.png new file mode 100644 index 0000000..f83b3ba Binary files /dev/null and b/img/cadastro_msd02_zabbix_01.png differ diff --git a/img/cadastro_msd02_zabbix_02.png b/img/cadastro_msd02_zabbix_02.png new file mode 100644 index 0000000..725009b Binary files /dev/null and b/img/cadastro_msd02_zabbix_02.png differ diff --git a/img/cadastro_msd02_zabbix_03.png b/img/cadastro_msd02_zabbix_03.png new file mode 100644 index 0000000..517935f Binary files /dev/null and b/img/cadastro_msd02_zabbix_03.png differ diff --git a/img/cadastro_msd02_zabbix_04.png b/img/cadastro_msd02_zabbix_04.png new file mode 100644 index 0000000..932ab65 Binary files /dev/null and b/img/cadastro_msd02_zabbix_04.png differ diff --git a/img/cadastro_msd02_zabbix_05.png b/img/cadastro_msd02_zabbix_05.png new file mode 100644 index 0000000..ae401d9 Binary files /dev/null and b/img/cadastro_msd02_zabbix_05.png differ diff --git a/img/calendario.png b/img/calendario.png new file mode 100644 index 0000000..6427025 Binary files /dev/null and b/img/calendario.png differ diff --git a/img/chamado.PNG b/img/chamado.PNG new file mode 100644 index 0000000..aa07c17 Binary files /dev/null and b/img/chamado.PNG differ diff --git a/img/chamado_prorrogacao.jpg b/img/chamado_prorrogacao.jpg new file mode 100644 index 0000000..c7ab82d Binary files /dev/null and b/img/chamado_prorrogacao.jpg differ diff --git a/img/chamado_prorrogacao2.jpg b/img/chamado_prorrogacao2.jpg new file mode 100644 index 0000000..6431fe9 Binary files /dev/null and b/img/chamado_prorrogacao2.jpg differ diff --git a/img/chamado_svn.PNG b/img/chamado_svn.PNG new file mode 100644 index 0000000..ad01281 Binary files /dev/null and b/img/chamado_svn.PNG differ diff --git a/img/chave_crypto_gtt.png b/img/chave_crypto_gtt.png new file mode 100644 index 0000000..a808e82 Binary files /dev/null and b/img/chave_crypto_gtt.png differ diff --git a/img/chave_crypto_gtt2.png b/img/chave_crypto_gtt2.png new file mode 100644 index 0000000..ccaf6c6 Binary files /dev/null and b/img/chave_crypto_gtt2.png differ diff --git a/img/checklist_backup_ppdm_recovery_point.png b/img/checklist_backup_ppdm_recovery_point.png new file mode 100644 index 0000000..2415ac8 Binary files /dev/null and b/img/checklist_backup_ppdm_recovery_point.png differ diff --git a/img/clean_volumes_docker_unused_portainer.png b/img/clean_volumes_docker_unused_portainer.png new file mode 100644 index 0000000..07dff1c Binary files /dev/null and b/img/clean_volumes_docker_unused_portainer.png differ diff --git a/img/clone_msd03_msd02.png b/img/clone_msd03_msd02.png new file mode 100644 index 0000000..1e89daf Binary files /dev/null and b/img/clone_msd03_msd02.png differ diff --git a/img/commit_arquivos_saude_git.png b/img/commit_arquivos_saude_git.png new file mode 100644 index 0000000..9d41a3a Binary files /dev/null and b/img/commit_arquivos_saude_git.png differ diff --git a/img/commit_arquivos_saude_git2.png b/img/commit_arquivos_saude_git2.png new file mode 100644 index 0000000..431d820 Binary files /dev/null and b/img/commit_arquivos_saude_git2.png differ diff --git a/img/commit_git.png b/img/commit_git.png new file mode 100644 index 0000000..570bb1f Binary files /dev/null and b/img/commit_git.png differ diff --git a/img/conexao_postgresql_migracao.png b/img/conexao_postgresql_migracao.png new file mode 100644 index 0000000..c3dedac Binary files /dev/null and b/img/conexao_postgresql_migracao.png differ diff --git a/img/config_dns_ged.png b/img/config_dns_ged.png new file mode 100644 index 0000000..5936968 Binary files /dev/null and b/img/config_dns_ged.png differ diff --git a/img/config_dns_ged2.png b/img/config_dns_ged2.png new file mode 100644 index 0000000..412682b Binary files /dev/null and b/img/config_dns_ged2.png differ diff --git a/img/config_meeting_salas.jpg b/img/config_meeting_salas.jpg new file mode 100644 index 0000000..083d740 Binary files /dev/null and b/img/config_meeting_salas.jpg differ diff --git a/img/config_nat_ged.png b/img/config_nat_ged.png new file mode 100644 index 0000000..2046f1e Binary files /dev/null and b/img/config_nat_ged.png differ diff --git a/img/configuracao_ambiente_consorcio_01_v3_admin_console.png b/img/configuracao_ambiente_consorcio_01_v3_admin_console.png new file mode 100644 index 0000000..30ade65 Binary files /dev/null and b/img/configuracao_ambiente_consorcio_01_v3_admin_console.png differ diff --git a/img/configuracao_ambiente_consorcio_02_botao_cadastrar_novo_site.png b/img/configuracao_ambiente_consorcio_02_botao_cadastrar_novo_site.png new file mode 100644 index 0000000..ce6451d Binary files /dev/null and b/img/configuracao_ambiente_consorcio_02_botao_cadastrar_novo_site.png differ diff --git a/img/configuracao_ambiente_consorcio_03_trocar_para_chave_classica.png b/img/configuracao_ambiente_consorcio_03_trocar_para_chave_classica.png new file mode 100644 index 0000000..a84c26f Binary files /dev/null and b/img/configuracao_ambiente_consorcio_03_trocar_para_chave_classica.png differ diff --git a/img/configuracao_ambiente_consorcio_04_preencher_v2.png b/img/configuracao_ambiente_consorcio_04_preencher_v2.png new file mode 100644 index 0000000..f3acdc9 Binary files /dev/null and b/img/configuracao_ambiente_consorcio_04_preencher_v2.png differ diff --git a/img/configuracao_ambiente_consorcio_05_preencher_v3.png b/img/configuracao_ambiente_consorcio_05_preencher_v3.png new file mode 100644 index 0000000..86dbd8d Binary files /dev/null and b/img/configuracao_ambiente_consorcio_05_preencher_v3.png differ diff --git a/img/configuracao_ambiente_consorcio_firewall_adicionar_dominio_forward.png b/img/configuracao_ambiente_consorcio_firewall_adicionar_dominio_forward.png new file mode 100644 index 0000000..ec22e07 Binary files /dev/null and b/img/configuracao_ambiente_consorcio_firewall_adicionar_dominio_forward.png differ diff --git a/img/configuracao_ambiente_consorcio_firewall_consorcio.png b/img/configuracao_ambiente_consorcio_firewall_consorcio.png new file mode 100644 index 0000000..ddc1876 Binary files /dev/null and b/img/configuracao_ambiente_consorcio_firewall_consorcio.png differ diff --git a/img/configuracao_ambiente_consorcio_script_configure_apache.png b/img/configuracao_ambiente_consorcio_script_configure_apache.png new file mode 100644 index 0000000..8c3a38e Binary files /dev/null and b/img/configuracao_ambiente_consorcio_script_configure_apache.png differ diff --git a/img/configuration_msd02_01.png b/img/configuration_msd02_01.png new file mode 100644 index 0000000..1f55c37 Binary files /dev/null and b/img/configuration_msd02_01.png differ diff --git a/img/configuration_msd02_02.png b/img/configuration_msd02_02.png new file mode 100644 index 0000000..b64f993 Binary files /dev/null and b/img/configuration_msd02_02.png differ diff --git a/img/configuration_msd02_03.png b/img/configuration_msd02_03.png new file mode 100644 index 0000000..9d7e605 Binary files /dev/null and b/img/configuration_msd02_03.png differ diff --git a/img/configuration_msd02_04.png b/img/configuration_msd02_04.png new file mode 100644 index 0000000..c885eb0 Binary files /dev/null and b/img/configuration_msd02_04.png differ diff --git a/img/configuration_msd02_05.png b/img/configuration_msd02_05.png new file mode 100644 index 0000000..bbcc0b2 Binary files /dev/null and b/img/configuration_msd02_05.png differ diff --git a/img/configuration_msd02_06.png b/img/configuration_msd02_06.png new file mode 100644 index 0000000..5763479 Binary files /dev/null and b/img/configuration_msd02_06.png differ diff --git a/img/consulta_senhas_configuracao_servico.png b/img/consulta_senhas_configuracao_servico.png new file mode 100644 index 0000000..fc73153 Binary files /dev/null and b/img/consulta_senhas_configuracao_servico.png differ diff --git a/img/consulta_senhas_configurar_servico.png b/img/consulta_senhas_configurar_servico.png new file mode 100644 index 0000000..ae4e1c6 Binary files /dev/null and b/img/consulta_senhas_configurar_servico.png differ diff --git a/img/consulta_senhas_filtrar_ambiente.png b/img/consulta_senhas_filtrar_ambiente.png new file mode 100644 index 0000000..6a755fb Binary files /dev/null and b/img/consulta_senhas_filtrar_ambiente.png differ diff --git a/img/consulta_senhas_rotina_equipamento.png b/img/consulta_senhas_rotina_equipamento.png new file mode 100644 index 0000000..18289cb Binary files /dev/null and b/img/consulta_senhas_rotina_equipamento.png differ diff --git a/img/consulta_senhas_servicos_equipamento.png b/img/consulta_senhas_servicos_equipamento.png new file mode 100644 index 0000000..8b2a4c0 Binary files /dev/null and b/img/consulta_senhas_servicos_equipamento.png differ diff --git a/img/consulta_senhas_usuarios_so.png b/img/consulta_senhas_usuarios_so.png new file mode 100644 index 0000000..ad266e9 Binary files /dev/null and b/img/consulta_senhas_usuarios_so.png differ diff --git a/img/consulta_senhas_usuarios_so_do_equipamento.png b/img/consulta_senhas_usuarios_so_do_equipamento.png new file mode 100644 index 0000000..ccea639 Binary files /dev/null and b/img/consulta_senhas_usuarios_so_do_equipamento.png differ diff --git a/img/consulta_senhas_visualizar_usuario_equipamento.png b/img/consulta_senhas_visualizar_usuario_equipamento.png new file mode 100644 index 0000000..aca9808 Binary files /dev/null and b/img/consulta_senhas_visualizar_usuario_equipamento.png differ diff --git a/img/consulta_unico.PNG b/img/consulta_unico.PNG new file mode 100644 index 0000000..ff210e2 Binary files /dev/null and b/img/consulta_unico.PNG differ diff --git a/img/consulta_unico2.PNG b/img/consulta_unico2.PNG new file mode 100644 index 0000000..1b24e52 Binary files /dev/null and b/img/consulta_unico2.PNG differ diff --git a/img/consulta_unico3.PNG b/img/consulta_unico3.PNG new file mode 100644 index 0000000..b175508 Binary files /dev/null and b/img/consulta_unico3.PNG differ diff --git a/img/copia-saude.PNG b/img/copia-saude.PNG new file mode 100644 index 0000000..6bfcdfc Binary files /dev/null and b/img/copia-saude.PNG differ diff --git a/img/copia.png b/img/copia.png new file mode 100644 index 0000000..119164c Binary files /dev/null and b/img/copia.png differ diff --git a/img/copia_ok.png b/img/copia_ok.png new file mode 100644 index 0000000..f46d336 Binary files /dev/null and b/img/copia_ok.png differ diff --git a/img/copia_release_saude_finalizada.png b/img/copia_release_saude_finalizada.png new file mode 100644 index 0000000..83e7e21 Binary files /dev/null and b/img/copia_release_saude_finalizada.png differ diff --git a/img/create-user-zabbix-elastic2.png b/img/create-user-zabbix-elastic2.png new file mode 100644 index 0000000..d171f7f Binary files /dev/null and b/img/create-user-zabbix-elastic2.png differ diff --git a/img/create-user-zabbix-elastic3.png b/img/create-user-zabbix-elastic3.png new file mode 100644 index 0000000..672f16a Binary files /dev/null and b/img/create-user-zabbix-elastic3.png differ diff --git a/img/create-user-zabbix-elastic4.png b/img/create-user-zabbix-elastic4.png new file mode 100644 index 0000000..bdfa327 Binary files /dev/null and b/img/create-user-zabbix-elastic4.png differ diff --git a/img/create-user-zabbix-elastic_auth.png b/img/create-user-zabbix-elastic_auth.png new file mode 100644 index 0000000..74dcb88 Binary files /dev/null and b/img/create-user-zabbix-elastic_auth.png differ diff --git a/img/create-user-zabbix-elastic_gdt.png b/img/create-user-zabbix-elastic_gdt.png new file mode 100644 index 0000000..3e7f403 Binary files /dev/null and b/img/create-user-zabbix-elastic_gdt.png differ diff --git a/img/create_database_1.png b/img/create_database_1.png new file mode 100644 index 0000000..e5efda0 Binary files /dev/null and b/img/create_database_1.png differ diff --git a/img/create_database_2.png b/img/create_database_2.png new file mode 100644 index 0000000..8b447fc Binary files /dev/null and b/img/create_database_2.png differ diff --git a/img/criacao_ambiente_gtt_rede.png b/img/criacao_ambiente_gtt_rede.png new file mode 100644 index 0000000..39eccbf Binary files /dev/null and b/img/criacao_ambiente_gtt_rede.png differ diff --git a/img/criacao_ambiente_vlan_portgroup.png b/img/criacao_ambiente_vlan_portgroup.png new file mode 100644 index 0000000..3350c7a Binary files /dev/null and b/img/criacao_ambiente_vlan_portgroup.png differ diff --git a/img/criacao_ambiente_vlan_portgroup_failover.png b/img/criacao_ambiente_vlan_portgroup_failover.png new file mode 100644 index 0000000..fab381c Binary files /dev/null and b/img/criacao_ambiente_vlan_portgroup_failover.png differ diff --git a/img/criacao_ambiente_vmware_network.png b/img/criacao_ambiente_vmware_network.png new file mode 100644 index 0000000..59877c4 Binary files /dev/null and b/img/criacao_ambiente_vmware_network.png differ diff --git a/img/criacao_ambiente_vmware_portgroup_config.png b/img/criacao_ambiente_vmware_portgroup_config.png new file mode 100644 index 0000000..86cb792 Binary files /dev/null and b/img/criacao_ambiente_vmware_portgroup_config.png differ diff --git a/img/criacao_ambiente_vmware_portgroup_criacao.png b/img/criacao_ambiente_vmware_portgroup_criacao.png new file mode 100644 index 0000000..e217aeb Binary files /dev/null and b/img/criacao_ambiente_vmware_portgroup_criacao.png differ diff --git a/img/criacao_ambiente_vmware_portgroup_swtich.png b/img/criacao_ambiente_vmware_portgroup_swtich.png new file mode 100644 index 0000000..30c7ee8 Binary files /dev/null and b/img/criacao_ambiente_vmware_portgroup_swtich.png differ diff --git a/img/criacao_ambiente_vmware_switch.png b/img/criacao_ambiente_vmware_switch.png new file mode 100644 index 0000000..c318515 Binary files /dev/null and b/img/criacao_ambiente_vmware_switch.png differ diff --git a/img/criacao_estrutura_clone.png b/img/criacao_estrutura_clone.png new file mode 100644 index 0000000..3304bd5 Binary files /dev/null and b/img/criacao_estrutura_clone.png differ diff --git a/img/criacao_estrutura_clone_http.png b/img/criacao_estrutura_clone_http.png new file mode 100644 index 0000000..3202f24 Binary files /dev/null and b/img/criacao_estrutura_clone_http.png differ diff --git a/img/criacao_estrutura_clone_sgdb.png b/img/criacao_estrutura_clone_sgdb.png new file mode 100644 index 0000000..38b1a87 Binary files /dev/null and b/img/criacao_estrutura_clone_sgdb.png differ diff --git a/img/criacao_estrutura_clone_tomcat.png b/img/criacao_estrutura_clone_tomcat.png new file mode 100644 index 0000000..d78f685 Binary files /dev/null and b/img/criacao_estrutura_clone_tomcat.png differ diff --git a/img/criacao_estrutura_escolher_servidor.png b/img/criacao_estrutura_escolher_servidor.png new file mode 100644 index 0000000..bb894f4 Binary files /dev/null and b/img/criacao_estrutura_escolher_servidor.png differ diff --git a/img/criacao_estrutura_escolher_servidor_http.png b/img/criacao_estrutura_escolher_servidor_http.png new file mode 100644 index 0000000..eb1e9e1 Binary files /dev/null and b/img/criacao_estrutura_escolher_servidor_http.png differ diff --git a/img/criacao_estrutura_escolher_servidor_sgdb.png b/img/criacao_estrutura_escolher_servidor_sgdb.png new file mode 100644 index 0000000..1696eb6 Binary files /dev/null and b/img/criacao_estrutura_escolher_servidor_sgdb.png differ diff --git a/img/criacao_estrutura_escolher_servidor_tomcat.png b/img/criacao_estrutura_escolher_servidor_tomcat.png new file mode 100644 index 0000000..65fff00 Binary files /dev/null and b/img/criacao_estrutura_escolher_servidor_tomcat.png differ diff --git a/img/criacao_estrutura_nomear_vm.png b/img/criacao_estrutura_nomear_vm.png new file mode 100644 index 0000000..e088b5f Binary files /dev/null and b/img/criacao_estrutura_nomear_vm.png differ diff --git a/img/criacao_estrutura_nomear_vm_http.png b/img/criacao_estrutura_nomear_vm_http.png new file mode 100644 index 0000000..75b6dcd Binary files /dev/null and b/img/criacao_estrutura_nomear_vm_http.png differ diff --git a/img/criacao_estrutura_nomear_vm_sgdb.png b/img/criacao_estrutura_nomear_vm_sgdb.png new file mode 100644 index 0000000..2519d44 Binary files /dev/null and b/img/criacao_estrutura_nomear_vm_sgdb.png differ diff --git a/img/criacao_estrutura_nomear_vm_tomcat.png b/img/criacao_estrutura_nomear_vm_tomcat.png new file mode 100644 index 0000000..ea1eea8 Binary files /dev/null and b/img/criacao_estrutura_nomear_vm_tomcat.png differ diff --git a/img/criacao_estrutura_selecao_datastore.png b/img/criacao_estrutura_selecao_datastore.png new file mode 100644 index 0000000..4c068a8 Binary files /dev/null and b/img/criacao_estrutura_selecao_datastore.png differ diff --git a/img/criacao_estrutura_selecao_datastore_http.png b/img/criacao_estrutura_selecao_datastore_http.png new file mode 100644 index 0000000..c9b90b1 Binary files /dev/null and b/img/criacao_estrutura_selecao_datastore_http.png differ diff --git a/img/criacao_estrutura_selecao_datastore_sgdb.png b/img/criacao_estrutura_selecao_datastore_sgdb.png new file mode 100644 index 0000000..45d84fb Binary files /dev/null and b/img/criacao_estrutura_selecao_datastore_sgdb.png differ diff --git a/img/criacao_estrutura_selecao_datastore_tomcat.png b/img/criacao_estrutura_selecao_datastore_tomcat.png new file mode 100644 index 0000000..fbb376e Binary files /dev/null and b/img/criacao_estrutura_selecao_datastore_tomcat.png differ diff --git a/img/criacao_estrutura_vm_configurar01.png b/img/criacao_estrutura_vm_configurar01.png new file mode 100644 index 0000000..03219da Binary files /dev/null and b/img/criacao_estrutura_vm_configurar01.png differ diff --git a/img/criacao_estrutura_vm_configurar01_http.png b/img/criacao_estrutura_vm_configurar01_http.png new file mode 100644 index 0000000..0997244 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar01_http.png differ diff --git a/img/criacao_estrutura_vm_configurar01_sgdb.png b/img/criacao_estrutura_vm_configurar01_sgdb.png new file mode 100644 index 0000000..b3066d7 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar01_sgdb.png differ diff --git a/img/criacao_estrutura_vm_configurar01_tomcat.png b/img/criacao_estrutura_vm_configurar01_tomcat.png new file mode 100644 index 0000000..03b69c2 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar01_tomcat.png differ diff --git a/img/criacao_estrutura_vm_configurar02.png b/img/criacao_estrutura_vm_configurar02.png new file mode 100644 index 0000000..e50f7f2 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar02.png differ diff --git a/img/criacao_estrutura_vm_configurar02_http.png b/img/criacao_estrutura_vm_configurar02_http.png new file mode 100644 index 0000000..8a02eed Binary files /dev/null and b/img/criacao_estrutura_vm_configurar02_http.png differ diff --git a/img/criacao_estrutura_vm_configurar02_sgdb.png b/img/criacao_estrutura_vm_configurar02_sgdb.png new file mode 100644 index 0000000..9f7bb5e Binary files /dev/null and b/img/criacao_estrutura_vm_configurar02_sgdb.png differ diff --git a/img/criacao_estrutura_vm_configurar02_tomcat.png b/img/criacao_estrutura_vm_configurar02_tomcat.png new file mode 100644 index 0000000..8d0b22b Binary files /dev/null and b/img/criacao_estrutura_vm_configurar02_tomcat.png differ diff --git a/img/criacao_estrutura_vm_configurar03.png b/img/criacao_estrutura_vm_configurar03.png new file mode 100644 index 0000000..0ac2381 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar03.png differ diff --git a/img/criacao_estrutura_vm_configurar03_http.png b/img/criacao_estrutura_vm_configurar03_http.png new file mode 100644 index 0000000..7b71b3f Binary files /dev/null and b/img/criacao_estrutura_vm_configurar03_http.png differ diff --git a/img/criacao_estrutura_vm_configurar03_sgdb.png b/img/criacao_estrutura_vm_configurar03_sgdb.png new file mode 100644 index 0000000..4d326b8 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar03_sgdb.png differ diff --git a/img/criacao_estrutura_vm_configurar03_tomcat.png b/img/criacao_estrutura_vm_configurar03_tomcat.png new file mode 100644 index 0000000..9f7c177 Binary files /dev/null and b/img/criacao_estrutura_vm_configurar03_tomcat.png differ diff --git a/img/criacao_network_portainer.png b/img/criacao_network_portainer.png new file mode 100644 index 0000000..60ebbe2 Binary files /dev/null and b/img/criacao_network_portainer.png differ diff --git a/img/criacao_network_portainer2.png b/img/criacao_network_portainer2.png new file mode 100644 index 0000000..4115e6e Binary files /dev/null and b/img/criacao_network_portainer2.png differ diff --git a/img/criacao_network_portainer3.png b/img/criacao_network_portainer3.png new file mode 100644 index 0000000..2f0bd8c Binary files /dev/null and b/img/criacao_network_portainer3.png differ diff --git a/img/criacao_network_portainer_stack.png b/img/criacao_network_portainer_stack.png new file mode 100644 index 0000000..795eca4 Binary files /dev/null and b/img/criacao_network_portainer_stack.png differ diff --git a/img/criacao_network_portainer_stack_net.png b/img/criacao_network_portainer_stack_net.png new file mode 100644 index 0000000..bb1dfcd Binary files /dev/null and b/img/criacao_network_portainer_stack_net.png differ diff --git a/img/criar_dominio_digicert.png b/img/criar_dominio_digicert.png new file mode 100644 index 0000000..fef98de Binary files /dev/null and b/img/criar_dominio_digicert.png differ diff --git a/img/database.png b/img/database.png new file mode 100644 index 0000000..3deac21 Binary files /dev/null and b/img/database.png differ diff --git a/img/delivery_git.png b/img/delivery_git.png new file mode 100644 index 0000000..bcb5f50 Binary files /dev/null and b/img/delivery_git.png differ diff --git a/img/des-elastic-atendenet-postman-import-create_cluster.png b/img/des-elastic-atendenet-postman-import-create_cluster.png new file mode 100644 index 0000000..9c8f222 Binary files /dev/null and b/img/des-elastic-atendenet-postman-import-create_cluster.png differ diff --git a/img/des-elastic-atendenet-postman-settings.png b/img/des-elastic-atendenet-postman-settings.png new file mode 100644 index 0000000..b579b97 Binary files /dev/null and b/img/des-elastic-atendenet-postman-settings.png differ diff --git a/img/desligando_ambiente_mig.png b/img/desligando_ambiente_mig.png new file mode 100644 index 0000000..128548e Binary files /dev/null and b/img/desligando_ambiente_mig.png differ diff --git a/img/diagrama_replicacao_postgres16.png b/img/diagrama_replicacao_postgres16.png new file mode 100644 index 0000000..043c8ac Binary files /dev/null and b/img/diagrama_replicacao_postgres16.png differ diff --git a/img/disco_vmware.png b/img/disco_vmware.png new file mode 100644 index 0000000..a0863fa Binary files /dev/null and b/img/disco_vmware.png differ diff --git a/img/dne_arquivo_selecao.png b/img/dne_arquivo_selecao.png new file mode 100644 index 0000000..a10ad82 Binary files /dev/null and b/img/dne_arquivo_selecao.png differ diff --git a/img/dne_chamado.png b/img/dne_chamado.png new file mode 100644 index 0000000..1a274c6 Binary files /dev/null and b/img/dne_chamado.png differ diff --git a/img/dne_executar.png b/img/dne_executar.png new file mode 100644 index 0000000..da32565 Binary files /dev/null and b/img/dne_executar.png differ diff --git a/img/dne_finalizado_atualizacao.png b/img/dne_finalizado_atualizacao.png new file mode 100644 index 0000000..e8a5fc8 Binary files /dev/null and b/img/dne_finalizado_atualizacao.png differ diff --git a/img/dne_import_inicial.png b/img/dne_import_inicial.png new file mode 100644 index 0000000..db27b74 Binary files /dev/null and b/img/dne_import_inicial.png differ diff --git a/img/dne_logs_atualizacao.png b/img/dne_logs_atualizacao.png new file mode 100644 index 0000000..a2461d5 Binary files /dev/null and b/img/dne_logs_atualizacao.png differ diff --git a/img/dne_teste_conexao.png b/img/dne_teste_conexao.png new file mode 100644 index 0000000..e3b34c2 Binary files /dev/null and b/img/dne_teste_conexao.png differ diff --git a/img/dns_forwarder_config.png b/img/dns_forwarder_config.png new file mode 100644 index 0000000..6e6a9f5 Binary files /dev/null and b/img/dns_forwarder_config.png differ diff --git a/img/dns_forwarder_pfsense.png b/img/dns_forwarder_pfsense.png new file mode 100644 index 0000000..198330b Binary files /dev/null and b/img/dns_forwarder_pfsense.png differ diff --git a/img/dnsenable.png b/img/dnsenable.png new file mode 100644 index 0000000..b353cca Binary files /dev/null and b/img/dnsenable.png differ diff --git a/img/dnslan.png b/img/dnslan.png new file mode 100644 index 0000000..38c6a1f Binary files /dev/null and b/img/dnslan.png differ diff --git a/img/dominio-portal.PNG b/img/dominio-portal.PNG new file mode 100644 index 0000000..0cc34f4 Binary files /dev/null and b/img/dominio-portal.PNG differ diff --git a/img/dominio.PNG b/img/dominio.PNG new file mode 100644 index 0000000..cb7eb52 Binary files /dev/null and b/img/dominio.PNG differ diff --git a/img/dominio_fiscal.png b/img/dominio_fiscal.png new file mode 100644 index 0000000..e1ed266 Binary files /dev/null and b/img/dominio_fiscal.png differ diff --git a/img/dominionfse.png b/img/dominionfse.png new file mode 100644 index 0000000..91f1628 Binary files /dev/null and b/img/dominionfse.png differ diff --git a/img/dominioorigens.png b/img/dominioorigens.png new file mode 100644 index 0000000..abe4ad9 Binary files /dev/null and b/img/dominioorigens.png differ diff --git a/img/dominios_atendenet_apelido.png b/img/dominios_atendenet_apelido.png new file mode 100644 index 0000000..53abc4d Binary files /dev/null and b/img/dominios_atendenet_apelido.png differ diff --git a/img/dominios_atendenet_fiscal_s2.png b/img/dominios_atendenet_fiscal_s2.png new file mode 100644 index 0000000..a5a9b9d Binary files /dev/null and b/img/dominios_atendenet_fiscal_s2.png differ diff --git a/img/dominios_atendenet_gov_br.png b/img/dominios_atendenet_gov_br.png new file mode 100644 index 0000000..5809137 Binary files /dev/null and b/img/dominios_atendenet_gov_br.png differ diff --git a/img/dominios_atendenet_origens.png b/img/dominios_atendenet_origens.png new file mode 100644 index 0000000..a7db37d Binary files /dev/null and b/img/dominios_atendenet_origens.png differ diff --git a/img/dominios_atendenet_principal.png b/img/dominios_atendenet_principal.png new file mode 100644 index 0000000..cf4497b Binary files /dev/null and b/img/dominios_atendenet_principal.png differ diff --git a/img/dominios_atendenet_siafic.png b/img/dominios_atendenet_siafic.png new file mode 100644 index 0000000..7d5c205 Binary files /dev/null and b/img/dominios_atendenet_siafic.png differ diff --git a/img/dominios_atendenet_ws.png b/img/dominios_atendenet_ws.png new file mode 100644 index 0000000..11189f8 Binary files /dev/null and b/img/dominios_atendenet_ws.png differ diff --git a/img/dominiows.png b/img/dominiows.png new file mode 100644 index 0000000..129bf85 Binary files /dev/null and b/img/dominiows.png differ diff --git a/img/download_arquivo.png b/img/download_arquivo.png new file mode 100644 index 0000000..cda5662 Binary files /dev/null and b/img/download_arquivo.png differ diff --git a/img/email-release.PNG b/img/email-release.PNG new file mode 100644 index 0000000..0652101 Binary files /dev/null and b/img/email-release.PNG differ diff --git a/img/email-saude.PNG b/img/email-saude.PNG new file mode 100644 index 0000000..f96ab59 Binary files /dev/null and b/img/email-saude.PNG differ diff --git a/img/email.PNG b/img/email.PNG new file mode 100644 index 0000000..6b7bcdc Binary files /dev/null and b/img/email.PNG differ diff --git a/img/email_final1.PNG b/img/email_final1.PNG new file mode 100644 index 0000000..6d8f0bb Binary files /dev/null and b/img/email_final1.PNG differ diff --git a/img/email_final2.PNG b/img/email_final2.PNG new file mode 100644 index 0000000..44bba5d Binary files /dev/null and b/img/email_final2.PNG differ diff --git a/img/email_saude_publi_release.png b/img/email_saude_publi_release.png new file mode 100644 index 0000000..730da11 Binary files /dev/null and b/img/email_saude_publi_release.png differ diff --git a/img/enable_hosts_zabbix.png b/img/enable_hosts_zabbix.png new file mode 100644 index 0000000..275c2e5 Binary files /dev/null and b/img/enable_hosts_zabbix.png differ diff --git a/img/enviar_email_hash_validacao_dominio.png b/img/enviar_email_hash_validacao_dominio.png new file mode 100644 index 0000000..a5c88a8 Binary files /dev/null and b/img/enviar_email_hash_validacao_dominio.png differ diff --git a/img/erro-inicializa.PNG b/img/erro-inicializa.PNG new file mode 100644 index 0000000..5c157c2 Binary files /dev/null and b/img/erro-inicializa.PNG differ diff --git a/img/erro.PNG b/img/erro.PNG new file mode 100644 index 0000000..6181e56 Binary files /dev/null and b/img/erro.PNG differ diff --git a/img/exec_pacotes_migracao_cliente_novo.png b/img/exec_pacotes_migracao_cliente_novo.png new file mode 100644 index 0000000..5b90b8d Binary files /dev/null and b/img/exec_pacotes_migracao_cliente_novo.png differ diff --git a/img/exec_svn_migracao_cliente_novo.png b/img/exec_svn_migracao_cliente_novo.png new file mode 100644 index 0000000..e2cff7e Binary files /dev/null and b/img/exec_svn_migracao_cliente_novo.png differ diff --git a/img/executar.png b/img/executar.png new file mode 100644 index 0000000..8569a55 Binary files /dev/null and b/img/executar.png differ diff --git a/img/executar_copia_release_atendenet.png b/img/executar_copia_release_atendenet.png new file mode 100644 index 0000000..5f0e841 Binary files /dev/null and b/img/executar_copia_release_atendenet.png differ diff --git a/img/executar_svn_producao.png b/img/executar_svn_producao.png new file mode 100644 index 0000000..db862e7 Binary files /dev/null and b/img/executar_svn_producao.png differ diff --git a/img/exemplo_alteracao_agendamento.png b/img/exemplo_alteracao_agendamento.png new file mode 100644 index 0000000..945df09 Binary files /dev/null and b/img/exemplo_alteracao_agendamento.png differ diff --git a/img/exemplo_alteracao_agendamento_ativacao.png b/img/exemplo_alteracao_agendamento_ativacao.png new file mode 100644 index 0000000..0a4a69a Binary files /dev/null and b/img/exemplo_alteracao_agendamento_ativacao.png differ diff --git a/img/exemplo_alteracao_agendamento_ativacao2.png b/img/exemplo_alteracao_agendamento_ativacao2.png new file mode 100644 index 0000000..4631e7d Binary files /dev/null and b/img/exemplo_alteracao_agendamento_ativacao2.png differ diff --git a/img/exemplo_alteracao_agendamento_ativacao3.png b/img/exemplo_alteracao_agendamento_ativacao3.png new file mode 100644 index 0000000..7aa4248 Binary files /dev/null and b/img/exemplo_alteracao_agendamento_ativacao3.png differ diff --git a/img/exemplo_alteracao_agendamento_ativacao4.png b/img/exemplo_alteracao_agendamento_ativacao4.png new file mode 100644 index 0000000..456e4a1 Binary files /dev/null and b/img/exemplo_alteracao_agendamento_ativacao4.png differ diff --git a/img/exemplo_cadastro_dominio.png b/img/exemplo_cadastro_dominio.png new file mode 100644 index 0000000..e275359 Binary files /dev/null and b/img/exemplo_cadastro_dominio.png differ diff --git a/img/exemplo_cadastro_gdt.png b/img/exemplo_cadastro_gdt.png new file mode 100644 index 0000000..2b0bd4a Binary files /dev/null and b/img/exemplo_cadastro_gdt.png differ diff --git a/img/exemplo_gdc_corbelia.jpg b/img/exemplo_gdc_corbelia.jpg new file mode 100644 index 0000000..e779f17 Binary files /dev/null and b/img/exemplo_gdc_corbelia.jpg differ diff --git a/img/exemplo_renomear_database_transferir.png b/img/exemplo_renomear_database_transferir.png new file mode 100644 index 0000000..5892115 Binary files /dev/null and b/img/exemplo_renomear_database_transferir.png differ diff --git a/img/exemplo_revisao_svn.png b/img/exemplo_revisao_svn.png new file mode 100644 index 0000000..b43f186 Binary files /dev/null and b/img/exemplo_revisao_svn.png differ diff --git a/img/exlcuir_database_slony.png b/img/exlcuir_database_slony.png new file mode 100644 index 0000000..77073e4 Binary files /dev/null and b/img/exlcuir_database_slony.png differ diff --git a/img/expandir_elasticsearch_gtt.png b/img/expandir_elasticsearch_gtt.png new file mode 100644 index 0000000..46481c5 Binary files /dev/null and b/img/expandir_elasticsearch_gtt.png differ diff --git a/img/expandir_elasticsearch_gtt1.png b/img/expandir_elasticsearch_gtt1.png new file mode 100644 index 0000000..b3b0f92 Binary files /dev/null and b/img/expandir_elasticsearch_gtt1.png differ diff --git a/img/expandir_elasticsearch_gtt2.png b/img/expandir_elasticsearch_gtt2.png new file mode 100644 index 0000000..c95cf67 Binary files /dev/null and b/img/expandir_elasticsearch_gtt2.png differ diff --git a/img/expandir_elasticsearch_gtt3.png b/img/expandir_elasticsearch_gtt3.png new file mode 100644 index 0000000..f1aa781 Binary files /dev/null and b/img/expandir_elasticsearch_gtt3.png differ diff --git a/img/extrair_arquivo_dne.png b/img/extrair_arquivo_dne.png new file mode 100644 index 0000000..4300159 Binary files /dev/null and b/img/extrair_arquivo_dne.png differ diff --git a/img/fechamento.png b/img/fechamento.png new file mode 100644 index 0000000..f0f872c Binary files /dev/null and b/img/fechamento.png differ diff --git a/img/firewall_aliases_ip.png b/img/firewall_aliases_ip.png new file mode 100644 index 0000000..09e0c84 Binary files /dev/null and b/img/firewall_aliases_ip.png differ diff --git a/img/firewall_edit_settings.png b/img/firewall_edit_settings.png new file mode 100644 index 0000000..b070f70 Binary files /dev/null and b/img/firewall_edit_settings.png differ diff --git a/img/firewall_edit_settings2.png b/img/firewall_edit_settings2.png new file mode 100644 index 0000000..cee941b Binary files /dev/null and b/img/firewall_edit_settings2.png differ diff --git a/img/firewall_edit_settings3.png b/img/firewall_edit_settings3.png new file mode 100644 index 0000000..2acb7de Binary files /dev/null and b/img/firewall_edit_settings3.png differ diff --git a/img/firewall_edit_settings4.png b/img/firewall_edit_settings4.png new file mode 100644 index 0000000..7136401 Binary files /dev/null and b/img/firewall_edit_settings4.png differ diff --git a/img/firewall_edit_settings5.png b/img/firewall_edit_settings5.png new file mode 100644 index 0000000..24e2a82 Binary files /dev/null and b/img/firewall_edit_settings5.png differ diff --git a/img/firewall_edit_settings6.png b/img/firewall_edit_settings6.png new file mode 100644 index 0000000..acbb277 Binary files /dev/null and b/img/firewall_edit_settings6.png differ diff --git a/img/firewall_edit_settings7.png b/img/firewall_edit_settings7.png new file mode 100644 index 0000000..e282ef2 Binary files /dev/null and b/img/firewall_edit_settings7.png differ diff --git a/img/gdt.png b/img/gdt.png new file mode 100644 index 0000000..bffe059 Binary files /dev/null and b/img/gdt.png differ diff --git a/img/generalsetup.png b/img/generalsetup.png new file mode 100644 index 0000000..86b5419 Binary files /dev/null and b/img/generalsetup.png differ diff --git a/img/grupo-saude.PNG b/img/grupo-saude.PNG new file mode 100644 index 0000000..931e28e Binary files /dev/null and b/img/grupo-saude.PNG differ diff --git a/img/grupo.PNG b/img/grupo.PNG new file mode 100644 index 0000000..0ae2c4d Binary files /dev/null and b/img/grupo.PNG differ diff --git a/img/gtt_agente_status.png b/img/gtt_agente_status.png new file mode 100644 index 0000000..0df0c69 Binary files /dev/null and b/img/gtt_agente_status.png differ diff --git a/img/gtt_cadastrar_usuario.png b/img/gtt_cadastrar_usuario.png new file mode 100644 index 0000000..e4659d3 Binary files /dev/null and b/img/gtt_cadastrar_usuario.png differ diff --git a/img/gtt_config_zabbix_agent.png b/img/gtt_config_zabbix_agent.png new file mode 100644 index 0000000..a8b633e Binary files /dev/null and b/img/gtt_config_zabbix_agent.png differ diff --git a/img/gtt_config_zabbix_server_host_group.png b/img/gtt_config_zabbix_server_host_group.png new file mode 100644 index 0000000..d0d8f8e Binary files /dev/null and b/img/gtt_config_zabbix_server_host_group.png differ diff --git a/img/gtt_config_zabbix_server_host_groups.png b/img/gtt_config_zabbix_server_host_groups.png new file mode 100644 index 0000000..6e7c4a1 Binary files /dev/null and b/img/gtt_config_zabbix_server_host_groups.png differ diff --git a/img/gtt_config_zabbix_server_select_hosts.png b/img/gtt_config_zabbix_server_select_hosts.png new file mode 100644 index 0000000..d36aa33 Binary files /dev/null and b/img/gtt_config_zabbix_server_select_hosts.png differ diff --git a/img/gtt_config_zabbix_server_select_hosts02.png b/img/gtt_config_zabbix_server_select_hosts02.png new file mode 100644 index 0000000..6d25e55 Binary files /dev/null and b/img/gtt_config_zabbix_server_select_hosts02.png differ diff --git a/img/gtt_config_zabbix_server_user_groups.png b/img/gtt_config_zabbix_server_user_groups.png new file mode 100644 index 0000000..8fda212 Binary files /dev/null and b/img/gtt_config_zabbix_server_user_groups.png differ diff --git a/img/gtt_config_zabbix_server_users.png b/img/gtt_config_zabbix_server_users.png new file mode 100644 index 0000000..bb260e8 Binary files /dev/null and b/img/gtt_config_zabbix_server_users.png differ diff --git a/img/gtt_config_zabbix_server_users_hosts.png b/img/gtt_config_zabbix_server_users_hosts.png new file mode 100644 index 0000000..a13a2e5 Binary files /dev/null and b/img/gtt_config_zabbix_server_users_hosts.png differ diff --git a/img/gtt_dashboard.png b/img/gtt_dashboard.png new file mode 100644 index 0000000..4c0735f Binary files /dev/null and b/img/gtt_dashboard.png differ diff --git a/img/gtt_sgdb_cadastro.png b/img/gtt_sgdb_cadastro.png new file mode 100644 index 0000000..789bcd8 Binary files /dev/null and b/img/gtt_sgdb_cadastro.png differ diff --git a/img/gtt_sgdb_cadastro_instancia.png b/img/gtt_sgdb_cadastro_instancia.png new file mode 100644 index 0000000..f702c74 Binary files /dev/null and b/img/gtt_sgdb_cadastro_instancia.png differ diff --git a/img/gtt_sgdb_cadastro_rede.png b/img/gtt_sgdb_cadastro_rede.png new file mode 100644 index 0000000..b0628fe Binary files /dev/null and b/img/gtt_sgdb_cadastro_rede.png differ diff --git a/img/gtt_sgdb_cadastro_user.png b/img/gtt_sgdb_cadastro_user.png new file mode 100644 index 0000000..c347f33 Binary files /dev/null and b/img/gtt_sgdb_cadastro_user.png differ diff --git a/img/gtt_usuario_equipamentos.png b/img/gtt_usuario_equipamentos.png new file mode 100644 index 0000000..36005c2 Binary files /dev/null and b/img/gtt_usuario_equipamentos.png differ diff --git a/img/gtt_usuario_instancia.png b/img/gtt_usuario_instancia.png new file mode 100644 index 0000000..f5155ca Binary files /dev/null and b/img/gtt_usuario_instancia.png differ diff --git a/img/gtt_usuario_liberacao.png b/img/gtt_usuario_liberacao.png new file mode 100644 index 0000000..240dd1a Binary files /dev/null and b/img/gtt_usuario_liberacao.png differ diff --git a/img/hash_git_commit.png b/img/hash_git_commit.png new file mode 100644 index 0000000..f2426a7 Binary files /dev/null and b/img/hash_git_commit.png differ diff --git a/img/hibrid.png b/img/hibrid.png new file mode 100644 index 0000000..de3e7e1 Binary files /dev/null and b/img/hibrid.png differ diff --git a/img/host_overrides.png b/img/host_overrides.png new file mode 100644 index 0000000..dea22e6 Binary files /dev/null and b/img/host_overrides.png differ diff --git a/img/hostoverrides.png b/img/hostoverrides.png new file mode 100644 index 0000000..85f5aaa Binary files /dev/null and b/img/hostoverrides.png differ diff --git a/img/impressao_relatorio_teste.png b/img/impressao_relatorio_teste.png new file mode 100644 index 0000000..ba0080b Binary files /dev/null and b/img/impressao_relatorio_teste.png differ diff --git a/img/impressao_relatorio_teste2.png b/img/impressao_relatorio_teste2.png new file mode 100644 index 0000000..3044eea Binary files /dev/null and b/img/impressao_relatorio_teste2.png differ diff --git a/img/inicializadb_exec_migracao2.png b/img/inicializadb_exec_migracao2.png new file mode 100644 index 0000000..7e9d0b9 Binary files /dev/null and b/img/inicializadb_exec_migracao2.png differ diff --git a/img/int_rt_interface_config.png b/img/int_rt_interface_config.png new file mode 100644 index 0000000..c0e6a0b Binary files /dev/null and b/img/int_rt_interface_config.png differ diff --git a/img/ipm-properties.PNG b/img/ipm-properties.PNG new file mode 100644 index 0000000..f866f1b Binary files /dev/null and b/img/ipm-properties.PNG differ diff --git a/img/ipmadminbd_liberacao_1.png b/img/ipmadminbd_liberacao_1.png new file mode 100644 index 0000000..0072647 Binary files /dev/null and b/img/ipmadminbd_liberacao_1.png differ diff --git a/img/ipmadminbd_liberacao_2.png b/img/ipmadminbd_liberacao_2.png new file mode 100644 index 0000000..79bd496 Binary files /dev/null and b/img/ipmadminbd_liberacao_2.png differ diff --git a/img/ipmadminbd_liberacao_3.png b/img/ipmadminbd_liberacao_3.png new file mode 100644 index 0000000..4a154f6 Binary files /dev/null and b/img/ipmadminbd_liberacao_3.png differ diff --git a/img/ipmadminbd_liberacao_4.png b/img/ipmadminbd_liberacao_4.png new file mode 100644 index 0000000..6a53cf2 Binary files /dev/null and b/img/ipmadminbd_liberacao_4.png differ diff --git a/img/libera_porta_firewall_replicacao.png b/img/libera_porta_firewall_replicacao.png new file mode 100644 index 0000000..7df8b57 Binary files /dev/null and b/img/libera_porta_firewall_replicacao.png differ diff --git a/img/libera_porta_firewall_replicacao_nativa.png b/img/libera_porta_firewall_replicacao_nativa.png new file mode 100644 index 0000000..6c75dbe Binary files /dev/null and b/img/libera_porta_firewall_replicacao_nativa.png differ diff --git a/img/liberacao-saude.PNG b/img/liberacao-saude.PNG new file mode 100644 index 0000000..b42ac9b Binary files /dev/null and b/img/liberacao-saude.PNG differ diff --git a/img/liberacao.png b/img/liberacao.png new file mode 100644 index 0000000..10b8a28 Binary files /dev/null and b/img/liberacao.png differ diff --git a/img/localizar-dominio.PNG b/img/localizar-dominio.PNG new file mode 100644 index 0000000..4692124 Binary files /dev/null and b/img/localizar-dominio.PNG differ diff --git a/img/log.png b/img/log.png new file mode 100644 index 0000000..3c1da60 Binary files /dev/null and b/img/log.png differ diff --git a/img/login_gdt.PNG b/img/login_gdt.PNG new file mode 100644 index 0000000..17e4739 Binary files /dev/null and b/img/login_gdt.PNG differ diff --git a/img/login_sc.PNG b/img/login_sc.PNG new file mode 100644 index 0000000..770c1c1 Binary files /dev/null and b/img/login_sc.PNG differ diff --git a/img/login_svn.PNG b/img/login_svn.PNG new file mode 100644 index 0000000..36b37a8 Binary files /dev/null and b/img/login_svn.PNG differ diff --git a/img/logs_apache_ajaxprevent.png b/img/logs_apache_ajaxprevent.png new file mode 100644 index 0000000..82876d8 Binary files /dev/null and b/img/logs_apache_ajaxprevent.png differ diff --git a/img/mappings.png b/img/mappings.png new file mode 100644 index 0000000..af9cc69 Binary files /dev/null and b/img/mappings.png differ diff --git a/img/meetingurl_microservicos.jpg b/img/meetingurl_microservicos.jpg new file mode 100644 index 0000000..976d7d5 Binary files /dev/null and b/img/meetingurl_microservicos.jpg differ diff --git a/img/menu.png b/img/menu.png new file mode 100644 index 0000000..b07a9e8 Binary files /dev/null and b/img/menu.png differ diff --git a/img/mics_praca_atendimento.png b/img/mics_praca_atendimento.png new file mode 100644 index 0000000..e03e8b5 Binary files /dev/null and b/img/mics_praca_atendimento.png differ diff --git a/img/mics_scraper.png b/img/mics_scraper.png new file mode 100644 index 0000000..70289ae Binary files /dev/null and b/img/mics_scraper.png differ diff --git a/img/migrate_storage_archived.png b/img/migrate_storage_archived.png new file mode 100644 index 0000000..7103e6e Binary files /dev/null and b/img/migrate_storage_archived.png differ diff --git a/img/migrate_storage_archived2.png b/img/migrate_storage_archived2.png new file mode 100644 index 0000000..702723d Binary files /dev/null and b/img/migrate_storage_archived2.png differ diff --git a/img/migrate_storage_archived3.png b/img/migrate_storage_archived3.png new file mode 100644 index 0000000..58b0b9e Binary files /dev/null and b/img/migrate_storage_archived3.png differ diff --git a/img/migrate_storage_archived4.png b/img/migrate_storage_archived4.png new file mode 100644 index 0000000..56fae98 Binary files /dev/null and b/img/migrate_storage_archived4.png differ diff --git a/img/nat.png b/img/nat.png new file mode 100644 index 0000000..9af8223 Binary files /dev/null and b/img/nat.png differ diff --git a/img/nat_cookipt_pfsense_saude.png b/img/nat_cookipt_pfsense_saude.png new file mode 100644 index 0000000..268ef5d Binary files /dev/null and b/img/nat_cookipt_pfsense_saude.png differ diff --git a/img/nat_saude_pfsense.png b/img/nat_saude_pfsense.png new file mode 100644 index 0000000..6c30fbc Binary files /dev/null and b/img/nat_saude_pfsense.png differ diff --git a/img/nat_ssh_pfsense_saude.png b/img/nat_ssh_pfsense_saude.png new file mode 100644 index 0000000..f5ccf96 Binary files /dev/null and b/img/nat_ssh_pfsense_saude.png differ diff --git a/img/natwebservice.png b/img/natwebservice.png new file mode 100644 index 0000000..5c7500c Binary files /dev/null and b/img/natwebservice.png differ diff --git a/img/nivel_maximo_de_seuranca.png b/img/nivel_maximo_de_seuranca.png new file mode 100644 index 0000000..e98c878 Binary files /dev/null and b/img/nivel_maximo_de_seuranca.png differ diff --git a/img/normal_reboot_pfsense.png b/img/normal_reboot_pfsense.png new file mode 100644 index 0000000..7273fca Binary files /dev/null and b/img/normal_reboot_pfsense.png differ diff --git a/img/notepad.PNG b/img/notepad.PNG new file mode 100644 index 0000000..d394f07 Binary files /dev/null and b/img/notepad.PNG differ diff --git a/img/omm_killer_cliente.png b/img/omm_killer_cliente.png new file mode 100644 index 0000000..b3757cf Binary files /dev/null and b/img/omm_killer_cliente.png differ diff --git a/img/ospf.png b/img/ospf.png new file mode 100644 index 0000000..865e90f Binary files /dev/null and b/img/ospf.png differ diff --git a/img/pa3220_virtual_routers_ospf_export_pr01.png b/img/pa3220_virtual_routers_ospf_export_pr01.png new file mode 100644 index 0000000..16d3d1a Binary files /dev/null and b/img/pa3220_virtual_routers_ospf_export_pr01.png differ diff --git a/img/pa3220_virtual_routers_ospf_export_sp01.png b/img/pa3220_virtual_routers_ospf_export_sp01.png new file mode 100644 index 0000000..66a4382 Binary files /dev/null and b/img/pa3220_virtual_routers_ospf_export_sp01.png differ diff --git a/img/pacote.PNG b/img/pacote.PNG new file mode 100644 index 0000000..a972a9f Binary files /dev/null and b/img/pacote.PNG differ diff --git a/img/pegar_hash_git.png b/img/pegar_hash_git.png new file mode 100644 index 0000000..9257516 Binary files /dev/null and b/img/pegar_hash_git.png differ diff --git a/img/pegar_hash_git_saude.png b/img/pegar_hash_git_saude.png new file mode 100644 index 0000000..8f0771d Binary files /dev/null and b/img/pegar_hash_git_saude.png differ diff --git a/img/perfis_usuario_gtt.png b/img/perfis_usuario_gtt.png new file mode 100644 index 0000000..4102341 Binary files /dev/null and b/img/perfis_usuario_gtt.png differ diff --git a/img/pfsense-advanced-ssh.png b/img/pfsense-advanced-ssh.png new file mode 100644 index 0000000..5ff6148 Binary files /dev/null and b/img/pfsense-advanced-ssh.png differ diff --git a/img/pfsense-dns-forwarder-domains.png b/img/pfsense-dns-forwarder-domains.png new file mode 100644 index 0000000..179ae6c Binary files /dev/null and b/img/pfsense-dns-forwarder-domains.png differ diff --git a/img/pfsense-dns-forwarder.png b/img/pfsense-dns-forwarder.png new file mode 100644 index 0000000..3839617 Binary files /dev/null and b/img/pfsense-dns-forwarder.png differ diff --git a/img/pfsense-hostname.png b/img/pfsense-hostname.png new file mode 100644 index 0000000..4db456f Binary files /dev/null and b/img/pfsense-hostname.png differ diff --git a/img/pfsense-nat.png b/img/pfsense-nat.png new file mode 100644 index 0000000..2638d2d Binary files /dev/null and b/img/pfsense-nat.png differ diff --git a/img/pfsense-rules-int-rt.png b/img/pfsense-rules-int-rt.png new file mode 100644 index 0000000..a2ead44 Binary files /dev/null and b/img/pfsense-rules-int-rt.png differ diff --git a/img/pfsense-rules-lan.png b/img/pfsense-rules-lan.png new file mode 100644 index 0000000..0220683 Binary files /dev/null and b/img/pfsense-rules-lan.png differ diff --git a/img/pfsense-zabbix-agent.png b/img/pfsense-zabbix-agent.png new file mode 100644 index 0000000..52a9232 Binary files /dev/null and b/img/pfsense-zabbix-agent.png differ diff --git a/img/pfsense_alias_ports.png b/img/pfsense_alias_ports.png new file mode 100644 index 0000000..1a885a9 Binary files /dev/null and b/img/pfsense_alias_ports.png differ diff --git a/img/pfsense_alias_ports2.png b/img/pfsense_alias_ports2.png new file mode 100644 index 0000000..dd2f00a Binary files /dev/null and b/img/pfsense_alias_ports2.png differ diff --git a/img/pfsense_login.png b/img/pfsense_login.png new file mode 100644 index 0000000..0d9fd0b Binary files /dev/null and b/img/pfsense_login.png differ diff --git a/img/poweron_apache.png b/img/poweron_apache.png new file mode 100644 index 0000000..2ba28e9 Binary files /dev/null and b/img/poweron_apache.png differ diff --git a/img/prorrogacao_boaspraticas.jpg b/img/prorrogacao_boaspraticas.jpg new file mode 100644 index 0000000..901a960 Binary files /dev/null and b/img/prorrogacao_boaspraticas.jpg differ diff --git a/img/publi_git_saude.png b/img/publi_git_saude.png new file mode 100644 index 0000000..46e0ec7 Binary files /dev/null and b/img/publi_git_saude.png differ diff --git a/img/publicacao-saude.png b/img/publicacao-saude.png new file mode 100644 index 0000000..ef8fcb7 Binary files /dev/null and b/img/publicacao-saude.png differ diff --git a/img/publicando.png b/img/publicando.png new file mode 100644 index 0000000..4842785 Binary files /dev/null and b/img/publicando.png differ diff --git a/img/publicando_saude_git.png b/img/publicando_saude_git.png new file mode 100644 index 0000000..52403a9 Binary files /dev/null and b/img/publicando_saude_git.png differ diff --git a/img/publicando_saude_git_ok.png b/img/publicando_saude_git_ok.png new file mode 100644 index 0000000..c663886 Binary files /dev/null and b/img/publicando_saude_git_ok.png differ diff --git a/img/publicar_dicionario_ipmsaude_svn.png b/img/publicar_dicionario_ipmsaude_svn.png new file mode 100644 index 0000000..a37e8eb Binary files /dev/null and b/img/publicar_dicionario_ipmsaude_svn.png differ diff --git a/img/publicar_git.png b/img/publicar_git.png new file mode 100644 index 0000000..7b33b20 Binary files /dev/null and b/img/publicar_git.png differ diff --git a/img/publicar_git_buscando_lista.png b/img/publicar_git_buscando_lista.png new file mode 100644 index 0000000..12790f2 Binary files /dev/null and b/img/publicar_git_buscando_lista.png differ diff --git a/img/publicar_git_clicar_nao.png b/img/publicar_git_clicar_nao.png new file mode 100644 index 0000000..00f209a Binary files /dev/null and b/img/publicar_git_clicar_nao.png differ diff --git a/img/publicar_git_confirmar_commit.png b/img/publicar_git_confirmar_commit.png new file mode 100644 index 0000000..5f8c95f Binary files /dev/null and b/img/publicar_git_confirmar_commit.png differ diff --git a/img/publicar_git_confirmar_commit2.png b/img/publicar_git_confirmar_commit2.png new file mode 100644 index 0000000..c46639f Binary files /dev/null and b/img/publicar_git_confirmar_commit2.png differ diff --git a/img/publicar_git_mensagem_ok.png b/img/publicar_git_mensagem_ok.png new file mode 100644 index 0000000..a3ab2bd Binary files /dev/null and b/img/publicar_git_mensagem_ok.png differ diff --git a/img/reboot.png b/img/reboot.png new file mode 100644 index 0000000..83407d6 Binary files /dev/null and b/img/reboot.png differ diff --git a/img/recaptcha.png b/img/recaptcha.png new file mode 100644 index 0000000..53847ab Binary files /dev/null and b/img/recaptcha.png differ diff --git a/img/recaptcha_fiscal_s2.png b/img/recaptcha_fiscal_s2.png new file mode 100644 index 0000000..82d240f Binary files /dev/null and b/img/recaptcha_fiscal_s2.png differ diff --git a/img/registrar.PNG b/img/registrar.PNG new file mode 100644 index 0000000..fd44c30 Binary files /dev/null and b/img/registrar.PNG differ diff --git a/img/registrar_publicacao_svn_git.png b/img/registrar_publicacao_svn_git.png new file mode 100644 index 0000000..1fe097e Binary files /dev/null and b/img/registrar_publicacao_svn_git.png differ diff --git a/img/registrar_publicacao_svn_git_saude.png b/img/registrar_publicacao_svn_git_saude.png new file mode 100644 index 0000000..b11e6bf Binary files /dev/null and b/img/registrar_publicacao_svn_git_saude.png differ diff --git a/img/regra_lan_replicacao.png b/img/regra_lan_replicacao.png new file mode 100644 index 0000000..457615e Binary files /dev/null and b/img/regra_lan_replicacao.png differ diff --git a/img/reiniciar_servico_proxy.png b/img/reiniciar_servico_proxy.png new file mode 100644 index 0000000..55780a0 Binary files /dev/null and b/img/reiniciar_servico_proxy.png differ diff --git a/img/remocao_environment_portainer.png b/img/remocao_environment_portainer.png new file mode 100644 index 0000000..2beea7d Binary files /dev/null and b/img/remocao_environment_portainer.png differ diff --git a/img/remocao_msd03_planilha.png b/img/remocao_msd03_planilha.png new file mode 100644 index 0000000..2629f72 Binary files /dev/null and b/img/remocao_msd03_planilha.png differ diff --git a/img/remocao_msd03_planilha1.png b/img/remocao_msd03_planilha1.png new file mode 100644 index 0000000..5d617f3 Binary files /dev/null and b/img/remocao_msd03_planilha1.png differ diff --git a/img/remocao_msd_dns_forwarder.png b/img/remocao_msd_dns_forwarder.png new file mode 100644 index 0000000..c1dbb07 Binary files /dev/null and b/img/remocao_msd_dns_forwarder.png differ diff --git a/img/remocao_ocr_portainer.png b/img/remocao_ocr_portainer.png new file mode 100644 index 0000000..e0b4f34 Binary files /dev/null and b/img/remocao_ocr_portainer.png differ diff --git a/img/remover_vm_zabbix.png b/img/remover_vm_zabbix.png new file mode 100644 index 0000000..134e46b Binary files /dev/null and b/img/remover_vm_zabbix.png differ diff --git a/img/remover_vm_zabbix1.png b/img/remover_vm_zabbix1.png new file mode 100644 index 0000000..9643e74 Binary files /dev/null and b/img/remover_vm_zabbix1.png differ diff --git a/img/revisao_gdt.PNG b/img/revisao_gdt.PNG new file mode 100644 index 0000000..07f2ac8 Binary files /dev/null and b/img/revisao_gdt.PNG differ diff --git a/img/revisao_svn.PNG b/img/revisao_svn.PNG new file mode 100644 index 0000000..c1b956b Binary files /dev/null and b/img/revisao_svn.PNG differ diff --git a/img/rules_lan_replicacao.png b/img/rules_lan_replicacao.png new file mode 100644 index 0000000..437dfed Binary files /dev/null and b/img/rules_lan_replicacao.png differ diff --git a/img/rules_wan.png b/img/rules_wan.png new file mode 100644 index 0000000..924b19b Binary files /dev/null and b/img/rules_wan.png differ diff --git a/img/sair_login.PNG b/img/sair_login.PNG new file mode 100644 index 0000000..6119c77 Binary files /dev/null and b/img/sair_login.PNG differ diff --git a/img/servico_analytics.png b/img/servico_analytics.png new file mode 100644 index 0000000..8c1a4a7 Binary files /dev/null and b/img/servico_analytics.png differ diff --git a/img/servico_zabbix_proxy.png b/img/servico_zabbix_proxy.png new file mode 100644 index 0000000..2552e93 Binary files /dev/null and b/img/servico_zabbix_proxy.png differ diff --git a/img/shutdown_vm_vsphere.png b/img/shutdown_vm_vsphere.png new file mode 100644 index 0000000..7d835ad Binary files /dev/null and b/img/shutdown_vm_vsphere.png differ diff --git a/img/shutdown_vm_vsphere1.png b/img/shutdown_vm_vsphere1.png new file mode 100644 index 0000000..2143367 Binary files /dev/null and b/img/shutdown_vm_vsphere1.png differ diff --git a/img/simular-saude.PNG b/img/simular-saude.PNG new file mode 100644 index 0000000..fd4dd22 Binary files /dev/null and b/img/simular-saude.PNG differ diff --git a/img/simular-saude2.PNG b/img/simular-saude2.PNG new file mode 100644 index 0000000..51493cf Binary files /dev/null and b/img/simular-saude2.PNG differ diff --git a/img/simular.PNG b/img/simular.PNG new file mode 100644 index 0000000..9e685b0 Binary files /dev/null and b/img/simular.PNG differ diff --git a/img/site_arquivos_atualizacao.png b/img/site_arquivos_atualizacao.png new file mode 100644 index 0000000..28f8eaa Binary files /dev/null and b/img/site_arquivos_atualizacao.png differ diff --git a/img/site_correios.png b/img/site_correios.png new file mode 100644 index 0000000..a4388c2 Binary files /dev/null and b/img/site_correios.png differ diff --git a/img/solicitacao_gerente.PNG b/img/solicitacao_gerente.PNG new file mode 100644 index 0000000..f7c2a6e Binary files /dev/null and b/img/solicitacao_gerente.PNG differ diff --git a/img/solicitacao_informacao.PNG b/img/solicitacao_informacao.PNG new file mode 100644 index 0000000..00affe9 Binary files /dev/null and b/img/solicitacao_informacao.PNG differ diff --git a/img/solicitacao_prioridade.PNG b/img/solicitacao_prioridade.PNG new file mode 100644 index 0000000..cae5043 Binary files /dev/null and b/img/solicitacao_prioridade.PNG differ diff --git a/img/ssh.png b/img/ssh.png new file mode 100644 index 0000000..32cd083 Binary files /dev/null and b/img/ssh.png differ diff --git a/img/status_gdt.PNG b/img/status_gdt.PNG new file mode 100644 index 0000000..6091aa4 Binary files /dev/null and b/img/status_gdt.PNG differ diff --git a/img/stop_stack_elasticsearch.png b/img/stop_stack_elasticsearch.png new file mode 100644 index 0000000..1a521d6 Binary files /dev/null and b/img/stop_stack_elasticsearch.png differ diff --git a/img/tamanho_base.PNG b/img/tamanho_base.PNG new file mode 100644 index 0000000..b4e9917 Binary files /dev/null and b/img/tamanho_base.PNG differ diff --git a/img/tamanho_expurgo.PNG b/img/tamanho_expurgo.PNG new file mode 100644 index 0000000..8c3fe43 Binary files /dev/null and b/img/tamanho_expurgo.PNG differ diff --git a/img/tamanho_indice.PNG b/img/tamanho_indice.PNG new file mode 100644 index 0000000..e351082 Binary files /dev/null and b/img/tamanho_indice.PNG differ diff --git a/img/tela_finalizacao_copia.png b/img/tela_finalizacao_copia.png new file mode 100644 index 0000000..4cc797f Binary files /dev/null and b/img/tela_finalizacao_copia.png differ diff --git a/img/testar1.png b/img/testar1.png new file mode 100644 index 0000000..25b7087 Binary files /dev/null and b/img/testar1.png differ diff --git a/img/testar2.png b/img/testar2.png new file mode 100644 index 0000000..5c90267 Binary files /dev/null and b/img/testar2.png differ diff --git a/img/usermanager.png b/img/usermanager.png new file mode 100644 index 0000000..b29d577 Binary files /dev/null and b/img/usermanager.png differ diff --git a/img/variables_stack_elasticsearch.png b/img/variables_stack_elasticsearch.png new file mode 100644 index 0000000..996290a Binary files /dev/null and b/img/variables_stack_elasticsearch.png differ diff --git a/img/virtual_ip_pfsense.png b/img/virtual_ip_pfsense.png new file mode 100644 index 0000000..de32cd8 Binary files /dev/null and b/img/virtual_ip_pfsense.png differ diff --git a/img/vlan_interface_wan_config.png b/img/vlan_interface_wan_config.png new file mode 100644 index 0000000..cc3f149 Binary files /dev/null and b/img/vlan_interface_wan_config.png differ diff --git a/img/volumes_docker_portainer.png b/img/volumes_docker_portainer.png new file mode 100644 index 0000000..4aa762c Binary files /dev/null and b/img/volumes_docker_portainer.png differ diff --git a/img/volumes_docker_unused_portainer.png b/img/volumes_docker_unused_portainer.png new file mode 100644 index 0000000..e8aca35 Binary files /dev/null and b/img/volumes_docker_unused_portainer.png differ diff --git a/img/wan_interface_config.png b/img/wan_interface_config.png new file mode 100644 index 0000000..9f321fe Binary files /dev/null and b/img/wan_interface_config.png differ diff --git a/img/zabbix_ambiente_slave.png b/img/zabbix_ambiente_slave.png new file mode 100644 index 0000000..f6cf135 Binary files /dev/null and b/img/zabbix_ambiente_slave.png differ diff --git a/img/zabbix_service_pfsense.png b/img/zabbix_service_pfsense.png new file mode 100644 index 0000000..c35fc21 Binary files /dev/null and b/img/zabbix_service_pfsense.png differ diff --git a/img/zabbixagent.png b/img/zabbixagent.png new file mode 100644 index 0000000..48e44a2 Binary files /dev/null and b/img/zabbixagent.png differ diff --git a/img/zabbixproxy.png b/img/zabbixproxy.png new file mode 100644 index 0000000..159a297 Binary files /dev/null and b/img/zabbixproxy.png differ diff --git a/img/zbx_add_user_group.png b/img/zbx_add_user_group.png new file mode 100644 index 0000000..bad4a48 Binary files /dev/null and b/img/zbx_add_user_group.png differ diff --git a/img/zbx_add_user_group_add.png b/img/zbx_add_user_group_add.png new file mode 100644 index 0000000..8be44bf Binary files /dev/null and b/img/zbx_add_user_group_add.png differ diff --git a/img/zbx_add_user_group_permissions.png b/img/zbx_add_user_group_permissions.png new file mode 100644 index 0000000..c76a59f Binary files /dev/null and b/img/zbx_add_user_group_permissions.png differ diff --git a/img/zbx_add_user_permissions.png b/img/zbx_add_user_permissions.png new file mode 100644 index 0000000..b2fc2b1 Binary files /dev/null and b/img/zbx_add_user_permissions.png differ diff --git a/img/zbx_create_user.png b/img/zbx_create_user.png new file mode 100644 index 0000000..a6c767b Binary files /dev/null and b/img/zbx_create_user.png differ diff --git a/img/zbx_host_hostid.png b/img/zbx_host_hostid.png new file mode 100644 index 0000000..a816f8e Binary files /dev/null and b/img/zbx_host_hostid.png differ diff --git a/img/zbx_user_group_usrgrpid.png b/img/zbx_user_group_usrgrpid.png new file mode 100644 index 0000000..2f032c5 Binary files /dev/null and b/img/zbx_user_group_usrgrpid.png differ diff --git a/img/zbx_user_userid.png b/img/zbx_user_userid.png new file mode 100644 index 0000000..192a37c Binary files /dev/null and b/img/zbx_user_userid.png differ