Saltar al contenido principal
MDev Env Pro
Guía: Guía Mise - Adiós nvm/pyenv85% Completado

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.

Directivas: _.file, _.pathCifrado con SOPS + Age1Password CLI nativo

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:

mise.tomltoml
[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:

mise.tomltoml
[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.

  1. Genera tu llave local de age en tu máquina:

    mise use ubi:getsops/sops ubi:FiloSottile/age
    age-keygen -o ~/.config/sops/age/keys.txt
  2. Configura tu mise.toml para cargar el archivo cifrado secrets.enc.env:

mise.tomltoml
[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:

mise.tomltoml
[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.


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:

Reto Ninja: Secrets & Variables Seguras 🔒
Pregunta 1/3
❯reto --step=1

¿Cómo cargas múltiples archivos .env en orden de prioridad (cascada) en mise.toml?

Ejercicio Práctico Ninja 🥷

  1. En tu archivo mise.toml, agrega:
    [env]
    SALUDO_PRO = "Habla causita, mise controla las variables"
    _.path = ["./scripts"]
  2. Crea una carpeta scripts/ y un archivo scripts/demo.sh:
    #!/usr/bin/env bash
    echo "$SALUDO_PRO"
  3. Dale permisos de ejecución: chmod +x scripts/demo.sh.
  4. Corre demo.sh directamente 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.