Controlar configuraciones con dotenv

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

  1. 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}
    })
  2. Expansión de variables: Permite referenciar otras variables dentro del archivo:
    # .env
    HOST=localhost
    URL=http://{HOST}:3000
  3. 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 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *