Simplificando rotinas de desenvolvimento com shell script

Criando um Script Shell que se Alimenta de um Arquivo .env Existente

No mundo do desenvolvimento de software, a automação é essencial para agilizar processos e melhorar a eficiência. Os scripts shell são uma ferramenta poderosa nesse sentido, permitindo que os desenvolvedores automatizem tarefas comuns. Neste artigo, vamos explorar a criação de um script shell que lê um arquivo .env existente e utiliza as variáveis de ambiente dele para executar um contêiner Docker.

Automatizando com Scripts Shell

Os scripts shell são pequenos programas que podem ser executados no terminal. Eles são úteis para executar tarefas repetitivas, simplificar comandos complexos e automatizar processos. No contexto do desenvolvimento, os scripts shell podem ser particularmente valiosos, uma vez que podem automatizar tarefas de implantação, configuração de ambiente e muito mais.

Configurando o Ambiente PostgreSQL

Vamos supor que estamos desenvolvendo um aplicativo que utiliza um banco de dados PostgreSQL e desejamos simplificar a criação de um contêiner Docker com o PostgreSQL configurado. Primeiro, temos um arquivo Dockerfile que define as configurações do contêiner:


```Dockerfile:

# Use a imagem oficial do PostgreSQL como base

FROM postgres:16.0-alpine3.18

# Variáveis de ambiente para configurar o PostgreSQL

ENV POSTGRES_USER=default_user

ENV POSTGRES_PASSWORD=default_password

ENV POSTGRES_DB=default_database

# Exponha a porta padrão do PostgreSQL

EXPOSE 5432

# Opcional: copie scripts SQL para inicialização

COPY ./postgres_scripts/ /docker-entrypoint-initdb.d/

```

O arquivo Dockerfile acima configura um contêiner PostgreSQL com variáveis de ambiente padrão. Opcionalmente, ele copia scripts SQL para a inicialização do banco de dados.

Automatizando a Construção do Contêiner

Agora, vamos criar um script shell chamado `build_postgres.sh` para automatizar a construção do contêiner:

```bash:

#!/bin/bash

docker build -t postgres-arqhex-image . -f postgres.Dockerfile

```

Esse script simplifica o processo de construção do contêiner PostgreSQL, tornando-o uma tarefa única e rápida.

Executando o Contêiner com Variáveis de Ambiente

Aqui entra o foco principal deste artigo: a execução do contêiner com variáveis de ambiente lidas a partir de um arquivo .env. Vamos criar o script `run_postgres.sh`:

```bash:

#!/bin/bash

# Verifica se o arquivo .env existe

if [ -f ../.env ]; then

  echo "Lendo variáveis de ambiente do arquivo .env"

  export $(cat ../.env | xargs)

fi

# Comando para executar o contêiner com as variáveis de ambiente

docker run --name postgres-arqhex-container -p 5432:5432 \

  -e POSTGRES_USER="${DB_USER}" \

  -e POSTGRES_PASSWORD="${DB_PASSWORD}" \

  -e POSTGRES_DB="${DB_DATABASE}" \

  postgres-arqhex-image

```

Este script faz o seguinte:

1. Verifica se o arquivo .env existe no diretório pai.

2. Se o arquivo .env existe, lê as variáveis de ambiente dele e as exporta para o ambiente atual.

3. Em seguida, ele executa o contêiner Docker PostgreSQL com as variáveis de ambiente necessárias para configurar o banco de dados.

Conclusão

Neste artigo, exploramos a criação de um script shell que lê um arquivo .env de dentro do projeto para obter as variáveis de ambiente necessárias para executar um contêiner Docker PostgreSQL. Embora seja uma prática comum armazenar variáveis de ambiente sensíveis, como senhas, em um arquivo .env fora do repositório de código, este repositório foi criado com fins educacionais e de exemplo.

Lembre-se de que, em ambientes de produção, é altamente recomendável seguir boas práticas de segurança e não armazenar informações sensíveis em repositórios públicos ou compartilhados. A automação com scripts shell pode ser uma ferramenta valiosa para o desenvolvimento, mas a segurança dos dados é sempre uma prioridade.

Projeto no github que inspirou o artigohttps://github.com/rcelebrone/Arquitetura-Hexagonal-Com-Arquitetura-Limpa/tree/main/exemplo-api/postgres