From 005b66848126325501f4c6e94a2745e26f585aaa Mon Sep 17 00:00:00 2001 From: Ricardo Monla Date: Mon, 16 Feb 2026 15:07:18 -0300 Subject: [PATCH] =?UTF-8?q?[Docs]=20Optimizaci=C3=B3n=20Bit=C3=A1cora=20y?= =?UTF-8?q?=20Configuraci=C3=B3n=20Homepage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adn/00_bitacora.md | 63 +++++++++-------- adn/01_ontologia.md | 3 +- adn/02_protocolo.md | 13 +++- docs/prompt-00_install_msp_notebooklm.md | 44 ++++++++++++ scripts/respaldar_configs.sh | 1 + servicios/homepage/config/bookmarks.yaml | 16 +++++ servicios/homepage/config/custom.css | 0 servicios/homepage/config/custom.js | 0 servicios/homepage/config/docker.yaml | 10 +++ servicios/homepage/config/endpoints.json | 1 + servicios/homepage/config/kubernetes.yaml | 2 + servicios/homepage/config/proxmox.yaml | 5 ++ servicios/homepage/config/services.yaml | 85 +++++++++++++++++++++++ servicios/homepage/config/settings.yaml | 20 ++++++ servicios/homepage/config/widgets.yaml | 11 +++ servicios/homepage/docker-compose.yml | 16 +++++ servicios/nginx/conf.d/ns8.conf | 13 +++- 17 files changed, 268 insertions(+), 35 deletions(-) create mode 100644 docs/prompt-00_install_msp_notebooklm.md mode change 100644 => 100755 scripts/respaldar_configs.sh create mode 100644 servicios/homepage/config/bookmarks.yaml create mode 100644 servicios/homepage/config/custom.css create mode 100644 servicios/homepage/config/custom.js create mode 100644 servicios/homepage/config/docker.yaml create mode 100644 servicios/homepage/config/endpoints.json create mode 100644 servicios/homepage/config/kubernetes.yaml create mode 100644 servicios/homepage/config/proxmox.yaml create mode 100644 servicios/homepage/config/services.yaml create mode 100644 servicios/homepage/config/settings.yaml create mode 100644 servicios/homepage/config/widgets.yaml create mode 100644 servicios/homepage/docker-compose.yml diff --git a/adn/00_bitacora.md b/adn/00_bitacora.md index 2d19f0e2..088b5989 100644 --- a/adn/00_bitacora.md +++ b/adn/00_bitacora.md @@ -2,40 +2,43 @@ Este documento registra la evolución, cambios y eventos significativos en el servidor `srv-NS8`. +> **Estados:** ✅ Completado | ⏳ En Proceso | 🧪 Verificado | ⚠️ Alerta | 📍 Definido + +## 2026-02-16 + +| Hora | E | Acción | Detalle | +| :--- | :--- | :--- | :--- | +| 14:10 | ✅ | Optimización Dashboard | **Exitoso**. Reorganización de `homepage` en 3 columnas (Infra, Gestión, Apps) mediante ajuste de `settings.yaml`. Corrección de widgets Portainer (Auth) y Uptime Kuma (URL). | +| 13:00 | ✅ | Implementación Homepage | **Exitoso**. Despliegue de `gethomepage` en `servicios/homepage`. Integración con Proxmox API, Portainer y logs. Sustitución de página default Nginx por Dashboard dinámico. | + ## 2026-02-15 -| Hora | Acción | Detalle | Estado | +| Hora | E | Acción | Detalle | | :--- | :--- | :--- | :--- | -| 21:55 | Consolidación ADN | Se actualiza `01_ontologia.md` con la nueva arquitectura de acceso remoto (Tailscale + RustDesk) y manual de conexión. | Completado | -| 21:35 | Implementación Acceso Remoto | **Exitoso**. Se instala Tailscale (IP `100.88.252.26`) y se verifica RustDesk nativo. Se establece solución de doble capa (Red VPN + GUI). | Completado | -| 20:50 | Sincronización Inicial Repo | **Exitoso**. Se crea `.gitignore` para excluir datos volátiles y se realiza el primer commit masivo de ADN, Scripts y Servicios. | Completado | +| 21:55 | ✅ | Consolidación ADN | Se actualiza `01_ontologia.md` con la nueva arquitectura de acceso remoto (Tailscale + RustDesk) y manual de conexión. | +| 21:35 | ✅ | Implementación Acceso Remoto | **Exitoso**. Se instala Tailscale (IP `100.88.252.26`) y se verifica RustDesk nativo. Se establece solución de doble capa (Red VPN + GUI). | +| 20:50 | ✅ | Sincronización Inicial Repo | **Exitoso**. Se crea `.gitignore` para excluir datos volátiles y se realiza el primer commit masivo de ADN, Scripts y Servicios. | ## 2026-02-11 -| Hora | Acción | Detalle | Estado | +| Hora | E | Acción | Detalle | | :--- | :--- | :--- | :--- | -| 23:25 | Configuración SSL y Reverse Proxy | **Exitoso**. Certificado Let's Encrypt instalado para `ns8.frlr.utn.edu.ar`. Nginx configurado como Reverse Proxy para servir `/portainer/`, `/sysacad/`, `/bitacoras/` bajo HTTPS (Puerto 443), eliminando la necesidad de exponer puertos inseguros. | Completado | -| 23:15 | Configuración Red Híbrida | **Exitoso**. Se ejecuta `configurar_red_hibrida.sh`. El servidor mantiene gateway `10.x` para salida, pero responde correctamente a la IP pública `190.x` mediante Policy Routing. Mecanismo de rollback verificado. | Completado | - -| 23:10 | Protocolo de Seguridad | Se incorpora la **Directiva 5: Protocolo de Seguridad de Red (Hombre Muerto)** en `adn/02_protocolo.md`, haciendo obligatorio el uso de mecanismos de reversión automática para cambios de red. | Completado | - -| 23:00 | Instalación Nginx Nativo | **Completado**. El usuario ejecutó `instalar_nginx_simple.sh`. Nginx está activo en el Host (Puerto 80) funcionando como Proxy Reverso para Portainer, Bitácoras y SysACAD. | Completado | - -| 22:55 | Resolución Conflicto Puerto | Se reconfigura SysACAD para usar puertos 8080/8443, liberando el puerto 80 del host. | Solucionado | -| 22:50 | Saneamiento y Simplificación | Se eliminan scripts de migración de IP complejos por riesgo innecesario. Se consolida `scripts/instalar_nginx_simple.sh` para instalación nativa sin alterar la red. | Completado | - -| 22:45 | Cambio de Estrategia: Nginx Nativo | Se decide eliminar el contenedor `proxy` (Docker) y reemplazarlo por **Nginx Nativo** en el host (`10.0.10.8`), manteniendo la configuración de red actual del servidor. | En Proceso | -| 22:15 | Documentación de Red | Se detalla la **Topología de Red** en `adn/01_ontologia.md`. Se aclara el uso de `macvlan` para la IP pública `190.114.205.18` y la IP privada `10.0.10.8` para el host. | Completado | - -| 22:10 | Mantenimiento | Se actualiza **Portainer** a la última versión disponible (detectada 2.33.7). Se descargan imágenes y se recrea el contenedor. | Completado | - -| 22:05 | Documentación de Accesos | Se incorpora la tabla de **Puntos de Acceso (URLs)** en `adn/01_ontologia.md` para facilitar la navegación a los servicios. | Completado | -| 22:00 | Reactivación de Servicios | Se levantan exitosamente `portainer`, `proxy` (tras corregir conflicto de red), `bitacoras` y `sysacad`. Todos los contenedores operativos y limitados en recursos. | Completado | -| 21:50 | Validación de Servicios | Se ejecutan pruebas de configuración (`docker compose config`) exitosas para todos los servicios migrados. Límites de memoria confirmados correctos. | Verificado | -| 21:40 | Optimización de Recursos | Se completa la migración de archivos (incluidos `.env` y ocultos). Se aplican límites de memoria RAM a los servicios Docker para proteger la VM. | Completado | -| 21:35 | Centralización de Servicios | Se mueven las configuraciones de `portainer`, `bitacoras`, `sysacad` y `proxy` a `dtic-srv-NS8/servicios/`. Se ajusta contexto de build del proxy. Se crean referencias `LEEME_MIGRACION.md` en origen. | Completado | -| 21:22 | Definición de Prioridades | Se establece la VM `PCV_DTIC-RRHH_W732` como servicio **Crítico/Permanente**. Se define el objetivo de **Optimizar** los servicios Docker (no solo reactivar). | Definido | -| 21:15 | Relevamiento Técnico | Se detectan redes Docker sin contenedores activos (`bitacoras`, `sysacad`, `portainer`). VM VirtualBox consume ~4GB RAM. | Alerta | -| 21:07 | Protocolo de Armonía | Se incorpora la directiva de **Armonía y Auto-optimización** en `adn/02_protocolo.md`. | Completado | -| 21:05 | Establecimiento de Protocolo | Se define el **español** como idioma obligatorio. Se crea `adn/02_protocolo.md`. | Completado | -| 21:01 | Inicio del Relevamiento | Inicialización del repositorio y estructura de directorios `adn`, `docs`, `scripts`. | En proceso | +| 23:25 | ✅ | Configuración SSL y Reverse Proxy | **Exitoso**. Certificado Let's Encrypt instalado para `ns8.frlr.utn.edu.ar`. Nginx configurado como Reverse Proxy para servir `/portainer/`, `/sysacad/`, `/bitacoras/` bajo HTTPS (Puerto 443), eliminando la necesidad de exponer puertos inseguros. | +| 23:15 | ✅ | Configuración Red Híbrida | **Exitoso**. Se ejecuta `configurar_red_hibrida.sh`. El servidor mantiene gateway `10.x` para salida, pero responde correctamente a la IP pública `190.x` mediante Policy Routing. Mecanismo de rollback verificado. | +| 23:10 | ✅ | Protocolo de Seguridad | Se incorpora la **Directiva 5: Protocolo de Seguridad de Red (Hombre Muerto)** en `adn/02_protocolo.md`, haciendo obligatorio el uso de mecanismos de reversión automática para cambios de red. | +| 23:00 | ✅ | Instalación Nginx Nativo | **Completado**. El usuario ejecutó `instalar_nginx_simple.sh`. Nginx está activo en el Host (Puerto 80) funcionando como Proxy Reverso para Portainer, Bitácoras y SysACAD. | +| 22:55 | ✅ | Resolución Conflicto Puerto | Se reconfigura SysACAD para usar puertos 8080/8443, liberando el puerto 80 del host. | +| 22:50 | ✅ | Saneamiento y Simplificación | Se eliminan scripts de migración de IP complejos por riesgo innecesario. Se consolida `scripts/instalar_nginx_simple.sh` para instalación nativa sin alterar la red. | +| 22:45 | ✅ | Cambio de Estrategia: Nginx Nativo | Se decide eliminar el contenedor `proxy` (Docker) y reemplazarlo por **Nginx Nativo** en el host (`10.0.10.8`), manteniendo la configuración de red actual del servidor. | +| 22:15 | ✅ | Documentación de Red | Se detalla la **Topología de Red** en `adn/01_ontologia.md`. Se aclara el uso de `macvlan` para la IP pública `190.114.205.18` y la IP privada `10.0.10.8` para el host. | +| 22:10 | ✅ | Mantenimiento | Se actualiza **Portainer** a la última versión disponible (detectada 2.33.7). Se descargan imágenes y se recrea el contenedor. | +| 22:05 | ✅ | Documentación de Accesos | Se incorpora la tabla de **Puntos de Acceso (URLs)** en `adn/01_ontologia.md` para facilitar la navegación a los servicios. | +| 22:00 | ✅ | Reactivación de Servicios | Se levantan exitosamente `portainer`, `proxy` (tras corregir conflicto de red), `bitacoras` y `sysacad`. Todos los contenedores operativos y limitados en recursos. | +| 21:50 | 🧪 | Validación de Servicios | Se ejecutan pruebas de configuración (`docker compose config`) exitosas para todos los servicios migrados. Límites de memoria confirmados correctos. | +| 21:40 | ✅ | Optimización de Recursos | Se completa la migración de archivos (incluidos `.env` y ocultos). Se aplican límites de memoria RAM a los servicios Docker para proteger la VM. | +| 21:35 | ✅ | Centralización de Servicios | Se mueven las configuraciones de `portainer`, `bitacoras`, `sysacad` y `proxy` a `dtic-srv-NS8/servicios/`. Se ajusta contexto de build del proxy. Se crean referencias `LEEME_MIGRACION.md` en origen. | +| 21:22 | 📍 | Definición de Prioridades | Se establece la VM `PCV_DTIC-RRHH_W732` como servicio **Crítico/Permanente**. Se define el objetivo de **Optimizar** los servicios Docker (no solo reactivar). | +| 21:15 | ✅ | Relevamiento Técnico | Se detectan redes Docker sin contenedores activos (`bitacoras`, `sysacad`, `portainer`). VM VirtualBox consume ~4GB RAM. | +| 21:07 | ✅ | Protocolo de Armonía | Se incorpora la directiva de **Armonía y Auto-optimización** en `adn/02_protocolo.md`. | +| 21:05 | ✅ | Establecimiento de Protocolo | Se define el **español** como idioma obligatorio. Se crea `adn/02_protocolo.md`. | +| 21:01 | ✅ | Inicio del Relevamiento | Inicialización del repositorio y estructura de directorios `adn`, `docs`, `scripts`. | diff --git a/adn/01_ontologia.md b/adn/01_ontologia.md index 7ff77112..fd94e815 100644 --- a/adn/01_ontologia.md +++ b/adn/01_ontologia.md @@ -32,6 +32,7 @@ Este documento define la identidad, propósito y componentes principales del ser - **`nginx` (Nativo - Proxy Reverso)** - `bitacoras` (App + DB) - `sysacad` (App + Nginx interno) + - **`homepage` (Dashboard Unificado)** - **Protección de Recursos**: Límites de RAM aplicados. ### 3. Acceso Remoto Seguro (Capa de Invisibilidad) @@ -44,7 +45,7 @@ Este documento define la identidad, propósito y componentes principales del ser ### 4. Puntos de Acceso (URLs) | Servicio | URL Pública (SSL) | URL Interna (Tailscale) | Descripción | | :--- | :--- | :--- | :--- | -| **Portal Principal** | `https://ns8.frlr.utn.edu.ar` | `https://100.88.252.26` | Página de bienvenida Nginx | +| **Portal Principal** | `https://ns8.frlr.utn.edu.ar` | `https://100.88.252.26` | **Dashboard Unificado (Homepage)** | | **Portainer** | `https://ns8.frlr.utn.edu.ar/portainer/` | `http://100.88.252.26:9000` | Gestión de Contenedores | | **SysACAD** | `https://ns8.frlr.utn.edu.ar/sysacad/` | `http://100.88.252.26:8080` | Sistema Académico | | **Bitácoras** | `https://ns8.frlr.utn.edu.ar/bitacoras/` | `http://100.88.252.26:5173` | Sistema de Bitácoras | diff --git a/adn/02_protocolo.md b/adn/02_protocolo.md index e401ac59..959d2952 100644 --- a/adn/02_protocolo.md +++ b/adn/02_protocolo.md @@ -26,9 +26,9 @@ Este documento establece las reglas fundamentales para la interacción, document - **Orden**: Descendente (lo más reciente arriba). - **Columnas Obligatorias**: - `Hora` (HH:MM) + - `E` (Estado/Icono) - `Acción` - `Detalle/Impacto` - - `Estado` @@ -42,3 +42,14 @@ Este documento establece las reglas fundamentales para la interacción, document 2. Esperar confirmación explícita del usuario (ej: presionar una tecla) durante un tiempo prudencial (5 minutos). 3. **Si no hay confirmación**: Revertir cambios inmediatamente y restaurar estado anterior. 4. **Si hay confirmación**: Hacer cambios persistentes. + +## 6. Referencia de Estados (Bitácora) +Para optimizar espacio horizontal, la columna `Estado` utiliza los siguientes iconos: + +| Icono | Significado | Descripción | +| :---: | :--- | :--- | +| ✅ | **Completado** | Tarea finalizada o problema solucionado exitosamente. | +| ⏳ | **En Proceso** | Tarea iniciada pero pendiente de cierre. | +| 🧪 | **Verificado** | Validación técnica o prueba superada. | +| ⚠️ | **Alerta** | Problema detectado, riesgo o atención requerida. | +| 📍 | **Definido** | Hito establecido o prioridad fijada sin ejecución inmediata. | diff --git a/docs/prompt-00_install_msp_notebooklm.md b/docs/prompt-00_install_msp_notebooklm.md new file mode 100644 index 00000000..13d948b3 --- /dev/null +++ b/docs/prompt-00_install_msp_notebooklm.md @@ -0,0 +1,44 @@ +¡Vamos a conectarnos con NotebookLM! + +Objetivo: instalar y dejar operativo el MCP server de NotebookLM para que aparezca como conectado en Manage MCP servers y exponga ≥ 32 herramientas (incluida la herramienta para crear notebooks/cuadernos). + +Procedimiento (estricto, sin saltos): + 1. Diagnóstico del entorno + • Detecta sistema operativo, shell y versión de Python. + • Comprueba si hay un entorno virtual activo. + 2. Instalación del servidor MCP + • Si uv está disponible, instala con: uv pip install -U notebooklm-mcp-server. + • Si no, usa: python -m pip install -U notebooklm-mcp-server. + • Confirma la instalación mostrando la versión instalada. + 3. Registro del MCP en Antigravity + • Localiza el archivo de configuración MCP usado por Antigravity (ruta real en este sistema). + • Haz copia de seguridad del archivo antes de modificarlo. + • Añade el servidor notebooklm sin sobrescribir otros MCP servers ya definidos. + • Valida que el JSON final sea sintácticamente correcto. + 4. Autenticación + • Ejecuta notebooklm-mcp-auth. + • Abre el navegador y guíame paso a paso hasta completar permisos. + • El usuario solo debe iniciar sesión desde el navegador, evita pasos adiocionales o complejos. + • Verifica que las credenciales se guardaron correctamente (sin mostrar secretos). + 5. Arranque y visibilidad en la UI + • Inicia el MCP server de NotebookLM. + • Confirma que aparece como activo/conectado en Manage MCP servers. + 6. Validación de herramientas (obligatoria) + • Lista todas las herramientas expuestas por el MCP. + • Confirma que hay ≥ 32 herramientas. + • Identifica explícitamente la herramienta para crear notebooks/cuadernos (nombre exacto). + 7. Prueba funcional + • Ejecuta una llamada de prueba que liste mis notebooks de NotebookLM. + • Muestra el resultado. + +Reglas: + • Muestra los comandos exactos ejecutados. + • Si ocurre un error: detén el proceso, explica la causa y aplica la corrección antes de continuar. + • No avances al siguiente paso sin validar el anterior. + +Criterio de éxito: + • MCP visible y conectado en Manage MCP servers. + • ≥ 32 tools disponibles, incluida crear notebook. + • Autenticación completada sin errores. + • Prueba: listado real de notebooks OK. + • Confirmación final: “instalación operativa”. \ No newline at end of file diff --git a/scripts/respaldar_configs.sh b/scripts/respaldar_configs.sh old mode 100644 new mode 100755 index 4243b815..5ca082ff --- a/scripts/respaldar_configs.sh +++ b/scripts/respaldar_configs.sh @@ -23,6 +23,7 @@ PATHS=( "/home/rmonla/.config/rustdesk" "/var/lib/tailscale" "/etc/nginx" + "/home/rmonla/Documentos/GitHub/dtic-srv-NS8/servicios/homepage/.env" ) for SRC in "${PATHS[@]}"; do diff --git a/servicios/homepage/config/bookmarks.yaml b/servicios/homepage/config/bookmarks.yaml new file mode 100644 index 00000000..8065f591 --- /dev/null +++ b/servicios/homepage/config/bookmarks.yaml @@ -0,0 +1,16 @@ +- Developer: + - rmGithub: + - abbr: rmGH + href: https://github.com/rmonla +- Social: + - Reddit: + - abbr: RE + href: https://reddit.com/ +- Entertainment: + - YouTube: + - abbr: YT + href: https://youtube.com/ +- Documentación: + - gethomepage.dev: + - icon: homepage.png + - href: https://gethomepage.dev/ diff --git a/servicios/homepage/config/custom.css b/servicios/homepage/config/custom.css new file mode 100644 index 00000000..e69de29b diff --git a/servicios/homepage/config/custom.js b/servicios/homepage/config/custom.js new file mode 100644 index 00000000..e69de29b diff --git a/servicios/homepage/config/docker.yaml b/servicios/homepage/config/docker.yaml new file mode 100644 index 00000000..2f4c4e38 --- /dev/null +++ b/servicios/homepage/config/docker.yaml @@ -0,0 +1,10 @@ +--- +# For configuration options and examples, please see: +# https://gethomepage.dev/configs/docker/ + +# my-docker: +# host: 127.0.0.1 +# port: 2375 + +# my-docker: +# socket: /var/run/docker.sock diff --git a/servicios/homepage/config/endpoints.json b/servicios/homepage/config/endpoints.json new file mode 100644 index 00000000..9b04dca0 --- /dev/null +++ b/servicios/homepage/config/endpoints.json @@ -0,0 +1 @@ +[{"Id":3,"Name":"local","Type":1,"ContainerEngine":"docker","URL":"unix:///var/run/docker.sock","GroupId":1,"PublicURL":"","Gpus":[],"TLSConfig":{"TLS":false,"TLSSkipVerify":false},"AzureCredentials":{"ApplicationID":"","TenantID":"","AuthenticationKey":""},"TagIds":[],"Status":1,"Snapshots":[{"Time":1771258909,"DockerVersion":"29.2.1","Swarm":false,"TotalCPU":16,"TotalMemory":18734149632,"ContainerCount":7,"RunningContainerCount":4,"StoppedContainerCount":3,"HealthyContainerCount":0,"UnhealthyContainerCount":0,"VolumeCount":17,"ImageCount":132,"ServiceCount":0,"StackCount":4,"DockerSnapshotRaw":{"Containers":null,"Volumes":{"Volumes":null,"Warnings":null},"Networks":null,"Images":null,"Info":{"ID":"","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"","DriverStatus":null,"Plugins":{"Volume":null,"Network":null,"Authorization":null,"Log":null},"MemoryLimit":false,"SwapLimit":false,"CpuCfsPeriod":false,"CpuCfsQuota":false,"CPUShares":false,"CPUSet":false,"PidsLimit":false,"IPv4Forwarding":false,"Debug":false,"NFd":0,"OomKillDisable":false,"NGoroutines":0,"SystemTime":"","LoggingDriver":"","CgroupDriver":"","NEventsListener":0,"KernelVersion":"","OperatingSystem":"","OSVersion":"","OSType":"","Architecture":"","IndexServerAddress":"","RegistryConfig":null,"NCPU":0,"MemTotal":0,"GenericResources":null,"DockerRootDir":"","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"","Labels":null,"ExperimentalBuild":false,"ServerVersion":"","Runtimes":null,"DefaultRuntime":"","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"","ContainerdCommit":{"ID":""},"RuncCommit":{"ID":""},"InitCommit":{"ID":""},"SecurityOptions":null,"CDISpecDirs":null,"Warnings":null},"Version":{"Platform":{"Name":""},"Version":"","ApiVersion":"","GitCommit":"","GoVersion":"","Os":"","Arch":""}},"NodeCount":0,"GpuUseAll":false,"GpuUseList":[],"IsPodman":false,"DiagnosticsData":null,"PerformanceMetrics":null}],"UserAccessPolicies":{},"TeamAccessPolicies":{},"EdgeKey":"","EdgeCheckinInterval":5,"Kubernetes":{"Snapshots":[],"Configuration":{"UseLoadBalancer":false,"UseServerMetrics":false,"EnableResourceOverCommit":true,"ResourceOverCommitPercentage":0,"StorageClasses":[],"IngressClasses":[],"RestrictDefaultNamespace":false,"IngressAvailabilityPerNamespace":false,"AllowNoneIngressClass":false},"Flags":{"IsServerMetricsDetected":false,"IsServerIngressClassDetected":false,"IsServerStorageDetected":false}},"ComposeSyntaxMaxVersion":"3.9","SecuritySettings":{"allowBindMountsForRegularUsers":true,"allowPrivilegedModeForRegularUsers":true,"allowVolumeBrowserForRegularUsers":false,"allowHostNamespaceForRegularUsers":true,"allowDeviceMappingForRegularUsers":true,"allowStackManagementForRegularUsers":true,"allowContainerCapabilitiesForRegularUsers":true,"allowSysctlSettingForRegularUsers":true,"enableHostManagementFeatures":false},"LastCheckInDate":0,"QueryDate":0,"Heartbeat":false,"PostInitMigrations":{"MigrateIngresses":false,"MigrateGPUs":false},"Edge":{"AsyncMode":false,"PingInterval":0,"SnapshotInterval":0,"CommandInterval":0},"Agent":{"Version":""},"AuthorizedUsers":null,"AuthorizedTeams":null,"Tags":null},{"Id":5,"Name":"srvDTIC","Type":2,"ContainerEngine":"docker","URL":"tcp://10.0.10.4:9001","GroupId":1,"PublicURL":"","Gpus":[],"TLSConfig":{"TLS":true,"TLSSkipVerify":true},"AzureCredentials":{"ApplicationID":"","TenantID":"","AuthenticationKey":""},"TagIds":[],"Status":1,"Snapshots":[{"Time":1771258909,"DockerVersion":"29.1.3","Swarm":false,"TotalCPU":1,"TotalMemory":8327192576,"ContainerCount":8,"RunningContainerCount":7,"StoppedContainerCount":1,"HealthyContainerCount":0,"UnhealthyContainerCount":0,"VolumeCount":3,"ImageCount":9,"ServiceCount":0,"StackCount":4,"DockerSnapshotRaw":{"Containers":null,"Volumes":{"Volumes":null,"Warnings":null},"Networks":null,"Images":null,"Info":{"ID":"","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"","DriverStatus":null,"Plugins":{"Volume":null,"Network":null,"Authorization":null,"Log":null},"MemoryLimit":false,"SwapLimit":false,"CpuCfsPeriod":false,"CpuCfsQuota":false,"CPUShares":false,"CPUSet":false,"PidsLimit":false,"IPv4Forwarding":false,"Debug":false,"NFd":0,"OomKillDisable":false,"NGoroutines":0,"SystemTime":"","LoggingDriver":"","CgroupDriver":"","NEventsListener":0,"KernelVersion":"","OperatingSystem":"","OSVersion":"","OSType":"","Architecture":"","IndexServerAddress":"","RegistryConfig":null,"NCPU":0,"MemTotal":0,"GenericResources":null,"DockerRootDir":"","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"","Labels":null,"ExperimentalBuild":false,"ServerVersion":"","Runtimes":null,"DefaultRuntime":"","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"","ContainerdCommit":{"ID":""},"RuncCommit":{"ID":""},"InitCommit":{"ID":""},"SecurityOptions":null,"CDISpecDirs":null,"Warnings":null},"Version":{"Platform":{"Name":""},"Version":"","ApiVersion":"","GitCommit":"","GoVersion":"","Os":"","Arch":""}},"NodeCount":0,"GpuUseAll":false,"GpuUseList":[],"IsPodman":false,"DiagnosticsData":null,"PerformanceMetrics":null}],"UserAccessPolicies":{},"TeamAccessPolicies":{},"EdgeKey":"","EdgeCheckinInterval":5,"Kubernetes":{"Snapshots":[],"Configuration":{"UseLoadBalancer":false,"UseServerMetrics":false,"EnableResourceOverCommit":true,"ResourceOverCommitPercentage":0,"StorageClasses":[],"IngressClasses":[],"RestrictDefaultNamespace":false,"IngressAvailabilityPerNamespace":false,"AllowNoneIngressClass":false},"Flags":{"IsServerMetricsDetected":false,"IsServerIngressClassDetected":false,"IsServerStorageDetected":false}},"ComposeSyntaxMaxVersion":"3.9","SecuritySettings":{"allowBindMountsForRegularUsers":true,"allowPrivilegedModeForRegularUsers":true,"allowVolumeBrowserForRegularUsers":false,"allowHostNamespaceForRegularUsers":true,"allowDeviceMappingForRegularUsers":true,"allowStackManagementForRegularUsers":true,"allowContainerCapabilitiesForRegularUsers":true,"allowSysctlSettingForRegularUsers":true,"enableHostManagementFeatures":false},"LastCheckInDate":0,"QueryDate":0,"Heartbeat":false,"PostInitMigrations":{"MigrateIngresses":false,"MigrateGPUs":false},"Edge":{"AsyncMode":false,"PingInterval":0,"SnapshotInterval":0,"CommandInterval":0},"Agent":{"Version":"2.27.9"},"AuthorizedUsers":null,"AuthorizedTeams":null,"Tags":null},{"Id":6,"Name":"srvTORII","Type":2,"ContainerEngine":"docker","URL":"tcp://10.0.10.3:9001","GroupId":1,"PublicURL":"","Gpus":[],"TLSConfig":{"TLS":true,"TLSSkipVerify":true},"AzureCredentials":{"ApplicationID":"","TenantID":"","AuthenticationKey":""},"TagIds":[],"Status":2,"Snapshots":[{"Time":1756249236,"DockerVersion":"28.3.3","Swarm":false,"TotalCPU":2,"TotalMemory":3116298240,"ContainerCount":2,"RunningContainerCount":2,"StoppedContainerCount":0,"HealthyContainerCount":0,"UnhealthyContainerCount":0,"VolumeCount":2,"ImageCount":3,"ServiceCount":0,"StackCount":1,"DockerSnapshotRaw":{"Containers":null,"Volumes":{"Volumes":null,"Warnings":null},"Networks":null,"Images":null,"Info":{"ID":"","Containers":0,"ContainersRunning":0,"ContainersPaused":0,"ContainersStopped":0,"Images":0,"Driver":"","DriverStatus":null,"Plugins":{"Volume":null,"Network":null,"Authorization":null,"Log":null},"MemoryLimit":false,"SwapLimit":false,"CpuCfsPeriod":false,"CpuCfsQuota":false,"CPUShares":false,"CPUSet":false,"PidsLimit":false,"IPv4Forwarding":false,"Debug":false,"NFd":0,"OomKillDisable":false,"NGoroutines":0,"SystemTime":"","LoggingDriver":"","CgroupDriver":"","NEventsListener":0,"KernelVersion":"","OperatingSystem":"","OSVersion":"","OSType":"","Architecture":"","IndexServerAddress":"","RegistryConfig":null,"NCPU":0,"MemTotal":0,"GenericResources":null,"DockerRootDir":"","HttpProxy":"","HttpsProxy":"","NoProxy":"","Name":"","Labels":null,"ExperimentalBuild":false,"ServerVersion":"","Runtimes":null,"DefaultRuntime":"","Swarm":{"NodeID":"","NodeAddr":"","LocalNodeState":"","ControlAvailable":false,"Error":"","RemoteManagers":null},"LiveRestoreEnabled":false,"Isolation":"","InitBinary":"","ContainerdCommit":{"ID":""},"RuncCommit":{"ID":""},"InitCommit":{"ID":""},"SecurityOptions":null,"CDISpecDirs":null,"Warnings":null},"Version":{"Platform":{"Name":""},"Version":"","ApiVersion":"","GitCommit":"","GoVersion":"","Os":"","Arch":""}},"NodeCount":0,"GpuUseAll":false,"GpuUseList":[],"IsPodman":false,"DiagnosticsData":null,"PerformanceMetrics":null}],"UserAccessPolicies":{},"TeamAccessPolicies":{},"EdgeKey":"","EdgeCheckinInterval":5,"Kubernetes":{"Snapshots":[],"Configuration":{"UseLoadBalancer":false,"UseServerMetrics":false,"EnableResourceOverCommit":true,"ResourceOverCommitPercentage":0,"StorageClasses":[],"IngressClasses":[],"RestrictDefaultNamespace":false,"IngressAvailabilityPerNamespace":false,"AllowNoneIngressClass":false},"Flags":{"IsServerMetricsDetected":false,"IsServerIngressClassDetected":false,"IsServerStorageDetected":false}},"ComposeSyntaxMaxVersion":"3.9","SecuritySettings":{"allowBindMountsForRegularUsers":true,"allowPrivilegedModeForRegularUsers":true,"allowVolumeBrowserForRegularUsers":false,"allowHostNamespaceForRegularUsers":true,"allowDeviceMappingForRegularUsers":true,"allowStackManagementForRegularUsers":true,"allowContainerCapabilitiesForRegularUsers":true,"allowSysctlSettingForRegularUsers":true,"enableHostManagementFeatures":false},"LastCheckInDate":0,"QueryDate":0,"Heartbeat":false,"PostInitMigrations":{"MigrateIngresses":false,"MigrateGPUs":false},"Edge":{"AsyncMode":false,"PingInterval":0,"SnapshotInterval":0,"CommandInterval":0},"Agent":{"Version":"2.21.4"},"AuthorizedUsers":null,"AuthorizedTeams":null,"Tags":null}] \ No newline at end of file diff --git a/servicios/homepage/config/kubernetes.yaml b/servicios/homepage/config/kubernetes.yaml new file mode 100644 index 00000000..aca6e821 --- /dev/null +++ b/servicios/homepage/config/kubernetes.yaml @@ -0,0 +1,2 @@ +--- +# sample kubernetes config diff --git a/servicios/homepage/config/proxmox.yaml b/servicios/homepage/config/proxmox.yaml new file mode 100644 index 00000000..90aacd75 --- /dev/null +++ b/servicios/homepage/config/proxmox.yaml @@ -0,0 +1,5 @@ +--- +# pve: +# url: https://proxmox.host.or.ip:8006 +# token: username@pam!Token ID +# secret: secret diff --git a/servicios/homepage/config/services.yaml b/servicios/homepage/config/services.yaml new file mode 100644 index 00000000..c0fb00b9 --- /dev/null +++ b/servicios/homepage/config/services.yaml @@ -0,0 +1,85 @@ +- Infraestructura Virtual: + - Proxmox 1: + icon: proxmox.png + href: "https://pmox.frlr.utn.edu.ar:8006" + description: Nodo 1 + widget: + type: proxmox + url: "{{HOMEPAGE_VAR_PROXMOX1_URL}}" + username: "{{HOMEPAGE_VAR_PROXMOX1_USER}}" + password: "{{HOMEPAGE_VAR_PROXMOX1_API_KEY}}" + node: pmox1 + - Proxmox 2: + icon: proxmox.png + href: "https://pmox.frlr.utn.edu.ar:8006" + description: Nodo 2 + widget: + type: proxmox + url: "{{HOMEPAGE_VAR_PROXMOX1_URL}}" + username: "{{HOMEPAGE_VAR_PROXMOX1_USER}}" + password: "{{HOMEPAGE_VAR_PROXMOX1_API_KEY}}" + node: pmox2 + - Proxmox 3: + icon: proxmox.png + href: "https://pmox.frlr.utn.edu.ar:8006" + description: Nodo 3 + widget: + type: proxmox + url: "{{HOMEPAGE_VAR_PROXMOX1_URL}}" + username: "{{HOMEPAGE_VAR_PROXMOX1_USER}}" + password: "{{HOMEPAGE_VAR_PROXMOX1_API_KEY}}" + node: pmox3 + - SSH/Terminal: + icon: si-gnumetalshell # SimpleIcons + href: "#" + description: Acceso NS8 + +- Gestión de Servicios: + - Monitor UPT Kuma: + icon: uptime-kuma.png + href: "http://upt.frlr.utn.edu.ar/status/servicios" + description: Status General + widget: + type: uptimekuma + url: "{{HOMEPAGE_VAR_UPTIMEKUMA_URL}}" + slug: "{{HOMEPAGE_VAR_UPTIMEKUMA_SLUG}}" + - Portainer srv-NS8: + icon: portainer.png + href: "https://ns8.frlr.utn.edu.ar/portainer/" + description: Gestión de contenedores + widget: + type: portainer + url: "http://172.17.0.1:9000" + env: 3 + key: "{{HOMEPAGE_VAR_PORTAINER_API_KEY}}" + - rmGhDocker: + icon: si-github-#181717 # SimpleIcons + href: "https://github.com/rmonla/rmDocker" + description: Scripts de despliegue + +- Aplicaciones y Herramientas: + - Eventos UTNLR: + icon: google-calendar.png + href: "https://calendar.google.com/calendar/u/0/r?cid=s4nnn9vr3vnt1llq7ir7nuu7dg@group.calendar.google.com" + description: Calendario Institucional + widget: + type: calendar + view: agenda + maxEvents: 5 + showTime: true + integrations: + - type: ical + url: https://calendar.google.com/calendar/ical/s4nnn9vr3vnt1llq7ir7nuu7dg%40group.calendar.google.com/public/basic.ics + name: Institucional + - Bitácoras: + icon: si-notebook # SimpleIcons + href: "https://ns8.frlr.utn.edu.ar/bitacoras/" + description: Registro de actividades + - SysACAD: + icon: mdi-bookshelf-#FFB441 # MDI Icons + href: "https://ns8.frlr.utn.edu.ar/sysacad/" + description: Sistema Académico + - GEMA Chatbot: + icon: si-google-gemini # SimpleIcons + href: "#" + description: Asistente GEMA diff --git a/servicios/homepage/config/settings.yaml b/servicios/homepage/config/settings.yaml new file mode 100644 index 00000000..10d66cff --- /dev/null +++ b/servicios/homepage/config/settings.yaml @@ -0,0 +1,20 @@ +title: NS8 Dashboard +background: + image: https://cdnb.artstation.com/p/assets/images/images/006/897/659/large/mikael-gustafsson-wallpaper-mikael-gustafsson.jpg + blur: sm + saturate: 100 + brightness: 50 + opacity: 100 + +theme: dark +color: slate + +useEqualHeights: true + +layout: + Infraestructura Virtual: + columns: 2 + Gestión de Servicios: + columns: 1 + Aplicaciones y Herramientas: + columns: 2 diff --git a/servicios/homepage/config/widgets.yaml b/servicios/homepage/config/widgets.yaml new file mode 100644 index 00000000..2a693672 --- /dev/null +++ b/servicios/homepage/config/widgets.yaml @@ -0,0 +1,11 @@ +- datetime: + text_size: xl + format: + dateStyle: long + timeStyle: short + hour12: false +- resources: + label: Sistema + cpu: true + memory: true + disk: / diff --git a/servicios/homepage/docker-compose.yml b/servicios/homepage/docker-compose.yml new file mode 100644 index 00000000..0f17d056 --- /dev/null +++ b/servicios/homepage/docker-compose.yml @@ -0,0 +1,16 @@ +services: + homepage: + image: ghcr.io/gethomepage/homepage:latest + container_name: homepage + ports: + - 3001:3000 + volumes: + - ./config:/app/config + - /var/run/docker.sock:/var/run/docker.sock:ro + env_file: + - .env + environment: + PUID: 1000 + PGID: 1000 + HOMEPAGE_ALLOWED_HOSTS: "ns8.frlr.utn.edu.ar,127.0.0.1,localhost,10.0.10.8,190.114.205.18,srvns8.tail982245.ts.net" + restart: unless-stopped diff --git a/servicios/nginx/conf.d/ns8.conf b/servicios/nginx/conf.d/ns8.conf index cdec1aec..d60e4224 100644 --- a/servicios/nginx/conf.d/ns8.conf +++ b/servicios/nginx/conf.d/ns8.conf @@ -1,11 +1,15 @@ server { - server_name ns8.frlr.utn.edu.ar; + server_name ns8.frlr.utn.edu.ar 100.88.252.26 190.114.205.18 srvns8.tail982245.ts.net; root /var/www/html; index index.html index.htm index.nginx-debian.html; location / { - try_files $uri $uri/ =404; + proxy_pass http://127.0.0.1:3001/; + 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; } # Portainer @@ -15,6 +19,9 @@ server { 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; } # SysACAD @@ -49,7 +56,7 @@ server { listen 80; - server_name ns8.frlr.utn.edu.ar; + server_name ns8.frlr.utn.edu.ar 100.88.252.26 190.114.205.18 srvns8.tail982245.ts.net; return 404; # managed by Certbot