Skip to content

Instalação do e-SUS em ambiente docker linux com arquivo jar

Notifications You must be signed in to change notification settings

filiperochalopes/e-SUS-PEC

Repository files navigation

eSUS PEC

Compatível e testado com
version version version version

É um sistema bastante utilizado por profissionais de saúde da Atenção Básica para registros de pacientes e dados de saúde. Esse repositório se propõe a criar uma estrutura docker com linux para viabilizar o deploy do sistema em qualquer ambiente que tenha docker e facilitar a instalação e atualização do sistema e-SUS PEC

Instalação TD;LR

Baixe o jar da aplicação e execute o script de instalação para um banco de dados novo, use o argumento -t se quiser que a versão instalada seja de treinamento:

wget https://https://arquivos.esusab.ufsc.br/PEC/c0d1d77e70c98177/5.2.38/eSUS-AB-PEC-5.2.38-Linux64.jar
sh build.sh -f eSUS-AB-PEC-5.2.38-Linux64.jar

Para execução com banco de dados externo:

  1. Configure as variáveis de ambiente disponíveis em .env.external-db.example colando em .env.external-db
sh build.sh -e

Acesse Live/Demo Dúvidas? Colaboração? Ideias? Entre em contato pelo WhatsApp

Sumário

  1. Alinhando conhecimentos
  2. Preparando pacotes
  3. Instalação do PEC
  4. Versão de Treinamento
  5. Migração de Versão PEC
  6. Outras informações relevantes

Ajude esse e outros projetos OpenSource para saúde: Patrocínio

Alinhando conhecimentos

Para poder rodar esse sistema é necessário ter conhecimentos básicos dos seguintes programas e ambientes:

  • Linux: É o sistema opercional (OS) amplamente utilizado em servidores devido a sua segurança, leveza e versatilidade. Em servidores não temos uma identificação visual de pastas e arquivos, portanto toda a navegação e ações do usuário são por linhas de código
  • Docker: É um programa que você deve pensar como um container com todos os arquivos dentro para rodar o sistema que você quer rodar ao final, ao colocar o container no seu servidor e rodar ele, deve então funcionar em qualquer ambiente da mesma forma. Isso dispensa o ter que configurar todo o ambiente para receber o programa, pois quem fez o container já fez isso para você.

Preparando pacotes

Tenha o docker e docker-compose instalado na máquina

Em uma VPS Ubuntu ou Debian, vamos instalar o docker:

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Para controle dos containers pode ser útil utilizar o Portainer, assim ficará mais fácil verificar os erros e entrar nas aplicações:

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

Instalação do PEC

Para instalação foi criado um script que posse ser executado copiando o bloco abaixo, se você estiver migrando de versão leia o parágrafo abaixo

1. Baixe o pacote do programa PEC na versão que deseja instalar/atualizar. Você pode também baixar no site oficial do PEC APS

wget https://arquivos.esusab.ufsc.br/PEC/mtRazOmMxfBpkEMK/5.2.28/eSUS-AB-PEC-5.2.28-Linux64.jar

Gostaria de migrar de outro banco de dados? Acesse a seção de migração

2. Rode o script para instalar o pacote baixado e criar o container

sh build.sh -f eSUS-AB-PEC-5.2.28-Linux64.jar

Para instalar a versão de treinamento use o argumento -t

sh build.sh -f eSUS-AB-PEC-5.2.28-Linux64.jar -t

Patrocínio

Agradecimentos à equipe NoHarm que investiu nesse projeto para facilitar a instalação dessa aplicação tão amplamente utilizada no SUS/Brasil.

Apoie também esse e outros projetos.

Stripe Badge Buy Me a Coffe Badge WhatsApp Badge

Certificado SSL (Em processo de automatização)

O certificado SSL é importante para podermos utilizar o HTTPS (Habilita video chamadas e prescrição eletrônica, além de ser pré-requisito para login GOV.br). Mais informações

# https://github.com/filiperochalopes/e-SUS-PEC/issues/14
make generate-ssl URL=https://meu-dominio.com EMAIL=meu-email@dominio.com

Por enquanto

Vamos fazer manualmente o processo que se constitui em:

  1. Colocar o servidor para rodar na porta 80 (padrão vem 8080) e reiniciar container
docker compose -f docker-compose.external-db.yml down pec
docker compose -f docker-compose.external-db.yml up -d pec
  1. Adquirir um certificado para seu domínio da forma que preferir (certbot/Let's Encrypt)
  2. Converter certificados em JKS
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out keystore.p12 -name esuspec -CAfile chain.pem -caname root -password pass:mypass

keytool -importkeystore -deststorepass mypass -destkeypass mypass -destkeystore keystore.jks -srckeystore keystore.p12 -srcstoretype PKCS12 -srcstorepass mypass -alias esuspec
  1. Colocar o servidor para rodar na porta 443, alterando o o arquivo /opt/e-SUS/webserver/config/application.properties
spring.datasource.url=jdbc:postgresql://noharm-dev.cnonw4s4vx7j.sa-east-1.rds.amazonaws.com:5432/esus?ssl=true&sslmode=allow&sslfactory=org.postgresql.ssl.NonValidatingFactory
spring.datasource.password=esus_pass
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.username=esus_user
server.port=443   
# server.ssl.key-store-type=PKCS12  
server.ssl.key-store=/opt/e-SUS/keystore.jks
server.ssl.key-store-password=esus_pass
server.ssl.key-alias=esuspec
security.require-ssl=true

Ainda analisando como seria isso, e para automatizar, já que o processo de retornar para porta 80, rodar novamente o certbot e voltar para 443 poderia ser doloroso.

Versão de Treinamento

O pacote java disponibilizado pelo Ministério da Saúde/Secretaria de Atenção Primária à Saúde. Laboratório Bridge/Universidade Federal de Santa Catarina. Página de Suporte

Documentação do pacote java

O pacote nos concede algumas opções além da de treinamento que vale à pena dar uma olhada, é utilizado no nosso script de criação da aplicação:

# java -jar {pacote} -help
Usage: <main class> [[-url=<url>] [-username=<username>]
                    [-password=<password>]] [[-restore=<dumpFilePath>]]
                    [[-backup]] [-console] [-continue] [-help] [-treinamento]
Parâmetro Descrição
-console Inicializa o assistente em modo linha de comandos. Se omitido esse parâmetro, o assistente inicializa em modo interface gráfica.
-treinamento Indica que a Nova Instalação será de Treinamento. Se omitido esse parâmetro, a Nova Instalação será de Produção.
-help Mostra estas informações sobre a utilização dos parâmetros do assistente.
-continue Modo não interativo. Continua com a execução das tarefas necessárias sem a necessidade de confirmação do usuário.
-url=<url> URL de conexão para acesso ao Banco de Dados
-username=<username> Nome de usuário para acesso ao Banco de Dados
-password=<password> Senha para acesso ao Banco de Dados
-restore=<dumpFilePath> Caminho do arquivo de backup do Banco de Dados do PEC
-backup Cria um backup do Banco de Dados antes de atualizar. Se omitido esse parâmetro, não será realizado um backup.

Backup e Restauração de Banco de Dados

Fazendo backup

docker compose exec -it psql bash -c 'pg_dump --host localhost --port 5432 -U "postgres" --format custom --blobs --encoding UTF8 --no-privileges --no-tablespaces --no-unlogged-table-data --file "/home/$(date +"%Y_%m_%d__%H_%M_%S").backup" "esus"'

Restaurando backup

pg_restore -U "postgres" -d "esus" -1 "/home/seu_arquivo.backup"
psql -U postgres esus < backupfile.sql

Migração de Versão PEC

⚠️ Disclaimer: É importante notar, segundo nota da própria equipe que mantém o PEC, que a migração do banco de dados em sistema linux não tem tantas verificações quanto o Windows, podendo, talvez, existir alguma versão de banco sem a migração adequada. Testado e funcionou após migrar a versão de 4.2.6 para 4.5.5 .

  1. Crie um backup do banco de dados e retire da pasta data
docker exec -it esus_psql bash -c 'pg_dump --host localhost --port 5432 -U "postgres" --format custom --blobs --encoding UTF8 --no-privileges --no-tablespaces --no-unlogged-table-data --file "/home/$(date +"%Y_%m_%d__%H_%M_%S").backup" "esus"'
sudo cp data/backups/nome_do_arquivo.backup .

Ou pode-se optar por fazer o backup pela própria ferramenta do PEC, use:

java jar esus-pec.jar -help

Para mais informações.

  1. Exclua todo o banco de dados e dados relacionados em volume
docker-compose down --remove-orphans --volumes
sudo rm -rf data
  1. Crie o banco de dados
docker-compose up -d psql
  1. Copie o arquivo de backup
sudo cp nome_do_arquivo.backup data/backups/
  1. Crie o banco de dados com base no backup
docker exec -it esus_psql bash
pg_restore --verbose -U "postgres" -d "esus" -1 /home/seu_arquivo.backup
  1. Instale o programa

Fora do container, na pasta raiz do projeto execute, substituindo o nome do pacote eSUS-AB-PEC-5.0.8-Linux64.jar para a versão que você vai instalar em sua máquina.

sh build.sh -f eSUS-AB-PEC-5.0.14-Linux64.jar

Comandos interessantes

Caso o container tenha sido interrompido sem querer, o comando abaixo pode ser útil

# Em linux
make run
# Depois de rodar novamente os containers
docker-compose up -d
# Caso nenhum dos anteriores funcione execute diretamente o executável do sistema pec
docker-compose up -d esus_app /opt/e-SUS/webserver/standalone.sh

Bugs Conhecidos (Known Issues) / Troubleshoot / Q&A / FAQ

  • O Java 8 só funciona com OpenSSL 1.1, em caso de uso do OpenSSL mais recente 3.X, não irá funcionar as chaves PKCS12 para SSL, será necessário o uso das chaves *.jks nesses casos
  • Testes realizados com versão 4.2.7 e 4.2.8 não foram bem sucedidos
  • A versão 4.2.8 está com erro no formulário de cadastro, nas requisições ao banco de dados, pelo endpoint graphql, retorna "Não autorizado"
  • Verificar sempre a memória caso queira fazer depois em servidor. Senão ele trará no console um Killed inesperado https://stackoverflow.com/questions/37071106/spring-boot-application-quits-unexpectedly-with-killed
  • Não instale a versão 5.0.8, do de cabeça, não carrega alguns exames e atendimentos de forma aparentemente aleatória, corrigido após instalar versão 5.0.14

Lista de Versões para Download

version version