Skip to content

Commit

Permalink
fix: variable names and convert build.sh script to work with testing env
Browse files Browse the repository at this point in the history
  • Loading branch information
filiperochalopes committed Dec 21, 2024
1 parent ef2db9b commit c87a73a
Show file tree
Hide file tree
Showing 12 changed files with 64 additions and 87 deletions.
2 changes: 1 addition & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Configurações de banco de dados
POSTGRES_DB='esus'
POSTGRES_USER='postgres'
POSTGRES_PASSWORD='pass'
POSTGRES_PASS='pass'
POSTGRES_HOST='host.docker.internal'
POSTGRES_PORT=5432

Expand Down
11 changes: 7 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ RUN apt-get update && \
apt-get clean && \
rm -rf /usr/share/doc/* /usr/share/man/* /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Instalar cliente PostgreSQL
RUN apt-get update && apt-get install -y postgresql-client

# Substituir o comando `ps` para burlar a verificação de systemd
RUN mv /bin/ps /bin/ps.original && \
echo '#!/bin/sh' > /bin/ps && \
Expand All @@ -56,16 +59,16 @@ RUN echo '#!/bin/sh' > /bin/systemctl && \
ARG JAR_FILENAME
ARG HTTPS_DOMAIN
ARG DB_URL
ARG DB_PASS
ARG DB_USER
ARG POSTGRES_PASS
ARG POSTGRES_USER
ARG TRAINING

# Promovendo ARGS para ENV para uso no install.sh que roda dentro do entrypoint.sh e precisa dessas variáveis
ENV JAR_FILENAME=${JAR_FILENAME}
ENV TRAINING=${TRAINING}
ENV DB_URL=${DB_URL}
ENV DB_PASS=${DB_PASS}
ENV DB_USER=${DB_USER}
ENV POSTGRES_PASS=${POSTGRES_PASS}
ENV POSTGRES_USER=${POSTGRES_USER}
ENV HTTPS_DOMAIN=${HTTPS_DOMAIN}

# criando diretórios para uso posterior
Expand Down
8 changes: 4 additions & 4 deletions Dockerfile.external-db
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ RUN apt-get update && \
ARG JAR_FILENAME
ARG HTTPS_DOMAIN
ARG DB_URL
ARG DB_PASS
ARG DB_USER
ARG POSTGRES_PASS
ARG POSTGRES_USER

# Promovendo ARGS para ENV para uso no install.sh que roda dentro do entrypoint
ENV JAR_FILENAME=${JAR_FILENAME}
ENV DB_URL=${DB_URL}
ENV DB_PASS=${DB_PASS}
ENV DB_USER=${DB_USER}
ENV POSTGRES_PASS=${POSTGRES_PASS}
ENV POSTGRES_USER=${POSTGRES_USER}
ENV HTTPS_DOMAIN=${HTTPS_DOMAIN}

# criando diretórios para uso posterior
Expand Down
51 changes: 7 additions & 44 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ Utilize `sh build.sh --help` para mais opções, por exemplo, para instalar a ve
sh build.sh -e
```

Acesse [Live/Demo](https://pec.filipelopes.med.br)
Acesse [Live/Demo](https://dev.esus.noharm.ai)
Dúvidas? Colaboração? Ideias? Entre em contato pelo [WhatsApp](https://wa.me/5571986056232?text=Gostaria+de+informa%C3%A7%C3%B5es+sobre+o+projeto+PEC+SUS)

## Sumário
Expand Down Expand Up @@ -180,59 +180,22 @@ sudo cp data/backups/nome_do_arquivo.backup .
Ou pode-se optar por fazer o backup pela própria ferramenta do PEC, use:

```sh
java jar esus-pec.jar -help
# substitua a versão pelo que estiver utilizando dentro do container pec
docker compose exec -it pec java jar esus-pec.jar -help
```

Para mais informações.

2. Exclua todo o banco de dados e dados relacionados em volume
2. Após isso, se seu banco de dados for externo, basta executar

```sh
docker-compose down --remove-orphans --volumes
sudo rm -rf data
sh update.sh docker-compose.local-db.yml
```

3. Crie o banco de dados
Substitua o termo `docker-compose.local-db.yml` pelo termo `docker-compose.external-db.yml` para executar o script com o banco de dados externo.

```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 --verbose -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.14-Linux64.jar
```

## Comandos interessantes <a id="outros"></a>

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
# 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
## Bugs Conhecidos (Known Issues) / Troubleshoot / Q&A / FAQ <a id="outros"></a>

- **BREAKING CHANGE:** Desde a versão 5.3 o [certificado SSL é autogerenciado](https://saps-ms.github.io/Manual-eSUS_APS/docs/%C3%9Altimas%20releases/Vers%C3%A3o%205.3/#novidades---ferramentas-administrativas) e a versão Java utilizada é a 17 LTS. A última versão desse docker não funcionará para versões anteriores
- 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
Expand Down
2 changes: 1 addition & 1 deletion aws/.env.example
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Configurações de banco de dados
POSTGRES_DB='esus'
POSTGRES_USER='postgres'
POSTGRES_PASSWORD='pass'
POSTGRES_PASS='pass'
POSTGRES_HOST='db' # host.docker.internal
POSTGRES_PORT=5432
TRAINING=true
Expand Down
2 changes: 1 addition & 1 deletion aws/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ services:
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_PASSWORD=${POSTGRES_PASS}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./esus-data/db:/var/lib/postgresql/data
10 changes: 5 additions & 5 deletions aws/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ echo "Variáveis de ambiente:"
echo "*******************"
echo "DB_URL: ${DB_URL}"
echo "POSTGRES_USER: ${POSTGRES_USER}"
echo "POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}"
echo "POSTGRES_PASS: ${POSTGRES_PASS}"
echo "JAR_FILENAME: ${JAR_FILENAME}"
echo "TRAINING: ${TRAINING}"
echo "*******************\n\n${NC}"
Expand All @@ -33,8 +33,8 @@ if [ -n "$POSTGRES_USER" ]; then
ARGS="$ARGS -username=${POSTGRES_USER}"
fi

if [ -n "$POSTGRES_PASSWORD" ]; then
ARGS="$ARGS -password=${POSTGRES_PASSWORD}"
if [ -n "$POSTGRES_PASS" ]; then
ARGS="$ARGS -password=${POSTGRES_PASS}"
fi

# A ser executado java -jar
Expand All @@ -52,12 +52,12 @@ if [ -n "$TRAINING" ]; then
PSQL_CMD="psql -h ${POSTGRES_HOST} -p ${POSTGRES_PORT} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c \"update tb_config_sistema set ds_texto = null, ds_inteiro = 1 where co_config_sistema = 'TREINAMENTO';\""

# Exporta a senha do banco para evitar o prompt
export PGPASSWORD="${POSTGRES_PASSWORD}"
export PGPASSWORD="${POSTGRES_PASS}"

# Executa o comando SQL
eval $PSQL_CMD
if [ $? -eq 0 ]; then
echo -e "${GREEN}Configuração de treinamento aplicada com sucesso.${NC}"
echo -e "${GREEN}Configuração de treinamento aplicada com sucesso!${NC}"
else
echo -e "${RED}Erro ao aplicar configuração de treinamento.${NC}"
fi
Expand Down
21 changes: 17 additions & 4 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ while getopts "d:f:h:cpe" flag; do
f) filename=${OPTARG} ;;
h) https_domain=${OPTARG} ;;
c) cache='--no-cache' ;;
p) production=true ;;
p) production=false ;;
e) use_external_db=true ;;
\?)
echo "${RED}Opção inválida! Utilize --help para ajuda.${NC}"
Expand All @@ -43,6 +43,16 @@ while getopts "d:f:h:cpe" flag; do
esac
done

# Caso production seja false determina training para true
if [ "$production" = false ]; then
training=true
fi

# Caso o banco de dados for externo modifica a variável logo para produção
if [ "$use_external_db" = true ]; then
production=true
fi

# Define timeout para o Docker Compose
export COMPOSE_HTTP_TIMEOUT=8000

Expand Down Expand Up @@ -108,7 +118,7 @@ if command -v psql > /dev/null; then
if $use_external_db; then
echo "Testando conexão com o banco de dados externo em $POSTGRES_HOST..."
POSTGRES_HOST_FOR_TEST=$([ "$POSTGRES_HOST" = "host.docker.internal" ] && echo "localhost" || echo "$POSTGRES_HOST")
if PGPASSWORD=$POSTGRES_PASSWORD psql -h $POSTGRES_HOST_FOR_TEST -U $POSTGRES_USER -p $POSTGRES_PORT -d $POSTGRES_DB -c '\q'; then
if PGPASSWORD=$POSTGRES_PASS psql -h $POSTGRES_HOST_FOR_TEST -U $POSTGRES_USER -p $POSTGRES_PORT -d $POSTGRES_DB -c '\q'; then
echo "${GREEN}Conexão ao banco de dados externa bem-sucedida.${NC}"
else
echo "${RED}Falha ao conectar ao banco de dados externo. Verifique as credenciais.${NC}"
Expand All @@ -132,12 +142,15 @@ if $use_external_db; then
docker compose -f docker-compose.external-db.yml up -d
else
jdbc_url="jdbc:postgresql://$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB"
training=''
echo "\n${GREEN}Construindo e subindo Docker com banco de dados local...${NC}"
docker compose --progress plain -f docker-compose.local-db.yml build $cache \
echo "docker compose --progress plain -f docker-compose.local-db.yml build $cache \
--build-arg JAR_FILENAME=$jar_filename \
--build-arg HTTPS_DOMAIN=$https_domain \
--build-arg DB_URL=$jdbc_url \
--build-arg TRAINING=$training"
docker compose --progress plain -f docker-compose.local-db.yml build $cache \
--build-arg JAR_FILENAME=$jar_filename \
--build-arg DB_URL=$jdbc_url \
--build-arg TRAINING=$training
docker compose -f docker-compose.local-db.yml up -d
fi
4 changes: 2 additions & 2 deletions docker-compose.external-db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ services:
dockerfile: Dockerfile.external-db
args:
- TZ=${TZ}
- DB_USER=${POSTGRES_USER}
- DB_PASS=${POSTGRES_PASSWORD}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASS=${POSTGRES_PASS}
- HTTPS_DOMAIN=${HTTPS_DOMAIN}
stdin_open: true
tty: true
Expand Down
11 changes: 7 additions & 4 deletions docker-compose.local-db.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,12 @@ services:
dockerfile: Dockerfile
args:
- TZ=${TZ}
- DB_USER=${POSTGRES_USER}
- DB_PASS=${POSTGRES_PASSWORD}
- HTTPS_DOMAIN=${HTTPS_DOMAIN}
environment:
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASS=${POSTGRES_PASS:-pass}
- POSTGRES_HOST=${POSTGRES_HOST:-db} # host.docker.internal
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
- POSTGRES_DB=${POSTGRES_DB:-esus}
privileged: true
stdin_open: true
tty: true
Expand All @@ -32,7 +35,7 @@ services:
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-pass}
- POSTGRES_PASSWORD=${POSTGRES_PASS:-pass}
- POSTGRES_DB=${POSTGRES_DB:-esus}
volumes:
- ./esus-data/db:/var/lib/postgresql/data
21 changes: 8 additions & 13 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ echo "Variáveis de ambiente:"
echo "*******************"
echo "HTTPS_DOMAIN: ${HTTPS_DOMAIN}"
echo "DB_URL: ${DB_URL}"
echo "DB_USER: ${DB_USER}"
echo "DB_PASS: ${DB_PASS}"
echo "POSTGRES_USER: ${POSTGRES_USER}"
echo "POSTGRES_PASS: ${POSTGRES_PASS}"
echo "JAR_FILENAME: ${JAR_FILENAME}"
echo "TRAINING: ${TRAINING}"
echo "*******************\n\n${NC}"
Expand All @@ -33,17 +33,12 @@ if [ -n "$DB_URL" ]; then
ARGS="$ARGS -url=${DB_URL}"
fi

if [ -n "$DB_USER" ]; then
ARGS="$ARGS -username=${DB_USER}"
if [ -n "$POSTGRES_USER" ]; then
ARGS="$ARGS -username=${POSTGRES_USER}"
fi

if [ -n "$DB_PASS" ]; then
ARGS="$ARGS -password=${DB_PASS}"
fi

# Verificando variável de treinamento e se não está vazio
if [ -n "$TRAINING" ]; then
ARGS="$ARGS -treinamento"
if [ -n "$POSTGRES_PASS" ]; then
ARGS="$ARGS -password=${POSTGRES_PASS}"
fi

# A ser executado java -jar
Expand All @@ -58,10 +53,10 @@ java -jar ${JAR_FILENAME} -console ${ARGS} -continue
# Verificando se a variável de treinamento existe, caso sim, executa o SQL
if [ -n "$TRAINING" ]; then
echo -e "${GREEN}Treinamento habilitado. Executando SQL de configuração...${NC}"
PSQL_CMD="psql -h ${POSTGRES_HOST} -p ${POSTGRES_PORT} -U ${DB_USER} -d ${POSTGRES_DB} -c \"update tb_config_sistema set ds_texto = null, ds_inteiro = 1 where co_config_sistema = 'TREINAMENTO';\""
PSQL_CMD="psql -h ${POSTGRES_HOST} -p ${POSTGRES_PORT} -U ${POSTGRES_USER} -d ${POSTGRES_DB} -c \"update tb_config_sistema set ds_texto = null, ds_inteiro = 1 where co_config_sistema = 'TREINAMENTO';\""

# Exporta a senha do banco para evitar o prompt
export PGPASSWORD="${DB_PASS}"
export PGPASSWORD="${POSTGRES_PASS}"

# Executa o comando SQL
eval $PSQL_CMD
Expand Down
8 changes: 4 additions & 4 deletions update.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
# Variáveis de ambiente para o banco de dados
# DB_URL="jdbc:postgresql://db:5432/esus"
# DB_URL="jdbc:postgresql://db:5432/esus?ssl=true&sslmode=allow&sslfactory=org.postgresql.ssl.NonValidatingFactory"
# DB_USER="postgres"
# DB_PASS="pass"
# POSTGRES_USER="postgres"
# POSTGRES_PASS="pass"

# Caminhos e URLs
WORKDIR="/var/www/html"
Expand Down Expand Up @@ -96,7 +96,7 @@ docker compose -f "$DOCKER_COMPOSE_FILE" exec pec sh -c "
# Realiza o backup do banco de dados
echo 'Realizando backup do banco de dados...'
env PGPASSWORD=\$DB_PASS pg_dump -Fc -v -h db -U \$DB_USER -d \$DB_NAME -f $BACKUP_FILE 2> $LOG_FILE
env PGPASSWORD=\$POSTGRES_PASS pg_dump -Fc -v -h db -U \$POSTGRES_USER -d \$DB_NAME -f $BACKUP_FILE 2> $LOG_FILE
echo \"Backup realizado em $BACKUP_FILE\"
# Filtra apenas warnings e erros no log
Expand All @@ -112,7 +112,7 @@ docker compose -f "$DOCKER_COMPOSE_FILE" exec pec sh -c "
# Atualiza o sistema
echo 'Atualizando o sistema...'
# Debugando comando de instalação
java -jar $WORKDIR/\$JAR_FILENAME -console -url=\$DB_URL -username=\$DB_USER -password=\$DB_PASS -continue
java -jar $WORKDIR/\$JAR_FILENAME -console -url=\$DB_URL -username=\$POSTGRES_USER -password=\$POSTGRES_PASS -continue
"

# Reinicia o container
Expand Down

0 comments on commit c87a73a

Please sign in to comment.