Contents
Controlar configuraciones con dotenv
dotenv se ha convertido en la solución predilecta para gestionar variables de entorno en aplicaciones modernas. Siguiendo los principios de la metodología 12 Factor App, nos permite separar la configuración del código y mantener un entorno de desarrollo limpio y coherente.
1. ¿Qué es dotenv
dotenv es una pequeña librería multiplataforma que carga variables de entorno desde un archivo .env
hacia process.env
(en Node.js) o su equivalente en otros entornos. Su objetivo principal es:
- Mantener las credenciales y configuraciones fuera del código fuente.
- Facilitar la paridad entre entornos (desarrollo, pruebas, producción).
- Evitar fugas de información sensible.
2. Instalación básica
Para Node.js:
npm install dotenv --save
Para Python:
pip install python-dotenv
3. Estructura de un archivo .env
Un archivo .env
suele tener este formato:
# .env
DB_HOST=localhost
DB_PORT=5432
DB_USER=mi_usuario
DB_PASS=secreto_superseguro
NODE_ENV=development
Reglas básicas:
- Comentarios con
#
. - Formato
KEY=VALOR
sin espacios alrededor del signo. - Escapar caracteres especiales si es necesario.
4. Uso en código
4.1 Node.js
// index.js
require(dotenv).config()
console.log(process.env.DB_HOST)
console.log(process.env.NODE_ENV)
4.2 Python
# app.py
from dotenv import load_dotenv
import os
load_dotenv()
print(os.getenv(DB_HOST))
print(os.getenv(NODE_ENV))
5. Buenas prácticas y seguridad
- .gitignore: Asegúrate de que tu
.env
no se versiona. Ejemplo:# .gitignore .env
- Plantilla .env: Incluye un archivo
.env.example
con claves vacías o valores genéricos. - Seguridad: Para entornos críticos, considera cifrar variables sensibles (OWASP Cryptographic Storage Cheat Sheet).
- Variables obligatorias: Comprueba al iniciar que existan variables esenciales y emite errores tempranos.
6. Comparativa de soluciones
Característica | dotenv | Alternativa |
---|---|---|
Facilidad de uso | Muy alta | Media (vault, AWS SSM) |
Seguridad | Básica | Alta (KMS, Vault) |
Paridad de entornos | Excelente | Variable |
7. Escenarios avanzados
- Múltiples archivos .env:
.env.development
,.env.test
,.env.production
.- Cargar dinámicamente según
NODE_ENV
:
require(dotenv).config({ path: .env.{process.env.NODE_ENV} })
- Expansión de variables: Permite referenciar otras variables dentro del archivo:
# .env HOST=localhost URL=http://{HOST}:3000
- Integración con contenedores: En Docker, es posible usar
--env-file
para inyectar el .env al contenedor.
8. Alternativas corporativas y escalabilidad
En proyectos de gran escala o con altos requerimientos de seguridad, se suelen emplear:
- HashiCorp Vault: Gestión centralizada de secretos con control de acceso.
- AWS Systems Manager Parameter Store: Integración nativa en AWS.
- Azure Key Vault: Solución para entornos Microsoft Azure.
Estas plataformas ofrecen auditoría, rotación automática de credenciales y políticas de acceso detalladas.
9. Recursos y referencias
Artículo extensivo sobre cómo controlar configuraciones con dotenv, adaptado a las mejores prácticas actuales para mantener la seguridad, la escalabilidad y la coherencia entre entornos de desarrollo y producción.
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |