Agora não esqueço mais o .env

Thiago Nogueira
LABHacker
Published in
4 min readOct 27, 2020

Saaaalve rapaziada, como vocês estão?

Então bora começar! Vou iniciar nossa conversa me apresentando, pois nunca estive por estas bandas do Medium, mas tô sempre topando desafios novos que me tirem dos bashs e shells da vida de backend. Sou Thiago Nogueira, formado em Engenharia de Software pela Universidade de Brasília, desenvolvedor de backend no LABHacker e responsável pela manutenção e desenvolvimento de novos produtos idealizados dentro do laboratório. Sou pythonista há três anos e gosto muito de me envolver na parte de devops e gerenciamento de equipe. Além disso, sou um amante declarado de café e estou sempre assistindo a vídeos de curiosidades no Youtube.

Hoje vou contar pra vocês alguns dos problemas que a equipe do LAB tem enfrentado, de forma recorrente, em projetos. Nós, aqui no LABHacker, utilizamos uma estrutura baseada em containers Docker, sendo orquestrados pelo Docker Compose para organizar e executar os serviços necessários para as aplicações. Todo mundo que já mexe ou tem conhecimento mínimo nesse contexto sabe que as variáveis de ambiente são sempre uma dor de cabeça.

Quem nunca esqueceu de adicionar ou remover uma variável de ambiente no docker-compose que atire a primeira pedra.

A stack usada para construir os serviços que estão em produção hoje aqui no LAB é composta pelo Python com o framework Django. Nesse framework, todas as configurações necessárias para a criação do projeto, que definem como ele vai funcionar, ficam no arquivo settings.py. Esse arquivo possui algumas informações sensíveis, como chave de criptografia das mensagens, usuário, senha e host do banco de dados, dentre outras.

Por conta dessas informações sensíveis, nós utilizamos variáveis de ambiente para não subir esses dados junto com o código. Geralmente, utiliza-se um arquivo .evn para poder salvá-las e novas variáveis são acrescentadas de acordo com as necessidades do projeto. Os dados que estão dentro desse arquivo não podem ser públicos por questão de segurança. Como usamos o framework Django, nós optamos por sempre utilizar uma biblioteca chamada python-decoulpe, que importa as variáveis de ambiente do .env e coloca os valores no arquivo de settings.py.

Em um belo dia de serviço, o Erivânio Vasconcelos, que é o outro desenvolvedor backend do LABHacker, me falou a seguinte frase:

“Ei Thiago, a gente precisa atualizar as variáveis de ambiente do e-Democracia. Umas a gente não usa mais e outras estão faltando”

Nesse momento, por incrível que pareça, eu estava configurando as benditas variáveis de ambiente (kkkkkkk). Foi então que pensei: por ser algo que já aconteceu algumas vezes, seria legal criar uma solução automatizada para resolver o problema (EUREKA!!!).

Comecei a desenhar uma ideia criando rascunhos de como seria a solução para resolver o impasse das variáveis de ambiente. O ponto mais importante é que a solução deveria ser reutilizável em qualquer projeto novo ou antigo. Devido a esse fator, cheguei ao conceito de biblioteca! Por meio de uma biblioteca, seria necessário apenas instalar e importá-la em projetos novos ou antigos, possibilitando, por meio de linha de comando, a extração de todas as variáveis de ambientes contidas dentro dos arquivos settings.py.

Tendo definido a solução, fui atrás de descobrir como era a construção de uma biblioteca de python, já que nunca havia construído uma. (Esses desafios que me levam a mexer com elementos que nunca tive contato são muito legais. Acredito que seja daí que tiramos os maiores aprendizados.) Encontrei, então, um tutorial — muito bem estruturado e tranquilo de ser seguido — disponibilizado pelo Python Packaging Authority (PyPA). A partir dele, construí a biblioteca e, logo que terminada, mandei para o Erivânio ver o que eu tinha feito. Ele me deu alguns feedbacks e achou bem interessante a solução. Chega de dor de cabeça com as variáveis de ambiente!

A biblioteca se chama env-automatically. Vocês podem baixá-la pelo PIP neste link (fiquem a vontade de dar feedback no repositório!) e instalar usando o seguinte comando:

pip install env-automatically

Após a instalação, no terminal, é liberado o comando env-automatically. Para utilizar a biblioteca é necessário entrar na pasta raiz do projeto — onde se encontra o arquivo settings.py –, e executar o comando que foi disponibilizado por ela. Depois da execução do comando, a biblioteca irá ler o arquivo de configuração e criará um arquivo .env com todas as variáveis de ambiente que estão sendo importadas pelo python-decouple.

Essa foi a história da biblioteca que criei para resolver uma questão recorrente. Neste processo, foi possível observar que sempre podemos encarar as complicações com outro ponto de vista. O que antes era problemático, se tornou uma oportunidade para construção de algo que agrega valor tanto para o LABHacker quanto para mim. Agradeço a todos que leram até aqui; qualquer dia eu apareço novamente para contar outras novidades e histórias do LABHacker.

Obrigado,

Thiago Nogueira.

--

--

Thiago Nogueira
LABHacker

Software Engineering at University of Brasilia, Brazil.