# Variables de entorno

> Ajustes con nombre que un programa lee desde fuera de su código, como dónde está su base.

- Nivel: Intermedio
- Temas: Software
- URL: https://tidbit.legios.com.ar/es/environment-variables/
- En inglés: [Environment variables](https://tidbit.legios.com.ar/environment-variables/)

Las **variables de entorno** son pares de nombre y valor que el sistema operativo le pasa a cada programa cuando arranca, como `DATABASE_URL=postgres://…` o `LOG_LEVEL=debug`. El programa las lee en lugar de tener esos valores escritos en su código. Son una idea vieja de Unix; una que seguro usaste sin darte cuenta es `PATH`, que le dice a la computadora dónde buscar los comandos.

Su función principal hoy es que el **mismo código** corra en lugares distintos. En la laptop de un developer, `DATABASE_URL` apunta a una base chica local; en producción apunta a la real. El código no cambia, cambia el entorno que lo rodea. Esta separación entre código y configuración es uno de los principios de la conocida guía **Twelve-Factor App** para construir software en la nube.

También son la forma habitual de pasarles **secretos** a los programas, como una API key o la contraseña de una base de datos, sin meterlos en el repositorio. Durante el desarrollo, muchos proyectos los guardan en un archivo llamado `.env` que una librería carga al arrancar; ese archivo tiene que estar en `.gitignore` para que nunca llegue a Git. En la nube, servicios como AWS Lambda, los contenedores y los pipelines de CI/CD te dejan definir variables de entorno y, para valores sensibles, completarlas desde un gestor de secretos.

## Una analogía

Como una receta que dice "horneá a la temperatura que necesite tu horno" en vez de un número fijo. La misma receta sirve en cualquier cocina; cada cocina pone su propio valor.

## Para quedarse

- La configuración vive fuera del código, así que un mismo build corre en cualquier lado.
- Cada entorno, como local, staging o producción, define sus propios valores.
- Es la forma común de pasar secretos sin commitearlos.
- Los archivos `.env` no van en Git.

## Para seguir leyendo

- [Configuración, de The Twelve-Factor App](https://12factor.net/es/config)
- [Variable de entorno en Wikipedia](https://es.wikipedia.org/wiki/Variable_de_entorno)

## Términos relacionados

- [Sistema operativo](https://tidbit.legios.com.ar/es/operating-system/): El software base que maneja un dispositivo y reparte su hardware entre todas las apps.
- [Computación en la nube](https://tidbit.legios.com.ar/es/cloud-computing/): Alquilar computadoras por internet en vez de comprar las tuyas.
- [Clave de API](https://tidbit.legios.com.ar/es/api-key/): Un texto secreto que identifica a tu app cuando llama a la API de otro.
- [Base de datos](https://tidbit.legios.com.ar/es/database/): Un depósito ordenado de datos que los programas consultan y actualizan sin riesgo.
- [Git](https://tidbit.legios.com.ar/es/git/): Una máquina del tiempo para el código: cada cambio guardado, por quién y por qué.
- [AWS Lambda](https://tidbit.legios.com.ar/es/aws-lambda/): Correr un pedazo de código solo cuando pasa algo, sin ningún servidor que administrar.
- [Contenedor](https://tidbit.legios.com.ar/es/container/): Una caja cerrada con un programa y todo lo que necesita para correr en cualquier lado.
- [CI/CD](https://tidbit.legios.com.ar/es/ci-cd/): Automatización que construye, prueba y publica cada cambio, para que lanzar sea rutina.
