No más .env perdidos: Una solución self-hosted
Abdiel Martinez |Mi experiencia usando Infisical para gestionar variables de entorno: instalación, configuración y uso real en proyectos JavaScript
Luego de hacer tu primer "Hola mundo", un día aprendes que hay valores que, por ser específicos del entorno de ejecución o por seguridad, no deberían estar hardcodeados directamente en tu código fuente. Entonces aprendes que el estándar más común es utilizar un archivo .env
donde volcar todos estos valores que comúnmente conocemos como variables de entorno. Hasta ahí, todo bien.
Sin darte cuenta, el proyecto crece y te toca gestionar las variables de entorno para tu Localhost
, Development
, Staging
y Production
. Podrías utilizar un estándar como este que te podría servir, pero tienes que constantemente darle mantenimiento a estos archivos y fácilmente podrías olvidarte de agregar alguna nueva variable a uno de tus ambientes.
Aparte, tienes el problema de los leaks de API keys que usualmente tú o tu empresa estarán pagando por su uso, y lo sé... también lo he hecho:
- "Oye, ¿me pasas la API key de staging?"
- Envío por Slack/WhatsApp/Telegram
- "Ahora necesito la de producción"
- Más mensajes con secrets
O peor aún, subir el archivo .env
completo al repositorio por accidente. El resultado: secrets dispersos por múltiples canales de comunicación, historial de chat lleno de información sensible, y alto riesgo de que alguien acceda a información que no debería.
Es ahí donde te propongo utilizar Infisical. Lo descubrí hace ya varios meses y ha solucionado los problemas que tenía con la gestión de las variables de entorno.
¿Qué es Infisical?
Infisical es una plataforma open-source diseñada específicamente para la gestión centralizada de variables de entorno y secrets. Piénsalo como un vault inteligente que no solo almacena tus secrets de forma segura, sino que también te ayuda a organizarlos, versionarlos y distribuirlos de manera eficiente.
Antes de que te preocupes porque tendrás que pagar otra suscripción más, te comento que tienen una versión self-hosted. Esta es especialmente atractiva por varias razones:
💰 Costo
Completamente gratuita. Mientras que la versión cloud tiene limitaciones en el plan gratuito (como límite de proyectos y miembros del equipo), la versión self-hosted te da acceso a todas las funcionalidades premium sin restricciones.
🔒 Control Total
Tus secrets nunca salen de tu infraestructura. Podrías incluso correrlo en un Raspberry Pi si quisieras (como hago yo), todo bajo tu control sin publicar tus secrets en una nube de terceros. Esto es crucial cuando trabajas con información sensible o tienes requerimientos de compliance específicos.
En mi experiencia personal, ejecuto Infisical en un Raspberry Pi 5 donde por ahora gestiono 5 proyectos distintos con hasta 4 ambientes por proyecto (Localhost, Development, Staging y Production) sin ningún problema, trabajando con tecnologías tan diversas como Expo, Next.js y NestJS.
Si lo quisieras utilizar para ti en tu propia computadora, con tener Docker instalado sería suficiente. Tampoco consume demasiados recursos. Si quisieras proponerlo para la empresa en la que trabajas, podrían pagar el cloud o podrían correrlo en una instancia de EC2 si te apetece utilizar AWS.
🚀 Instalación
Para ejecutarlo en local te recomiendo seguir la guía oficial. Te tomará unos pocos minutos: solo requerirá que te bajes el archivo docker-compose.yml
oficial, el .env.example
(con suerte tu último .env
😅), lo modifiques según tus necesidades y solo será cuestión de que ejecutes:
docker compose up -d
Al ejecutarlo, este te instanciará 4 servicios diferentes:
db-migration
: Este se detendrá tan pronto complete las migracionesbackend
: Se encargará de toda la magiaredis
: Mejorará los tiempos de respuesta de la solicitud de tus variables de entornodb
: Donde irán tus secretos
Si todo está bien, deberías poder acceder a http://localhost:80
(o la URL que hayas configurado) y crear tu usuario admin.
Ahora necesitarás crear un proyecto:
Ahora tocaría seleccionar un entorno y agregar tus secretos o variables de entorno:
Formas de Agregar Variables
Infisical ofrece varias maneras de agregar variables, cada una útil en diferentes contextos:
- Interfaz web: La forma más visual e intuitiva
- Importación desde archivos: Ideal para migrar desde archivos
.env
,.json
o.yml
existentes - Importar desde otro ambiente: Si tienes secretos en otro ambiente, puedes directamente heredarlos a otro ambiente
Si ya tienes tu archivo .env
, lo más práctico sería importarlo directamente.
✨ Algunas Características Interesantes
Organización Inteligente
Una de las características que más uso son los tags. Puedo etiquetar variables como database
, api
, auth0
, lo que facilita encontrar y organizar secrets relacionados.
Los comentarios en variables son otro game-changer. Puedes documentar para qué sirve cada variable, cuándo fue la última rotación, o cualquier contexto importante que tu yo del futuro agradecerá.
Los reminders te permiten configurar alertas para rotar secrets periódicamente. Así no te olvidarás de cambiar esa API key que expira cada 90 días.
Control y Trazabilidad
El historial de cambios es de lo mejor 🤩. Puedes ver exactamente quién cambió qué y cuándo. Esto es especialmente útil cuando algo deja de funcionar y necesitas rastrear qué cambió recientemente.
Los overrides personales te permiten tener tus propios valores para desarrollo local sin afectar al resto del equipo. Por ejemplo, puedes usar tu propia base de datos local mientras el resto usa la instancia de desarrollo compartida.
Detección de Variables Faltantes
Una funcionalidad que uso constantemente: Infisical te muestra claramente qué variables existen en un ambiente pero faltan en otro. Esto es increíblemente útil cuando:
- Añades una nueva feature que requiere una API key
- Promocionas código de desarrollo a staging
- Configuras un nuevo ambiente
Control de Accesos
Aunque mi enfoque personal es individual, vale la pena mencionar que Infisical brilla cuando trabajas en equipo. Entre otras cosas, puedes:
- Crear grupos de usuarios (Frontend, Backend, DevOps)
- Crear roles personalizados
- Asignar permisos granulares por proyecto
Esto significa que el junior del equipo puede tener acceso completo a development, acceso de solo lectura a staging, y cero acceso a production, todo configurado de manera granular y auditable.
💡 Tip adicional: Si por cualquier razón llegaras a necesitar un archivo
.env
de tus secretos en Infisical, este te permite exportarlos incluyendo los comentarios que hayas agregado previamente.
🔧 Consumiendo las Variables de Entorno
Infisical lo puedes consumir en tu proyecto de distintas maneras. La más práctica es a través de su CLI. Todo lo que necesitarías sería instalarla en tu terminal:
# Instalar la CLI de Infisical
npm install -g @infisical/cli
# Autenticarse (solo la primera vez)
infisical login
# En el directorio del proyecto
infisical init
# Este vincula tu repositorio con tu proyecto de Infisical, generando un archivo .infisical.json
💼 Mi Experiencia Real: 4 Ambientes, 3 Tecnologías
Te comparto cómo lo uso con diferentes tecnologías:
Expo (React Native)
# Ejecutar el proyecto con las variables del ambiente de producción
infisical run --env=prod yarn android
Lo genial es que puedo cambiar entre ambientes sin tocar ni un archivo:
# Para desarrollo local
infisical run --env=local npx expo start
# Para testing
infisical run --env=staging yarn ios
📝 Nota: Puedes utilizar
npm
,yarn
,npx
o cualquier comando al que desees inyectar las variables de entorno.
Next.js
Con Next.js, el workflow es igualmente fluido:
# Para desarrollo local
infisical run --env=dev npm run dev
# Para build de producción
infisical run --env=prod npm run build
⚡ Pro tip: Puedes establecer un entorno predeterminado en el archivo
.infisical.json
, por ejemplodev
, así puedes llamar el comando:infisical run npm run dev
sin tener que especificar el entorno.
NestJS
Para aplicaciones backend con NestJS, donde típicamente manejo secrets más sensibles como conexiones a base de datos:
# Desarrollo
infisical run --env=dev npm run start:dev
# Producción
infisical run --env=prod npm run start:prod
La ventaja real aparece cuando necesitas diferentes configuraciones de base de datos para cada ambiente. En lugar de mantener múltiples archivos .env
, todo está centralizado y versionado.
💡 Tips de Mi Experiencia
Usa un reverse proxy: Si planeas acceder desde múltiples dispositivos o hacer la instancia accesible externamente, configura nginx o Traefik como reverse proxy. En lo personal, uso Nginx Proxy Manager por su interfaz gráfica.
Backups regulares: Si no quieres perder tus variables de entorno, te recomiendo respaldar constantemente el volumen del servicio
db
. Podrías crear uncron job
o utilizar algún contenedor Docker tipo Duplicati.Mantén tus servicios actualizados: El equipo de Infisical constantemente está lanzando nuevas versiones que incluyen parches de seguridad, bugfixes o algún nuevo feature, por lo que te conviene actualizar siempre tus imágenes Docker. Yo uso Watchtower que me verifica si hay una nueva versión, la descarga y vuelve a correr mis servicios con la versión actualizada.
🎯 Conclusiones
Personalmente he encontrado Infisical muy útil, ahorrándome tiempo y dolores de cabeza. Te invito a probarlo. Si tienes alguna duda, puedes dejarla en los comentarios o, si ya lo estás usando, compártenos tu experiencia.