Caso de estudio 13 / 17CI/CD DevOps
Configuración única en tiempo de ejecución para instalaciones aisladas
Cada instalación aislada lee todos sus ajustes de un archivo al arrancar: sin recompilar, nada fijo en el código y un control del paquete.
Stack
- Next.js
- TypeScript
- Node.js
- PowerShell
- Windows batch
- nginx
- CesiumJS
01 · Cómo funciona
- HoyaModificado en este trabajo
- Flujo de datos
Qué hace
La plataforma de monitoreo corre en las instalaciones de cada cliente: un servidor aislado, sin acceso a internet, con la API, el cliente web, el servicio de mapas 3D y dos bases de datos. Convertí un solo conjunto de archivos en la fuente única de cada ajuste, con cada valor definido una vez y leído al arrancar.
Leer más
Un control en el build impide que valores, o datos, vuelvan a quedar fijados en el código o en el paquete.
7 conexiones· elige un componente para ver su recorrido
- Config por instalación a Tabla de claves: leído una vez al arrancar
- Tabla de claves a API: valores; nombra las ausentes
- Config por instalación a Script de config runtime: valores web al arrancar
- Script de config runtime a Cliente web: carga antes de la app
- Tabla de claves a Control del build: lista las claves permitidas
- Control del build a Paquete de release: falla si hay valor fijado
- Paquete de release a Config por instalación: trae plantilla, sin valores
02Resultados
- R01Cuanto más bajo, mejor
Valores fijados en el build
Antes 25, después 0, a cero. Cuanto más bajo, mejor.AntesDespués - R02Cuanto más bajo, mejor
Números de puerto fijos en scripts de despliegue
Antes 58, después 1, 58× menor. Cuanto más bajo, mejor.AntesDespués - R03Cuanto más bajo, mejor
Herramientas de instalación y mantenimiento con fallas
Antes 4, después 0, a cero. Cuanto más bajo, mejor.AntesDespués
Qué logró
- Cambiar un ajuste: recompilar por 25 valores fijados → editar el archivo y reiniciar, para cualquier valor
- Configuración oculta: 27 valores por defecto en el código, 21 claves sin leer y 41 ausentes en las plantillas → 0
- Desplegar en un servidor: la carpeta completa con valores de desarrollo → una copia limpia, con respaldo previo de los ajustes
Leer más
- Datos de campo en los paquetes: 3.2 MB de lecturas reales → ninguno, verificado sobre el paquete terminado
- Aislamiento de red: 6 llamadas a un servicio de mapas alojado sin token → 0
El desafío
Cada instalación es aislada y pertenece al cliente, así que cada ajuste debe ser correcto en el propio servidor. Una auditoría del origen de cada valor mostró que los archivos de configuración no mandaban: los valores del navegador quedaban fijados al compilar, la API corría en silencio con valores por defecto escritos en el código, algunos de ellos datos reales de clientes, y las plantillas y el código no coincidían en qué claves existían.
Leer más
Los despliegues copiaban los ajustes de desarrollo sobre los del servidor, cada paquete incluía lecturas reales de campo y, aun sin el token de mapas, la aplicación seguía llamando a un servicio de mapas alojado.
Qué aprendí
Un ajuste vacío no equivale a apagado: con el token vacío, la librería de mapas recurría a uno propio, así que hoy sin token no hay ningún mapa alojado. Hay que proteger lo que se entrega, no solo el código fuente: el rastreador de archivos del build copiaba cada JSON que el código podía leer, datos de prueba incluidos, por eso el control corre sobre el paquete terminado.
Leer más
Las claves ausentes con un valor por defecto seguro advierten en vez de bloquear, y un respaldo nunca se restaura en silencio, porque podría revivir una configuración obsoleta.
Stack
- Next.js
- TypeScript
- Node.js
- PowerShell
- Windows batch
- nginx
- CesiumJS
Habilidades
- Gestión de configuración
- Ingeniería de build y release
- Despliegue on-premises
- Higiene de seguridad
- Auditoría de código

