04. III. Configuraciones

Por: Artiko
12factorconfiguracionvariables-de-entornosecretos

04. III. Configuraciones

Guarda la configuración en el entorno.

¿Qué es “configuración”?

Configuración es todo lo que varía entre despliegues (desarrollo, staging, producción): credenciales de base de datos, tokens de servicios externos (Amazon S3, Twitter, Stripe), nombres de host, feature flags específicos de entorno.

No es configuración: rutas internas de la app, nombres de constantes de negocio, o cualquier cosa que sea igual en todos los despliegues — eso es código y va en el repositorio.

El anti-patrón: config en el código

Es común encontrar credenciales guardadas como constantes en el código fuente, o en archivos de configuración versionados junto al repo (config/database.yml, application.properties). Esto viola la separación estricta entre configuración y código que exige la metodología.

El test del open source

Existe una prueba directa para saber si tu configuración está bien separada:

¿Podrías publicar el código fuente de tu aplicación como open source ahora mismo, sin exponer ninguna credencial?

Si la respuesta es “no, primero tendría que sacar las claves de tal archivo”, tu configuración vive en el lugar equivocado.

Por qué no usar archivos de configuración versionados

Los archivos de config no versionados (.gitignored) también tienen problemas:

La solución: variables de entorno

Una aplicación twelve-factor almacena su configuración en variables de entorno (env vars):

DATABASE_URL=postgres://user:pass@host:5432/dbname
STRIPE_SECRET_KEY=sk_live_xxxxx
S3_BUCKET=mi-app-uploads

Ventajas frente a archivos de config:

Un error común: agrupar en “entornos” con nombre

El manifiesto advierte contra crear un archivo config/environments/staging.rb por cada combinación posible de valores. Esto no escala: cada nuevo despliegue (una demo para un cliente, un entorno de QA extra) obliga a crear un nuevo “entorno” nombrado. Las variables de entorno, al ser independientes entre sí, evitan esa explosión combinatoria.

Checklist del factor III

Ya separamos código (I), dependencias (II) y configuración (III). El siguiente factor trata los recursos externos que la app consume: los backing services.