DEV Community

Rafael Rotiroti
Rafael Rotiroti

Posted on

Utilizando Dotenv para Gerenciamento de Variáveis de Ambiente e Alembic

Introdução

Em meus projetos, especialmente ao trabalhar em ambientes de desenvolvimento local, utilizo variáveis de ambiente como uma estratégia eficaz para separar configurações sensíveis, como chaves de API e credenciais de banco de dados. Neste artigo, aprofundaremos no conceito de Dotenv, destacando seus benefícios e explorando como posso integrá-lo ao Alembic, por exemplo, para facilitar o gerenciamento de migrações de banco de dados. Aqui também falarei sobre vantagens e algumas desvantagens ao usá-lo.

O que é Dotenv?

Dotenv é uma biblioteca popular em várias linguagens de programação, incluindo Python, que permite carregar variáveis de ambiente de um arquivo .env para o ambiente em que minha aplicação está sendo executada. Em vez de definir variáveis de ambiente diretamente no sistema operacional ou em um serviço de hospedagem, posso armazená-las em um arquivo .env na raiz do meu projeto.

Vantagens ao usar .env

Isolamento e Segurança

Ao usar um arquivo .env, você mantém suas variáveis de ambiente em um local isolado, separado do código-fonte. Isso ajuda a garantir que informações sensíveis, como chaves de API e credenciais, não sejam expostas inadvertidamente.

Portabilidade

Com o Dotenv, é fácil mover seu projeto entre diferentes ambientes (dev, homol, prod) sem modificar as variáveis de ambiente. Basta ter um arquivo .env correspondente para cada ambiente.

Facilidade de Configuração

Gerenciar variáveis de ambiente através de um arquivo .envsimplifica a configuração e inicialização de seu projeto, especialmente quando você não está trabalhando sozinho.

Hands On!

Caso queira ver o projeto, eu subi o repo no github :).

Configure o ambiente

Com seu venv criado instale o python-dotenv, no exemplo vamos utilizar o alembic, então:

pip install alembic python-dotenv

Crie o seu arquivo .env e insira a variavel de ambiente da seguinte forma:

DATABASE_URL=postgresql://db_username:db_pw@localhost/db_name

Observe que o DATABASE_URL está em CAPS e o valor após o = está fora de aspas duplas (ou simples).

OBS: no repositorio tem um exemplo subindo o postgres com o docker.

Configurando o Alembic

Para iniciar o alembic rode o comando: alembic init alembic (modulo -- comando -- pasta destino)

Na raiz do projeto será criado uma pasta chamada alembic e dentro dela tem um arquivo Env.py que vamos edita-lo para usar o python-dotenv

Env.py

A função load_dotenv() faz com que ela enxergue o arquivo .env na raiz do seu projeto, carregando todas as variáveis que você criar para dentro do seu projeto.

Para utilizar, basta chamar a sua variável da seguinte forma: os.getenv("NOME_VAR")

Voltando para configuração do Alembic, para que ele consiga enxergar a variável de conexão com o banco de dados basta ajudar o código da função run_migrations_online

run_migrations_online

OBS: Veja que na imagem há o config, ele puxa a configuração do arquivo alembic.ini da raiz, caso não utilize .env, por padrão é necessário alterar lá. Essa é uma das vantagens de se usar o python-dotenv.

Agora basta rodar a migration:

Image description

Utilizando o Dotenv, tenho uma maneira conveniente e segura de gerenciar variáveis de ambiente em meus projetos Python. Ao combinar essa prática com ferramentas como Alembic, posso manter um gerenciamento eficiente de configurações sensíveis e simplificar a migração de banco de dados em multiplos ambientes.

Mas nem tudo são flores...

Há desvantagens em usar Dotenv.

Complexidade em Ambientes Distribuídos

Em ambientes distribuídos ou em sistemas orquestrados como Kubernetes, gerenciar variáveis de ambiente com um arquivo .env pode não ser a abordagem mais eficiente. Nestes casos, ferramentas específicas de gerenciamento de configuração ou serviços de segredos podem ser mais apropriados (Hashicorp Vault, AWS Secrets Manager).

Risco de Exposição

Se o arquivo .env contiver informações sensíveis e não for tratado corretamente (por exemplo, não sendo incluído no .gitignore), existe o risco de expor informações sensíveis, especialmente se o código-fonte for compartilhado ou versionado publicamente.

Dependência Externa

Embora o Dotenv seja uma ferramenta útil, introduzir uma dependência externa em seu projeto pode aumentar a complexidade, especialmente se você estiver trabalhando em um ambiente onde a gestão de dependências é crítica.

Desacoplamento com Outras Ferramentas

Em alguns cenários, integrar o Dotenv com certas ferramentas ou serviços pode exigir configurações adicionais ou scripts personalizados, o que pode complicar o processo de desenvolvimento ou implantação.

Desempenho

Em sistemas de alta carga ou aplicações onde cada milissegundo conta, ler variáveis de ambiente de um arquivo pode introduzir uma sobrecarga mínima em comparação com outras formas mais eficientes de gerenciamento de configurações.

Embora o Dotenv ofereça uma maneira conveniente e segura de gerenciar variáveis de ambiente em projetos Python, é essencial avaliar cuidadosamente as necessidades e requisitos específicos do seu projeto. Em alguns cenários, outras abordagens ou ferramentas podem ser mais adequadas para garantir a segurança, eficiência e escalabilidade da sua aplicação.

Top comments (0)