En este módulo aprenderás:
- Manejo pro de variables con _.file, _.path, sops+age, 1Password CLI y convención .env.local sin fugar credenciales.
- Comandos y configuraciones clave para 11. Secrets y Variables: Adiós al .env Commiteado
- Ejercicios prácticos listos para probar en tu terminal local
Habla causa: Si commiteas llaves secretas, vas a pagar la nube con Yape
Mano, el clásico error de novato: crear un .env con la API key de producción de Stripe, OpenAI o AWS, olvidarse de meterlo al .gitignore, y subirlo a GitHub público. Al día siguiente despiertas en tu jato con una deuda de $5,000 dólares en la tarjeta y te toca vender hasta la laptop para pagar. ¡Estás renegando gratis!
En mise, las variables de entorno son ciudadanas de primera clase. Olvídate de dependencias extra como dotenv o herramientas lentazas: mise maneja lectura de archivos jerárquicos, agregación al PATH, descifrado con SOPS + Age e integración con gestores de secretos como 1Password.
1. Directivas Maestras: _.file y _.path
Dentro de la sección [env] de tu mise.toml, dispones de directivas especiales que comienzan con guion bajo _:
Inclusión de múltiples archivos con _.file
Puedes cargar archivos .env en orden de cascada. Si una variable está en .env.local, sobreescribe a la de .env.base:
[env]
# Carga archivos en orden de prioridad (el último gana)
_.file = [
".env",
".env.$MISE_ENV", # .env.development o .env.production
".env.local" # Ignorado en Git para secretos locales
]
APP_PORT = "3000"
DATABASE_URL = "postgresql://localhost:5432/mi_db"
Modificación directa de rutas con _.path
Si compilas scripts en ./bin o tienes herramientas locales, no necesitas exportar $PATH en tu shell:
[env]
# Agrega directorios al PATH relativo a la raíz del proyecto
_.path = ["./bin", "./node_modules/.bin", "./scripts"]
2. Secretos Cifrados con SOPS y Age (Nivel Senior)
Para equipos profesionales, commitear archivos .env encriptados en el repositorio es el estándar de oro. Con SOPS (Secrets OPerationS) y Age, los valores quedan cifrados en AES-256 o llaves asimétricas, y mise los desencripta en memoria sin escribir secretos en texto plano en el disco.
-
Genera tu llave local de
ageen tu máquina:mise use ubi:getsops/sops ubi:FiloSottile/age age-keygen -o ~/.config/sops/age/keys.txt -
Configura tu
mise.tomlpara cargar el archivo cifradosecrets.enc.env:
[env]
# SOPS desencripta el archivo automáticamente al entrar al directorio
_.file = { path = "secrets.enc.env", type = "sops" }
Cuando ejecutas cualquier tarea o comando dentro del proyecto, mise inyecta las variables desencriptadas de frente en el proceso actual. Si un intruso clona tu repo, solo verá texto cifrado ininteligible. ¡Bacán y seguro!
3. Integración con 1Password CLI (op://)
Si en tu chamba usan 1Password para compartir credenciales del equipo, mise puede resolver referencias del tipo op:// sin que tengas que copiar y pegar tokens a mano:
[tools]
"ubi:1password/op" = "latest"
[env]
# Jala el secreto directo de la bóveda de 1Password
STRIPE_SECRET_KEY = "op://Engineering/stripe-dev/credential"
AWS_ACCESS_KEY_ID = "op://CloudTeam/aws-staging/access-key"
AWS_SECRET_ACCESS_KEY = "op://CloudTeam/aws-staging/secret-key"
Al abrir la terminal, 1Password te pedirá tu huella o master password una sola vez, y tus variables quedarán listas en memoria.
Jamás commitees archivos .env.local
Asegúrate siempre de tener esta línea en tu .gitignore global o local:
.env.local
.env.*.local
*.enc.keySi se te escapa una llave privada de AWS o Stripe, en menos de 5 minutos los bots de internet te van a dejar la cuenta bancaria en cero.
4. Convención Jerárquica Recomendada
Para no armar una feria patronal de variables en tu equipo, sigue esta estructura limpia:
mise.toml: Variables globales no sensibles y configuración de herramientas..env.example: Plantilla con nombres de variables sin valores reales para los nuevos miembros del equipo..env.local: Valores sensibles locales (claves de API personales, passwords locales de base de datos).secrets.enc.env: Secretos compartidos cifrados con SOPS.
Reto Ninja de la Lección 🥷
Demuestra que dominas los Secretos y Variables en mise respondiendo este test rápido:
¿Cómo cargas múltiples archivos .env en orden de prioridad (cascada) en mise.toml?
Ejercicio Práctico Ninja 🥷
- En tu archivo
mise.toml, agrega:[env] SALUDO_PRO = "Habla causita, mise controla las variables" _.path = ["./scripts"] - Crea una carpeta
scripts/y un archivoscripts/demo.sh:#!/usr/bin/env bash echo "$SALUDO_PRO" - Dale permisos de ejecución:
chmod +x scripts/demo.sh. - Corre
demo.shdirectamente en tu terminal sin./scripts/. ¡Mise agregó la carpeta a tu PATH al instante!
¿Terminaste esta lección?
Marca tu progreso para sincronizar el avance en tu navegador.