Reestructuración modular integral de servicios, reorganización de gestión en docs/ y limpieza profunda del repositorio

This commit is contained in:
Ricardo Monla
2026-03-06 18:03:07 -03:00
parent 15725e0b3c
commit ac9bdf516b
286 changed files with 36187 additions and 112775 deletions
+123
View File
@@ -0,0 +1,123 @@
# P2601 - Proyecto DASUTEN
> Manifiesto de Proyecto | Referencia: [`adn/07_proyectos.md`](../adn/07_proyectos.md)
## Identificación
| Campo | Valor |
| :--- | :--- |
| **Código** | P2601 |
| **Nombre** | Infraestructura y Sistema DASUTEN |
| **Estado** | ⏳ En Ejecución |
| **Inicio** | 23/02/2026 |
| **Fin Estimado** | Por definir |
## Objetivo
**DASUTeN** (Departamento de Acción Social Universitaria Tecnológica Nacional) es la obra social de empleados, docentes y alumnos de la Universidad Tecnológica Nacional. Si bien cuenta con una oficina en la Facultad Regional La Rioja, depende directamente de su **sede central en el Rectorado (Buenos Aires)**.
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** (`pc-dasu0`) 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.
## Stakeholders
| Rol | Persona | Visibilidad |
| :--- | :--- | :--- |
| **Responsable Técnico** | Lic. Ricardo MONLA | Operador directo |
| **Dirección de TIC** | (Jerárquico superior) | Dashboard asíncrono |
## Dashboard
- **URL**: `https://ns8.frlr.utn.edu.ar/P2601/`
- **Tipo**: Aplicación web estática (HTML/JS/CSS) servida por Nginx.
- **Métricas**: Timeline de hitos, barras de progreso, desglose Físico/Remoto por hito.
- **Actualización**: Las métricas se alimentan de las etiquetas `[Físico/Remoto: H:MM hs]` parseadas de las bitácoras.
### Nodos Exclusivos (Core DASUTEN)
| Nodo | IP | Rol en el Proyecto |
| :--- | :--- | :--- |
| [**srv-dasu**](../nodos/srv-dasu.md) | `10.0.10.205` | Hipervisor Proxmox VE (Libre de red académica) |
| **dc-dasuten** (VM 100) | `10.0.100.10` | Controlador de Dominio AD DS + DNS |
| **sql-dasuten** (VM 101) | `10.0.100.11` | Motor SQL Server 2019 (Core) |
| **pcv-dasu0** (VM 102) | `10.0.100.12` | VM de pruebas (Win 10 LTSC) |
| [**pc-dasu0**](../nodos/pc-dasu0.md) | Oficina DASUTeN | PC física cliente (Nodo final destino) |
### Nodos de Soporte e Infraestructura
| Nodo | IP | Rol en el Proyecto |
| :--- | :--- | :--- |
| [**srv-ns8**](../nodos/srv-ns8.md) | `10.0.10.8` | Gestión central, GIT y Dashboard |
## Herramientas
| Herramienta | Uso |
| :--- | :--- |
| **Proxmox VE 9.1** | Virtualización y gestión de VMs |
| **Windows Server 2022 Core** | SO base para DC y SQL |
| **SQL Server 2019** | Motor de base de datos relacional |
| **OpenSSH** | Administración remota nativa de VMs Windows |
| **VZDump** | Resguardos offline de VMs |
| **Dashboard P2601** | Panel web de seguimiento para stakeholders |
## Hitos Clave
| Fecha | ID | Estado | Hito |
| :--- | :--- | :---: | :--- |
| 23/02 | A00-A01 | ✅ | Acondicionamiento hardware e instalación de Proxmox VE en `srv-dasu`. |
| 23/02 | A05 | ✅ | Creación de VM Windows Server Core y descarga de ISO. |
| 24/02 | A05 | ✅ | Habilitación SVM en BIOS, instalación de OS, promoción a DC (`dc-dasuten`). |
| 24/02 | A06 | ✅ | Despliegue del Dashboard P2601 con telemetría operativa. |
| 25/02 | DB01 | ✅ | Creación de VM `sql-dasuten`, instalación de OS, integración al dominio e instalación de SQL Server 2019. |
| 26/02 | SSH | ✅ | Despliegue de OpenSSH Server nativo en ambas VMs Windows. |
| 26/02 | BKP | ✅ | Resguardo VZDump offline (stop mode) de DC y SQL. |
| 27/02 | ADN | ✅ | Refactorización del ADN a arquitectura multi-hebra con Armonía Integral. |
| 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. |
| — | P02 | 📍 | Instalación del sistema DASUTEN sobre el motor SQL. |
| — | S02 | 📍 | Hardenización SSH (llaves, passphrases, auditoría). |
| — | MIG | 📍 | Migración de datos del sistema actual a la nueva infraestructura. |
| — | CLI | 📍 | Configuración final de `pc-dasu0` como cliente del dominio `dasuten.utnlr`. |
## 🌐 Topología y Contexto de Red
**Regla de Acceso (Agentes e IA):** Todo el ecosistema central (dc-dasuten, sql-dasuten, pcv-dasu0) 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.
**Vía Tailscale (Nuevo Estándar):** El hipervisor `srv-dasu` (`10.0.10.205`) 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.
**Vía SSH Clásico:** En caso de no contar con Tailscale, es imperativo configurar un salto (ProxyJump) a través de `10.0.10.205`.
## Arquitectura de Red
```
┌────────────────────────────────────────────────────────┐
│ Red Facultad (10.0.10.x) │
│ │
│ srv-ns8 (.8) srv-dasu (.205) │
│ [Tailscale VPN] [Tailscale Subnet Router] │
│ └─────────────────────────┘ │
│ │ │
│ │ NAT/VPN Routing │
│ ▼ │
│ ┌──────────────┐ │
│ │ 10.0.100.x │ │
│ │ (Aislada) │ │
│ │ │ │
│ │ dc-dasuten │ │
│ │ (.10) [AD DS]│ │
│ │ │ │
│ │ sql-dasuten │ │
│ │ (.11) [SQL] │ │
│ │ │ │
│ │ pcv-dasu0 │ │
│ │ (.12) [Test] │ pc-dasu0 │
│ └──────────────┘ [Cliente] │
└────────────────────────────────────────────────────────┘
```
## Referencias
- **Bitácoras**: [23/02](../bitacoras/2026-02-23.md) | [24/02](../bitacoras/2026-02-24.md) | [25/02](../bitacoras/2026-02-25.md) | [26/02](../bitacoras/2026-02-26.md) | [27/02](../bitacoras/2026-02-27.md)
- **ADN**: [Ontología](../adn/01_ontologia.md) | [Proyectos](../adn/07_proyectos.md)
- **Nodos**: [srv-dasu](../nodos/srv-dasu.md) | [srv-ns8](../nodos/srv-ns8.md)
+280
View File
@@ -0,0 +1,280 @@
# P2602 - Automatización de Backups DTIC UTNLR
> Manifiesto de Proyecto | Referencia: [`adn/07_proyectos.md`](../adn/07_proyectos.md)
## Identificación
| Campo | Valor |
| :--- | :--- |
| **Código** | P2602 |
| **Nombre** | Automatización de Backups DTIC UTNLR |
| **Versión** | v2601 |
| **Estado** | ⏳ En Ejecución |
| **Inicio** | 28/02/2026 |
| **Fin Estimado** | Por definir |
## Ventana Operativa
| Campo | Valor |
| :--- | :--- |
| **Día** | Todos los **jueves** |
| **Inicio** | 00:00 hs |
| **Deadline** | 08:00 hs (inicio de jornada de usuarios) |
| **Modo** | Operador presente para resolver problemas durante la noche |
| **SLA** | Todo debe estar operativo antes de las 08:00 para los usuarios de la Facultad |
> ⚠️ **Restricción crítica**: Si hay fallos durante el pipeline, el operador debe resolverlos antes de las 08:00. El objetivo de la automatización es minimizar la intervención nocturna y eventualmente permitir ejecución desatendida vía cron/timer.
**Cronograma típico (actual, manual):**
```
00:00 ━━━━━━━━━━━ Etapa 1+2 ━━━━━━━━━━━ 03:00 ━━━━━ Etapa 3 ━━━━━ ~08:00
📦 Vzdump + ⚙️ Procesamiento ☁️ Upload Nube
~3 hs | Vigilancia requerida Desatendido (rclone)
```
## Objetivo
Automatizar el ciclo completo de backup de la DTIC — actualmente un proceso manual de varias horas — en un **pipeline de 3 etapas desatendido y auditado**.
### Pipeline Operativo Completo
```
┌──────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ ETAPA 1 │ │ ETAPA 2 │ │ ETAPA 3 │
│ 📦 Vzdump │ → │ ⚙️ Procesamiento │ → │ ☁️ Upload Nube │
│ │ │ │ │ │
│ • Limpieza >6d │ │ • Descarga a NS8 │ │ • rclone sync │
│ • Shutdown VM │ │ • Retención local │ │ • Auto-resume │
│ • vzdump stop │ │ (mín 2 por VM) │ │ • Por subdir │
│ • Por servidor │ │ • Compresión tar.gz │ │ • OneDrive │
│ │ │ • Organiza por host │ │ │
└──────────────────┘ └──────────────────────┘ └──────────────────┘
srv-pmox1/2/3 srv-ns8 local rmOneDrive remoto
```
### Problemática actual
| Etapa | Manual Actual | Automatizado (meta) |
| :--- | :--- | :--- |
| **Vzdump** | GUI Proxmox, VM por VM, borrar viejos a mano | SSH vzdump batch, retención automática |
| **Procesamiento** | Descarga manual, compresión, verificar archivos viejos | Descarga + retención inteligente (mín 2) + compresión |
| **Upload** | Lanzar rclone, reiniciar si falla internet | rclone con reintentos y resume automático |
## Stakeholders
| Rol | Persona | Visibilidad |
| :--- | :--- | :--- |
| **Responsable Técnico** | Lic. Ricardo MONLA | Operador directo |
| **Dirección de TIC** | (Jerárquico superior) | Dashboard asíncrono |
## Nodos Involucrados
### Infraestructura de Gestión
| Nodo | IP | Rol |
| :--- | :--- | :--- |
| [**srv-ns8**](../nodos/srv-ns8.md) | `10.0.10.8` | Centro de operaciones. Ejecuta ns8-bkps. |
| [**srv-pmox1**](../nodos/srv-pmox1.md) | `10.0.10.201` | Pool master Proxmox. Gateway SSH a todas las VMs. |
| [**srv-pmox2**](../nodos/srv-pmox2.md) | `10.0.10.202` | Nodo Proxmox secundario. |
| [**srv-pmox3**](../nodos/srv-pmox3.md) | `10.0.10.203` | Nodo Proxmox terciario (64GB RAM). |
### VMs/CTs a Respaldar (Inventario Auditado 28/02)
| Server | VMID | Nodo | OS | Grupo | Ventana | SSH VM |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| pmox1 | 101 | srvv-sitio | Ubuntu | linux | Libre | ✅ rmonla |
| pmox1 | 102 | srvv-sitio0 | Debian | linux | Libre | ✅ rmonla |
| pmox1 | 103 | srvv-dtic | Debian | linux | Libre | ✅ rmonla |
| pmox1 | 104 | srvv-docs | Debian | linux | Libre | ✅ rmonla |
| pmox1 | 112 | srvv-dns | Debian | linux | Libre | ✅ rmonla |
| pmox2 | 105 | srvv-koha | Linux | linux | Libre | ✅ rmonla |
| pmox2 | 108 | pcv-dasu1 | Win10 | windows | Libre | ❌ pendiente |
| pmox2 | 109 | pcv-dasu2 | Win10 | windows | Libre | ❌ pendiente |
| pmox2 | 110 | pcv-serviio | Win10 | windows | Libre | ❌ pendiente |
| pmox3 | 111 | srvv-fenix | WinSrv 2019 | windows | 🌙 00:00-06:00 | ✅ monlaricardo |
| pmox3 | 106 | srvv-uptime | Debian | lxc | Libre | ✅ rmonla |
| pmox3 | 107 | srvv-data | Debian | lxc | Libre | ✅ rmonla |
| pmox3 | 113 | srvv-sitio2 | Debian | lxc | Libre | ✅ rmonla |
| **xen1** | — | **srvv-maurik** | **WinSrv 2019** | **windows** | **Libre** | **✅ monlaricardo** |
| **xen1** | — | **srvv-sysacadweb** | **WinSrv 2008R2** | **windows** | **Libre** | **✅ monlaricardo:7022** |
**Excluidos** (stopped, sin auto-inicio, en preparación): docker (100), srvv-N8N VM (114), srvv-N8N CT (115).
### Nodos de infraestructura y Gestión (Core)
| Nodo | IP | Rol |
| :--- | :--- | :--- |
| [**srv-ns8**](../nodos/srv-ns8.md) | `10.0.10.8` | Centro de operaciones. Ejecuta ns8-bkps. |
| [**srv-pmox1**](../nodos/srv-pmox1.md) | `10.0.10.201` | Pool master Proxmox. Gateway SSH. |
| [**srv-pmox2**](../nodos/srv-pmox2.md) | `10.0.10.202` | Nodo Proxmox secundario. |
| [**srv-pmox3**](../nodos/srv-pmox3.md) | `10.0.10.203` | Nodo Proxmox terciario (64GB RAM). |
| [**srv-xen1**](../nodos/srv-xen1.md) | `10.0.10.23` | Citrix XenServer 7.0 (Legacy). |
### Nodos Objetivo (Scope de Resguardos)
| Server | VMID | Nodo | OS | Grupo | Ventana | SSH VM |
| :--- | :--- | :--- | :--- | :--- | :--- | :--- |
| pmox1 | 101 | srvv-sitio | Ubuntu | linux | Libre | ✅ rmonla |
| pmox1 | 102 | srvv-sitio0 | Debian | linux | Libre | ✅ rmonla |
| pmox1 | 103 | srvv-dtic | Debian | linux | Libre | ✅ rmonla |
| pmox1 | 104 | srvv-docs | Debian | linux | Libre | ✅ rmonla |
| pmox1 | 112 | srvv-dns | Debian | linux | Libre | ✅ rmonla |
| pmox2 | 105 | srvv-koha | Linux | linux | Libre | ✅ rmonla |
| pmox2 | 108 | pcv-dasu1 | Win10 | windows | Libre | ❌ pendiente |
| pmox2 | 109 | pcv-dasu2 | Win10 | windows | Libre | ❌ pendiente |
| pmox2 | 110 | pcv-serviio | Win10 | windows | Libre | ❌ pendiente |
| pmox3 | 111 | srvv-fenix | WinSrv 2019 | windows | 🌙 00:00-06:00 | ✅ monlaricardo |
| pmox3 | 106 | srvv-uptime | Debian | lxc | Libre | ✅ rmonla |
| pmox3 | 107 | srvv-data | Debian | lxc | Libre | ✅ rmonla |
| pmox3 | 113 | srvv-sitio2 | Debian | lxc | Libre | ✅ rmonla |
| **xen1** | — | **srvv-maurik** | **WinSrv 2019** | **windows** | **Libre** | **✅ monlaricardo** |
| **xen1** | — | **srvv-sysacadweb** | **WinSrv 2008R2** | **windows** | **Libre** | **✅ monlaricardo:7022** |
## Herramientas
| Herramienta | Uso |
| :--- | :--- |
| **ns8-bkps v6.0** | Procesador de backups (Ruby, modular) |
| **ns8-candados** | Gestión de secretos y autorización SSH |
| **vzdump** | Herramienta nativa de backup de Proxmox |
| **SSH** | Canal de ejecución remota |
| **rclone** | Sincronización a almacenamiento cloud |
| **GNU Screen** | Ejecución desatendida |
## Fases del Proyecto
### 🔍 Fase 1 — Reconocimiento de Campo
> *"No se puede proteger lo que no se conoce."*
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| R01 | 📍 | Validar acceso SSH desde srv-ns8 a cada hipervisor (pmox1/2/3). |
| R02 | 📍 | Auditar inventario real de VMs: `qm list` y `pct list` vs. nodos documentados. |
| R03 | 📍 | Verificar que vzdump funcione remotamente desde pmox1 como pool master. |
| R04 | 📍 | Documentar ventanas horarias operativas por VM (producción vs. mantenimiento). |
| R05 | 📍 | Verificar/crear fichas de nodo (`nodos/*.md`) para VMs no documentadas. |
---
### 🔧 Fase 2 — Etapa 1: Procesador Vzdump (Backup Remoto)
> SSH a pool master → limpieza remota → shutdown → vzdump → verificación
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| D01 | 📍 | Crear `lib/proc_vzdump.rb` con lógica de backup remoto vía SSH. |
| D02 | 📍 | Retención remota: eliminar backups >6 días en `zfsDISCO1` antes de cada vzdump. |
| D03 | 📍 | Apagado graceful SSH para VMs Windows (`shutdown /s /t 30`), skip si no responde. |
| D04 | 📍 | Filtro de ventana horaria (skip VM si fuera de su horario). |
| D05 | 📍 | Separar tareas YAML: `bkps_proxmox_linux` y `bkps_proxmox_windows`. |
---
### ⚙️ Fase 3 — Etapa 2: Procesamiento Local
> Descarga desde Proxmox → retención local inteligente → compresión por host
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| L01 | ✅ | Descarga de backups desde `zfsDISCO1` a NS8 via rclone mount (ya existe en `proc_proxmox.rb`). |
| L02 | 📍 | **Retención local inteligente**: antes de procesar, verificar cada directorio de VM y mantener mínimo 2 archivos (el nuevo + 1 de seguridad). Borrar los más antiguos si hay >2 con antigüedad >6 días. |
| L03 | ✅ | Compresión tar.gz organizada por hostname (ya existe en `proc_proxmox.rb`). |
| L04 | 📍 | Integrar retención local en el procesador Proxmox existente. |
**Política de retención local:**
```
Directorio: /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/<nombre_vm>/
Antes de procesar un nuevo backup:
1. Listar archivos en el directorio de la VM
2. Si hay archivos con antigüedad >6 días:
→ Mantener el más reciente de los viejos (seguridad)
→ Borrar el resto de los viejos
3. Resultado: mínimo 2 backups por VM (el nuevo + 1 de seguridad)
```
---
### ☁️ Fase 4 — Etapa 3: Upload a la Nube
> rclone sync a OneDrive con reintentos y resume automático
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| U01 | ✅ | Sync a OneDrive: `bkps-SERVIDORes`, `bkps-ANTIGUOS`, `bkps-USERs` (ya existe en `sync_rclone.rb`). |
| U02 | ✅ | Reintentos automáticos: `--retries 5 --retries-sleep 10s --timeout 30m` (ya implementado). |
| U03 | 📍 | **Resume automático**: si rclone falla a mitad, el próximo `rclone sync` retoma desde donde quedó (verificar comportamiento actual). |
| U04 | 📍 | Logeo de resultado de upload con estadísticas (bytes transferidos, errores). |
---
### 🧪 Fase 5 — Validación
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| V01 | 📍 | Test vzdump con VM no-crítica (ej: srvv-docs). |
| V02 | 📍 | Test retención local (verificar min 2 por directorio). |
| V03 | 📍 | Test pipeline completo Linux: vzdump → procesamiento → upload. |
| V04 | 📍 | Test shutdown SSH graceful en VM Windows. |
| V05 | 📍 | Test de corte de internet durante upload (verificar resume). |
---
### 🚀 Fase 6 — Producción
| ID | Estado | Tarea |
| :--- | :---: | :--- |
| P01 | 📍 | Crear comando compuesto `full_backup` (vzdump + procesamiento + upload). |
| P02 | 📍 | Documentar procedimiento operativo en ADN. |
| P03 | 📍 | Evaluar cron/systemd timer para ejecución programada nocturna. |
| P04 | 📍 | Dashboard P2602 (si aplica). |
## Arquitectura
```
┌──────────────────────────────────────────────────────────────────┐
│ ns8-bkps — Pipeline de Backup Completo │
│ │
│ ┌──────────────┐ │
│ │ ns8-candados │ ← RSA passphrase │
│ └──────┬───────┘ │
│ │ │
│ ═══════╪══════════════════════════════════════════════════════ │
│ ETAPA 1│ 📦 VZDUMP (remoto) │
│ ═══════╪══════════════════════════════════════════════════════ │
│ ▼ │
│ srv-ns8 ──SSH──▶ srv-pmox1 (Pool Master) │
│ │ │
│ ├─ Limpieza remota (>6 días) │
│ ├─ Shutdown VM (graceful/SSH) │
│ ├─ vzdump --mode stop --storage zfsDISCO1 │
│ └─ pmox1/pmox2/pmox3 VMs │
│ │
│ ═══════════════════════════════════════════════════════════════ │
│ ETAPA 2 ⚙️ PROCESAMIENTO (local) │
│ ═══════════════════════════════════════════════════════════════ │
│ │
│ rclone mount zfsDISCO1 → /tmp/bkps_* │
│ │ │
│ ├─ Retención local: min 2 por VM, borrar excedentes >6d │
│ ├─ Compresión: tar.gz por hostname │
│ └─ Destino: /mnt/ns8Disco3/dtic-BACKUPS/bkps-SERVIDORes/ │
│ │
│ ═══════════════════════════════════════════════════════════════ │
│ ETAPA 3 ☁️ UPLOAD NUBE (remoto) │
│ ═══════════════════════════════════════════════════════════════ │
│ │
│ rclone sync → rmOneDrive:/dtic-BACKUPS/ │
│ ├─ bkps-SERVIDORes/ │
│ ├─ bkps-ANTIGUOS/ │
│ └─ bkps-USERs/ │
│ (--delete-before --retries 5 --timeout 30m) │
│ │
└──────────────────────────────────────────────────────────────────┘
```
## Referencias
- **Bitácoras**: [28/02](../bitacoras/2026-02-28.md)
- **ADN**: [Ontología](../adn/01_ontologia.md) | [Proyectos](../adn/07_proyectos.md)
- **Herramienta**: [ns8-bkps](../tools/ns8-bkps/ns8-bkps.rb) | [ns8-candados](../tools/ns8-candados/ns8-candados.rb)
- **Proyecto Relacionado**: [P2601 DASUTEN](P2601_dasuten.md) (srv-dasu backups)
+76
View File
@@ -0,0 +1,76 @@
# P2603 - Sistema de Bitácoras (dtic-BITACORAs)
> Manifiesto de Proyecto | Referencia: [`adn/07_proyectos.md`](../adn/07_proyectos.md)
## Identificación
| Campo | Valor |
| :--- | :--- |
| **Código** | P2603 |
| **Nombre** | Sistema de Bitácoras Web |
| **Estado** | ⏳ En Ejecución |
| **Inicio** | 03/03/2026 |
| **Fin Estimado** | Por definir |
## Objetivo
Evolucionar el registro manual de operaciones (archivos `.md`) hacia una **aplicación web** con arquitectura frontend/backend que permita:
1. **Registro en tiempo real** de entradas de bitácora mediante API REST.
2. **Consulta visual** de la actividad diaria agrupada por nodo y proyecto.
3. **Compatibilidad** con el formato I-F-D-E del ADN (exportación a Markdown).
4. **Estética unificada** con el dashboard del proyecto P2601.
## Stakeholders
| Rol | Persona | Visibilidad |
| :--- | :--- | :--- |
| **Responsable Técnico** | Lic. Ricardo MONLA | Operador directo |
| **Dirección de TIC** | (Jerárquico superior) | Dashboard asíncrono |
## Nodos Involucrados
### Nodos Exclusivos (Core)
| Nodo | IP | Rol en el Proyecto |
| :--- | :--- | :--- |
| [**srv-ns8**](../nodos/srv-ns8.md) | `10.0.10.8` | Servidor de la aplicación (Docker) |
## Herramientas
| Herramienta | Uso |
| :--- | :--- |
| **React 18 + TypeScript** | Frontend SPA |
| **Vite** | Build tool y dev server |
| **Node.js + Express** | Backend API REST |
| **PostgreSQL 15** | Base de datos relacional |
| **Docker Compose** | Orquestación de servicios |
## Hitos Clave
| Fecha | ID | Estado | Hito |
| :--- | :--- | :---: | :--- |
| 03/03 | INIT | ⏳ | Inicialización del proyecto. Creación de `dtic-BITACORAs/` con esquema DB y APIs. |
| — | UI01 | 📍 | Frontend: Vista de bitácora diaria con entradas I-F-D-E agrupadas por nodo. |
| — | API01 | 📍 | Backend: CRUD completo de entradas, nodos y bitácoras. |
| — | EXP01 | 📍 | Exportador a Markdown compatible con el ADN. |
| — | PROD | 📍 | Despliegue en producción (srv-ns8, Nginx reverse proxy). |
| 07/03 | ADN01 | 📍 | Automatización Ruby del ADN: Implementación de herramientas CLI unificadas para validación, generación y contexto (Plan 260307-1400). |
## Arquitectura
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Backend │ │ Database │
│ React/Vite │◄──►│ Node.js/Express │◄──►│ PostgreSQL 15 │
│ Puerto 5173 │ │ Puerto 3001 │ │ Puerto 5432 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
└──────────────────────┘
Docker Compose
```
## Referencias
- **Bitácoras**: [03/03](../bitacoras/2026-03-03.md)
- **ADN**: [Ontología](../adn/01_ontologia.md) | [Proyectos](../adn/07_proyectos.md) | [Bitácora](../adn/02_bitacora.md)
- **Base Legacy**: [servicios/bitacoras/](../servicios/bitacoras/README.md)