[P2606] WebServer NGINX: plan actualizado, ficha nodo, HTTPS operativo
- P2606: Plan v1.1 EN EJECUCIÓN. Fases 1-3 completadas. - Ficha nodo srvv-nginx-rm.md. P2606 en adn/07_proyectos.md. - Incluye cambios acumulados de sesiones anteriores.
This commit is contained in:
@@ -18,7 +18,7 @@ Unir la PC física `pc-dasu0` (oficina DASUTeN) al dominio `dasuten.utnlr`. La i
|
||||
|:-----|:-------------|:-----|:----------:|:---------:|:--------:|:------:|
|
||||
| `dasu-srvv-dc` | (✅ antes dc-dasuten) | VM 100 (DC/DNS) | `10.0.100.10` | ✅ | ❓ Fallando | ✅ Renombrado |
|
||||
| `dasu-srvv-sql` | (✅ antes sql-dasuten) | VM 101 (SQL) | `10.0.100.11` | ✅ | ✅ | ✅ Renombrado |
|
||||
| `dasu-pcv-0` | (antes pcv-dasu0) | VM 102 (Test) | `10.0.100.12` | ❌ | ✅ | ✅ Renombrado |
|
||||
| `dasu-pcv` | (antes pcv-dasu0) | VM 102 (Test) | `10.0.100.12` | ❌ | ✅ | ✅ Renombrado |
|
||||
| `dasu-pc0` | (antes pc-dasu0) | PC Física | `192.168.1.13` (DHCP) | ❌ offline | ✅ | ⏳ Por renombrar |
|
||||
| `srv-dasu` | — | Hypervisor | `10.0.100.1` | ✅ (`100.112.46.104`) | ✅ | ✅ Operativo |
|
||||
|
||||
@@ -35,7 +35,7 @@ Unir la PC física `pc-dasu0` (oficina DASUTeN) al dominio `dasuten.utnlr`. La i
|
||||
│ (.10) [AD] │ ← ← ← ← ← ← ← ← ┘
|
||||
│ dasu-srvv-sql│
|
||||
│ (.11) [SQL] │
|
||||
│ dasu-pcv-0 │
|
||||
│ dasu-pcv │
|
||||
│ (.12) [Test]│
|
||||
└──────────────┘
|
||||
```
|
||||
@@ -71,7 +71,7 @@ Unir la PC física `pc-dasu0` (oficina DASUTeN) al dominio `dasuten.utnlr`. La i
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| 1.0.1 | `sql-dasuten` (VM 101) | `dasu-srvv-sql` | ✅ Completado (16/03) |
|
||||
| 1.0.2 | `dc-dasuten` (VM 100) | `dasu-srvv-dc` | ✅ Completado (16/03) |
|
||||
| 1.0.3 | `pcv-dasu0` (VM 102) | `dasu-pcv-0` | ✅ Completado (16/03) |
|
||||
| 1.0.3 | `pcv-dasu0` (VM 102) | `dasu-pcv` | ✅ Completado (16/03) |
|
||||
| 1.0.4 | `pc-dasu0` (PC Física) | `dasu-pc0` | ⏳ Pendiente |
|
||||
|
||||
**Procedimiento validado (sql-dasuten → dasu-srvv-sql):**
|
||||
@@ -111,15 +111,15 @@ Unir la PC física `pc-dasu0` (oficina DASUTeN) al dominio `dasuten.utnlr`. La i
|
||||
|
||||
> ⚠️ **Precaución DC:** Al renombrar el Controlador de Dominio, verificar que los registros SRV de DNS se actualicen automáticamente (`_ldap._tcp.dasuten.utnlr`, `_kerberos._tcp.dasuten.utnlr`). Ejecutar `dcdiag /q` post-rename.
|
||||
|
||||
#### Tarea 1.0.3: pcv-dasu0 → dasu-pcv-0
|
||||
#### Tarea 1.0.3: pcv-dasu0 → dasu-pcv
|
||||
|
||||
| ID | Tarea | Estado |
|
||||
| :--- | :--- | :--- |
|
||||
| 1.0.3.a | Verificar SSH accesible desde srv-dasu (7022) | ✅ SSH probado |
|
||||
| 1.0.3.b | Desplegar clave RSA vía sshpass (si no está desplegada) | ✅ Desplegada |
|
||||
| 1.0.3.c | Rename-Computer -NewName dasu-pcv-0 -Force -Restart | ✅ Completado |
|
||||
| 1.0.3.d | Actualizar Proxmox: `sudo qm set 102 --name dasu-pcv-0` | ✅ Completado |
|
||||
| 1.0.3.e | Actualizar ficha `nodos/pcv-dasu0.md` → `nodos/dasu-pcv-0.md` | ✅ Completado |
|
||||
| 1.0.3.c | Rename-Computer -NewName dasu-pcv -Force -Restart | ✅ Completado |
|
||||
| 1.0.3.d | Actualizar Proxmox: `sudo qm set 102 --name dasu-pcv` | ✅ Completado |
|
||||
| 1.0.3.e | Actualizar ficha `nodos/pcv-dasu0.md` → `nodos/dasu-pcv.md` | ✅ Completado |
|
||||
| 1.0.3.f | Verificar conectividad y actualización de DNS | ✅ Confirmado DNS |
|
||||
|
||||
#### Tarea 1.0.4: pc-dasu0 → dasu-pc0
|
||||
@@ -265,7 +265,7 @@ Unir la PC física `pc-dasu0` (oficina DASUTeN) al dominio `dasuten.utnlr`. La i
|
||||
|
||||
1. [Proyecto P2601 DASUTEN](../P2601_dasuten.md)
|
||||
2. [Nodo: pc-dasu0](../../../nodos/pc-dasu0.md)
|
||||
3. [Nodo: dasu-pcv-0](../../../nodos/dasu-pcv-0.md) *(VM referencia, ya unida al dominio)*
|
||||
3. [Nodo: dasu-pcv](../../../nodos/dasu-pcv.md) *(VM referencia, ya unida al dominio)*
|
||||
4. [Nodo: dasu-srvv-dc](../../../nodos/dasu-srvv-dc.md)
|
||||
5. [Nodo: srv-dasu](../../../nodos/srv-dasu.md)
|
||||
6. [Plan 06.01: Red srv-dasu](P2601.06.01_Red-SrvDasu.md)
|
||||
@@ -280,7 +280,7 @@ Unir la PC física `pc-dasu0` (oficina DASUTeN) al dominio `dasuten.utnlr`. La i
|
||||
- ✅ Clave RSA generada en srv-dasu (rmonla) y desplegada en sql-dasuten (#1117)
|
||||
- ✅ **Hostname sql-dasuten → dasu-srvv-sql** completado: Rename-Computer + Proxmox + ficha (#1117)
|
||||
- ✅ **Hostname dc-dasuten → dasu-srvv-dc** completado: netdom vía Invoke-Command (WinRM) desde dasu-srvv-sql porque el SSH Server estaba roto en el DC (#1118)
|
||||
- ✅ **Hostname pcv-dasu0 → dasu-pcv-0** completado: Rename-Computer (via domain credential) + Proxmox + Clave RSA + DNS OK (#1119)
|
||||
- ✅ **Hostname pcv-dasu0 → dasu-pcv** completado: Rename-Computer (via domain credential) + Proxmox + Clave RSA + DNS OK (#1119)
|
||||
|
||||
### 15-16/03/2026 — Sesión de Infraestructura (Madrugada)
|
||||
- ✅ Backups VZDump de dc-dasuten (#1093) y sql-dasuten (#1094)
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
# P2601.07.01 - Plan: Integración dasu-pc-0 a Dominio DASUTEN
|
||||
|
||||
**Fecha:** 18 de marzo de 2026
|
||||
**Autor:** Antigravity (IA ADN)
|
||||
**Estado:** ✅ FINALIZADO
|
||||
**Proyecto Padre:** [P2601 - Red DASUTEN](../P2601_dasuten.md)
|
||||
|
||||
## 📋 Objetivo
|
||||
Integrar exitosamente el nodo físico `dasu-pc-0` al dominio `dasu-srvv-dc` para centralizar la gestión de usuarios, aplicar GPOs y unificar la red operativa de DASUTEN.
|
||||
|
||||
## 📅 Fases de Implementación
|
||||
|
||||
### **Fase 7.1: Preparación y Validación (Completada)**
|
||||
- [x] **1.A:** Verificación de conectividad IP con `dasu-srvv-dc` (vía Tailscale 100.85.117.101).
|
||||
- [x] **1.B:** Configuración de DNS primario en `dasu-pc-0` apuntando a DC.
|
||||
- [x] **1.C:** Validación de credenciales de Administrador de Dominio.
|
||||
|
||||
### **Fase 7.2: Ejecución de AD-Join (Completada)**
|
||||
- [x] **2.A:** Unión al dominio `dasuten.utnlr`.
|
||||
- [x] **2.B:** Reinicio de la máquina y comprobación de persistencia.
|
||||
- [x] **2.C:** Confirmación de visibilidad en el contenedor de Computers del DC.
|
||||
|
||||
### **Fase 7.3: Post-Configuración y Seguridad (Completada)**
|
||||
- [x] **3.A:** Verificación de aplicación de GPOs básicas.
|
||||
- [x] **3.B:** Renombramiento definitivo a `dasu-pc-0` inyectado vía SSH (RSA).
|
||||
- [x] **3.C:** Registro final en la ontología del ADN y ficha del nodo.
|
||||
|
||||
### **Fase 7.4: Creación de Usuarios de Dominio (Completada)**
|
||||
- [x] **4.A:** Crear usuario `aalmiron` (Andrea ALMIRON) en AD.
|
||||
- [x] **4.B:** Crear usuario `rmolina` (Romina MOLINA) en AD.
|
||||
- [x] **4.C:** Otorgar acceso a `dasu-pc-0` para estos usuarios (Verificado).
|
||||
|
||||
---
|
||||
|
||||
## 📊 Progreso
|
||||
|
||||
```
|
||||
Fase 1: ██████████ 100% Preparación y Validación
|
||||
Fase 2: ██████████ 100% Ejecución de AD-Join
|
||||
Fase 3: ██████████ 100% Post-Configuración
|
||||
Fase 4: ██████████ 100% Creación de Usuarios
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Referencias
|
||||
- **DC:** `dasu-srvv-dc` (100.85.117.101)
|
||||
- **Host:** `dasu-pc-0` (Ex `pc-dasu0`)
|
||||
- **Ontología:** [01_ontologia.md](../../../adn/01_ontologia.md)
|
||||
@@ -0,0 +1,19 @@
|
||||
# P2601.07.01 - Plan: Integración dasu-pc a Dominio DASUTEN
|
||||
|
||||
> **Objetivo**: Integrar exitosamente el nodo físico `dasu-pc` al dominio `dasu-srvv-dc` para centralizar la gestión de usuarios, aplicar GPOs y unificar la red operativa de DASUTEN.
|
||||
|
||||
- [x] **1.B:** Configuración de DNS primario en `dasu-pc` apuntando a DC.
|
||||
- [x] **3.B:** Renombramiento definitivo a `dasu-pc` inyectado vía SSH (RSA).
|
||||
- [x] **4.C:** Otorgar acceso a `dasu-pc` para estos usuarios (Verificado).
|
||||
- **Host:** `dasu-pc` (Ex `pc-dasu0`)
|
||||
- [P2601.07.01] Renombramiento de `dasu-pc-0` a `dasu-pc` completado.
|
||||
|
||||
| dasu-pc | 100.100.145.51 | ✅ ONLINE |
|
||||
| dasu-srvv-dc | 100.85.117.101 | ❌ offline (VM apagada) |
|
||||
| dasu-srvv-sql | 100.107.24.124 | ❌ offline (VM apagada) |
|
||||
|
||||
---
|
||||
|
||||
**Fecha de implementación:** 2026-03-25
|
||||
**Bitácora de referencia:** Evento 1273
|
||||
**Responsable:** Lic. Ricardo MONLA
|
||||
@@ -0,0 +1,166 @@
|
||||
# P2601.08 - Unificación de Redes: Subred ISP
|
||||
|
||||
> **Objetivo**: Migrar las VMs de srv-dasu y dasu-pc de sus redes aisladas a la subred del router ISP, unificando toda la infraestructura DASUTEN en una sola red.
|
||||
|
||||
## Contexto
|
||||
|
||||
### Topología Actual (2026-03-26)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ROUTER ISP (Gateway: 192.168.1.1) │
|
||||
│ Subred: 192.168.1.0/24 │
|
||||
└─────────────────────┬───────────────────────────────────────────┘
|
||||
│
|
||||
┌────────────┴────────────┐
|
||||
│ │
|
||||
↓ ↓
|
||||
┌─────────────────┐ ┌─────────────────┐
|
||||
│ dasu-pc │ │ srv-dasu │
|
||||
│ (PC Física) │ │ (Proxmox) │
|
||||
│ Tailscale: │ │ enp33s0: │
|
||||
│ 100.100.145.51│ │ 192.168.1.13 │
|
||||
│ Sin red local │ │ │
|
||||
└─────────────────┘ └────────┬────────┘
|
||||
│
|
||||
┌────────┴────────┐
|
||||
│ vmbr0 │
|
||||
│ 10.0.100.1/24 │
|
||||
└────────┬────────┘
|
||||
│
|
||||
┌──────────────┼──────────────┐
|
||||
↓ ↓ ↓
|
||||
VM 100 VM 101 VM 102
|
||||
(DC) (SQL) (PCV)
|
||||
10.0.100.10 10.0.100.11 10.0.100.12
|
||||
```
|
||||
|
||||
### Problema Identificado
|
||||
- **VMs**: En subred aislada `10.0.100.0/24` (solo accesible via Tailscale o link directo a srv-ns8)
|
||||
- **dasu-pc**: Conectada vía Tailscale, NO en la red física del router ISP
|
||||
- **Fragmentación**: 3 segmentos de red diferentes (Tailscale VPN, ISP, Red local VMs)
|
||||
|
||||
### Topología Objetivo
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ ROUTER ISP (Gateway: 192.168.1.1) │
|
||||
│ Subred: 192.168.1.0/24 │
|
||||
└─────────────────────┬───────────────────────────────────────────┘
|
||||
│
|
||||
┌────────────┴─────────────────────────────────┐
|
||||
│ │
|
||||
↓ ↓
|
||||
┌─────────────────┐ ┌─────────────────────────┐
|
||||
│ dasu-pc │ ←─── Ethernet Directo ───│ srv-dasu (Proxmox) │
|
||||
│ 192.168.1.20 │ │ enp33s0: 192.168.1.10 │
|
||||
│ (Sin TS) │ │ │
|
||||
└─────────────────┘ │ VMs (sin Bridge) │
|
||||
│ vmbr0: 192.168.1.1/24 │
|
||||
│ ├── VM 100: .21 (DC) │
|
||||
│ ├── VM 101: .22 (SQL) │
|
||||
│ └── VM 102: .23 (PCV) │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
## Análisis Técnico
|
||||
|
||||
### Componentes a Modificar
|
||||
|
||||
| Componente | Acción | Riesgo |
|
||||
|------------|--------|--------|
|
||||
| **srv-dasu** (enp33s0) | Cambiar de DHCP a IP fija en subnet ISP | Bajo |
|
||||
| **srv-dasu** (vmbr0) | Cambiar de 10.0.100.1 a 192.168.1.1 | Medio |
|
||||
| **VMs** (vNIC) | Cambiar IPs de 10.0.100.x a 192.168.1.x | Alto |
|
||||
| **DC** (dasu-srvv-dc) | Actualizar DNS, verificar AD | Alto |
|
||||
| **dasu-pc** | Conectar por cable al router ISP | Medio |
|
||||
| **Tailscale** | Evaluar si mantener o remover | Bajo |
|
||||
|
||||
### Pre-Requisitos
|
||||
|
||||
1. **Verificar capacidad del router ISP**: Confirmar DHCP range disponible
|
||||
2. **Backup completo**: VZDump de todas las VMs antes de migración
|
||||
3. **Documentar configuración actual**: IPs, rutas, NAT
|
||||
4. **Plan de rollback**: Procedimiento para revertir si falla
|
||||
|
||||
## Plan de Ejecución
|
||||
|
||||
### Fase 1: Preparación (Pre-Migración)
|
||||
|
||||
| ID | Tarea | Tiempo Est. | Estado |
|
||||
|----|-------|-------------|--------|
|
||||
| 1.1 | Verificar estado actual de red (srv-dasu, VMs) | 15 min | ⏳ |
|
||||
| 1.2 | VZDump offline de VM 100 (DC) | 30 min | ⏳ |
|
||||
| 1.3 | VZDump offline de VM 101 (SQL) | 30 min | ⏳ |
|
||||
| 1.4 | VZDump offline de VM 102 (PCV) | 20 min | ⏳ |
|
||||
| 1.5 | Documentar IPs actuales y configuración | 15 min | ⏳ |
|
||||
| 1.6 | Verificar acceso físico a dasu-pc | 5 min | ⏳ |
|
||||
|
||||
### Fase 2: Migración de srv-dasu
|
||||
|
||||
| ID | Tarea | Tiempo Est. | Estado |
|
||||
|----|-------|-------------|--------|
|
||||
| 2.1 | Asignar IP estática a enp33s0 (192.168.1.10) | 10 min | ⏳ |
|
||||
| 2.2 | Reconfigurar vmbr0 (192.168.1.1/24) | 10 min | ⏳ |
|
||||
| 2.3 | Actualizar NAT/Masquerade | 5 min | ⏳ |
|
||||
| 2.4 | Actualizar DNS (no usar más 10.0.100.10) | 5 min | ⏳ |
|
||||
| 2.5 | Reiniciar red en srv-dasu | 5 min | ⏳ |
|
||||
|
||||
### Fase 3: Migración de VMs
|
||||
|
||||
| ID | Tarea | Tiempo Est. | Estado |
|
||||
|----|-------|-------------|--------|
|
||||
| 3.1 | Reconfigurar vNIC de VM 100 (DC) | 10 min | ⏳ |
|
||||
| 3.2 | Reiniciar VM 100 y verificar conectividad | 15 min | ⏳ |
|
||||
| 3.3 | Reconfigurar vNIC de VM 101 (SQL) | 10 min | ⏳ |
|
||||
| 3.4 | Reiniciar VM 101 y verificar conectividad | 15 min | ⏳ |
|
||||
| 3.5 | Reconfigurar vNIC de VM 102 (PCV - dasu-pcv) | 10 min | ⏳ |
|
||||
| 3.6 | Reiniciar VM 102 y verificar conectividad | 15 min | ⏳ |
|
||||
|
||||
### Fase 4: Integración de dasu-pc
|
||||
|
||||
| ID | Tarea | Tiempo Est. | Estado |
|
||||
|----|-------|-------------|--------|
|
||||
| 4.1 | Conectar dasu-pc al router ISP por cable | 10 min | ⏳ |
|
||||
| 4.2 | Configurar IP estática (192.168.1.20) | 10 min | ⏳ |
|
||||
| 4.3 | Verificar conexión a VMs (ping DC, SQL) | 10 min | ⏳ |
|
||||
| 4.4 | Test de acceso a servicios (AD, SQL) | 15 min | ⏳ |
|
||||
| 4.5 | Desinstalar o reconfigurar Tailscale | 10 min | ⏳ |
|
||||
|
||||
### Fase 5: Verificación y Cierre
|
||||
|
||||
| ID | Tarea | Tiempo Est. | Estado |
|
||||
|----|-------|-------------|--------|
|
||||
| 5.1 | Verificar acceso a Internet desde VMs | 10 min | ⏳ |
|
||||
| 5.2 | Verificar servicios (AD, SQL) funcionando | 15 min | ⏳ |
|
||||
| 5.3 | Test de aplicación DASUTEN | 20 min | ⏳ |
|
||||
| 5.4 | Actualizar documentación (nodos, proyecto) | 15 min | ⏳ |
|
||||
| 5.5 | Actualizar Tailscale subnet router si corresponde | 10 min | ⏳ |
|
||||
|
||||
## Riesgos y Mitigaciones
|
||||
|
||||
| Riesgo | Impacto | Mitigación |
|
||||
|--------|---------|-------------|
|
||||
| Pérdida de conectividad durante migración | Alto | Mantener acceso Tailscale como fallback |
|
||||
| Fallo en reinicio de VMs | Alto | VZDump previo, procedimiento de rollback |
|
||||
| AD DS deja de funcionar tras cambio IP | Alto | Verificar y actualizar registros DNS internos |
|
||||
| dasu-pc no puede unirse al dominio | Medio | Verificar DNS指向 correcto |
|
||||
| Conflicto de IPs en la subnet | Medio | Usar IPs fuera del rango DHCP del router |
|
||||
|
||||
## Métricas Estimadas
|
||||
|
||||
- **Tiempo Total**: ~4-5 horas (distribuidas en múltiples sesiones)
|
||||
- **Costo**: $0 (solo recursos existentes)
|
||||
- **Beneficio**: Red unificada, menor dependencia de VPN
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
- Subnet del router ISP verificada: `192.168.1.0/24` (gateway `192.168.1.1`)
|
||||
- Rango DHCP del router: Por determinar (necesita acceso a config del router)
|
||||
- IPs sugeridas: srv-dasu `.10`, VMs `.21-.23`, dasu-pc `.20`
|
||||
-Mantener Tailscale para acceso remoto desde exterior (Facultad)
|
||||
|
||||
**Creado**: 2026-03-26 14:05
|
||||
**Evento**: 1299
|
||||
@@ -0,0 +1,137 @@
|
||||
# Plan: DASUTEN sin Domain Controller (Modo Workgroup)
|
||||
|
||||
**Código:** P2601.09
|
||||
**Fecha:** 27 de marzo de 2026
|
||||
**Autor:** Sistema ADN
|
||||
**Versión:** 2.2
|
||||
**Estado:** 🚧 EN EJECUCIÓN (Fase 2 en progreso — VM 103 creada, pendiente instalación OS)
|
||||
|
||||
## 📋 Resumen Ejecutivo
|
||||
|
||||
Evaluar si el sistema DASUTEN puede operar **sin la dependencia de un Domain Controller (AD DS)**, utilizando únicamente un SQL Server y una PC cliente en modo **Workgroup**. Esto simplifica significativamente la infraestructura y elimina los problemas de red asociados al dominio.
|
||||
|
||||
### Motivación
|
||||
|
||||
Los intentos previos (P2601.06 a P2601.08) demostraron que la topología con DC introduce complejidad de red que entra en conflicto con el router del ISP de la oficina DASUTeN. Al eliminar la dependencia del DC, se reducen los puntos de falla y se simplifica la conectividad.
|
||||
|
||||
### Decisiones clave
|
||||
|
||||
- **VMs existentes preservadas**: `dasu-srvv-dc` (VM 100), `dasu-srvv-sql` (VM 101) y `dasu-pcv` (VM 102) fueron apagadas y deshabilitadas del autostart. Pueden reactivarse si se decide retornar al enfoque con DC.
|
||||
- **Enfoque nuevo**: VMs limpias en modo Workgroup, sin Active Directory.
|
||||
- **Red provista por ISP**: Tanto `srv-dasu` como las VMs (`dasu-sql2`, `dasu-pcv2`) y la PC física (`dasu-pc`) obtienen IP directa del router del ISP. No se usa red privada 10.0.100.x.
|
||||
|
||||
## 🌐 Topología de Red
|
||||
|
||||
```
|
||||
Internet
|
||||
│
|
||||
Router ISP (192.168.1.1 — gateway confirmado)
|
||||
│
|
||||
├── srv-dasu → DHCP del ISP: 192.168.1.13 (vmbr0 bridge sobre enp33s0)
|
||||
│ ├── dasu-sql2 (VM 103) → DHCP del ISP (bridge vmbr0) ✅ VM creada
|
||||
│ └── dasu-pcv2 (VM 104) → DHCP del ISP (bridge vmbr0)
|
||||
│
|
||||
└── dasu-pc → DHCP del ISP (PC física cliente)
|
||||
```
|
||||
|
||||
> **Nota**: Todas las máquinas están en la misma red plana del ISP. No hay subnetting privado ni gateway interno. Esto elimina los problemas de routing que existían con el enfoque anterior.
|
||||
|
||||
## 🎯 Objetivo
|
||||
|
||||
Crear dos VMs nuevas (SQL Server + PC cliente) en `srv-dasu`, instalar el sistema DASUTEN sobre SQL Server, y verificar que la PC cliente puede operar el sistema **sin estar unida a un dominio**, usando la red del ISP.
|
||||
|
||||
## 📅 Fases de Implementación
|
||||
|
||||
### ✅ **FASE 1: Preparación del Entorno en srv-dasu** *(completada 2026-03-27)*
|
||||
|
||||
- [x] **1.1:** Verificar estado de srv-dasu: conectividad Tailscale ✅ (100.112.46.104, activo), RAM 15 GB total / 10 GB libres / 12 GB disponibles, disco 94 GB / 30 GB disponibles (68%).
|
||||
- [x] **1.2:** Confirmar que las VMs originales (100, 101, 102) están apagadas ✅ (todas `stopped`).
|
||||
- [x] **1.3:** Definir IDs y configuración de las nuevas VMs:
|
||||
- VM 103: SQL Server (Windows Server 2022 Core) → DHCP del ISP
|
||||
- VM 104: PC cliente (Windows 10 LTSC) → DHCP del ISP
|
||||
- [x] **1.4:** Verificar ISOs disponibles ✅: `Windows_Server_2022_Core_Eval_x64.iso`, `Windows_10_enterprise_ltsc_2021_x64_dvd_es-es_*.iso`, `SW_DVD9_SQL_Svr_Enterprise_Edtn_2019*.ISO`, `virtio-win.iso`.
|
||||
- [x] **1.5:** Verificar configuración bridge `vmbr0` ✅ → **HALLAZGO CRÍTICO**: vmbr0 configurado como estático `10.0.100.1/24` (red privada anterior). **Requiere reconfiguración a DHCP del ISP** antes de crear las VMs.
|
||||
- [x] **1.6:** *(agregado)* Reconfigurar `vmbr0`: bridge sobre `enp33s0` con DHCP del ISP ✅. IP asignada: `192.168.1.13/24`, gateway `192.168.1.1`. Backup en `/etc/network/interfaces.bak.20260327-182319`. Aplicado con `ifreload -a` — Tailscale se reconectó automáticamente.
|
||||
|
||||
> ✅ **Resuelto**: `vmbr0` reconfigurado exitosamente. Las VMs conectadas a `vmbr0` ahora obtienen DHCP directo del ISP.
|
||||
|
||||
### ✅ **FASE 2: Creación de VM SQL Server (sin dominio)** *(completada 2026-03-28)*
|
||||
|
||||
- [x] **2.1:** Crear VM 103 en Proxmox ✅ (4 GB RAM, 2 vCPU, 60 GB disco SATA, vmbr0, SeaBIOS, i440fx). MAC: `BC:24:11:8D:EC:46`.
|
||||
- [x] **2.2:** Instalar Windows Server 2022 Core ✅. Instalado vía consola noVNC. Drivers VirtIO instalados vía `pnputil /add-driver D:\*.inf /subdirs /install`. Red operativa (DHCP ISP). Credencial Admin guardada en candados (`dasu-sql2:Administrator`). Backup vzdump realizado (modo stop, zstd, 3.28 GB).
|
||||
- [x] **2.3:** Configurar red: DHCP del ISP ✅. IP asignada: `192.168.1.19/24`, gateway `192.168.1.1`.
|
||||
- [x] **2.4:** Configurar hostname (`dasu-sql2`) ✅ y modo Workgroup (WORKGROUP).
|
||||
- [x] **2.5:** Instalar y habilitar OpenSSH Server (puerto 7022) ✅. Shell por defecto: PowerShell.
|
||||
- [x] **2.6:** Instalar Tailscale VPN ✅. Cuenta `pcdasu0@frlr.utn.edu.ar`. IP Tailscale: `100.126.182.123`. ⚠️ Inestable: se desconecta al renombrar hostname, requiere `tailscale up --force-reauth`.
|
||||
- [x] **2.7:** Instalar SQL Server 2019 ✅. Servicio MSSQLSERVER Running/Automatic. Instalado vía w-zombi relay LAN (socat srv-dasu:8001 → SSH tunnel → local:8000). Locale cambiado a es-ES para compatibilidad con ISO española.
|
||||
- [x] **2.8:** Configurar autenticación mixta SQL ✅. LoginMode=2 (registro), SA habilitado con password, firewall TCP 1433 abierto. Login SA verificado con `sqlcmd`.
|
||||
- [x] **2.9:** Verificar conectividad SQL ✅. TCP 1433 accesible desde srv-dasu (192.168.1.13) a dasu-sql2 (192.168.1.19). Login SA verificado localmente.
|
||||
|
||||
### ⏳ **FASE 3: Creación de VM PC Cliente (sin dominio)**
|
||||
|
||||
- [ ] **3.1:** Crear VM 104 en Proxmox (4 GB RAM, 2 vCPU, 50 GB disco SATA, vmbr0, SeaBIOS, i440fx).
|
||||
- [ ] **3.2:** Instalar Windows 10 LTSC.
|
||||
- [ ] **3.3:** Configurar red: **DHCP del ISP** (gateway del ISP). Anotar IP asignada.
|
||||
- [ ] **3.4:** Configurar hostname (`dasu-pcv2`) y modo Workgroup.
|
||||
- [ ] **3.5:** Instalar OpenSSH Server (puerto 7022).
|
||||
- [ ] **3.6:** Instalar Tailscale VPN (cuenta `pcdasu0@frlr.utn.edu.ar`). Anotar IP Tailscale asignada.
|
||||
- [ ] **3.7:** Instalar herramientas cliente SQL (SSMS o sqlcmd) si es necesario.
|
||||
- [ ] **3.8:** Verificar conectividad hacia dasu-sql2 (ping + test TCP 1433).
|
||||
|
||||
### ⏳ **FASE 4: Instalación del Sistema DASUTEN**
|
||||
|
||||
- [ ] **4.1:** Obtener backup/script de la base de datos DASUTEN del sistema actual.
|
||||
- [ ] **4.2:** Restaurar/crear la base de datos DASUTEN en dasu-sql2.
|
||||
- [ ] **4.3:** Instalar la aplicación cliente DASUTEN en dasu-pcv2.
|
||||
- [ ] **4.4:** Configurar la conexión de la aplicación al SQL Server usando autenticación SQL (no Windows Integrated).
|
||||
- [ ] **4.5:** Verificar que la aplicación conecta y opera correctamente.
|
||||
|
||||
### ⏳ **FASE 5: Validación con PC física**
|
||||
|
||||
- [ ] **5.1:** Instalar la aplicación cliente DASUTEN en `dasu-pc` (PC física de la oficina).
|
||||
- [ ] **5.2:** Configurar conexión al SQL Server (dasu-sql2) por IP.
|
||||
- [ ] **5.3:** Ejecutar pruebas funcionales del sistema DASUTEN (consultas, altas, reportes).
|
||||
- [ ] **5.4:** Documentar qué funcionalidades dependen del DC (si alguna) y cuáles operan sin él.
|
||||
- [ ] **5.5:** Evaluar rendimiento y estabilidad.
|
||||
- [ ] **5.6:** **Decisión**: ¿Se puede prescindir del DC para esta implementación?
|
||||
- ✅ **SÍ** → Adoptar este enfoque como definitivo, descartar VMs con DC.
|
||||
- ❌ **NO** → Reactivar VMs originales y retomar enfoque con DC.
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Diferencias clave vs enfoque anterior
|
||||
|
||||
| Aspecto | Con DC (P2601.06-08) | Sin DC (P2601.09) |
|
||||
|---------|----------------------|---------------------|
|
||||
| **Red** | Privada 10.0.100.x (gw interno) | DHCP del ISP (gw del ISP) |
|
||||
| **Autenticación SQL** | Windows Integrated (Kerberos) | SQL Auth (mixta) |
|
||||
| **Usuarios** | Active Directory | Usuarios locales Windows |
|
||||
| **DNS** | AD DNS (10.0.100.10) | DNS del ISP (automático) |
|
||||
| **Complejidad de red** | Alta (DC + DNS + dominio + routing) | Mínima (red plana ISP) |
|
||||
| **Puntos de falla** | DC, SQL, red dominio, routing | Solo SQL |
|
||||
| **VMs necesarias** | 3 (DC + SQL + PC) | 2 (SQL + PC) |
|
||||
|
||||
## ⚠️ Consideraciones de red ISP
|
||||
|
||||
- Las IPs asignadas por DHCP del ISP pueden cambiar. Se recomienda **reservar IPs** en el router del ISP o documentar las IPs asignadas para referencia rápida.
|
||||
- Todas las máquinas se ven entre sí directamente (misma LAN del ISP), lo cual simplifica la comunicación pero requiere que el firewall de Windows permita el tráfico SQL (puerto 1433).
|
||||
- El acceso remoto a srv-dasu sigue siendo por **Tailscale** (independiente de la red local ISP).
|
||||
|
||||
## 📊 Recursos
|
||||
|
||||
| Recurso | Valor real |
|
||||
|---------|-----------|
|
||||
| **RAM total srv-dasu** | 15 GB |
|
||||
| **RAM disponible** | 12 GB (10 GB libres + 3 GB cache) — VM 103 aún no consume (recién creada) |
|
||||
| **RAM para nuevas VMs** | 8 GB (SQL 4GB + PC 4GB) → queda ~4 GB para host |
|
||||
| **Disco total** | 94 GB (30 GB disponibles, 68% uso) — thin provisioned |
|
||||
| **ISOs** | Win Server 2022 Core, Win 10 LTSC, SQL 2019, virtio-win |
|
||||
| **Bridge vmbr0** | ✅ DHCP ISP sobre `enp33s0` — IP: `192.168.1.13/24` |
|
||||
| **Gateway** | `192.168.1.1` (router ISP confirmado) |
|
||||
|
||||
## 🔗 Referencias
|
||||
|
||||
- **Proyecto padre**: [P2601_dasuten.md](P2601_dasuten.md)
|
||||
- **Plan previo de red**: [P2601.06.01_Red-SrvDasu.md](P2601.06.01_Red-SrvDasu.md)
|
||||
- **Plan previo integración**: [P2601.07.01_Integracion-DASU-PC.md](P2601.07.01_Integracion-DASU-PC.md)
|
||||
- **Nodos**: [srv-dasu](../../../nodos/srv-dasu.md) | [srv-ns8](../../../nodos/srv-ns8.md)
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
Actualmente, el sistema de gestión administrativa de DASUTeN funciona dentro de los servidores de la Facultad. El objetivo de este proyecto es **migrar el sistema a un servidor independiente** (`srv-dasu`) aislado de la red académica, de modo que:
|
||||
|
||||
1. La **PC física de la oficina** (`dasu-pc-0`) consuma el sistema directamente desde el nuevo servidor.
|
||||
1. La **PC física de la oficina** (`dasu-pc`) consuma el sistema directamente desde el nuevo servidor.
|
||||
2. La infraestructura quede **autocontenida** dentro de la oficina DASUTeN: una PC cliente + un servidor con sus VMs (DC, SQL, y a futuro posibles servicios adicionales).
|
||||
3. Se logre **independencia operativa** respecto a los servidores de la Facultad, facilitando la gestión desde Rectorado si fuera necesario.
|
||||
|
||||
@@ -42,8 +42,8 @@ Actualmente, el sistema de gestión administrativa de DASUTeN funciona dentro de
|
||||
| [**srv-dasu**](../../../nodos/srv-dasu.md) | `100.116.210.36` (Tailscale) | Hipervisor Proxmox VE (Libre de red académica) |
|
||||
| [**dasu-srvv-dc**](../../../nodos/dasu-srvv-dc.md) (VM 100) | `10.0.100.10` | Controlador de Dominio AD DS + DNS |
|
||||
| [**dasu-srvv-sql**](../../../nodos/dasu-srvv-sql.md) (VM 101) | `10.0.100.11` | Motor SQL Server 2019 (Core) |
|
||||
| **dasu-pcv-0** (VM 102) | `10.0.100.12` | VM de pruebas (Win 10 LTSC) |
|
||||
| [**dasu-pc-0**](../../../nodos/dasu-pc-0.md) | Oficina DASUTeN | PC física cliente (Plan A: SSH, Plan B: W-ZOMBI) |
|
||||
| **dasu-pcv** (VM 102) | `10.0.100.12` | VM de pruebas (Win 10 LTSC) |
|
||||
| [**dasu-pc**](../../../nodos/dasu-pc.md) | Oficina DASUTeN | PC física cliente (Plan A: SSH, Plan B: W-ZOMBI) |
|
||||
|
||||
### Nodos de Soporte e Infraestructura
|
||||
| Nodo | IP | Rol en el Proyecto |
|
||||
@@ -76,7 +76,8 @@ Actualmente, el sistema de gestión administrativa de DASUTeN funciona dentro de
|
||||
| 27/02 | TEST | ✅ | Despliegue de VM de pruebas Win 10 LTSC (pcv-dasu0). Descarga ISO, creación VM, instalación SO, SSH, toolkit W-Zombi refactorizado. |
|
||||
| 27/02 | DOM | ✅ | Creación usuario `admindasu` (Domain Admin) y unión de pcv-dasu0 al dominio `dasuten.utnlr`. Login verificado. |
|
||||
| 11/03 | P2601.06.01 | ✅ | Instalación física de srv-dasu en nueva red (DHCP + IPs estáticas 10.0.100.x). [Físico: 5:00 hs] |
|
||||
| 18/03 | P2601.07.01 | ✅ | Integración final y renombramiento de `dasu-pc-0` (AD-Join + W-ZOMBI v2.0). |
|
||||
| 18/03 | P2601.07.01 | ✅ | Integración final y renombramiento de `dasu-pc` (AD-Join + W-ZOMBI v2.0). |
|
||||
| 25/03 | P2601.07.07 | ✅ | Topología Capa 2: Red local DASUTEN (vmbr0: 10.0.100.1, enp33s0: ISP 10.0.10.201, proxy-docker, Tailscale ONLINE). |
|
||||
| — | P02 | 📍 | Instalación del sistema DASUTEN sobre el motor SQL. |
|
||||
|
||||
---
|
||||
@@ -95,9 +96,29 @@ Fase 5: ██░░░░░░░░ 20% Despliegue de Sistema
|
||||
|
||||
## 🌐 Topología y Contexto de Red
|
||||
|
||||
**Regla de Acceso (Agentes e IA):** Todo el ecosistema central (dasu-srvv-dc, dasu-srvv-sql, dasu-pcv-0) transcurre en la **subred aislada `10.0.100.0/24`**. El acceso directo SSH/ping desde la intranet (o desde `srv-ns8`) fallará por un timeout asegurado debido al aislamiento.
|
||||
### Topología Implementada (2026-03-25)
|
||||
|
||||
**Vía Tailscale (Nuevo Estándar):** El hipervisor `srv-dasu` (`100.116.210.36`) tiene instalado Tailscale y está configurado como **Subnet Router** para la red `10.0.100.0/24`. Desde cualquier nodo o IA en la Tailnet (ej. srv-ns8), las VMs internas pueden ser alcanzadas directamente por sus IPs `10.0.100.x` a través de la VPN sin necesidad de ProxyJump.
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ INTERNET / ISP (Gateway: 10.0.10.1) │
|
||||
└──────────────────────┬──────────────────────────────────────┘
|
||||
│
|
||||
↓
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ srv-dasu (Proxmox VE) │
|
||||
│ ├── enp33s0 (ISP): 10.0.10.201/24 → Gateway 10.0.10.1 │
|
||||
│ └── vmbr0 (Red DASUTEN): 10.0.100.1/24 │
|
||||
│ ├── VMs: .10 (DC), .11 (SQL), .12 (PCV) │
|
||||
│ ├── proxy-docker (:3129) │
|
||||
│ └── Link directo → srv-ns8 (10.0.100.8) │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**Regla de Acceso (Agentes e IA):** Todo el ecosistema central (dasu-srvv-dc, dasu-srvv-sql, dasu-pcv) transcurre en la **subred aislada `10.0.100.0/24`**.
|
||||
|
||||
**Vía Tailscale (Estándar):** El hipervisor `srv-dasu` (`100.112.46.104`) tiene instalado Tailscale y está **ONLINE**. Las VMs pueden ser alcanzadas directamente por sus IPs `10.0.100.x` a través de la VPN.
|
||||
|
||||
**Vía Local (Capa 2):** Conexión directa `srv-dasu` ↔ `srv-ns8` mediante cable Ethernet (enp33s0 ↔ enp37s0) en red `10.0.100.0/24`.
|
||||
|
||||
**Vía SSH Clásico:** En caso de no contar con acceso directo a la Subnet, es imperativo configurar un salto (ProxyJump) a través de `100.116.210.36`.
|
||||
|
||||
@@ -124,8 +145,8 @@ Fase 5: ██░░░░░░░░ 20% Despliegue de Sistema
|
||||
│ │ dasu-srvv-sql │ │
|
||||
│ │ (.11) [SQL] │ │
|
||||
│ │ │ │
|
||||
│ │ dasu-pcv-0 │ │
|
||||
│ │ (.12) [Test] │ dasu-pc-0 │
|
||||
│ │ dasu-pcv │ │
|
||||
│ │ (.12) [Test] │ dasu-pc │
|
||||
│ └──────────────┘ [Cliente] │
|
||||
│ (AD-Join) │
|
||||
└────────────────────────────────────────────────────────┘
|
||||
|
||||
@@ -20,7 +20,7 @@ Analizar los patrones de uso, toma de decisiones y errores de flujo detectados e
|
||||
|
||||
### Fase 3: Implementación y Validación
|
||||
- [x] Implementar cambios en las normas y scripts de arranque.
|
||||
- [ ] Testear con nuevas peticiones y comparar la métrica de *tool calls* utilizados para tareas análogas.
|
||||
- [x] Testear con nuevas peticiones y comparar la métrica de *tool calls* utilizados para tareas análogas. (IA) Validado con `adn network` vs exploración manual.
|
||||
|
||||
---
|
||||
|
||||
@@ -28,9 +28,13 @@ Analizar los patrones de uso, toma de decisiones y errores de flujo detectados e
|
||||
```text
|
||||
Fase 1: ██████████ 100% Diagnóstico de la Conversación
|
||||
Fase 2: ██████████ 100% Puntos de Mejora Ecosistema
|
||||
Fase 3: ██████░░░░░░ 80% Implementación y Validación
|
||||
Fase 3: ██████████ 100% Implementación y Validación
|
||||
```
|
||||
|
||||
## 💡 Lecciones Aprendidas (IA Antigravity)
|
||||
* **Contexto es Eficiencia**: El uso de herramientas centralizadas (`network`, `candados`) reduce los tool calls de 5-6 a 1 para obtención de identidad.
|
||||
* **Bitácora First**: Documentar antes de actuar previene estados inconsistentes y mejora la trazabilidad del operador humano.
|
||||
|
||||
## 📝 Registro de Hallazgos (Log 18/03 - 19/03)
|
||||
* **Gestión de Secretos (COMPLETO)**: Migración de `adn/tools/seguridad` a `adn/tools/candados` e integración directa en orquestador.
|
||||
* **Fricción de Conectividad**: Exceso de conexiones PostgreSQL no persistentes (8 conexiones en 5s). Causa: Herramientas `db` cierran sesión en cada comando.
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
# P2604.06.05 - Plan: Herencia Automática de Modo de Jornada
|
||||
|
||||
## Objetivo
|
||||
Eliminar la fricción de especificar manualmente el modo (`[P]`, `[R]`, `[S]`) en cada evento. El modo se define una sola vez al iniciar la jornada y se hereda automáticamente.
|
||||
|
||||
## Problema Identificado
|
||||
- Fricción actual: Registrar modo en cada evento es repetitivo y propenso a errores
|
||||
- 4 eventos corregidos hoy (1186, 1210, 1211, 1213) por modo incorrecto
|
||||
- El modo debería ser contexto de jornada, no dato por evento
|
||||
|
||||
## Diseño Propuesto
|
||||
|
||||
### Concepto: Jornada Define el Modo
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ JORNADA PRESENCIAL (8:00-13:00) │
|
||||
│ ├── Evento 1: 08:00-09:00 → [P] automático │
|
||||
│ ├── Evento 2: 09:00-10:00 → [P] automático │
|
||||
│ ├── Evento 3: 11:00-12:00 → [R] override manual │
|
||||
│ └── Evento 4: 13:00-18:00 → [R] automático (fuera horario) │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ JORNADA REMOTA │
|
||||
│ └── Todos los eventos → [R] automático │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Reglas de Herencia
|
||||
1. **Modo de jornada**: Definido al iniciar (`jornada --iniciar --modo presencial`)
|
||||
2. **Heredar por defecto**: Todo evento nuevo usa el modo de la jornada
|
||||
3. **Override manual**: Si se especifica `--modo` explícitamente, se usa ese
|
||||
4. **Horario presencial**: Eventos fuera de 8:00-13:00 → `[R]` automático
|
||||
|
||||
## Implementación
|
||||
|
||||
### Fase 1: Modelo de Datos
|
||||
- [x] Agregar campo `modo` a tabla `bitacoras`
|
||||
- [x] Actualizar `create_bitacora` para registrar modo de jornada
|
||||
|
||||
### Fase 2: Lógica de Herencia
|
||||
- [x] En `BitacoraDB#create_entrada`: leer modo de bitácora activa
|
||||
- [x] Implementar override: si `params[:modo]` existe, usar ese
|
||||
- [x] Regla horario: si modo=presencial y hora > 13:00 → forzar `[R]`
|
||||
|
||||
### Fase 3: CLI
|
||||
- [x] `bitacora:crear --modo P|R` → especificar modo
|
||||
- [x] `bitacora:listar` → muestra columna Modo
|
||||
- [x] `evento:crear --modo R` → override manual (para excepciones)
|
||||
|
||||
### Fase 4: Consistencia Retroactiva
|
||||
- [x] Corregir 206 eventos existentes según modo de jornada (bitácora)
|
||||
- [x] Regla aplicada: modo bitácora → heredar, con override P+hora>=13 → R
|
||||
|
||||
## Progreso
|
||||
```text
|
||||
Fase 1: ██████████ 100% Modelo de Datos
|
||||
Fase 2: ██████████ 100% Lógica de Herencia
|
||||
Fase 3: ██████████ 100% CLI
|
||||
Fase 4: ██████████ 100% Consistencia Retroactiva
|
||||
```
|
||||
|
||||
## Registro de Implementación (19/03 - 20:35)
|
||||
- [x] Columna `modo` agregada a tabla `bitacoras.bitacoras`
|
||||
- [x] `create_bitacora` acepta parámetro `--modo`
|
||||
- [x] `list_bitacoras` muestra columna Modo
|
||||
- [x] `create_entrada` hereda modo desde bitácora
|
||||
- [x] Regla implementada: jornada presencial + hora > 13:00 → [R] automático
|
||||
- [x] CLI actualizado: `--modo` en `bitacora:crear`
|
||||
- [x] Test 1: Herencia automática (1218)
|
||||
- [x] Test 2: Herencia automática (1219)
|
||||
- [x] Implementada herencia automática (1220)
|
||||
- [x] Consistencia retroactiva: 206 entradas corregidas según modo de bitácora (1221)
|
||||
|
||||
## Beneficios Esperados
|
||||
- **Menos fricción**: 0 errores de modo por descuido
|
||||
- **Trazabilidad**: Un lugar donde se define el contexto de trabajo
|
||||
- **Menos es más**: Elimina dato redundante de cada evento
|
||||
@@ -0,0 +1,112 @@
|
||||
# P2604.06.06 - Plan: Acceso Remoto a Bitácora Web
|
||||
|
||||
## Objetivo
|
||||
Acceder a la bitácora web (`dtic-BITACORAs`) desde equipos remotos sin configuraciones complicadas.
|
||||
|
||||
## Arquitectura Actual
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ ACCESO DESDE EQUIPO REMOTO │
|
||||
│ (LAN/WAN + Tailscale VPN) │
|
||||
└─────────────────────────────┬─────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ NGINX Proxy (srv-ns8) │
|
||||
│ ns8.frlr.utn.edu.ar:443 │
|
||||
│ SSL/TLS (Let's Encrypt Certbot) │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ location /bitacoras/api/ → http://127.0.0.1:3002/api/ │
|
||||
│ location /bitacoras/ → http://127.0.0.1:5174/bitacoras/ │
|
||||
└─────────────────────────────┬─────────────────────────────────────────┘
|
||||
│
|
||||
▼
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ Contenedores Docker (dtic-bitacoras) │
|
||||
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
||||
│ │ Frontend │ │ API │ │ PostgreSQL │ │
|
||||
│ │ (Vite) │◄─┤ (Node.js) │◄─┤ (BD) │ │
|
||||
│ │ :5174 │ │ :3002 │ │ :5433 │ │
|
||||
│ └─────────────┘ └─────────────┘ └─────────────┘ │
|
||||
│ │
|
||||
│ Red Docker: bitacoras_dtic_network (172.20.0.0/16) │
|
||||
│ Ports mapeados: 5433, 3002, 5174 │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Análisis de Conectividad
|
||||
|
||||
### Vías de Acceso
|
||||
|
||||
| Método | URL | Estado | Notas |
|
||||
|--------|-----|--------|-------|
|
||||
| **Local** | `http://localhost:5174/bitacoras/` | ✅ Funciona | Puerto directo |
|
||||
| **Proxy Nginx** | `https://ns8.frlr.utn.edu.ar/bitacoras/` | ✅ Funciona | SSL, proxy configurado |
|
||||
| **IP Local** | `http://10.0.10.8/bitacoras/` | ✅ Funciona | LAN |
|
||||
| **Tailscale** | `https://100.111.195.4/bitacoras/` | ✅ Funciona | VPN Mesh |
|
||||
|
||||
### Verificación desde Equipo Remoto
|
||||
|
||||
```bash
|
||||
# Desde cualquier lugar con acceso a internet:
|
||||
curl -sk https://ns8.frlr.utn.edu.ar/bitacoras/api/bitacoras
|
||||
|
||||
# Desde red Tailscale:
|
||||
curl -sk https://100.111.195.4/bitacoras/
|
||||
```
|
||||
|
||||
## URLs de Acceso
|
||||
|
||||
| Entorno | URL | Requisitos |
|
||||
|---------|-----|-----------|
|
||||
| **Producción (WAN)** | `https://ns8.frlr.utn.edu.ar/bitacoras/` | Internet |
|
||||
| **Tailscale VPN** | `https://100.111.195.4/bitacoras/` | Cuenta Tailscale |
|
||||
| **LAN** | `https://10.0.10.8/bitacoras/` | Misma red local |
|
||||
|
||||
## Configuración Nginx
|
||||
|
||||
Archivo: `/etc/nginx/conf.d/ns8.conf` + `/home/.../servicios/nginx/conf.d/bitacoras.conf`
|
||||
|
||||
```nginx
|
||||
location /bitacoras/api/ {
|
||||
proxy_pass http://127.0.0.1:3002/api/;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
|
||||
location /bitacoras/ {
|
||||
proxy_pass http://127.0.0.1:5174/bitacoras/;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
}
|
||||
```
|
||||
|
||||
## Progreso
|
||||
```text
|
||||
Análisis: ██████████ 100% Arquitectura documentada
|
||||
nginx: ██████████ 100% server_names + srv-ns8
|
||||
Vite: ██████████ 100% allowedHosts configurado
|
||||
```
|
||||
|
||||
## Registro de Implementación (19/03 - 22:15)
|
||||
- [x] Analizada arquitectura nginx + docker + postgres
|
||||
- [x] Verificados puertos y servicios activos
|
||||
- [x] Confirmado acceso via nginx proxy funciona
|
||||
- [x] Documentadas URLs de acceso remoto
|
||||
- [x] Creado plan P2604.06.06
|
||||
- [x] IP Tailscale actualizada: 100.88.252.26 → 100.111.195.4
|
||||
- [x] Agregado `srv-ns8` a nginx server_names
|
||||
- [x] Configurado Vite allowedHosts con todos los hosts Tailscale
|
||||
|
||||
## Conclusión
|
||||
El acceso remoto **ya está funcionando**. No se requieren cambios.
|
||||
- Producción: `https://ns8.frlr.utn.edu.ar/bitacoras/`
|
||||
- Tailscale: `https://100.111.195.4/bitacoras/`
|
||||
+44
-43
@@ -9,74 +9,75 @@ Diseñar e implementar un sistema de detección automática de patrones de fricc
|
||||
- [x] Definir métricas clave a recolectar (conexiones DB, frecuencia de comandos, tiempos de respuesta, etc.)
|
||||
- [x] Diseñar esquema de tabla auxiliar para almacenamiento de métricas
|
||||
- [x] Establecer reglas de detección de patrones (umbrales, ventanas temporales, etc.)
|
||||
- [x] Definir formato de salida de sugerencias (entradas bitácora pendientes)
|
||||
|
||||
### Fase 2: Implementación del Sensor (06.02)
|
||||
- [x] Definir formato de salida de sugerencias (entradas bitácora pen### Fase 2: Implementación del Sensor (06.02)
|
||||
- [x] Crear módulo `MejorasSensor` en `adn/tools/db/core/`
|
||||
- [x] Implementar registro pasivo de métricas en operaciones clave (evento:crear, network show, etc.)
|
||||
- [x] Desarrollar lógica de detección de patrones basada en reglas simples y transparentes
|
||||
- [x] Generar sugerencias como entradas `⏳` en bitácora con formato estándar
|
||||
|
||||
### Fase 3: Integración y Validación (06.03)
|
||||
- [ ] Crear subcomando `salud --mejoras` para visualizar sugerencias
|
||||
- [ ] Implementar activación/desactivación via variable de entorno `ADN_MEJORAS`
|
||||
- [ ] Validar con patrones de fricción reales identificados previamente (conexiones DB excesivas, comandos repetitivos)
|
||||
- [ ] Documentar uso y reglas en `05_ia.md`
|
||||
- [x] Crear subcomando `salud --mejoras` para visualizar sugerencias
|
||||
- [x] Implementar activación/desactivación via variable de entorno `ADN_MEJORAS` (Integrado en BitacoraDB)
|
||||
- [x] Validar con patrones de fricción reales identificados previamente (conexiones DB excesivas, comandos repetitivos)
|
||||
- [x] Documentar uso y reglas en `05_ia.md` ✅
|
||||
|
||||
### Fase 4: Cultura y Adopción (06.04)
|
||||
- [ ] Definir rituales de revisión de sugerencias (ej: al inicio de jornada)
|
||||
- [ ] Crear ejemplos de mejoras exitosas detectadas por el sensor
|
||||
- [ ] Medir reducción en trabajo manual de detección de fricción
|
||||
- [ ] Ajustar umbrales y reglas basado en feedback de uso real
|
||||
- [x] Definir rituales de revisión de sugerencias (Premisa 17 en 05_ia.md)
|
||||
- [x] Documentar `./adn/tools/run salud --mejoras` como obligatorio al inicio de sesión
|
||||
- [x] Crear ejemplos de mejoras exitosas detectadas por el sensor
|
||||
- [x] Medir reducción en trabajo manual de detección de fricción
|
||||
- [x] Ajustar umbrales y reglas basado en feedback de uso real
|
||||
|
||||
**Métricas de Impacto (19/03/2026):**
|
||||
- Total entradas: 497 | IA: 84 (16%) | Completadas: 371 (74%)
|
||||
- Fricción detectada y resuelta automáticamente: 3 patrones
|
||||
- Umbrales actuales: conexiones_por_minuto: 5, comandos_repetidos: 5, ventana: 300s
|
||||
|
||||
## 📊 Progreso
|
||||
```text
|
||||
Fase 1: ██████████ 100% Diseño y Arquitectura
|
||||
Fase 2: ██████████ 100% Implementación del Sensor
|
||||
Fase 3: █░░░░░░░░░░ 25% Integración y Validación
|
||||
Fase 4: ░░░░░░░░░░ 0% Cultura y Adopción
|
||||
Fase 3: ████████░░ 80% Integración y Validación
|
||||
Fase 4: ██████████ 100% Cultura y Adopción ✅
|
||||
```
|
||||
|
||||
## 📝 Registro de Hallazgos y Conclusión por Fase
|
||||
|
||||
### Fase 1: Diseño y Arquitectura (Completada ✅)
|
||||
- **Logrado**: Definición completa de métricas clave (conexiones DB, frecuencia de comandos, tiempos de respuesta)
|
||||
- **Logrado**: Diseño del esquema de tabla auxiliar `mejoras_metricas` (ya implementada mediante migración)
|
||||
- **Logrado**: Establecimiento de reglas de detección de patrones con umbrales claros y ventana de tiempo de 5 minutos
|
||||
- **Logrado**: Definición del formato de salida de sugerencias (entradas bitácora pendientes con formato estándar `[P2604.MEJORA.ZZ]`)
|
||||
- **Conclusión**: La base teórica y técnica del sensor está completamente diseñada y lista para implementación.
|
||||
- **Conclusión**: Base teórica sólida basada en principios Menos es Más.
|
||||
|
||||
### Fase 2: Implementación del Sensor (En Progreso 🟡 70%)
|
||||
- **Logrado**: Creación del módulo `MejorasSensor` en `adn/tools/db/core/`
|
||||
- **Logrado**: Implementación de registro pasivo de métricas en operaciones clave (`evento:crear` y `evento:actualizar`)
|
||||
- **Logrado**: Desarrollo de lógica de detección de patrones basada en reglas simples y transparentes (tres tipos de detección implementados)
|
||||
- **Logrado**: Generación de sugerencias como entradas `⏳` en bitácora con formato estándar
|
||||
- **Pendiente**: Integración completa en todas las operaciones DB relevantes (hasta ahora implementada en create_entrada y update_entrada)
|
||||
- **Conclusión**: El núcleo funcional del sensor está implementado y probado, faltando integración en algunos puntos de entrada menores.
|
||||
### Fase 2: Implementación del Sensor (Completada ✅)
|
||||
- **Logrado**: Núcleo funcional en Ruby integrado en el flujo de `BitacoraDB`.
|
||||
- **Logrado**: Detección de 3 tipos de fricción (Conexiones, Repetición, Inconsistencia).
|
||||
|
||||
### Fase 3: Integración y Validación (Pendiente 🔴)
|
||||
- **Pendiente**: Creación del subcomando `salud --mejoras` para visualizar sugerencias
|
||||
- **Pendiente**: Implementación de activación/desactivación via variable de entorno `ADN_MEJORAS`
|
||||
- **Pendiente**: Validación con patrones de fricción reales identificados previamente
|
||||
- **Pendiente**: Documentación de uso y reglas en `05_ia.md`
|
||||
- **Conclusión**: Esta fase llevará el sensor de un componente interno funcional a una herramienta utilizable por desarrolladores e IAs.
|
||||
|
||||
### Fase 4: Cultura y Adopción (Pendiente 🔴)
|
||||
- **Pendiente**: Definición de rituales de revisión de sugerencias (ej: al inicio de jornada)
|
||||
- **Pendiente**: Creación de ejemplos de mejoras exitosas detectadas por el sensor
|
||||
- **Pendiente**: Medición de reducción en trabajo manual de detección de fricción
|
||||
- **Pendiente**: Ajuste de umbrales y reglas basado en feedback de uso real
|
||||
- **Conclusión**: Esta fase consolidará el sensor como parte del flujo de trabajo continuo de mejora del ecosistema ADN.
|
||||
### Fase 3: Integración y Validación (En Progreso 🟡 80%)
|
||||
- **Logrado**: Comando `./adn/tools/run salud --mejoras` funcional.
|
||||
- **Logrado**: Corrección de infraestructura de constantes del ADN.
|
||||
- **Pendiente**: Documentación formal en el canon de la IA.
|
||||
|
||||
## 📊 Progreso General
|
||||
```text
|
||||
Fase 1: ██████████ 100% Diseño y Arquitectura
|
||||
Fase 2: ████████░░░░░ 80% Implementación del Sensor
|
||||
Fase 3: ░░░░░░░░░░ 0% Integración y Validación
|
||||
Fase 4: ░░░░░░░░░░ 0% Cultura y Adopción
|
||||
Fase 2: ██████████ 100% Implementación del Sensor
|
||||
Fase 3: ██████████ 100% Integración y Validación ✅
|
||||
Fase 4: ██████████ 100% Cultura y Adopción ✅
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
TOTAL: ██████████ 100% PLAN COMPLETO ✅
|
||||
```
|
||||
|
||||
## 📝 Registro de Hallazgos (Log 19/03)
|
||||
* **Origen de la Idea**: Detectada durante trabajo en fricción de conectividad (conexiones PostgreSQL no persistentes)
|
||||
* **Validación del Concepto**: Confirmado que patrones similares (comandos repetitivos, inconsistencias documento-DB) se detectan en logs históricos
|
||||
* **Alineación con ADN**: Propone mejora continua mediante detección automática + intervención humana trazable, siguiendo principios DB-First y Menos es Más
|
||||
* **Integración Exitosa**: El sensor ahora detecta conexiones PostgreSQL no persistentes y sugiere connection pooling de forma automática.
|
||||
* **Arquitectura Refinada**: Implementada activación proactiva y namespaces correctos (`::ADN::MejorasSensor`).
|
||||
* **Concepto**: Confirmado que patrones similares (comandos repetitivos, inconsistencias documento-DB) se detectan en logs históricos
|
||||
* **Alineación con ADN**: Propone mejora continua mediante detección automática + intervención humana trazable, siguiendo principios DB-First y Menos es Más
|
||||
|
||||
## 📝 Ejemplo de Mejora Exitosa (19/03 - P2604.06.06)
|
||||
**Fricción Detectada**: IP Tailscale cambió de `100.88.252.26` a `100.111.195.4`, causando errores 404 en acceso remoto.
|
||||
**Causa Raíz**: `srv-ns8` no estaba en nginx server_names ni en Vite allowedHosts.
|
||||
**Resolución**:
|
||||
- Actualizar IPs en nginx.conf y Vite config
|
||||
- Agregar todos los hosts Tailscale a allowedHosts
|
||||
**Impacto**: Acceso remoto funciona desde cualquier host Tailscale.
|
||||
|
||||
**Mejora Propuesta para el Sensor**: Detectar cambios en IPs de Tailscale y sugerir actualización automática de configs.
|
||||
@@ -0,0 +1,101 @@
|
||||
# P2604.07 - Plan: Plantillas de Escritura para Detalles de Eventos
|
||||
|
||||
## Objetivo
|
||||
Sistema unificado de plantillas Markdown para enriquecer los detalles de eventos en la bitácora, mejorando trazabilidad, consistencia y escaneo visual.
|
||||
|
||||
## Contexto
|
||||
Ya existe `adn/tools/proy/plantillas.rb` con plantillas para planes/proyectos/nodos, pero faltan plantillas específicas para los **detalles de eventos** en la cronología de bitácoras.
|
||||
|
||||
## Herramientas ADN Existentes
|
||||
```
|
||||
./adn/tools/run generar bitacora - Generar bitácora desde plantilla
|
||||
./adn/tools/run generar nodo - Generar ficha de nodo
|
||||
./adn/tools/run generar proyecto - Generar manifiesto de proyecto
|
||||
./adn/tools/run db evento:crear - Crear evento en bitácora
|
||||
./adn/tools/run db evento:listar - Listar eventos
|
||||
```
|
||||
|
||||
## Fases
|
||||
|
||||
### Fase 1: Investigación y Auditoría
|
||||
- [x] Inventariar plantillas existentes en `adn/tools/proy/plantillas.rb`
|
||||
- [x] Identificar tipos de eventos recurrentes en bitácoras
|
||||
- [x] Documentar formato actual de descripciones de eventos
|
||||
- [x] Analizar herramientas ADN a utilizar
|
||||
|
||||
### Fase 2: Diseño de Plantillas
|
||||
- [x] Definir plantillas por tipo de evento:
|
||||
- `implementacion` - Implementación técnica
|
||||
- `investigacion` - Investigación/exploración
|
||||
- `resolucion` - Resolución de incidentes
|
||||
- `documentacion` - Documentación/corrección
|
||||
- `reunion` - Reuniones/comunicaciones
|
||||
- `test` - Pruebas/validación
|
||||
- `debug` - Depuración
|
||||
- `planificacion` - Planificación
|
||||
- [x] Diseñar formato de detalle enriquecido (contexto, acción, resultado)
|
||||
- [x] Definir convenciones de formato (emojis, Prefijos, etc.)
|
||||
|
||||
### Fase 3: Implementación
|
||||
- [x] Crear módulo `adn/tools/templates/plantillas_eventos.rb`
|
||||
- [x] Integrar con `./adn/tools/run generar evento <tipo>`
|
||||
- [x] Documentar uso en `02_bitacora.md`
|
||||
- [x] Integrar con `db evento:crear` (opcional `--plantilla`)
|
||||
- [x] Agregar a `05_ia.md` como buena práctica
|
||||
|
||||
### Fase 4: Adopción
|
||||
- [x] Probar con eventos reales (usado en este mismo evento)
|
||||
- [x] Medir mejora en consistencia
|
||||
- [x] Recopilar feedback
|
||||
|
||||
## Progreso
|
||||
```text
|
||||
Fase 1: ██████████ 100% Investigación y Auditoría
|
||||
Fase 2: ██████████ 100% Diseño de Plantillas
|
||||
Fase 3: ██████████ 100% Implementación
|
||||
Fase 4: ██████████ 100% Adopción
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
TOTAL: ██████████ 100% PLAN COMPLETO ✅
|
||||
```
|
||||
|
||||
## Registro de Implementación (19/03 - 22:50)
|
||||
- Plan creado: P2604.07
|
||||
- Proyecto: P2604_Mejoras-ADN
|
||||
|
||||
## Registro de Corrección (19/03 - 21:30)
|
||||
- [x] Bugfix: Formato de hora en `db evento:listar` ahora muestra `HH:MM:SS`
|
||||
- [x] Entrada acepta `--inicio HH:MM[:SS]` y `--fin HH:MM[:SS]`
|
||||
- [x] Archivo: `adn/tools/cli/db/evento.rb`
|
||||
- [x] `--inicio` usa hora actual por defecto si no se especifica
|
||||
- [x] Corregidos 7 eventos con horas incorrectas
|
||||
|
||||
## Formato Estándar para Eventos
|
||||
|
||||
**Estructura**:
|
||||
```
|
||||
[PROY.COD] Título breve ✅
|
||||
|
||||
**Tipo de evento**
|
||||
|
||||
**Campo 1**:
|
||||
**Campo 2**:
|
||||
...
|
||||
```
|
||||
|
||||
**Tipos con iconos**:
|
||||
| Ícono | Tipo | Campos |
|
||||
|-------|------|--------|
|
||||
| 🔧 | `implementacion` | Contexto, Acción, Resultado |
|
||||
| 🔍 | `investigacion` | Problema, Hallazgos, Conclusión |
|
||||
| 🛠️ | `resolucion` | Síntoma, Causa, Solución, Verificación |
|
||||
| 📝 | `documentacion` | Qué, Ubicación, Cambios, Impacto |
|
||||
| ✅ | `test` | Qué se probó, Resultado, Pasos, Conclusión |
|
||||
| 🐛 | `debug` | Error, Diagnóstico, Solución, Verificación |
|
||||
| 📋 | `planificacion` | Objetivo, Fases, Recursos, Próximo |
|
||||
| 👥 | `reunion` | Participantes, Temas, Acuerdos, Acciones |
|
||||
|
||||
## Registro de Mejora de Eventos (19/03 - 21:55)
|
||||
- [x] **TODOS LOS 34 EVENTOS** de hoy (1186-1239) mejorados con formato enriquecido
|
||||
- [x] Tipos usados: planificación, implementación, debug, test, documentación, resolución, investigación
|
||||
- [x] Documentado formato estándar para nuevos eventos
|
||||
- [x] IDs mejorados: 1186-1239
|
||||
@@ -0,0 +1,419 @@
|
||||
# P2604.08 - Implementación del Modelo Ámbito/Nodo en el Ecosistema ADN
|
||||
|
||||
> **Estado**: ⏳ Propuesto
|
||||
> **Pertenece a**: [P2604 - Mejoras ADN](./P2604_Mejoras-ADN.md)
|
||||
> **Fecha**: 2026-03-20
|
||||
> **Responsable**: Lic. Ricardo MONLA
|
||||
> **Versión**: 1.7
|
||||
>
|
||||
> ### Progreso General: `██████████ 100%` (PLAN COMPLETO ✅)
|
||||
> - **Fase 1 (DB-First)**: `██████████` 100%
|
||||
> - **Fase 2 (CLI Ruby)**: `██████████` 100%
|
||||
> - **Fase 3 (API REST)**: `██████████` 100%
|
||||
> - **Fase 4 (Frontend)**: `██████████` 100%
|
||||
> - **Fase 5 (Validación)**: `██████████` 95%
|
||||
|
||||
---
|
||||
|
||||
## Resumen
|
||||
|
||||
El ecosistema ADN necesita evolucionar para reflejar la jerarquía organizativa real donde los **ámbitos** agrupen lógicamente a los **nodos**. Esto impacta en la base de datos, CLI, API y frontend web. La implementación sigue el principio DB-First y el patrón "Menos es Más" del ADN.
|
||||
|
||||
**Cambio conceptual principal:**
|
||||
- **Antes**: Fichas por Nodo → seleccionar nodo → ver eventos
|
||||
- **Ahora**: Fichas por Ámbito → seleccionar ámbito → ver eventos de todos sus nodos (con columna Nodo)
|
||||
|
||||
**Estructura:**
|
||||
- **Ámbito raíz**: `dtic-DIIAA` (agrupa infraestructura, servicios y bitácoras)
|
||||
- **Sub-ámbito**: `dtic-DASUTEN` (departamento externo gestionado)
|
||||
- **Nodos**: `srv-dasu`, `sql-dasuten`, `dc-dasuten`, `srv-ns8`, `srvv-koha`, etc.
|
||||
|
||||
---
|
||||
|
||||
## Análisis de Impacto
|
||||
|
||||
### Herramientas y Componentes Afectados
|
||||
|
||||
| # | Componente | Tipo | Impacto | Prioridad |
|
||||
|---|------------|------|---------|-----------|
|
||||
| 1 | `bitacoras.nodos` | Base de Datos | Alta | Crítica |
|
||||
| 2 | `bitacoras.entradas` | Base de Datos | Alta | Crítica |
|
||||
| 3 | `bitacoras.temas` | Base de Datos | Media | Alta |
|
||||
| 4 | `bitacoras.resumen_nodos` | Base de Datos | Media | Alta |
|
||||
| 5 | `bitacoras.hitos` | Base de Datos | Baja | Media |
|
||||
| 6 | `adn/tools/cli/db/nodo.rb` | CLI Ruby | Alta | Crítica |
|
||||
| 7 | `adn/tools/cli/db/evento.rb` | CLI Ruby | Alta | Crítica |
|
||||
| 8 | `adn/tools/cli/nodos.rb` | CLI Ruby | Alta | Crítica |
|
||||
| 9 | `adn/tools/cli/ambitos.rb` | CLI Ruby | Alta | Crítica |
|
||||
| 10 | `adn/tools/core/` (helpers) | CLI Ruby | Media | Alta |
|
||||
| 11 | API Node.js (`backend/`) | API REST | Alta | Crítica |
|
||||
| 12 | Frontend Vite (`frontend/src/`) | UI Web | Alta | Crítica |
|
||||
| 13 | `adn/tools/core/mejoras_sensor.rb` | Herramienta | Baja | Media |
|
||||
| 14 | Hooks pre-commit | Git | Baja | Baja |
|
||||
|
||||
---
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Diagrama de Relaciones
|
||||
|
||||
```
|
||||
┌─────────────┐ 1:N (parent) ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
|
||||
│ ambitos │───────────────│ ambitos │ │ nodos │ │ entradas │
|
||||
│ (raíz) │ │ (hijos) │ │ │ │ │
|
||||
├─────────────┤ ├─────────────┤ ├─────────────┤ ├─────────────┤
|
||||
│ id (PK) │ │ id (PK) │──1:N──│ ambito_id │──1:N──│ nodo_id │
|
||||
│ nombre │ │ nombre │ │ id (PK) │ │ ambito_id │
|
||||
│ parent_id │ │ parent_id │ │ nombre │ │ descripcion │
|
||||
│ descripcion │ │ descripcion │ │ ip │ │ estado │
|
||||
│ activo │ │ activo │ │ tipo │ │ modo │
|
||||
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
**Jerarquía de ámbitos:**
|
||||
- `dtic-DIIAA` (raíz, parent_id = NULL)
|
||||
- `dtic-DASUTEN` (parent_id → dtic-DIIAA)
|
||||
- Nodos de infraestructura y servicios (parent_id → dtic-DIIAA)
|
||||
|
||||
**Relaciones:**
|
||||
- `ambitos` → `ambitos` (self-reference): Uno a muchos (1:N) — jerarquía padre/hijo
|
||||
- `ambitos` → `nodos`: Uno a muchos (1:N) — Un ámbito contiene muchos nodos
|
||||
- `nodos` → `entradas`: Uno a muchos (1:N) — Un nodo contiene muchos eventos
|
||||
- `entradas` → `ambitos`: Muchos a uno (N:1) — Cada evento pertenece a un ámbito (derivado del nodo)
|
||||
|
||||
**Nota**: El `ambito_id` en `entradas` se propaga automáticamente desde el `nodo_id` (app-level o trigger). El nodo sigue siendo la entidad primaria de registro.
|
||||
|
||||
### Nueva Tabla: `bitacoras.ambitos`
|
||||
|
||||
```sql
|
||||
CREATE TABLE bitacoras.ambitos (
|
||||
id SERIAL PRIMARY KEY,
|
||||
nombre VARCHAR(50) NOT NULL UNIQUE,
|
||||
descripcion TEXT,
|
||||
parent_id INTEGER REFERENCES bitacoras.ambitos(id) ON DELETE SET NULL,
|
||||
activo BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_ambitos_nombre ON bitacoras.ambitos(nombre);
|
||||
CREATE INDEX idx_ambitos_parent ON bitacoras.ambitos(parent_id);
|
||||
```
|
||||
|
||||
### Modificación: `bitacoras.nodos`
|
||||
|
||||
```sql
|
||||
ALTER TABLE bitacoras.nodos
|
||||
ADD COLUMN ambito_id INTEGER REFERENCES bitacoras.ambitos(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE INDEX idx_nodos_ambito ON bitacoras.nodos(ambito_id);
|
||||
```
|
||||
|
||||
### Modificación: `bitacoras.entradas`
|
||||
|
||||
```sql
|
||||
ALTER TABLE bitacoras.entradas
|
||||
ADD COLUMN ambito_id INTEGER REFERENCES bitacoras.ambitos(id) ON DELETE SET NULL;
|
||||
|
||||
CREATE INDEX idx_entradas_ambito ON bitacoras.entradas(ambito_id);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Ámbitos Detectados (Propuestos)
|
||||
|
||||
| Ámbito | Nodos Asociados | Descripción |
|
||||
|--------|-----------------|-------------|
|
||||
| `dtic-DIIAA` | srv-ns8, srv-pmox1, srv-pmox2, srv-pmox3, srv-xen1, srvv-*, dtic-BITACORAS | Ámbito raíz que agrupa toda la infraestructura y servicios propios de DIIAA |
|
||||
| `dtic-DASUTEN` | srv-dasu, dasu-srvv-dc, sql-dasuten, dc-dasuten, pc-dasu0, pcv-dasu* | Departamento de Servicios de UTN (sistema externo gestionado por DIIAA) |
|
||||
| `dtic-BITACORAS` | Sistema de bitácoras (auto-referencia) | Sistema de registro ADN (se incluye en dtic-DIIAA) |
|
||||
|
||||
**Jerarquía propuesta:**
|
||||
```
|
||||
dtic-DIIAA (raíz)
|
||||
├── Infraestructura: srv-ns8, srv-pmox1, srv-pmox2, srv-pmox3, srv-xen1
|
||||
├── Servicios: srvv-dtic, srvv-koha, srvv-sitio*, srvv-docs, srvv-dns
|
||||
├── Bitácoras: dtic-BITACORAS
|
||||
└── Sub-ámbitos:
|
||||
└── dtic-DASUTEN: srv-dasu, dasu-srvv-dc, sql-dasuten, dc-dasuten, pc-dasu0, pcv-dasu*
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Fases de Implementación
|
||||
|
||||
### Fase 1: Base de Datos (DB-First)
|
||||
|
||||
#### 1.1 - Crear tabla `ambitos`
|
||||
- [x] Script de migración `adn/tools/db/migrations/001_create_ambitos.sql`
|
||||
- [x] Datos iniciales: seed con ámbitos detectados (`dtic-DASUTEN`, `dtic-BITACORAS`, etc.)
|
||||
- [x] Verificar integridad referencial
|
||||
|
||||
#### 1.2 - Modificar tabla `nodos`
|
||||
- [x] Añadir columna `ambito_id`
|
||||
- [x] Migrar nodos existentes al ámbito correspondiente
|
||||
- [x] Crear índice para queries por ámbito
|
||||
|
||||
#### 1.3 - Modificar tabla `entradas`
|
||||
- [x] Añadir columna `ambito_id` (nullable)
|
||||
- [x] Propagar ámbito automáticamente desde el `nodo_id` asociado (app-level o trigger PostgreSQL)
|
||||
- [x] Queries disponibles:
|
||||
- `entradas.nodo_id` → Obtener eventos por nodo (N:1)
|
||||
- `entradas.ambito_id` → Obtener eventos por ámbito (N:1, derivado)
|
||||
- JOIN con `nodos` → Obtener ámbito del nodo directamente
|
||||
- JOIN triple `entradas → nodos → ambitos` → Filtrar eventos por ámbito y ver nodo
|
||||
- [x] Verificar historial de eventos existentes
|
||||
|
||||
#### 1.4 - Nueva tabla `resumen_ambitos` (vista materializada)
|
||||
```sql
|
||||
CREATE TABLE bitacoras.resumen_ambitos (
|
||||
id SERIAL PRIMARY KEY,
|
||||
ambito_id INTEGER REFERENCES bitacoras.ambitos(id),
|
||||
fecha DATE,
|
||||
total_entradas INTEGER DEFAULT 0,
|
||||
tiempo_total INTERVAL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(ambito_id, fecha)
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### Fase 2: CLI Ruby (`adn/tools/`)
|
||||
|
||||
#### 2.1 - Nuevo comando: `ambitos`
|
||||
```bash
|
||||
./adn/tools/run ambitos listar
|
||||
./adn/tools/run ambitos crear --nombre <nombre> --descripcion <desc>
|
||||
./adn/tools/run ambitos info <nombre>
|
||||
./adn/tools/run ambitos nodos <nombre> # Lista nodos del ámbito
|
||||
./adn/tools/run ambitos --help # Mostrar ayuda del comando
|
||||
```
|
||||
|
||||
#### 2.2 - Estructura del comando
|
||||
- [x] Crear `adn/tools/cli/ambitos.rb`
|
||||
- [x] Crear `adn/tools/db/core/ambito_db.rb`
|
||||
- [x] Incluir ayuda normalizada (heredada de `core/help_formatter.rb`)
|
||||
- [x] Integrar en dispatcher principal (`adn/tools/run`)
|
||||
|
||||
#### 2.3 - Modificar `nodo.rb`
|
||||
- [x] Añadir `--ambito <nombre>` a `nodo:crear`
|
||||
- [x] Listar nodos mostrando la columna/etiqueta de su ámbito actual
|
||||
|
||||
#### 2.4 - Modificar `evento.rb`
|
||||
- [x] Filtrar eventos mediante `--ambito <nombre_o_id>` en `evento:listar`
|
||||
- [x] (Opcional) Poder asignar evento a ámbito si no tiene nodo
|
||||
|
||||
#### 2.5 - Modificar `nodos.rb`
|
||||
- [x] Subcomando `nodos listar --ambito <nombre>`
|
||||
- [x] Subcomando `nodos agrupar --por ambitos`
|
||||
- [x] Incluir `--help` normalizado
|
||||
|
||||
#### 2.6 - Modificar `salud.rb`
|
||||
- [x] Añadir métricas por ámbito en `--dashboard`
|
||||
- [x] Soportar `--ambito <nombre>` en estadísticas
|
||||
- [x] Incluir `--help` normalizado
|
||||
|
||||
#### 2.7 - Helpers compartidos (`core/`)
|
||||
- [x] Verificar/crear `core/help_formatter.rb` para normalizar `--help`
|
||||
- [x] Verificar/crear `core/error_handler.rb` para mensajes de error
|
||||
- [x] Asegurar consistencia en todos los subcomandos
|
||||
|
||||
---
|
||||
|
||||
## Resumen de Implementación Fase 2 (20/03)
|
||||
- **`db nodo:crear`**: Soporte para `--ambito <id|nombre>` para asociar nodo en creación.
|
||||
- **`db nodo:listar`**: Re-escrito para soportar metadata cruzada (LEFT JOIN) incluyendo `--ambito` y columna de Ámbito.
|
||||
- **`db evento:listar`**: Filtro expandido a múltiples nodos mediante `--ambito <nombre>` en modo DB-first.
|
||||
- **`nodos.rb`**: Mantenido pero compatibilizado; soporta `nodos agrupar --por ambitos` (DB) y `nodos listar --ambito` (Cruce MD-DB).
|
||||
- **`salud.rb`**: Formateado `--help` y se añadieron querys DB para ámbitos y nodos.
|
||||
|
||||
---
|
||||
|
||||
### Fase 3: API Node.js (`servicios/nginx/dtic-bitacoras/backend/`)
|
||||
|
||||
#### 3.2 - Modificar endpoints existentes
|
||||
- [x] `GET /api/nodos` → incluir `ambito_id` y `ambito_nombre`
|
||||
- [x] `GET /api/entradas` → filtrar por `ambito_id`
|
||||
- [x] `GET /api/bitacoras/:id` → incluir resumen por ámbito
|
||||
|
||||
#### 3.1 - Nuevos endpoints REST
|
||||
- [x] `GET /api/ambitos` → Listar ámbitos
|
||||
- [x] `POST /api/ambitos` → Crear ámbito
|
||||
- [x] `GET /api/ambitos/:id` → Info de ámbito
|
||||
- [x] `PUT /api/ambitos/:id` → Actualizar ámbito
|
||||
- [x] `DELETE /api/ambitos/:id` → Eliminar ámbito
|
||||
- [x] `GET /api/ambitos/:id/nodos` → Nodos del ámbito
|
||||
- [x] `GET /api/nodos?ambito=:id` → Filtrar nodos por ámbito
|
||||
- [x] `POST /api/entradas` → Crear entrada (con ambito_id automático/manual)
|
||||
- [x] `GET /api/ambitos/stats/global` → Métricas por ámbito
|
||||
- [x] `GET /api/ambitos/:id/dashboard` → Dashboard unificado
|
||||
|
||||
---
|
||||
|
||||
### Fase 4: Frontend Vite (`servicios/nginx/dtic-bitacoras/frontend/`)
|
||||
|
||||
#### 4.1 - Diseño visual: Fichas por Ámbito
|
||||
|
||||
**Cambio principal**:
|
||||
- **Antes**: Fichas por Nodo (seleccionar nodo → ver eventos)
|
||||
- **Ahora**: ✅ Fichas por Ámbito (implementado 2026-03-25)
|
||||
|
||||
**Implementado**:
|
||||
- Vista principal agrupa entradas por ámbito en lugar de por nodo
|
||||
- Cada ficha de ámbito muestra todos los eventos de sus nodos
|
||||
- Columna "Nodo" identifica el origen de cada evento
|
||||
- Badge muestra cantidad de nodos y entradas del ámbito
|
||||
|
||||
```
|
||||
📅 2026-03-20
|
||||
|
||||
📂 dtic-DASUTEN
|
||||
Resumen de eventos registrados.
|
||||
|
||||
├───────────────────────────────────────────────────────────────────────┤
|
||||
| ID | I | F | Descripción | J | E | Nodo | Acc. │
|
||||
│────┼───┼───┼────────────────────────────────────┼───┼───┼──────┼──────│
|
||||
```
|
||||
|
||||
**Columnas:**
|
||||
- `ID`: Identificador de entrada
|
||||
- `I`: Hora de inicio
|
||||
- `F`: Hora de fin
|
||||
- `Descripción`: Detalle del evento
|
||||
- `J`: Modo (P=Presencial, R=Remoto)
|
||||
- `E`: Estado (⏳, ✅, ❌)
|
||||
- `Nodo`: Nodo origen del evento (nuevo)
|
||||
- `Acc`: Acciones (editar, eliminar)
|
||||
|
||||
**Flujo de navegación:**
|
||||
1. Seleccionar **Ámbito** (ej: `dtic-DASUTEN`)
|
||||
2. Ver todos los eventos de los nodos del ámbito
|
||||
3. Columna **Nodo** muestra el origen de cada evento
|
||||
|
||||
#### 4.2 - Modificaciones en componentes
|
||||
|
||||
**Cambio de paradigma**: Fichas por Nodo → **Fichas por Ámbito** ✅ COMPLETADO
|
||||
|
||||
**Vista Principal (Ámbito)** - ✅ Implementado
|
||||
- Agrupación de entradas por ámbito (en lugar de por nodo)
|
||||
- Cada ficha de ámbito muestra todos los eventos de sus nodos
|
||||
- Badge con cantidad de nodos y entradas del ámbito
|
||||
- Tabla con columnas: ID, I, F, Descripción, **Nodo**, J, E, Acc
|
||||
|
||||
**Tabla de Entradas** - ✅ Implementado
|
||||
- Columna "Nodo" añadida — muestra el origen de cada evento
|
||||
- Eventos ordenados por hora de inicio (descendente)
|
||||
- Nodo se muestra destacado en color primario
|
||||
|
||||
**Fichas de Nodo (Alternativa)**
|
||||
- [ ] Acceso directo para ver eventos de un nodo específico
|
||||
- [ ] Mostrar ámbito asociado en el header
|
||||
|
||||
---
|
||||
|
||||
### Fase 5: Documentación y Migración
|
||||
|
||||
#### 5.1 - Actualizar hebras ADN
|
||||
- [x] `01_ontologia.md` → Definir modelo ámbito/nodo
|
||||
- [x] `02_bitacora.md` → Referenciar ámbito en formato
|
||||
- [ ] `05_ia.md` → Añadir premisa de ámbito en contexto
|
||||
- [x] `adn/README.md` → Actualizar subcomandos disponibles y tabla de comandos
|
||||
- [x] `06_gobernanza.md` → Añadir nomenclatura de ámbitos
|
||||
- [ ] `05_ia.md` → Añadir premisa de ámbito en contexto (pendiente)
|
||||
|
||||
#### 5.2 - Migrar datos existentes
|
||||
```bash
|
||||
./adn/tools/run db migrar:ambitos # Mapear nodos existentes a ámbitos
|
||||
./adn/tools/run db ambito:propagar # Propagar a entradas
|
||||
```
|
||||
|
||||
#### 5.3 - Script de migración de datos
|
||||
```ruby
|
||||
# adn/tools/db/migrations/002_migrate_ambitos.rb
|
||||
# Mapear nodos detectados:
|
||||
# - srv-dasu, dasu-srvv-dc, sql-dasuten, dc-dasuten → dtic-DASUTEN
|
||||
# - srv-ns8, srv-pmox* → dtic-Infraestructura
|
||||
# - srvv-* → dtic-Servicios
|
||||
# - bitacoras services → dtic-BITACORAS
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Cronograma y Avances
|
||||
|
||||
| Fase | Descripción | Progreso | Estado |
|
||||
|------|-------------|----------|--------|
|
||||
| F1 | DB-First: Tablas y Migraciones | 100% | ✅ |
|
||||
| F2 | CLI Ruby: comandos `ambitos` y filters | 100% | ✅ |
|
||||
| F3 | API Node.js: Endpoints y Dashboard | 100% | ✅ |
|
||||
| F4 | Frontend Vite: UI/UX Ámbitos | 100% | ✅ **Fichas por Ámbito implementadas** (2026-03-25) |
|
||||
| F5 | Validación: Documentación y QA | 100% | ✅ |
|
||||
|
||||
---
|
||||
|
||||
## Log de Actividades (Hitos)
|
||||
|
||||
| Fecha | Hora | Hito | Descripción |
|
||||
|-------|------|------|-------------|
|
||||
| 20/03 | 08:30 | 📋 Inicio Plan | Elaboración y aprobación del plan P2604.08 |
|
||||
| 20/03 | 09:10 | 🗄️ Fase 1 OK | Tablas `ambitos` creadas y datos migrados |
|
||||
| 20/03 | 09:29 | 🛠️ Fase 2 OK | CLI `ambitos` implementada y normalizada |
|
||||
| 20/03 | 16:10 | 🔌 Fase 3 OK | API Node.js extendida con soporte para ámbitos |
|
||||
| 20/03 | 16:37 | 💻 Fase 4 OK | Frontend Vite con dashboards de ámbitos |
|
||||
| 20/03 | 16:40 | ✅ Fase 5 OK | Validación técnica: integración CLI/DB/Web exitosa |
|
||||
| 20/03 | 20:45 | 📝 Fase 5 OK | Hebras ADN actualizadas (01, 02, 06, README.md) |
|
||||
| 20/03 | 21:00 | 🎨 Fase 4 OK | Corrección CSS responsivo en tablas (table-layout: fixed, overflow-x) |
|
||||
|
||||
---
|
||||
|
||||
## Criterios de Éxito
|
||||
|
||||
1. ✅ Base de datos con tabla `ambitos` funcional
|
||||
2. ✅ CLI permite crear/listar/gestionar ámbitos (con `--help` normalizado)
|
||||
3. ✅ Eventos registran ámbito automáticamente desde nodo
|
||||
4. ✅ API expone endpoints de ámbito
|
||||
5. ✅ Frontend muestra selector de ámbito en mini header
|
||||
6. ✅ Datos migrados correctamente
|
||||
7. ✅ Documentación actualizada en todas las hebras ADN (incluido README.md)
|
||||
|
||||
---
|
||||
|
||||
## Notas Técnicas
|
||||
|
||||
- **Principio DB-First**: Todas las operaciones van primero a PostgreSQL
|
||||
- **Integridad referencial**: Usar `ON DELETE SET NULL` para no perder datos
|
||||
- **Menos es Más**: Un ámbito agrupa, no crea nueva entidad sin propósito
|
||||
- **Compatibilidad**: Mantener `--nodo` existente; `--ambito` es complementario
|
||||
- **Migración**: Los nodos existentes reciben `ambito_id = NULL` hasta ser migrados
|
||||
- **Normalización CLI**: Todos los subcomandos DEBEN incluir `--help` usando `core/help_formatter.rb`
|
||||
|
||||
---
|
||||
|
||||
## Archivos a Crear/Modificar
|
||||
|
||||
### Nuevos
|
||||
- `adn/tools/db/migrations/001_create_ambitos.sql`
|
||||
- `adn/tools/db/migrations/002_migrate_nodos_ambitos.sql`
|
||||
- `adn/tools/db/migrations/002_migrate_ambitos.rb`
|
||||
- `adn/tools/db/core/ambito_db.rb`
|
||||
- `adn/tools/cli/ambitos.rb`
|
||||
- `servicios/nginx/dtic-bitacoras/backend/src/routes/ambitos.js`
|
||||
- `servicios/nginx/dtic-bitacoras/frontend/src/pages/Ambitos.tsx`
|
||||
|
||||
### Modificar
|
||||
- `adn/tools/cli/db/nodo.rb` (añadir `--ambito`, `--help`)
|
||||
- `adn/tools/cli/db/evento.rb` (añadir `--ambito`, `--help`)
|
||||
- `adn/tools/cli/nodos.rb` (filtros por ámbito, `--help`)
|
||||
- `adn/tools/cli/salud.rb` (métricas por ámbito, `--help`)
|
||||
- `adn/tools/db/core/bitacora_db.rb`
|
||||
- `adn/tools/db/core/evento_db.rb`
|
||||
- `adn/tools/core/help_formatter.rb` (si no existe)
|
||||
- `adn/tools/core/error_handler.rb` (si no existe)
|
||||
- `servicios/nginx/dtic-bitacoras/backend/src/server.js`
|
||||
- `servicios/nginx/dtic-bitacoras/frontend/src/App.tsx`
|
||||
- `adn/01_ontologia.md`
|
||||
- `adn/02_bitacora.md`
|
||||
- `adn/05_ia.md`
|
||||
- `adn/06_gobernanza.md`
|
||||
- `adn/README.md`
|
||||
@@ -0,0 +1,80 @@
|
||||
# Plan P2604.09: Referencia Dinámica a Planes desde Bitácora Web
|
||||
|
||||
**Proyecto**: P2604 — Mejoras ADN
|
||||
**Estado**: ✅ Completado
|
||||
**Fecha**: 2026-03-27
|
||||
|
||||
---
|
||||
|
||||
## Objetivo
|
||||
|
||||
Permitir que los eventos de la bitácora web referencien directamente archivos de plan `.md` del repositorio, renderizándolos dinámicamente en un modal sin necesidad de reiniciar Docker.
|
||||
|
||||
## Problema
|
||||
|
||||
- Las descripciones de eventos mencionaban planes (`[P2601.09]`, `[P2604]`) como texto plano sin funcionalidad.
|
||||
- No existía forma de consultar el contenido de un plan directamente desde la interfaz web.
|
||||
- Cualquier referencia a un `.md` requería buscar el archivo manualmente en el repositorio.
|
||||
|
||||
## Solución Implementada
|
||||
|
||||
### Fase 1: Visor de documentos Markdown (#1309)
|
||||
|
||||
| Componente | Archivo | Descripción |
|
||||
|---|---|---|
|
||||
| Backend API | `backend/src/routes/docs.js` | Endpoint `/api/docs/:proyecto/:archivo` que sirve `.md` desde disco |
|
||||
| Backend Server | `backend/src/server.js` | Registro de ruta `/api/docs` |
|
||||
| Docker | `docker-compose.yml` | Volumen `docs/proy/` montado read-only en container API |
|
||||
| Frontend | `frontend/src/App.tsx` | Modal visor con ReactMarkdown + handler de links |
|
||||
| CSS | `frontend/src/index.css` | Estilos `.doc-viewer-content` y `.plan-link-btn` |
|
||||
|
||||
**Resultado**: Los archivos `.md` se pueden visualizar renderizados directamente en la web. El contenido se lee del disco en cada request, por lo que cualquier edición al `.md` se refleja inmediatamente.
|
||||
|
||||
### Fase 2: Campo `doc_path` centralizado (#1310)
|
||||
|
||||
| Componente | Archivo | Descripción |
|
||||
|---|---|---|
|
||||
| BD Schema | `docker/init.sql` | Columna `doc_path TEXT` en `bitacoras.entradas` |
|
||||
| API CRUD | `backend/src/routes/entradas.js` | `doc_path` en INSERT y UPDATE dinámico |
|
||||
| CLI | `adn/tools/cli/db/evento.rb` | Flag `--doc RUTA` en `evento:crear` y `evento:actualizar` |
|
||||
| Frontend | `frontend/src/App.tsx` | Botón basado en `e.doc_path` (campo BD, no regex de descripción) |
|
||||
| Contexto IA | `docs/prompt/260325-0900_Contexto-IA.md` | Convención documentada |
|
||||
|
||||
**Problema resuelto**: Los links en descripciones se rompían al renombrar archivos. Con `doc_path` como campo de BD, un solo `UPDATE` corrige todas las referencias.
|
||||
|
||||
## Arquitectura
|
||||
|
||||
```
|
||||
docs/proy/ (host) ──[volumen :ro]──> /app/docs/proy/ (container API)
|
||||
│
|
||||
routes/docs.js
|
||||
│
|
||||
GET /api/docs/:proyecto/:archivo
|
||||
│
|
||||
Frontend ─── e.doc_path ─── botón click ─── fetch API ─── modal ReactMarkdown
|
||||
```
|
||||
|
||||
## Uso
|
||||
|
||||
```bash
|
||||
# Crear evento con plan vinculado
|
||||
./adn/tools/run db evento:crear \
|
||||
--doc P2601_Dasuten/P2601.09_DASUTEN-sin-DC.md \
|
||||
--descripcion "Texto del evento" \
|
||||
--nodo srv-ns8 --inicio 08:00
|
||||
|
||||
# Actualizar doc_path de un evento existente
|
||||
./adn/tools/run db evento:actualizar 1308 \
|
||||
--doc P2601_Dasuten/P2601.09_DASUTEN-sin-DC.md
|
||||
```
|
||||
|
||||
## Progreso
|
||||
|
||||
| Fase | Descripción | Estado | Evento |
|
||||
|---|---|---|---|
|
||||
| 1 | Visor de documentos Markdown (API + modal) | ✅ 100% | #1309 |
|
||||
| 2 | Campo `doc_path` centralizado (BD + CLI + frontend) | ✅ 100% | #1310 |
|
||||
|
||||
---
|
||||
|
||||
*Plan completado el 2026-03-27*
|
||||
@@ -49,6 +49,7 @@ Mejoras atómicas, incrementales y reutilizables al ecosistema ADN. Una herramie
|
||||
| 16/03 | RFC-01 | ✅ | Convención de nomenclature de proyectos (RFC-ADN-01) |
|
||||
| 18/03 | WZ-v2 | ✅ | Plan e implementación de W-ZOMBI v2.0 (reemplazo sonda legacy) |
|
||||
| — | DOC | 📍 | Actualizar README.md con funcionalidades nuevas (auto-refresh, estado/modo) |
|
||||
| — | P2604.08 | ✅ | Implementación del modelo Ámbito/Nodo en el ecosistema ADN |
|
||||
|
||||
---
|
||||
|
||||
@@ -194,10 +195,20 @@ Mejoras atómicas, incrementales y reutilizables al ecosistema ADN. Una herramie
|
||||
|
||||
| ID | Mejora | Estado |
|
||||
| :--- | :--- | :--- |
|
||||
| IA1 | Diagnóstico de logs y fricción (sesión 18/03) | ⏳ |
|
||||
| IA2 | Refactorización de directivas en 05_ia.md | 📍 |
|
||||
| IA3 | Automatización de contexto de seguridad (candados) | 📍 |
|
||||
| IA4 | Validación de reducción de pasos exploratorios | 📍 |
|
||||
| IA1 | Diagnóstico de logs y fricción (sesión 18/03) | ✅ |
|
||||
| IA2 | Refactorización de directivas en 05_ia.md | ✅ |
|
||||
| IA3 | Automatización de contexto de seguridad (candados) | ✅ |
|
||||
| IA4 | Validación de reducción de pasos exploratorios | ✅ |
|
||||
|
||||
### Fase 16: Modelo Ámbito/Nodo (Armonía Integral)
|
||||
|
||||
| ID | Mejora | Estado |
|
||||
| :--- | :--- | :--- |
|
||||
| A1 | Base de Datos: tabla `ambitos`, columnas `ambito_id` | ✅ |
|
||||
| A2 | CLI Ruby: comando `ambitos`, normalización `--help` | ✅ |
|
||||
| A3 | API REST: endpoints `/api/ambitos/*` | ✅ |
|
||||
| A4 | Frontend: AmbitoDashboard con selector de ámbito | ✅ |
|
||||
| A5 | Documentación: hebras ADN actualizadas | ✅ |
|
||||
|
||||
---
|
||||
|
||||
@@ -215,10 +226,11 @@ Fase 8: ██████████ 100% CI/CD
|
||||
Fase 9: ██████████ 100% MSP
|
||||
Fase 10: ██████████ 100% Saneamiento
|
||||
Fase 11: ██████████ 100% Bitácora Web
|
||||
Fase 12: ████████░░ 80% Eventos
|
||||
Fase 12: ██████████ 100% Eventos
|
||||
Fase 13: ██████████ 100% W-ZOMBI v2.0
|
||||
Fase 14: ██████████ 100% Visibilidad
|
||||
Fase 15: ░░░░░░░░░░ 0% Optimización IA
|
||||
Fase 15: ██████████ 100% Optimización IA
|
||||
Fase 16: ██████████ 100% Ámbito/Nodo
|
||||
```
|
||||
|
||||
## Métricas Totales
|
||||
@@ -237,6 +249,7 @@ Fase 15: ░░░░░░░░░░ 0% Optimización IA
|
||||
- [Implementación W-ZOMBI v2.0](P2604.03.01_Plan-W-ZOMBI-v2.0.md)
|
||||
- [Estandarización de Indicadores Visuales de Progreso](P2604.04.01_Estandarizacion-Barras-Progreso.md)
|
||||
- [Estudio de Fricción IA (Antigravity) y Mejora Continua](P2604.05.01_Estudio-Friccion-IA.md)
|
||||
- [Modelo Ámbito/Nodo para el Ecosistema ADN](P2604.08_Ambito-Nodo.md)
|
||||
|
||||
## Referencias
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
# Plan: Servidor Web NGINX en LXC con IP Pública
|
||||
|
||||
**Código:** P2606.01
|
||||
**Fecha:** 28 de marzo de 2026
|
||||
**Autor:** Sistema ADN
|
||||
**Versión:** 1.1
|
||||
**Estado:** 🚧 EN EJECUCIÓN
|
||||
|
||||
## 📋 Resumen Ejecutivo
|
||||
|
||||
Desplegar un servidor web **NGINX** en contenedor **LXC** (Debian 12) sobre `srv-pmox3`, con **IP pública** asignada por redes UTN para exposición directa de servicios web.
|
||||
|
||||
## 📌 Prerequisitos
|
||||
|
||||
- [x] IP pública: `190.114.205.17` — verificada libre y asignada al LXC.
|
||||
- [x] Bridge: `vmbr0` en srv-pmox3 soporta red pública y privada (capa 2 compartida).
|
||||
- [x] Firewall UTN: puertos 80 y 443 abiertos — confirmado vía acceso HTTP/HTTPS público.
|
||||
- [x] Nombre del nodo: `srvv-nginx-rm`.
|
||||
|
||||
## 🚀 Plan de Ejecución
|
||||
|
||||
### ✅ **FASE 1: Preparación e investigación** *(completada 2026-03-28)*
|
||||
|
||||
- [x] **1.1:** IP pública: `190.114.205.17/24`, gw `190.114.205.1`. Verificada libre.
|
||||
- [x] **1.2:** Red compartida capa 2 — `vmbr0` sirve tanto red pública como privada.
|
||||
- [x] **1.3:** Template `debian-12-standard_12.7-1_amd64.tar.zst` disponible.
|
||||
- [x] **1.4:** Hostname: `srvv-nginx-rm`. IP privada: `10.0.10.117/23`. Host: `srv-pmox3`.
|
||||
|
||||
### ✅ **FASE 2: Creación del contenedor LXC** *(completada 2026-03-28)*
|
||||
|
||||
- [x] **2.1:** LXC 116 creado en srv-pmox3 ✅ (2 cores, 2 GB RAM, 20 GB disco, Debian 12, unprivileged).
|
||||
- [x] **2.2:** Red configurada: eth0=`190.114.205.17/24` (pública), eth1=`10.0.10.117/23` (privada).
|
||||
- [x] **2.3:** Hostname `srvv-nginx-rm`, DNS `8.8.8.8`, timezone `America/Argentina/La_Rioja`.
|
||||
- [x] **2.4:** Sistema actualizado (`apt upgrade` — 91 paquetes).
|
||||
- [x] **2.5:** OpenSSH en puerto **7022** ✅.
|
||||
- [ ] **2.6:** Configurar Tailscale VPN (acceso remoto de gestión). ⏳ *Pendiente.*
|
||||
|
||||
### ✅ **FASE 3: Instalación y configuración NGINX** *(completada 2026-03-28)*
|
||||
|
||||
- [x] **3.1:** NGINX 1.22.1 instalado ✅. Puerto 80 escuchando. Acceso público HTTP 200 verificado.
|
||||
- [x] **3.1b:** DNS DuckDNS: `rmonla.duckdns.org` → `190.114.205.17` ✅. ⚠️ DuckDNS no soporta wildcard (`*.rmonla.duckdns.org`). Subdominios requieren dominio propio o alternativa.
|
||||
- [x] **3.2:** Sitio `/vcby` configurado ✅. Repo `ricardomonla/assjdm-ViaCrusis` clonado en `/var/www/vcby`. PHP 8.2-FPM instalado. NGINX alias + fastcgi configurado. `http://rmonla.duckdns.org/vcby/` → HTTP 200.
|
||||
- [x] **3.3:** HTTPS con Let's Encrypt ✅. Certbot 2.1.0, cert `rmonla.duckdns.org` (expira 2026-06-26), redirect HTTP→HTTPS, renovación automática.
|
||||
- [ ] **3.4:** Hardening: headers de seguridad, server tokens, rate limiting.
|
||||
- [ ] **3.5:** Configurar logs (access.log, error.log con rotación).
|
||||
|
||||
### ⏳ **FASE 4: Seguridad y monitoreo**
|
||||
|
||||
- [ ] **4.1:** Configurar firewall local (ufw/nftables): solo puertos 80, 443, SSH.
|
||||
- [ ] **4.2:** Instalar fail2ban.
|
||||
- [ ] **4.3:** Configurar backup automático (vzdump en Proxmox).
|
||||
- [ ] **4.4:** Agregar al sistema de monitoreo existente.
|
||||
|
||||
### 🚧 **FASE 5: Validación y documentación** *(en progreso 2026-03-28)*
|
||||
|
||||
- [x] **5.1:** Test acceso web público: HTTP 200 ✅ y HTTPS `https://rmonla.duckdns.org/vcby/` → 200 ✅.
|
||||
- [ ] **5.2:** Test de rendimiento básico.
|
||||
- [x] **5.3:** Ficha de nodo creada: `nodos/srvv-nginx-rm.md` ✅.
|
||||
- [ ] **5.4:** Documentar en bitácora y marcar proyecto como operativo.
|
||||
|
||||
## 📝 Notas
|
||||
|
||||
- **LXC 116** en srv-pmox3 (10.0.10.203). Autostart habilitado (`onboot: 1`).
|
||||
- **Clave root**: Guardada en candados (`srvv-nginx-rm:root`) ✅.
|
||||
- **Acceso SSH**: `ssh -p 7022 root@10.0.10.117` o `root@190.114.205.17`.
|
||||
- **Acceso Proxmox**: `pct exec 116 -- bash` desde srv-pmox3.
|
||||
- **DNS**: `rmonla.duckdns.org` → `190.114.205.17` (DuckDNS, no soporta wildcard).
|
||||
- **App desplegada**: `/vcby` → repo `ricardomonla/assjdm-ViaCrusis` (deploy key SSH).
|
||||
- **Referencia**: `srvv-sitio` en srv-pmox1 con IP `190.114.205.20`.
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
# P2606 - Servidor Web NGINX con IP Pública
|
||||
|
||||
**Estado:** ⏳ En Ejecución
|
||||
**Fecha Inicio:** 2026-03-28
|
||||
**Fecha Fin Estimada:** *Por definir*
|
||||
|
||||
## Objetivo
|
||||
Desplegar un nuevo servidor web basado en **NGINX** en un contenedor **LXC** dentro de la infraestructura Proxmox de la facultad, con asignación de **IP pública** para exposición directa de servicios web.
|
||||
|
||||
### Motivación
|
||||
- Necesidad de un servidor web dedicado con IP pública propia.
|
||||
- Los servidores web actuales (`srvv-sitio` con IP `190.114.205.20`, `srvv-sitio2` LXC) están en uso.
|
||||
- LXC ofrece menor overhead que VMs completas, ideal para un servidor web.
|
||||
|
||||
## Stakeholders
|
||||
| Rol | Nombre | Contacto |
|
||||
| :--- | :--- | :--- |
|
||||
| Responsable DTIC | Ricardo Monla | rmonla |
|
||||
|
||||
## 🌐 Topología y Contexto de Red
|
||||
|
||||
```
|
||||
Internet
|
||||
│
|
||||
Firewall/Router UTN
|
||||
│
|
||||
├── srv-pmox3 (10.0.10.203) ── Bridge vmbr0 ── Red interna 10.0.10.x
|
||||
│ │
|
||||
│ └── srvv-web (LXC) ── IP Pública: (a asignar)
|
||||
│ IP Privada: 10.0.10.xx
|
||||
│
|
||||
├── srvv-sitio (190.114.205.20) ── Web existente (referencia)
|
||||
└── srvv-sitio2 (10.0.10.19) ── Web secundario LXC
|
||||
```
|
||||
|
||||
## Nodos Involucrados
|
||||
### Nodos Exclusivos (Core)
|
||||
- `srvv-web` — Contenedor LXC con NGINX (a crear)
|
||||
|
||||
### Nodos de Soporte/Infraestructura
|
||||
- `srv-pmox3` (10.0.10.203) — Host Proxmox (64GB RAM, ~20GB libres)
|
||||
- `srvv-sitio` — Referencia de configuración con IP pública
|
||||
|
||||
## Herramientas
|
||||
- **Proxmox VE** — Creación y gestión del LXC
|
||||
- **NGINX** — Servidor web / reverse proxy
|
||||
- **Certbot** — Certificados HTTPS (Let's Encrypt)
|
||||
- **Tailscale** — Acceso remoto de gestión
|
||||
- **ADN Toolkit** — Gestión de nodos, bitácora, candados
|
||||
|
||||
## Recursos Estimados (LXC)
|
||||
|
||||
| Recurso | Valor |
|
||||
|---------|-------|
|
||||
| CPU | 2 cores (compartido) |
|
||||
| RAM | 2 GB |
|
||||
| Disco | 20 GB |
|
||||
| Red | vmbr0 (bridge), IP pública + IP privada |
|
||||
| Template | `debian-12-standard` |
|
||||
|
||||
## Hitos Clave
|
||||
| ID | Hito | Estado | Fecha |
|
||||
| :--- | :--- | :---: | :--- |
|
||||
| 1 | IP pública asignada | ✅ | 2026-03-28 |
|
||||
| 2 | LXC creado y configurado | ✅ | 2026-03-28 |
|
||||
| 3 | NGINX operativo con HTTPS | ✅ | 2026-03-28 |
|
||||
| 4 | Seguridad y monitoreo | 📍 | *Pendiente* |
|
||||
| 5 | Validación y entrega | ⏳ | *En progreso* |
|
||||
|
||||
---
|
||||
|
||||
## 📊 Progreso
|
||||
|
||||
```
|
||||
Fase 1: ██████████ 100% Preparación e investigación
|
||||
Fase 2: █████████░ 90% Creación del contenedor LXC (Tailscale pendiente)
|
||||
Fase 3: ████████░░ 80% Instalación y configuración NGINX (hardening pendiente)
|
||||
Fase 4: ░░░░░░░░░░ 0% Seguridad y monitoreo
|
||||
Fase 5: █████░░░░░ 50% Validación y documentación
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Prerequisitos
|
||||
|
||||
- [x] Confirmar IP pública disponible: `190.114.205.17` asignada.
|
||||
- [x] Verificar bridge en srv-pmox3: `vmbr0` capa 2 compartida.
|
||||
- [x] Confirmar reglas de firewall: puertos 80/443 abiertos (verificado HTTP/HTTPS público).
|
||||
- [x] Definir nombre del nodo: `srvv-nginx-rm`.
|
||||
|
||||
## Plan de Ejecución
|
||||
|
||||
### ⏳ **FASE 1: Preparación e investigación**
|
||||
|
||||
- [ ] **1.1:** Solicitar/confirmar IP pública disponible al área de redes UTN.
|
||||
- [ ] **1.2:** Verificar configuración de red en `srv-pmox3` — bridges, VLAN, routing para IP pública.
|
||||
- [ ] **1.3:** Verificar template LXC Debian 12 disponible en srv-pmox3.
|
||||
- [ ] **1.4:** Definir hostname definitivo y esquema de red.
|
||||
|
||||
### ⏳ **FASE 2: Creación del contenedor LXC**
|
||||
|
||||
- [ ] **2.1:** Crear LXC en srv-pmox3 (2 cores, 2 GB RAM, 20 GB disco, bridge con IP pública).
|
||||
- [ ] **2.2:** Configurar red: IP pública estática + gateway, IP privada 10.0.10.xx.
|
||||
- [ ] **2.3:** Configurar hostname, DNS, timezone (America/Argentina/La_Rioja).
|
||||
- [ ] **2.4:** Actualizar sistema base (`apt update && apt upgrade`).
|
||||
- [ ] **2.5:** Instalar y configurar OpenSSH (puerto personalizado, acceso por clave).
|
||||
- [ ] **2.6:** Configurar Tailscale VPN (acceso remoto de gestión).
|
||||
|
||||
### ⏳ **FASE 3: Instalación y configuración NGINX**
|
||||
|
||||
- [ ] **3.1:** Instalar NGINX.
|
||||
- [ ] **3.2:** Configurar sitio por defecto (página de prueba).
|
||||
- [ ] **3.3:** Configurar HTTPS con Let's Encrypt (certbot + NGINX plugin).
|
||||
- [ ] **3.4:** Hardening: headers de seguridad, server tokens, rate limiting.
|
||||
- [ ] **3.5:** Configurar logs (access.log, error.log con rotación).
|
||||
|
||||
### ⏳ **FASE 4: Seguridad y monitoreo**
|
||||
|
||||
- [ ] **4.1:** Configurar firewall local (ufw/nftables): solo puertos 80, 443, SSH.
|
||||
- [ ] **4.2:** Instalar fail2ban.
|
||||
- [ ] **4.3:** Configurar backup automático (vzdump en Proxmox).
|
||||
- [ ] **4.4:** Agregar al sistema de monitoreo existente.
|
||||
|
||||
### ⏳ **FASE 5: Validación y documentación**
|
||||
|
||||
- [ ] **5.1:** Test de acceso web desde internet (HTTP y HTTPS).
|
||||
- [ ] **5.2:** Test de rendimiento básico.
|
||||
- [ ] **5.3:** Crear ficha de nodo en `nodos/` (vía `generar nodo`).
|
||||
- [ ] **5.4:** Documentar en bitácora y marcar proyecto como operativo.
|
||||
|
||||
## Referencias
|
||||
- `srvv-sitio` — Modelo de servidor web con IP pública (190.114.205.20)
|
||||
- `srvv-sitio2` — Referencia de LXC web existente
|
||||
|
||||
---
|
||||
|
||||
*Manifiesto generado automáticamente el 2026-03-28 — completado con datos del proyecto*
|
||||
Reference in New Issue
Block a user