Skip to content

Commit

Permalink
Merge pull request #4 from filiperochalopes/develop
Browse files Browse the repository at this point in the history
Simplificando repo
  • Loading branch information
filiperochalopes authored Oct 27, 2022
2 parents a050790 + 2aedc72 commit 38ca75a
Show file tree
Hide file tree
Showing 13 changed files with 197 additions and 48 deletions.
5 changes: 3 additions & 2 deletions .env
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
POSTGRES_DB='esus'
POSTGRES_USER='postgres'
POSTGRES_PASSWORD='esus'
POSTGRESQL_PORT=5434
POSTGRESQL_PORT=54351
APP_PORT=88
PGWEB_PORT=8097
PGWEB_PORT=8099
TIMEZONE='America/Bahia'
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
data
*.jar
*.jar
__pycache__
*.pyc
*.backup
.webassets-cache
11 changes: 9 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM ubuntu:20.04

RUN apt-get update && apt-get install -y wget apt-utils gnupg2 software-properties-common locales libfreetype6
RUN apt-get update && apt-get install -y wget apt-utils gnupg2 software-properties-common locales libfreetype6 ntp
RUN wget -O- https://apt.corretto.aws/corretto.key | apt-key add -
RUN add-apt-repository 'deb https://apt.corretto.aws stable main'
RUN apt-get update && apt-get install -y java-1.8.0-amazon-corretto-jdk
Expand All @@ -18,11 +18,13 @@ ARG JAR_FILENAME
ARG POSTGRES_USERNAME
ARG POSTGRES_PASSWORD
ARG POSTGRES_DATABASE
ARG TIMEZONE

ENV JAR_FILENAME=${JAR_FILENAME}
ENV POSTGRES_USERNAME=${POSTGRES_USERNAME}
ENV POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
ENV POSTGRES_DATABASE=${POSTGRES_DATABASE}
ENV TIMEZONE=${TIMEZONE}

RUN java -version
RUN mkdir -p /var/www/html
Expand All @@ -32,10 +34,15 @@ RUN locale -a
RUN locale-gen "pt_BR.UTF-8"
RUN update-locale

RUN echo "Copiando arquivo de instalação $JAR_FILENAME"

COPY ./${JAR_FILENAME} ${JAR_FILENAME}
COPY ./install.sh install.sh
COPY ./run.sh run.sh

RUN chmod +x /var/www/html/install.sh
RUN chmod +x /var/www/html/run.sh

EXPOSE 8080

# CMD "chmod +x /var/www/html/run.sh && sh /var/www/html/run.sh && /bin/bash"
CMD "/var/www/html/run.sh"
24 changes: 24 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
prod-run:
docker-compose down --remove-orphans --volumes
sudo chmod -R 777 data
docker-compose up -d
prod-update:
docker-compose down --remove-orphans --volumes
sudo chmod -R 777 data
docker-compose up -d --build
dev-run:
docker-compose -f docker-compose.dev.yml down --remove-orphans --volumes
sudo chmod -R 777 data
docker-compose -f docker-compose.dev.yml up -d
dev-down:
docker-compose -f docker-compose.dev.yml down --remove-orphans --volumes
dev-logs:
docker-compose -f docker-compose.dev.yml logs -f
dev-update:
docker-compose -f docker-compose.dev.yml down --remove-orphans --volumes
sudo chmod -R 777 data
docker-compose -f docker-compose.dev.yml up -d --build
terminal:
docker exec -it esus_app bash
db-terminal:
docker exec -it esus_psql bash
76 changes: 66 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,31 @@
## Para instalação
# eSUS PEC

Tenha o `docker` e `docker-compose` instalado na máquina
É 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.

## Preparando pacotes

Tenha o [`docker`](https://docs.docker.com/engine/install/) e [`docker-compose`](https://docs.docker.com/compose/install/) instalado na máquina

## Instalando serviço

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](#migrando-versao)

```sh
# No momento, última versão funcional para linux 4.2.6, fazer download em https://rangtecnologia.com.br/downloadsEsus.xhtml
sh build.sh -f eSUS-AB-PEC-4.2.6-Linux64.jar
# Após isso o sistema deve estar funcionando na porta determinada pelo arquivo .env
# Substitua eSUS-AB-PEC-5.0.8-Linux64.jar pelo pacote que você baixou no site https://sisaps.saude.gov.br/esus/
sh build.sh -f eSUS-AB-PEC-5.0.8-Linux64.jar
```

## Para execução
## Executando o serviço

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

```sh
# Em linux
make run
# Depois de rodar novamente os containers
docker-compose up -d
# Inicialize o servidor
docker exec -it esus_app bash -c "sh /var/www/html/run.sh"
# 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
```

## Fazendo backup do banco de dados
Expand All @@ -31,6 +40,53 @@ docker exec -it esus_psql bash -c 'pg_dump --host localhost --port 5432 -U "post
pg_restore -U "postgres" -d "esus" -1 "/home/seu_arquivo.backup"
```

## Known Issues
## Realizando migração de versão <a id='migrando-versao'></a>

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`

```sh
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 .
```

2. Exclua todo o banco de dados e dados relacionados em volume

```sh
docker-compose down --remove-orphans --volumes
sudo rm -rf data
```

3. Crie o banco de dados

```sh
docker-compose up -d psql
```

4. Copie o arquivo de backup

```sh
sudo cp nome_do_arquivo.backup data/backups/
```

5. Crie o banco de dados com base no backup

```sh
docker exec -it esus_psql bash
pg_restore -U "postgres" -d "esus" -1 /home/seu_arquivo.backup
```

6. 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
sh build.sh -f eSUS-AB-PEC-5.0.8-Linux64.jar
```

## Known Issues (Bugs Conhecidos)

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"
- 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
18 changes: 11 additions & 7 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,19 @@ do
esac
done

export COMPOSE_HTTP_TIMEOUT=8000

echo "Instalando e-SUS-PEC pelo arquivo $filename";
docker-compose down --volumes --remove-orphans
sudo chmod -R 755 data
# docker-compose build --build-arg JAR_FILENAME=$filename
docker-compose build --no-cache --build-arg JAR_FILENAME=$filename
docker-compose build --build-arg JAR_FILENAME=$filename
docker-compose up -d
docker exec -it esus_app bash -c "sh /var/www/html/install.sh"
# docker exec -it esus_app bash -c "sh /var/www/html/run.sh"
echo "Avaliando estado de execução container"
docker-compose ps
sleep 15
docker-compose ps

sudo cp eSUS-PEC.ico /usr/share/icons/eSUS-PEC.ico
sudo cp eSUS-PEC.sh /usr/bin/eSUS-PEC.sh
sudo chmod +x /usr/bin/eSUS-PEC.sh
# Na hora de fazer o build não pode instalar os pacotes porque depende do banco de dados, por isso deve ser instalado por fora
docker exec -it esus_app bash -c "sh /var/www/html/install.sh"
# Executando novamente o ENTRYPOINT do docker file, dessa vez com os pacotes já instalados.
docker exec -it esus_app bash -c "sh /var/www/html/run.sh"
45 changes: 45 additions & 0 deletions docker-compose.dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
version: "3"
services:
psql:
container_name: esus_psql
restart: always
image: postgres:13.5
volumes:
- ./data/psql_db:/var/lib/postgresql/data
- ./data/backups:/home
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
ports:
- "${POSTGRESQL_PORT}:5432"
pgweb:
container_name: esus_pgweb
restart: always
image: sosedoff/pgweb
ports:
- "${PGWEB_PORT}:8081"
environment:
- DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@psql:5432/${POSTGRES_DB}?sslmode=disable
depends_on:
- psql
app:
container_name: esus_app
build:
context: .
dockerfile: Dockerfile
args:
- POSTGRES_DATABASE=${POSTGRES_DB}
- POSTGRES_USERNAME=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- TIMEZONE=${TIMEZONE}
stdin_open: true
tty: true
volumes:
- ./install.sh:/var/www/html/install.sh
- ./run.sh:/var/www/html/run.sh
- ./data/e-SUS:/opt/e-SUS
ports:
- "${APP_PORT}:8080"
depends_on:
- psql
17 changes: 3 additions & 14 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,34 +13,23 @@ services:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
ports:
- "${POSTGRESQL_PORT}:5432"
pgweb:
container_name: esus_pgweb
restart: always
image: sosedoff/pgweb
ports:
- "${PGWEB_PORT}:8081"
environment:
- DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@psql:5432/${POSTGRES_DB}?sslmode=disable
depends_on:
- psql
app:
container_name: esus_app
restart: always
build:
context: .
dockerfile: Dockerfile
args:
args:
- POSTGRES_DATABASE=${POSTGRES_DB}
- POSTGRES_USERNAME=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
command: /bin/sh -c "chmod +x /opt/e-SUS/webserver/standalone.sh && sh /opt/e-SUS/webserver/standalone.sh"
- TIMEZONE=${TIMEZONE}
stdin_open: true
tty: true
volumes:
- ./install.sh:/var/www/html/install.sh
- ./run.sh:/var/www/html/run.sh
- ./data/e-SUS:/opt/e-SUS
ports:
- "${APP_PORT}:8080"
stdin_open: true
depends_on:
- psql
6 changes: 0 additions & 6 deletions eSUS-PEC.desktop

This file was deleted.

Binary file removed eSUS-PEC.ico
Binary file not shown.
1 change: 0 additions & 1 deletion eSUS-PEC.sh

This file was deleted.

2 changes: 1 addition & 1 deletion install.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cd /var/www/html

systemctl status e-SUS-PEC
echo "Instalando pacotes java"

java -jar ${JAR_FILENAME} -console -url="jdbc:postgresql://psql:5432/${POSTGRES_DATABASE}" -username ${POSTGRES_USERNAME} -password ${POSTGRES_PASSWORD}
34 changes: 30 additions & 4 deletions run.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,31 @@
#!/bin/sh
chmod +x /opt/e-SUS/webserver/standalone.sh
ss -tl
nohup bash -c "sh /opt/e-SUS/webserver/standalone.sh &" && sleep 4
ss -tl

echo "Inicializando configuração de data e hora..."
ntpd -gq
service ntp start

echo "Ajustando data para $TIMEZONE ..."
echo $TIMEZONE > /etc/timezone && \
ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata

echo "Inicializando sistema..."
FILE=/opt/e-SUS/webserver/standalone.sh

if test -f "$FILE"; then
echo "$FILE existe. Executando entrypoint do eSUS-PEC"
if ss -tulpn | grep 8080 > /dev/null ; then
echo "Já tem uma aplicação rodando na porta 8080, mantendo terminal aberto."
else
echo "Nada rodando em 8080, executando entrada..."
chmod +x /opt/e-SUS/webserver/standalone.sh
nohup /opt/e-SUS/webserver/standalone.sh & tail -f nohup.out
fi
else
printf "$FILE não existe, execute manualmente o sistema com\n \
sh /opt/e-SUS/webserver/standalone.sh\n\n \
ou instale o sitema primeiro, caso seja a primeira vez instalando:\n\n
sh /install.sh"
fi

/bin/bash

0 comments on commit 38ca75a

Please sign in to comment.