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 artigo: https://github.com/rcelebrone/Arquitetura-Hexagonal-Com-Arquitetura-Limpa/tree/main/exemplo-api/postgres