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 .env
simplifica 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
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
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:
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)