Variables de entorno y configuración
Algunos valores no se pueden escribir dentro de tu código: claves secretas, contraseñas de , la dirección de un servicio. Y algunos necesitan cambiar dependiendo de dónde se ejecute la aplicación. El código que pruebas en tu laptop (el entorno de desarrollo, o dev) debería hablar con una base de datos de prueba; la aplicación en vivo que tocan tus usuarios (el entorno de producción, o prod) debe hablar con la real — usando el mismo código.
La respuesta son las variables de entorno (a menudo "env vars"): valores nombrados que viven fuera del código y se le proporcionan cuando se ejecuta. El código dice "dame DATABASE_URL", y el entorno decide cuál entregar.
# A config file (e.g. .env) — values live here, not in the code
DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H... # dev = a test key
SEND_REAL_EMAILS=false # don't email real users while testing
Dos reglas te ahorrarán un verdadero dolor de cabeza:
- Los secretos nunca van en el código. Cualquier cosa en tu código puede terminar siendo pública (especialmente en un repositorio compartido), y una clave de pago o contraseña de base de datos filtrada es una emergencia real. Los secretos pertenecen a las variables de entorno, fuera del control de versiones.
- Dev y prod son diferentes. El punto es que el mismo código se comporte correctamente en ambos, porque el entorno — no el código — decide qué base de datos y qué claves usar.
Mismo código, dos hogares — las variables de entorno son lo que difiere:
SAME CODE
/ \
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ DEV │ │ PROD │
│ your laptop │ │ hosting (cloud)│
│ test database │ │ real database │
│ test API key │ │ live API key │
│ fake emails │ │ real emails │
└─────────────────┘ └─────────────────┘
only you see it your users see it