2452 lines
134 KiB
HTML
2452 lines
134 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="generator" content="pandoc" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
|
<meta name="author" content="Equipo OpenGnsys" />
|
|
<title>ogCore - Documentación Técnica y Funcional</title>
|
|
<style>
|
|
code{white-space: pre-wrap;}
|
|
span.smallcaps{font-variant: small-caps;}
|
|
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
|
div.column{flex: auto; overflow-x: auto;}
|
|
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
|
/* The extra [class] is a hack that increases specificity enough to
|
|
override a similar rule in reveal.js */
|
|
ul.task-list[class]{list-style: none;}
|
|
ul.task-list li input[type="checkbox"] {
|
|
font-size: inherit;
|
|
width: 0.8em;
|
|
margin: 0 0.8em 0.2em -1.6em;
|
|
vertical-align: middle;
|
|
}
|
|
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
|
|
/* CSS for syntax highlighting */
|
|
pre > code.sourceCode { white-space: pre; position: relative; }
|
|
pre > code.sourceCode > span { line-height: 1.25; }
|
|
pre > code.sourceCode > span:empty { height: 1.2em; }
|
|
.sourceCode { overflow: visible; }
|
|
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
|
div.sourceCode { margin: 1em 0; }
|
|
pre.sourceCode { margin: 0; }
|
|
@media screen {
|
|
div.sourceCode { overflow: auto; }
|
|
}
|
|
@media print {
|
|
pre > code.sourceCode { white-space: pre-wrap; }
|
|
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
|
}
|
|
pre.numberSource code
|
|
{ counter-reset: source-line 0; }
|
|
pre.numberSource code > span
|
|
{ position: relative; left: -4em; counter-increment: source-line; }
|
|
pre.numberSource code > span > a:first-child::before
|
|
{ content: counter(source-line);
|
|
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
|
border: none; display: inline-block;
|
|
-webkit-touch-callout: none; -webkit-user-select: none;
|
|
-khtml-user-select: none; -moz-user-select: none;
|
|
-ms-user-select: none; user-select: none;
|
|
padding: 0 4px; width: 4em;
|
|
color: #aaaaaa;
|
|
}
|
|
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
|
div.sourceCode
|
|
{ }
|
|
@media screen {
|
|
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
|
}
|
|
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
|
|
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
|
|
code span.at { color: #7d9029; } /* Attribute */
|
|
code span.bn { color: #40a070; } /* BaseN */
|
|
code span.bu { color: #008000; } /* BuiltIn */
|
|
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
|
|
code span.ch { color: #4070a0; } /* Char */
|
|
code span.cn { color: #880000; } /* Constant */
|
|
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
|
|
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
|
|
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
|
|
code span.dt { color: #902000; } /* DataType */
|
|
code span.dv { color: #40a070; } /* DecVal */
|
|
code span.er { color: #ff0000; font-weight: bold; } /* Error */
|
|
code span.ex { } /* Extension */
|
|
code span.fl { color: #40a070; } /* Float */
|
|
code span.fu { color: #06287e; } /* Function */
|
|
code span.im { color: #008000; font-weight: bold; } /* Import */
|
|
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
|
|
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
|
|
code span.op { color: #666666; } /* Operator */
|
|
code span.ot { color: #007020; } /* Other */
|
|
code span.pp { color: #bc7a00; } /* Preprocessor */
|
|
code span.sc { color: #4070a0; } /* SpecialChar */
|
|
code span.ss { color: #bb6688; } /* SpecialString */
|
|
code span.st { color: #4070a0; } /* String */
|
|
code span.va { color: #19177c; } /* Variable */
|
|
code span.vs { color: #4070a0; } /* VerbatimString */
|
|
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
|
|
</style>
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.1.0/github-markdown.min.css" />
|
|
</head>
|
|
<body>
|
|
<header id="title-block-header">
|
|
<h1 class="title">ogCore - Documentación Técnica y Funcional</h1>
|
|
<p class="author">Equipo OpenGnsys</p>
|
|
<p class="date">Octubre 2025</p>
|
|
</header>
|
|
<nav id="TOC" role="doc-toc">
|
|
<ul>
|
|
<li><a href="#ogcore---documentación-técnica-y-funcional"
|
|
id="toc-ogcore---documentación-técnica-y-funcional"><span
|
|
class="toc-section-number">1</span> ogCore - Documentación Técnica y
|
|
Funcional</a>
|
|
<ul>
|
|
<li><a href="#tabla-de-contenidos" id="toc-tabla-de-contenidos"><span
|
|
class="toc-section-number">1.1</span> Tabla de Contenidos</a></li>
|
|
<li><a href="#introducción" id="toc-introducción"><span
|
|
class="toc-section-number">1.2</span> 1. Introducción</a>
|
|
<ul>
|
|
<li><a href="#propósito-del-sistema"
|
|
id="toc-propósito-del-sistema"><span
|
|
class="toc-section-number">1.2.1</span> 1.1 Propósito del
|
|
Sistema</a></li>
|
|
<li><a href="#alcance" id="toc-alcance"><span
|
|
class="toc-section-number">1.2.2</span> 1.2 Alcance</a></li>
|
|
</ul></li>
|
|
<li><a href="#descripción-del-proyecto"
|
|
id="toc-descripción-del-proyecto"><span
|
|
class="toc-section-number">1.3</span> 2. Descripción del Proyecto</a>
|
|
<ul>
|
|
<li><a href="#qué-es-ogcore" id="toc-qué-es-ogcore"><span
|
|
class="toc-section-number">1.3.1</span> 2.1 ¿Qué es ogCore?</a></li>
|
|
<li><a href="#características-principales"
|
|
id="toc-características-principales"><span
|
|
class="toc-section-number">1.3.2</span> 2.2 Características
|
|
Principales</a></li>
|
|
<li><a href="#versión-actual" id="toc-versión-actual"><span
|
|
class="toc-section-number">1.3.3</span> 2.3 Versión Actual</a></li>
|
|
</ul></li>
|
|
<li><a href="#arquitectura-del-sistema"
|
|
id="toc-arquitectura-del-sistema"><span
|
|
class="toc-section-number">1.4</span> 3. Arquitectura del Sistema</a>
|
|
<ul>
|
|
<li><a href="#arquitectura-general" id="toc-arquitectura-general"><span
|
|
class="toc-section-number">1.4.1</span> 3.1 Arquitectura
|
|
General</a></li>
|
|
<li><a href="#capas-de-la-aplicación"
|
|
id="toc-capas-de-la-aplicación"><span
|
|
class="toc-section-number">1.4.2</span> 3.2 Capas de la
|
|
Aplicación</a></li>
|
|
<li><a href="#patrones-de-diseño-utilizados"
|
|
id="toc-patrones-de-diseño-utilizados"><span
|
|
class="toc-section-number">1.4.3</span> 3.3 Patrones de Diseño
|
|
Utilizados</a></li>
|
|
</ul></li>
|
|
<li><a href="#tecnologías-utilizadas"
|
|
id="toc-tecnologías-utilizadas"><span
|
|
class="toc-section-number">1.5</span> 4. Tecnologías Utilizadas</a>
|
|
<ul>
|
|
<li><a href="#backend" id="toc-backend"><span
|
|
class="toc-section-number">1.5.1</span> 4.1 Backend</a></li>
|
|
<li><a href="#base-de-datos" id="toc-base-de-datos"><span
|
|
class="toc-section-number">1.5.2</span> 4.2 Base de Datos</a></li>
|
|
<li><a href="#infraestructura" id="toc-infraestructura"><span
|
|
class="toc-section-number">1.5.3</span> 4.3 Infraestructura</a></li>
|
|
<li><a href="#testing" id="toc-testing"><span
|
|
class="toc-section-number">1.5.4</span> 4.4 Testing</a></li>
|
|
<li><a href="#desarrollo" id="toc-desarrollo"><span
|
|
class="toc-section-number">1.5.5</span> 4.5 Desarrollo</a></li>
|
|
</ul></li>
|
|
<li><a href="#requisitos-del-sistema"
|
|
id="toc-requisitos-del-sistema"><span
|
|
class="toc-section-number">1.6</span> 5. Requisitos del Sistema</a>
|
|
<ul>
|
|
<li><a href="#requisitos-de-hardware-producción"
|
|
id="toc-requisitos-de-hardware-producción"><span
|
|
class="toc-section-number">1.6.1</span> 5.1 Requisitos de Hardware
|
|
(Producción)</a></li>
|
|
<li><a href="#requisitos-de-software"
|
|
id="toc-requisitos-de-software"><span
|
|
class="toc-section-number">1.6.2</span> 5.2 Requisitos de
|
|
Software</a></li>
|
|
<li><a href="#puertos-requeridos" id="toc-puertos-requeridos"><span
|
|
class="toc-section-number">1.6.3</span> 5.3 Puertos Requeridos</a></li>
|
|
</ul></li>
|
|
<li><a href="#instalación-y-configuración"
|
|
id="toc-instalación-y-configuración"><span
|
|
class="toc-section-number">1.7</span> 6. Instalación y Configuración</a>
|
|
<ul>
|
|
<li><a href="#instalación-con-docker-recomendado"
|
|
id="toc-instalación-con-docker-recomendado"><span
|
|
class="toc-section-number">1.7.1</span> 6.1 Instalación con Docker
|
|
(Recomendado)</a></li>
|
|
<li><a href="#configuración" id="toc-configuración"><span
|
|
class="toc-section-number">1.7.2</span> 6.2 Configuración</a></li>
|
|
<li><a href="#instalación-en-producción"
|
|
id="toc-instalación-en-producción"><span
|
|
class="toc-section-number">1.7.3</span> 6.3 Instalación en
|
|
Producción</a></li>
|
|
</ul></li>
|
|
<li><a href="#modelo-de-datos" id="toc-modelo-de-datos"><span
|
|
class="toc-section-number">1.8</span> 7. Modelo de Datos</a>
|
|
<ul>
|
|
<li><a href="#diagrama-de-entidades"
|
|
id="toc-diagrama-de-entidades"><span
|
|
class="toc-section-number">1.8.1</span> 7.1 Diagrama de
|
|
Entidades</a></li>
|
|
<li><a href="#entidades-principales"
|
|
id="toc-entidades-principales"><span
|
|
class="toc-section-number">1.8.2</span> 7.2 Entidades
|
|
Principales</a></li>
|
|
<li><a href="#índices-y-optimizaciones"
|
|
id="toc-índices-y-optimizaciones"><span
|
|
class="toc-section-number">1.8.3</span> 7.3 Índices y
|
|
Optimizaciones</a></li>
|
|
</ul></li>
|
|
<li><a href="#componentes-del-sistema"
|
|
id="toc-componentes-del-sistema"><span
|
|
class="toc-section-number">1.9</span> 8. Componentes del Sistema</a>
|
|
<ul>
|
|
<li><a href="#controllers-controladores"
|
|
id="toc-controllers-controladores"><span
|
|
class="toc-section-number">1.9.1</span> 8.1 Controllers
|
|
(Controladores)</a></li>
|
|
<li><a href="#states-procesadores-de-estado"
|
|
id="toc-states-procesadores-de-estado"><span
|
|
class="toc-section-number">1.9.2</span> 8.2 States (Procesadores de
|
|
Estado)</a></li>
|
|
<li><a href="#dtos-data-transfer-objects"
|
|
id="toc-dtos-data-transfer-objects"><span
|
|
class="toc-section-number">1.9.3</span> 8.3 DTOs (Data Transfer
|
|
Objects)</a></li>
|
|
<li><a href="#validators-validadores"
|
|
id="toc-validators-validadores"><span
|
|
class="toc-section-number">1.9.4</span> 8.4 Validators
|
|
(Validadores)</a></li>
|
|
<li><a href="#eventsubscribers-suscriptores-de-eventos"
|
|
id="toc-eventsubscribers-suscriptores-de-eventos"><span
|
|
class="toc-section-number">1.9.5</span> 8.5 EventSubscribers
|
|
(Suscriptores de Eventos)</a></li>
|
|
<li><a href="#factories-fábricas" id="toc-factories-fábricas"><span
|
|
class="toc-section-number">1.9.6</span> 8.6 Factories
|
|
(Fábricas)</a></li>
|
|
</ul></li>
|
|
<li><a href="#api-restful" id="toc-api-restful"><span
|
|
class="toc-section-number">1.10</span> 9. API RESTful</a>
|
|
<ul>
|
|
<li><a href="#documentación" id="toc-documentación"><span
|
|
class="toc-section-number">1.10.1</span> 9.1 Documentación</a></li>
|
|
<li><a href="#formato-de-respuestas"
|
|
id="toc-formato-de-respuestas"><span
|
|
class="toc-section-number">1.10.2</span> 9.2 Formato de
|
|
Respuestas</a></li>
|
|
<li><a href="#paginación" id="toc-paginación"><span
|
|
class="toc-section-number">1.10.3</span> 9.3 Paginación</a></li>
|
|
<li><a href="#filtrado" id="toc-filtrado"><span
|
|
class="toc-section-number">1.10.4</span> 9.4 Filtrado</a></li>
|
|
<li><a href="#ordenamiento" id="toc-ordenamiento"><span
|
|
class="toc-section-number">1.10.5</span> 9.5 Ordenamiento</a></li>
|
|
<li><a href="#endpoints-principales"
|
|
id="toc-endpoints-principales"><span
|
|
class="toc-section-number">1.10.6</span> 9.6 Endpoints
|
|
Principales</a></li>
|
|
<li><a href="#códigos-de-estado-http"
|
|
id="toc-códigos-de-estado-http"><span
|
|
class="toc-section-number">1.10.7</span> 9.7 Códigos de Estado
|
|
HTTP</a></li>
|
|
</ul></li>
|
|
<li><a href="#seguridad-y-autenticación"
|
|
id="toc-seguridad-y-autenticación"><span
|
|
class="toc-section-number">1.11</span> 10. Seguridad y Autenticación</a>
|
|
<ul>
|
|
<li><a href="#sistema-de-autenticación-jwt"
|
|
id="toc-sistema-de-autenticación-jwt"><span
|
|
class="toc-section-number">1.11.1</span> 10.1 Sistema de Autenticación
|
|
JWT</a></li>
|
|
<li><a href="#control-de-acceso" id="toc-control-de-acceso"><span
|
|
class="toc-section-number">1.11.2</span> 10.2 Control de Acceso</a></li>
|
|
<li><a href="#roles-de-usuario" id="toc-roles-de-usuario"><span
|
|
class="toc-section-number">1.11.3</span> 10.3 Roles de Usuario</a></li>
|
|
<li><a href="#seguridad-de-contraseñas"
|
|
id="toc-seguridad-de-contraseñas"><span
|
|
class="toc-section-number">1.11.4</span> 10.4 Seguridad de
|
|
Contraseñas</a></li>
|
|
<li><a href="#cors-cross-origin-resource-sharing"
|
|
id="toc-cors-cross-origin-resource-sharing"><span
|
|
class="toc-section-number">1.11.5</span> 10.5 CORS (Cross-Origin
|
|
Resource Sharing)</a></li>
|
|
<li><a href="#ssltls" id="toc-ssltls"><span
|
|
class="toc-section-number">1.11.6</span> 10.6 SSL/TLS</a></li>
|
|
</ul></li>
|
|
<li><a href="#servicios-principales"
|
|
id="toc-servicios-principales"><span
|
|
class="toc-section-number">1.12</span> 11. Servicios Principales</a>
|
|
<ul>
|
|
<li><a href="#createpartitionservice"
|
|
id="toc-createpartitionservice"><span
|
|
class="toc-section-number">1.12.1</span> 11.1
|
|
CreatePartitionService</a></li>
|
|
<li><a href="#createtraceservice" id="toc-createtraceservice"><span
|
|
class="toc-section-number">1.12.2</span> 11.2
|
|
CreateTraceService</a></li>
|
|
<li><a href="#changeclientnetworksettingsservice"
|
|
id="toc-changeclientnetworksettingsservice"><span
|
|
class="toc-section-number">1.12.3</span> 11.3
|
|
ChangeClientNetworkSettingsService</a></li>
|
|
<li><a href="#externalgitrepositoryservice"
|
|
id="toc-externalgitrepositoryservice"><span
|
|
class="toc-section-number">1.12.4</span> 11.4
|
|
ExternalGitRepositoryService</a></li>
|
|
<li><a href="#statusservice-ogbootogdhcpogrepository"
|
|
id="toc-statusservice-ogbootogdhcpogrepository"><span
|
|
class="toc-section-number">1.12.5</span> 11.5 StatusService
|
|
(OgBoot/OgDhcp/OgRepository)</a></li>
|
|
<li><a href="#udsclient" id="toc-udsclient"><span
|
|
class="toc-section-number">1.12.6</span> 11.6 UDSClient</a></li>
|
|
<li><a href="#tracecreateservice" id="toc-tracecreateservice"><span
|
|
class="toc-section-number">1.12.7</span> 11.7
|
|
Trace/CreateService</a></li>
|
|
<li><a href="#utilsgetpartitioncodeservice"
|
|
id="toc-utilsgetpartitioncodeservice"><span
|
|
class="toc-section-number">1.12.8</span> 11.8
|
|
Utils/GetPartitionCodeService</a></li>
|
|
<li><a href="#utilssimplifyoglivefilenameservice"
|
|
id="toc-utilssimplifyoglivefilenameservice"><span
|
|
class="toc-section-number">1.12.9</span> 11.9
|
|
Utils/SimplifyOgLiveFilenameService</a></li>
|
|
<li><a href="#utilsgetipaddressandnetmaskfromcidrservice"
|
|
id="toc-utilsgetipaddressandnetmaskfromcidrservice"><span
|
|
class="toc-section-number">1.12.10</span> 11.10
|
|
Utils/GetIpAddressAndNetmaskFromCIDRService</a></li>
|
|
</ul></li>
|
|
<li><a href="#comandos-de-consola" id="toc-comandos-de-consola"><span
|
|
class="toc-section-number">1.13</span> 12. Comandos de Consola</a>
|
|
<ul>
|
|
<li><a href="#comandos-de-inicialización"
|
|
id="toc-comandos-de-inicialización"><span
|
|
class="toc-section-number">1.13.1</span> 12.1 Comandos de
|
|
Inicialización</a></li>
|
|
<li><a href="#comandos-de-operación"
|
|
id="toc-comandos-de-operación"><span
|
|
class="toc-section-number">1.13.2</span> 12.2 Comandos de
|
|
Operación</a></li>
|
|
<li><a href="#comandos-de-migración"
|
|
id="toc-comandos-de-migración"><span
|
|
class="toc-section-number">1.13.3</span> 12.3 Comandos de
|
|
Migración</a></li>
|
|
<li><a href="#comandos-de-desarrollo"
|
|
id="toc-comandos-de-desarrollo"><span
|
|
class="toc-section-number">1.13.4</span> 12.4 Comandos de
|
|
Desarrollo</a></li>
|
|
<li><a href="#configuración-de-cron"
|
|
id="toc-configuración-de-cron"><span
|
|
class="toc-section-number">1.13.5</span> 12.5 Configuración de
|
|
Cron</a></li>
|
|
</ul></li>
|
|
<li><a href="#migraciones-de-datos" id="toc-migraciones-de-datos"><span
|
|
class="toc-section-number">1.14</span> 13. Migraciones de Datos</a>
|
|
<ul>
|
|
<li><a href="#sistema-de-migraciones-de-doctrine"
|
|
id="toc-sistema-de-migraciones-de-doctrine"><span
|
|
class="toc-section-number">1.14.1</span> 13.1 Sistema de Migraciones de
|
|
Doctrine</a></li>
|
|
<li><a href="#migración-desde-opengnsys-1.1"
|
|
id="toc-migración-desde-opengnsys-1.1"><span
|
|
class="toc-section-number">1.14.2</span> 13.2 Migración desde OpenGnsys
|
|
1.1</a></li>
|
|
<li><a href="#backup-y-restauración"
|
|
id="toc-backup-y-restauración"><span
|
|
class="toc-section-number">1.14.3</span> 13.3 Backup y
|
|
Restauración</a></li>
|
|
</ul></li>
|
|
<li><a href="#testing-1" id="toc-testing-1"><span
|
|
class="toc-section-number">1.15</span> 14. Testing</a>
|
|
<ul>
|
|
<li><a href="#framework-de-testing" id="toc-framework-de-testing"><span
|
|
class="toc-section-number">1.15.1</span> 14.1 Framework de
|
|
Testing</a></li>
|
|
<li><a href="#ejecutar-tests" id="toc-ejecutar-tests"><span
|
|
class="toc-section-number">1.15.2</span> 14.2 Ejecutar Tests</a></li>
|
|
<li><a href="#tipos-de-tests" id="toc-tipos-de-tests"><span
|
|
class="toc-section-number">1.15.3</span> 14.3 Tipos de Tests</a></li>
|
|
<li><a href="#factories-para-testing"
|
|
id="toc-factories-para-testing"><span
|
|
class="toc-section-number">1.15.4</span> 14.4 Factories para
|
|
Testing</a></li>
|
|
<li><a href="#base-de-datos-de-testing"
|
|
id="toc-base-de-datos-de-testing"><span
|
|
class="toc-section-number">1.15.5</span> 14.5 Base de Datos de
|
|
Testing</a></li>
|
|
</ul></li>
|
|
<li><a href="#despliegue" id="toc-despliegue"><span
|
|
class="toc-section-number">1.16</span> 15. Despliegue</a>
|
|
<ul>
|
|
<li><a href="#despliegue-con-docker-compose"
|
|
id="toc-despliegue-con-docker-compose"><span
|
|
class="toc-section-number">1.16.1</span> 15.1 Despliegue con Docker
|
|
Compose</a></li>
|
|
<li><a href="#despliegue-con-jenkins"
|
|
id="toc-despliegue-con-jenkins"><span
|
|
class="toc-section-number">1.16.2</span> 15.2 Despliegue con
|
|
Jenkins</a></li>
|
|
<li><a href="#paquete-debian" id="toc-paquete-debian"><span
|
|
class="toc-section-number">1.16.3</span> 15.3 Paquete Debian</a></li>
|
|
<li><a href="#configuración-de-producción"
|
|
id="toc-configuración-de-producción"><span
|
|
class="toc-section-number">1.16.4</span> 15.4 Configuración de
|
|
Producción</a></li>
|
|
<li><a href="#monitoreo" id="toc-monitoreo"><span
|
|
class="toc-section-number">1.16.5</span> 15.5 Monitoreo</a></li>
|
|
<li><a href="#escalabilidad" id="toc-escalabilidad"><span
|
|
class="toc-section-number">1.16.6</span> 15.6 Escalabilidad</a></li>
|
|
</ul></li>
|
|
<li><a href="#mantenimiento-y-operaciones"
|
|
id="toc-mantenimiento-y-operaciones"><span
|
|
class="toc-section-number">1.17</span> 16. Mantenimiento y
|
|
Operaciones</a>
|
|
<ul>
|
|
<li><a href="#reiniciar-base-de-datos"
|
|
id="toc-reiniciar-base-de-datos"><span
|
|
class="toc-section-number">1.17.1</span> 16.1 Reiniciar Base de
|
|
Datos</a></li>
|
|
<li><a href="#limpiar-caché" id="toc-limpiar-caché"><span
|
|
class="toc-section-number">1.17.2</span> 16.2 Limpiar Caché</a></li>
|
|
<li><a href="#actualizar-dependencias"
|
|
id="toc-actualizar-dependencias"><span
|
|
class="toc-section-number">1.17.3</span> 16.3 Actualizar
|
|
Dependencias</a></li>
|
|
<li><a href="#regenerar-claves-jwt" id="toc-regenerar-claves-jwt"><span
|
|
class="toc-section-number">1.17.4</span> 16.4 Regenerar Claves
|
|
JWT</a></li>
|
|
<li><a href="#backups-automáticos" id="toc-backups-automáticos"><span
|
|
class="toc-section-number">1.17.5</span> 16.5 Backups
|
|
Automáticos</a></li>
|
|
<li><a href="#monitoreo-de-salud" id="toc-monitoreo-de-salud"><span
|
|
class="toc-section-number">1.17.6</span> 16.6 Monitoreo de
|
|
Salud</a></li>
|
|
<li><a href="#rotación-de-logs" id="toc-rotación-de-logs"><span
|
|
class="toc-section-number">1.17.7</span> 16.7 Rotación de Logs</a></li>
|
|
</ul></li>
|
|
<li><a href="#integración-con-otros-servicios"
|
|
id="toc-integración-con-otros-servicios"><span
|
|
class="toc-section-number">1.18</span> 17. Integración con Otros
|
|
Servicios</a>
|
|
<ul>
|
|
<li><a href="#ogrepository" id="toc-ogrepository"><span
|
|
class="toc-section-number">1.18.1</span> 17.1 ogRepository</a></li>
|
|
<li><a href="#ogdhcp" id="toc-ogdhcp"><span
|
|
class="toc-section-number">1.18.2</span> 17.2 ogDhcp</a></li>
|
|
<li><a href="#ogboot" id="toc-ogboot"><span
|
|
class="toc-section-number">1.18.3</span> 17.3 ogBoot</a></li>
|
|
<li><a href="#ogagent" id="toc-ogagent"><span
|
|
class="toc-section-number">1.18.4</span> 17.4 ogAgent</a></li>
|
|
<li><a href="#uds-universal-desktop-services"
|
|
id="toc-uds-universal-desktop-services"><span
|
|
class="toc-section-number">1.18.5</span> 17.5 UDS (Universal Desktop
|
|
Services)</a></li>
|
|
<li><a href="#git-versionado-de-imágenes"
|
|
id="toc-git-versionado-de-imágenes"><span
|
|
class="toc-section-number">1.18.6</span> 17.6 Git (Versionado de
|
|
Imágenes)</a></li>
|
|
<li><a href="#mercure-notificaciones-en-tiempo-real"
|
|
id="toc-mercure-notificaciones-en-tiempo-real"><span
|
|
class="toc-section-number">1.18.7</span> 17.7 Mercure (Notificaciones en
|
|
Tiempo Real)</a></li>
|
|
</ul></li>
|
|
<li><a href="#roadmap-y-changelog" id="toc-roadmap-y-changelog"><span
|
|
class="toc-section-number">1.19</span> 18. Roadmap y Changelog</a>
|
|
<ul>
|
|
<li><a href="#versión-actual-0.5.0" id="toc-versión-actual-0.5.0"><span
|
|
class="toc-section-number">1.19.1</span> 18.1 Versión Actual:
|
|
0.5.0</a></li>
|
|
<li><a href="#últimas-características-v0.25.1---octubre-2025"
|
|
id="toc-últimas-características-v0.25.1---octubre-2025"><span
|
|
class="toc-section-number">1.19.2</span> 18.2 Últimas Características
|
|
(v0.25.1 - Octubre 2025)</a></li>
|
|
<li><a href="#próximas-características-roadmap"
|
|
id="toc-próximas-características-roadmap"><span
|
|
class="toc-section-number">1.19.3</span> 18.3 Próximas Características
|
|
(Roadmap)</a></li>
|
|
<li><a href="#changelog-resumido" id="toc-changelog-resumido"><span
|
|
class="toc-section-number">1.19.4</span> 18.4 Changelog
|
|
Resumido</a></li>
|
|
</ul></li>
|
|
<li><a href="#contribución" id="toc-contribución"><span
|
|
class="toc-section-number">1.20</span> 19. Contribución</a>
|
|
<ul>
|
|
<li><a href="#guía-de-contribución" id="toc-guía-de-contribución"><span
|
|
class="toc-section-number">1.20.1</span> 19.1 Guía de
|
|
Contribución</a></li>
|
|
<li><a href="#estándares-de-código" id="toc-estándares-de-código"><span
|
|
class="toc-section-number">1.20.2</span> 19.2 Estándares de
|
|
Código</a></li>
|
|
<li><a href="#proceso-de-revisión" id="toc-proceso-de-revisión"><span
|
|
class="toc-section-number">1.20.3</span> 19.3 Proceso de
|
|
Revisión</a></li>
|
|
<li><a href="#reportar-bugs" id="toc-reportar-bugs"><span
|
|
class="toc-section-number">1.20.4</span> 19.4 Reportar Bugs</a></li>
|
|
</ul></li>
|
|
<li><a href="#soporte-y-contacto" id="toc-soporte-y-contacto"><span
|
|
class="toc-section-number">1.21</span> 20. Soporte y Contacto</a>
|
|
<ul>
|
|
<li><a href="#documentación-adicional"
|
|
id="toc-documentación-adicional"><span
|
|
class="toc-section-number">1.21.1</span> 20.1 Documentación
|
|
Adicional</a></li>
|
|
<li><a href="#recursos" id="toc-recursos"><span
|
|
class="toc-section-number">1.21.2</span> 20.2 Recursos</a></li>
|
|
<li><a href="#equipo-de-desarrollo" id="toc-equipo-de-desarrollo"><span
|
|
class="toc-section-number">1.21.3</span> 20.3 Equipo de
|
|
Desarrollo</a></li>
|
|
<li><a href="#licencia" id="toc-licencia"><span
|
|
class="toc-section-number">1.21.4</span> 20.4 Licencia</a></li>
|
|
</ul></li>
|
|
<li><a href="#apéndices" id="toc-apéndices"><span
|
|
class="toc-section-number">1.22</span> Apéndices</a>
|
|
<ul>
|
|
<li><a href="#apéndice-a-glosario-de-términos"
|
|
id="toc-apéndice-a-glosario-de-términos"><span
|
|
class="toc-section-number">1.22.1</span> Apéndice A: Glosario de
|
|
Términos</a></li>
|
|
<li><a href="#apéndice-b-puertos-y-servicios"
|
|
id="toc-apéndice-b-puertos-y-servicios"><span
|
|
class="toc-section-number">1.22.2</span> Apéndice B: Puertos y
|
|
Servicios</a></li>
|
|
<li><a href="#apéndice-c-estructura-de-directorios"
|
|
id="toc-apéndice-c-estructura-de-directorios"><span
|
|
class="toc-section-number">1.22.3</span> Apéndice C: Estructura de
|
|
Directorios</a></li>
|
|
<li><a href="#apéndice-d-variables-de-entorno-completas"
|
|
id="toc-apéndice-d-variables-de-entorno-completas"><span
|
|
class="toc-section-number">1.22.4</span> Apéndice D: Variables de
|
|
Entorno Completas</a></li>
|
|
</ul></li>
|
|
</ul></li>
|
|
</ul>
|
|
</nav>
|
|
<h1 data-number="1"
|
|
id="ogcore---documentación-técnica-y-funcional"><span
|
|
class="header-section-number">1</span> ogCore - Documentación Técnica y
|
|
Funcional</h1>
|
|
<h2 data-number="1.1" id="tabla-de-contenidos"><span
|
|
class="header-section-number">1.1</span> Tabla de Contenidos</h2>
|
|
<ol type="1">
|
|
<li><a href="#1-introducción">Introducción</a></li>
|
|
<li><a href="#2-descripción-del-proyecto">Descripción del
|
|
Proyecto</a></li>
|
|
<li><a href="#3-arquitectura-del-sistema">Arquitectura del
|
|
Sistema</a></li>
|
|
<li><a href="#4-tecnologías-utilizadas">Tecnologías Utilizadas</a></li>
|
|
<li><a href="#5-requisitos-del-sistema">Requisitos del Sistema</a></li>
|
|
<li><a href="#6-instalación-y-configuración">Instalación y
|
|
Configuración</a></li>
|
|
<li><a href="#7-modelo-de-datos">Modelo de Datos</a></li>
|
|
<li><a href="#8-componentes-del-sistema">Componentes del
|
|
Sistema</a></li>
|
|
<li><a href="#9-api-restful">API RESTful</a></li>
|
|
<li><a href="#10-seguridad-y-autenticación">Seguridad y
|
|
Autenticación</a></li>
|
|
<li><a href="#11-servicios-principales">Servicios Principales</a></li>
|
|
<li><a href="#12-comandos-de-consola">Comandos de Consola</a></li>
|
|
<li><a href="#13-migraciones-de-datos">Migraciones de Datos</a></li>
|
|
<li><a href="#14-testing">Testing</a></li>
|
|
<li><a href="#15-despliegue">Despliegue</a></li>
|
|
<li><a href="#16-mantenimiento-y-operaciones">Mantenimiento y
|
|
Operaciones</a></li>
|
|
<li><a href="#17-integración-con-otros-servicios">Integración con Otros
|
|
Servicios</a></li>
|
|
<li><a href="#18-roadmap-y-changelog">Roadmap y Changelog</a></li>
|
|
<li><a href="#19-contribución">Contribución</a></li>
|
|
<li><a href="#20-soporte-y-contacto">Soporte y Contacto</a></li>
|
|
</ol>
|
|
<hr />
|
|
<h2 data-number="1.2" id="introducción"><span
|
|
class="header-section-number">1.2</span> 1. Introducción</h2>
|
|
<p><strong>ogCore</strong> es el servicio central de
|
|
<strong>OpenGnsys</strong>, una plataforma de código abierto diseñada
|
|
para la gestión centralizada de aulas de informática, laboratorios y
|
|
entornos educativos. Este servicio proporciona una API RESTful robusta
|
|
que permite administrar de manera eficiente clientes (equipos), imágenes
|
|
de sistemas operativos, perfiles de hardware y software, tareas
|
|
programadas, y mucho más.</p>
|
|
<h3 data-number="1.2.1" id="propósito-del-sistema"><span
|
|
class="header-section-number">1.2.1</span> 1.1 Propósito del
|
|
Sistema</h3>
|
|
<p>El propósito principal de ogCore es:</p>
|
|
<ul>
|
|
<li><strong>Centralizar la gestión</strong> de equipos informáticos en
|
|
entornos educativos y corporativos</li>
|
|
<li><strong>Automatizar el despliegue</strong> de sistemas operativos e
|
|
imágenes</li>
|
|
<li><strong>Gestionar inventarios</strong> de hardware y software</li>
|
|
<li><strong>Programar y ejecutar tareas</strong> de manera
|
|
automática</li>
|
|
<li><strong>Proporcionar trazabilidad</strong> de todas las operaciones
|
|
realizadas</li>
|
|
<li><strong>Facilitar la migración</strong> desde versiones anteriores
|
|
de OpenGnsys</li>
|
|
</ul>
|
|
<h3 data-number="1.2.2" id="alcance"><span
|
|
class="header-section-number">1.2.2</span> 1.2 Alcance</h3>
|
|
<p>ogCore gestiona: - Clientes (equipos físicos) - Imágenes de sistemas
|
|
operativos - Repositorios de imágenes - Perfiles de hardware y software
|
|
- Unidades organizativas (aulas, grupos) - Redes y subredes - Plantillas
|
|
PXE - Menús de arranque - Comandos y tareas programadas - Trazas de
|
|
ejecución - Calendarios remotos - Integración con sistemas externos
|
|
(UDS, ogRepository, ogDhcp, ogBoot)</p>
|
|
<hr />
|
|
<h2 data-number="1.3" id="descripción-del-proyecto"><span
|
|
class="header-section-number">1.3</span> 2. Descripción del
|
|
Proyecto</h2>
|
|
<h3 data-number="1.3.1" id="qué-es-ogcore"><span
|
|
class="header-section-number">1.3.1</span> 2.1 ¿Qué es ogCore?</h3>
|
|
<p>ogCore es el núcleo central de OpenGnsys desarrollado con tecnologías
|
|
modernas de PHP. Actúa como backend que expone una API RESTful completa,
|
|
permitiendo la gestión de todos los aspectos relacionados con la
|
|
administración de aulas informáticas.</p>
|
|
<h3 data-number="1.3.2" id="características-principales"><span
|
|
class="header-section-number">1.3.2</span> 2.2 Características
|
|
Principales</h3>
|
|
<ul>
|
|
<li><strong>API RESTful completa</strong> con documentación
|
|
Swagger/OpenAPI</li>
|
|
<li><strong>Autenticación JWT</strong> con refresh tokens</li>
|
|
<li><strong>Arquitectura basada en eventos</strong> con notificaciones
|
|
en tiempo real (Mercure)</li>
|
|
<li><strong>Sistema de colas</strong> para la ejecución de tareas
|
|
programadas</li>
|
|
<li><strong>Integración con múltiples servicios</strong> externos</li>
|
|
<li><strong>Migraciones automatizadas</strong> desde OpenGnsys 1.1</li>
|
|
<li><strong>Versionado de imágenes</strong> con integración Git</li>
|
|
<li><strong>Sistema de trazabilidad</strong> completo</li>
|
|
<li><strong>Gestión de hardware</strong> con inventario automático</li>
|
|
<li><strong>Despliegues masivos</strong> de imágenes (unicast,
|
|
multicast, torrent, p2p)</li>
|
|
<li><strong>Gestión de particiones</strong> automática</li>
|
|
<li><strong>Sistema de validación</strong> robusto</li>
|
|
</ul>
|
|
<h3 data-number="1.3.3" id="versión-actual"><span
|
|
class="header-section-number">1.3.3</span> 2.3 Versión Actual</h3>
|
|
<ul>
|
|
<li><strong>Versión</strong>: 0.5.0</li>
|
|
<li><strong>Estado</strong>: En desarrollo activo</li>
|
|
<li><strong>Última actualización</strong>: Octubre 2025</li>
|
|
</ul>
|
|
<hr />
|
|
<h2 data-number="1.4" id="arquitectura-del-sistema"><span
|
|
class="header-section-number">1.4</span> 3. Arquitectura del
|
|
Sistema</h2>
|
|
<h3 data-number="1.4.1" id="arquitectura-general"><span
|
|
class="header-section-number">1.4.1</span> 3.1 Arquitectura General</h3>
|
|
<p>ogCore sigue una arquitectura de <strong>microservicios</strong>
|
|
basada en el patrón <strong>API-First</strong>:</p>
|
|
<pre><code>┌─────────────────────────────────────────────────────────────┐
|
|
│ Frontend (Web UI) │
|
|
└────────────────────────┬────────────────────────────────────┘
|
|
│
|
|
│ HTTP/REST
|
|
│
|
|
┌────────────────────────▼────────────────────────────────────┐
|
|
│ ogCore API (Symfony) │
|
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|
│ │ Controllers │ States │ DTOs │ Validators │ Filters │ │
|
|
│ └──────────────────────────────────────────────────────┘ │
|
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|
│ │ Business Logic (Services) │ │
|
|
│ └──────────────────────────────────────────────────────┘ │
|
|
│ ┌──────────────────────────────────────────────────────┐ │
|
|
│ │ Entities │ Repositories │ Doctrine ORM │ │
|
|
│ └──────────────────────────────────────────────────────┘ │
|
|
└────────────────────┬───────────────┬───────────────────────┘
|
|
│ │
|
|
┌───────────▼──┐ ┌──────▼──────┐
|
|
│ MariaDB │ │ Mercure │
|
|
│ Database │ │ (WebSocket)│
|
|
└──────────────┘ └─────────────┘
|
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ Servicios Externos Integrados │
|
|
├──────────────┬──────────────┬──────────────┬────────────────┤
|
|
│ ogRepository│ ogDhcp │ ogBoot │ UDS/Git │
|
|
└──────────────┴──────────────┴──────────────┴────────────────┘</code></pre>
|
|
<h3 data-number="1.4.2" id="capas-de-la-aplicación"><span
|
|
class="header-section-number">1.4.2</span> 3.2 Capas de la
|
|
Aplicación</h3>
|
|
<h4 data-number="1.4.2.1" id="capa-de-presentación-api"><span
|
|
class="header-section-number">1.4.2.1</span> 3.2.1 Capa de Presentación
|
|
(API)</h4>
|
|
<ul>
|
|
<li><strong>API Platform</strong>: Framework para crear APIs REST</li>
|
|
<li><strong>Controllers</strong>: Controladores personalizados (102
|
|
controladores)</li>
|
|
<li><strong>DTOs (Data Transfer Objects)</strong>: 93 objetos de
|
|
transferencia de datos</li>
|
|
<li><strong>OpenAPI/Swagger</strong>: Documentación automática de la
|
|
API</li>
|
|
</ul>
|
|
<h4 data-number="1.4.2.2" id="capa-de-negocio"><span
|
|
class="header-section-number">1.4.2.2</span> 3.2.2 Capa de Negocio</h4>
|
|
<ul>
|
|
<li><strong>Services</strong>: Lógica de negocio (13 servicios
|
|
principales)</li>
|
|
<li><strong>Handlers</strong>: Manejadores de eventos (2 handlers)</li>
|
|
<li><strong>EventSubscribers</strong>: Suscriptores de eventos (8
|
|
suscriptores)</li>
|
|
<li><strong>Validators</strong>: Validadores personalizados (18
|
|
validadores)</li>
|
|
</ul>
|
|
<h4 data-number="1.4.2.3" id="capa-de-datos"><span
|
|
class="header-section-number">1.4.2.3</span> 3.2.3 Capa de Datos</h4>
|
|
<ul>
|
|
<li><strong>Entities</strong>: 35 entidades del modelo de datos</li>
|
|
<li><strong>Repositories</strong>: 32 repositorios personalizados</li>
|
|
<li><strong>Doctrine ORM</strong>: Mapeo objeto-relacional</li>
|
|
<li><strong>Migrations</strong>: 85 migraciones de base de datos</li>
|
|
</ul>
|
|
<h4 data-number="1.4.2.4" id="capa-de-infraestructura"><span
|
|
class="header-section-number">1.4.2.4</span> 3.2.4 Capa de
|
|
Infraestructura</h4>
|
|
<ul>
|
|
<li><strong>Docker</strong>: Contenedorización de servicios</li>
|
|
<li><strong>Nginx</strong>: Servidor web reverse proxy</li>
|
|
<li><strong>PHP-FPM</strong>: Procesador de PHP</li>
|
|
<li><strong>MariaDB</strong>: Sistema de gestión de base de datos</li>
|
|
<li><strong>Mercure</strong>: Sistema de notificaciones en tiempo
|
|
real</li>
|
|
</ul>
|
|
<h3 data-number="1.4.3" id="patrones-de-diseño-utilizados"><span
|
|
class="header-section-number">1.4.3</span> 3.3 Patrones de Diseño
|
|
Utilizados</h3>
|
|
<ol type="1">
|
|
<li><strong>Repository Pattern</strong>: Para abstracción de acceso a
|
|
datos</li>
|
|
<li><strong>DTO Pattern</strong>: Para transferencia de datos entre
|
|
capas</li>
|
|
<li><strong>Factory Pattern</strong>: Para creación de entidades
|
|
complejas</li>
|
|
<li><strong>Event-Driven Architecture</strong>: Para notificaciones y
|
|
reactividad</li>
|
|
<li><strong>State Pattern</strong>: Para gestión de estados de
|
|
procesamiento</li>
|
|
<li><strong>Service Layer</strong>: Para encapsulación de lógica de
|
|
negocio</li>
|
|
</ol>
|
|
<hr />
|
|
<h2 data-number="1.5" id="tecnologías-utilizadas"><span
|
|
class="header-section-number">1.5</span> 4. Tecnologías Utilizadas</h2>
|
|
<h3 data-number="1.5.1" id="backend"><span
|
|
class="header-section-number">1.5.1</span> 4.1 Backend</h3>
|
|
<table>
|
|
<colgroup>
|
|
<col style="width: 37%" />
|
|
<col style="width: 28%" />
|
|
<col style="width: 34%" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Tecnología</th>
|
|
<th>Versión</th>
|
|
<th>Propósito</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td><strong>PHP</strong></td>
|
|
<td>8.3</td>
|
|
<td>Lenguaje de programación principal</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Symfony</strong></td>
|
|
<td>6.4</td>
|
|
<td>Framework web principal</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Doctrine ORM</strong></td>
|
|
<td>2.19</td>
|
|
<td>Mapeo objeto-relacional</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>API Platform</strong></td>
|
|
<td>3.2</td>
|
|
<td>Creación de APIs REST</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Lexik JWT</strong></td>
|
|
<td>3.0</td>
|
|
<td>Autenticación JWT</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Gesdinet JWT Refresh Token</strong></td>
|
|
<td>1.3</td>
|
|
<td>Refresh tokens</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Stof Doctrine Extensions</strong></td>
|
|
<td>1.10</td>
|
|
<td>Extensiones de Doctrine (timestampable, etc.)</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Ramsey UUID</strong></td>
|
|
<td>2.0</td>
|
|
<td>Generación de UUIDs</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 data-number="1.5.2" id="base-de-datos"><span
|
|
class="header-section-number">1.5.2</span> 4.2 Base de Datos</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Tecnología</th>
|
|
<th>Versión</th>
|
|
<th>Propósito</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td><strong>MariaDB</strong></td>
|
|
<td>10.11</td>
|
|
<td>Sistema de gestión de base de datos</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Doctrine DBAL</strong></td>
|
|
<td>3.x</td>
|
|
<td>Capa de abstracción de base de datos</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Doctrine Migrations</strong></td>
|
|
<td>3.3</td>
|
|
<td>Gestión de migraciones</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 data-number="1.5.3" id="infraestructura"><span
|
|
class="header-section-number">1.5.3</span> 4.3 Infraestructura</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Tecnología</th>
|
|
<th>Versión</th>
|
|
<th>Propósito</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td><strong>Docker</strong></td>
|
|
<td>Latest</td>
|
|
<td>Contenedorización</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Docker Compose</strong></td>
|
|
<td>Latest</td>
|
|
<td>Orquestación de contenedores</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Nginx</strong></td>
|
|
<td>Latest</td>
|
|
<td>Servidor web / Reverse proxy</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>PHP-FPM</strong></td>
|
|
<td>8.3</td>
|
|
<td>Procesador FastCGI</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Mercure</strong></td>
|
|
<td>0.3.9</td>
|
|
<td>Hub de notificaciones en tiempo real</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 data-number="1.5.4" id="testing"><span
|
|
class="header-section-number">1.5.4</span> 4.4 Testing</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Tecnología</th>
|
|
<th>Versión</th>
|
|
<th>Propósito</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td><strong>PHPUnit</strong></td>
|
|
<td>9.5</td>
|
|
<td>Framework de testing</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Symfony PHPUnit Bridge</strong></td>
|
|
<td>7.0</td>
|
|
<td>Integración con Symfony</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>DAMA Doctrine Test Bundle</strong></td>
|
|
<td>8.1</td>
|
|
<td>Transacciones de prueba</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Zenstruck Foundry</strong></td>
|
|
<td>1.37</td>
|
|
<td>Factories para testing</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 data-number="1.5.5" id="desarrollo"><span
|
|
class="header-section-number">1.5.5</span> 4.5 Desarrollo</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Tecnología</th>
|
|
<th>Versión</th>
|
|
<th>Propósito</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td><strong>Symfony Maker Bundle</strong></td>
|
|
<td>1.59</td>
|
|
<td>Generación de código</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>Symfony Web Profiler</strong></td>
|
|
<td>6.4</td>
|
|
<td>Debugging y profiling</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td><strong>Monolog</strong></td>
|
|
<td>3.x</td>
|
|
<td>Logging</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td><strong>PHPStan</strong></td>
|
|
<td>Latest</td>
|
|
<td>Análisis estático</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<hr />
|
|
<h2 data-number="1.6" id="requisitos-del-sistema"><span
|
|
class="header-section-number">1.6</span> 5. Requisitos del Sistema</h2>
|
|
<h3 data-number="1.6.1" id="requisitos-de-hardware-producción"><span
|
|
class="header-section-number">1.6.1</span> 5.1 Requisitos de Hardware
|
|
(Producción)</h3>
|
|
<ul>
|
|
<li><strong>CPU</strong>: Mínimo 4 cores, recomendado 8+ cores</li>
|
|
<li><strong>RAM</strong>: Mínimo 8GB, recomendado 16GB+</li>
|
|
<li><strong>Disco</strong>:
|
|
<ul>
|
|
<li>Sistema: 20GB SSD</li>
|
|
<li>Base de datos: 50GB+ SSD</li>
|
|
<li>Logs: 10GB</li>
|
|
</ul></li>
|
|
<li><strong>Red</strong>: 1Gbps mínimo</li>
|
|
</ul>
|
|
<h3 data-number="1.6.2" id="requisitos-de-software"><span
|
|
class="header-section-number">1.6.2</span> 5.2 Requisitos de
|
|
Software</h3>
|
|
<ul>
|
|
<li><strong>Sistema Operativo</strong>: Linux (Ubuntu 20.04+, Debian
|
|
11+, CentOS 8+)</li>
|
|
<li><strong>Docker</strong>: >= 20.10</li>
|
|
<li><strong>Docker Compose</strong>: >= 2.0</li>
|
|
<li><strong>Git</strong>: >= 2.25 (para gestión de código)</li>
|
|
</ul>
|
|
<h3 data-number="1.6.3" id="puertos-requeridos"><span
|
|
class="header-section-number">1.6.3</span> 5.3 Puertos Requeridos</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Puerto</th>
|
|
<th>Servicio</th>
|
|
<th>Propósito</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td>8080</td>
|
|
<td>Nginx/HTTP</td>
|
|
<td>API y documentación</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>3306</td>
|
|
<td>MariaDB</td>
|
|
<td>Base de datos</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td>9000</td>
|
|
<td>PHP-FPM</td>
|
|
<td>Procesador PHP</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>3000</td>
|
|
<td>Mercure</td>
|
|
<td>WebSocket/SSE</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<hr />
|
|
<h2 data-number="1.7" id="instalación-y-configuración"><span
|
|
class="header-section-number">1.7</span> 6. Instalación y
|
|
Configuración</h2>
|
|
<h3 data-number="1.7.1" id="instalación-con-docker-recomendado"><span
|
|
class="header-section-number">1.7.1</span> 6.1 Instalación con Docker
|
|
(Recomendado)</h3>
|
|
<h4 data-number="1.7.1.1" id="clonar-el-repositorio"><span
|
|
class="header-section-number">1.7.1.1</span> 6.1.1 Clonar el
|
|
Repositorio</h4>
|
|
<div class="sourceCode" id="cb2"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">git</span> clone <span class="op"><</span>url-del-repositorio<span class="op">></span> ogcore</span>
|
|
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="bu">cd</span> ogcore</span></code></pre></div>
|
|
<h4 data-number="1.7.1.2" id="verificar-puertos-disponibles"><span
|
|
class="header-section-number">1.7.1.2</span> 6.1.2 Verificar Puertos
|
|
Disponibles</h4>
|
|
<p>Asegúrate de que los puertos 8080 y 3306 no estén en uso:</p>
|
|
<div class="sourceCode" id="cb3"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> lsof <span class="at">-i</span> :8080</span>
|
|
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a><span class="fu">sudo</span> lsof <span class="at">-i</span> :3306</span></code></pre></div>
|
|
<h4 data-number="1.7.1.3" id="desplegar-contenedores"><span
|
|
class="header-section-number">1.7.1.3</span> 6.1.3 Desplegar
|
|
Contenedores</h4>
|
|
<div class="sourceCode" id="cb4"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose up <span class="at">--build</span> <span class="at">-d</span></span></code></pre></div>
|
|
<h4 data-number="1.7.1.4" id="verificar-contenedores"><span
|
|
class="header-section-number">1.7.1.4</span> 6.1.4 Verificar
|
|
Contenedores</h4>
|
|
<div class="sourceCode" id="cb5"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> ps</span></code></pre></div>
|
|
<p>Deberías ver tres contenedores activos: - <code>ogcore-nginx</code> -
|
|
<code>ogcore-php</code> - <code>ogcore-database</code></p>
|
|
<h4 data-number="1.7.1.5" id="instalar-dependencias"><span
|
|
class="header-section-number">1.7.1.5</span> 6.1.5 Instalar
|
|
Dependencias</h4>
|
|
<div class="sourceCode" id="cb6"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php composer install</span></code></pre></div>
|
|
<h4 data-number="1.7.1.6" id="generar-claves-jwt"><span
|
|
class="header-section-number">1.7.1.6</span> 6.1.6 Generar Claves
|
|
JWT</h4>
|
|
<div class="sourceCode" id="cb7"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console lexik:jwt:generate-keypair <span class="at">--overwrite</span></span></code></pre></div>
|
|
<h4 data-number="1.7.1.7" id="inicializar-base-de-datos"><span
|
|
class="header-section-number">1.7.1.7</span> 6.1.7 Inicializar Base de
|
|
Datos</h4>
|
|
<div class="sourceCode" id="cb8"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Ejecutar migraciones</span></span>
|
|
<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:migrations:migrate <span class="at">--no-interaction</span></span>
|
|
<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a><span class="co"># Cargar datos iniciales (fixtures)</span></span>
|
|
<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:fixtures:load <span class="at">--no-interaction</span></span>
|
|
<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb8-7"><a href="#cb8-7" aria-hidden="true" tabindex="-1"></a><span class="co"># Cargar grupos de usuarios por defecto</span></span>
|
|
<span id="cb8-8"><a href="#cb8-8" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console app:load-default-user-groups</span>
|
|
<span id="cb8-9"><a href="#cb8-9" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb8-10"><a href="#cb8-10" aria-hidden="true" tabindex="-1"></a><span class="co"># Cargar comandos por defecto</span></span>
|
|
<span id="cb8-11"><a href="#cb8-11" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console app:load-default-commands</span></code></pre></div>
|
|
<h4 data-number="1.7.1.8" id="acceder-a-la-aplicación"><span
|
|
class="header-section-number">1.7.1.8</span> 6.1.8 Acceder a la
|
|
Aplicación</h4>
|
|
<p>Abre tu navegador y accede a:</p>
|
|
<pre><code>http://127.0.0.1:8080/docs</code></pre>
|
|
<p>Deberías ver la documentación Swagger de la API de ogCore.</p>
|
|
<h3 data-number="1.7.2" id="configuración"><span
|
|
class="header-section-number">1.7.2</span> 6.2 Configuración</h3>
|
|
<h4 data-number="1.7.2.1" id="variables-de-entorno"><span
|
|
class="header-section-number">1.7.2.1</span> 6.2.1 Variables de
|
|
Entorno</h4>
|
|
<p>El archivo <code>.env</code> contiene las variables de configuración
|
|
principales:</p>
|
|
<div class="sourceCode" id="cb10"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Entorno</span></span>
|
|
<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a><span class="va">APP_ENV</span><span class="op">=</span>dev</span>
|
|
<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a><span class="va">APP_SECRET</span><span class="op">=<</span>tu-secreto<span class="op">></span></span>
|
|
<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb10-5"><a href="#cb10-5" aria-hidden="true" tabindex="-1"></a><span class="co"># Base de datos</span></span>
|
|
<span id="cb10-6"><a href="#cb10-6" aria-hidden="true" tabindex="-1"></a><span class="va">DATABASE_URL</span><span class="op">=</span><span class="st">"mysql://user:password@ogcore-database:3306/ogcore"</span></span>
|
|
<span id="cb10-7"><a href="#cb10-7" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb10-8"><a href="#cb10-8" aria-hidden="true" tabindex="-1"></a><span class="co"># JWT</span></span>
|
|
<span id="cb10-9"><a href="#cb10-9" aria-hidden="true" tabindex="-1"></a><span class="va">JWT_SECRET_KEY</span><span class="op">=</span>%kernel.project_dir%/config/jwt/private.pem</span>
|
|
<span id="cb10-10"><a href="#cb10-10" aria-hidden="true" tabindex="-1"></a><span class="va">JWT_PUBLIC_KEY</span><span class="op">=</span>%kernel.project_dir%/config/jwt/public.pem</span>
|
|
<span id="cb10-11"><a href="#cb10-11" aria-hidden="true" tabindex="-1"></a><span class="va">JWT_PASSPHRASE</span><span class="op">=<</span>tu-passphrase<span class="op">></span></span>
|
|
<span id="cb10-12"><a href="#cb10-12" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb10-13"><a href="#cb10-13" aria-hidden="true" tabindex="-1"></a><span class="co"># Mercure</span></span>
|
|
<span id="cb10-14"><a href="#cb10-14" aria-hidden="true" tabindex="-1"></a><span class="va">MERCURE_URL</span><span class="op">=</span>http://mercure:3000/.well-known/mercure</span>
|
|
<span id="cb10-15"><a href="#cb10-15" aria-hidden="true" tabindex="-1"></a><span class="va">MERCURE_PUBLIC_URL</span><span class="op">=</span>http://127.0.0.1:8080/.well-known/mercure</span>
|
|
<span id="cb10-16"><a href="#cb10-16" aria-hidden="true" tabindex="-1"></a><span class="va">MERCURE_JWT_SECRET</span><span class="op">=<</span>tu-secreto-mercure<span class="op">></span></span>
|
|
<span id="cb10-17"><a href="#cb10-17" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb10-18"><a href="#cb10-18" aria-hidden="true" tabindex="-1"></a><span class="co"># Servicios externos</span></span>
|
|
<span id="cb10-19"><a href="#cb10-19" aria-hidden="true" tabindex="-1"></a><span class="va">REMOTE_PC_URL</span><span class="op">=<</span>url-uds<span class="op">></span></span>
|
|
<span id="cb10-20"><a href="#cb10-20" aria-hidden="true" tabindex="-1"></a><span class="va">REMOTE_PC_AUTH_LOGIN</span><span class="op">=<</span>login<span class="op">></span></span>
|
|
<span id="cb10-21"><a href="#cb10-21" aria-hidden="true" tabindex="-1"></a><span class="va">REMOTE_PC_AUTH_USERNAME</span><span class="op">=<</span>username<span class="op">></span></span>
|
|
<span id="cb10-22"><a href="#cb10-22" aria-hidden="true" tabindex="-1"></a><span class="va">REMOTE_PC_AUTH_PASSWORD</span><span class="op">=<</span>password<span class="op">></span></span>
|
|
<span id="cb10-23"><a href="#cb10-23" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb10-24"><a href="#cb10-24" aria-hidden="true" tabindex="-1"></a><span class="co"># SSL/TLS</span></span>
|
|
<span id="cb10-25"><a href="#cb10-25" aria-hidden="true" tabindex="-1"></a><span class="va">SSL_ENABLED</span><span class="op">=</span>false</span></code></pre></div>
|
|
<h4 data-number="1.7.2.2" id="configuración-de-cors"><span
|
|
class="header-section-number">1.7.2.2</span> 6.2.2 Configuración de
|
|
CORS</h4>
|
|
<p>Edita <code>config/packages/nelmio_cors.yaml</code> para configurar
|
|
CORS según tus necesidades.</p>
|
|
<h4 data-number="1.7.2.3" id="configuración-de-api-platform"><span
|
|
class="header-section-number">1.7.2.3</span> 6.2.3 Configuración de API
|
|
Platform</h4>
|
|
<p>La configuración de API Platform se encuentra en
|
|
<code>config/packages/api_platform.yaml</code>.</p>
|
|
<h3 data-number="1.7.3" id="instalación-en-producción"><span
|
|
class="header-section-number">1.7.3</span> 6.3 Instalación en
|
|
Producción</h3>
|
|
<p>Para entornos de producción, utiliza el archivo
|
|
<code>docker-compose-deploy.yml</code>:</p>
|
|
<div class="sourceCode" id="cb11"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose <span class="at">-f</span> docker-compose-deploy.yml up <span class="at">-d</span></span></code></pre></div>
|
|
<p>Asegúrate de: - Cambiar todas las contraseñas por defecto -
|
|
Configurar SSL/TLS - Configurar backups automáticos de base de datos -
|
|
Configurar monitoreo y alertas - Revisar los límites de recursos de
|
|
Docker</p>
|
|
<hr />
|
|
<h2 data-number="1.8" id="modelo-de-datos"><span
|
|
class="header-section-number">1.8</span> 7. Modelo de Datos</h2>
|
|
<h3 data-number="1.8.1" id="diagrama-de-entidades"><span
|
|
class="header-section-number">1.8.1</span> 7.1 Diagrama de
|
|
Entidades</h3>
|
|
<p>El sistema cuenta con 35 entidades principales agrupadas en los
|
|
siguientes dominios:</p>
|
|
<h3 data-number="1.8.2" id="entidades-principales"><span
|
|
class="header-section-number">1.8.2</span> 7.2 Entidades
|
|
Principales</h3>
|
|
<h4 data-number="1.8.2.1" id="client-cliente"><span
|
|
class="header-section-number">1.8.2.1</span> 7.2.1 Client (Cliente)</h4>
|
|
<p>Representa un equipo físico en el sistema.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre del cliente - <code>serialNumber</code>:
|
|
Número de serie - <code>mac</code>: Dirección MAC (única) -
|
|
<code>ip</code>: Dirección IP (única) - <code>status</code>: Estado del
|
|
cliente (active, inactive, busy, windows, linux, etc.) -
|
|
<code>netiface</code>: Interfaz de red - <code>netDriver</code>: Driver
|
|
de red - <code>validation</code>: Estado de validación -
|
|
<code>maintenance</code>: Modo mantenimiento - <code>position</code>:
|
|
Posición en el aula (x, y) - <code>firmwareType</code>: Tipo de firmware
|
|
(BIOS/UEFI) - <code>agentJobId</code>: ID del trabajo del agente en
|
|
ejecución - <code>pxeSync</code>: Sincronización PXE -
|
|
<code>token</code>: Token de autenticación del cliente</p>
|
|
<p><strong>Relaciones:</strong> - <code>organizationalUnit</code>:
|
|
Pertenece a una unidad organizativa (aula/grupo) -
|
|
<code>partitions</code>: Tiene múltiples particiones -
|
|
<code>menu</code>: Menú de arranque asignado -
|
|
<code>hardwareProfile</code>: Perfil de hardware asociado -
|
|
<code>template</code>: Plantilla PXE asignada - <code>repository</code>:
|
|
Repositorio de imágenes - <code>subnet</code>: Subred a la que pertenece
|
|
- <code>ogLive</code>: Imagen Live asignada</p>
|
|
<h4 data-number="1.8.2.2"
|
|
id="organizationalunit-unidad-organizativa"><span
|
|
class="header-section-number">1.8.2.2</span> 7.2.2 OrganizationalUnit
|
|
(Unidad Organizativa)</h4>
|
|
<p>Representa aulas o grupos de equipos.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre de la unidad - <code>description</code>:
|
|
Descripción - <code>type</code>: Tipo (aula, grupo, etc.)</p>
|
|
<p><strong>Relaciones:</strong> - <code>parent</code>: Unidad
|
|
organizativa padre (jerarquía) - <code>children</code>: Unidades hijas -
|
|
<code>clients</code>: Clientes pertenecientes -
|
|
<code>networkSettings</code>: Configuración de red heredable -
|
|
<code>remoteCalendar</code>: Calendario remoto asociado</p>
|
|
<h4 data-number="1.8.2.3" id="image-imagen"><span
|
|
class="header-section-number">1.8.2.3</span> 7.2.3 Image (Imagen)</h4>
|
|
<p>Representa una imagen de sistema operativo.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre de la imagen - <code>description</code>:
|
|
Descripción - <code>type</code>: Tipo de imagen - <code>size</code>:
|
|
Tamaño en bytes - <code>partition</code>: Partición de origen -
|
|
<code>status</code>: Estado (creating, success, failed, etc.) -
|
|
<code>isGlobal</code>: Imagen global compartida -
|
|
<code>isVirtual</code>: Imagen virtual - <code>version</code>: Versión
|
|
de la imagen</p>
|
|
<p><strong>Relaciones:</strong> - <code>operativeSystem</code>: Sistema
|
|
operativo - <code>softwareProfile</code>: Perfil de software -
|
|
<code>repositories</code>: Repositorios que contienen la imagen -
|
|
<code>originClient</code>: Cliente origen de la imagen</p>
|
|
<h4 data-number="1.8.2.4" id="command-comando"><span
|
|
class="header-section-number">1.8.2.4</span> 7.2.4 Command
|
|
(Comando)</h4>
|
|
<p>Comandos ejecutables en el sistema.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre del comando - <code>description</code>:
|
|
Descripción - <code>script</code>: Script a ejecutar</p>
|
|
<p><strong>Relaciones:</strong> - <code>commandGroups</code>: Grupos de
|
|
comandos a los que pertenece</p>
|
|
<h4 data-number="1.8.2.5" id="commandtask-tarea-de-comando"><span
|
|
class="header-section-number">1.8.2.5</span> 7.2.5 CommandTask (Tarea de
|
|
Comando)</h4>
|
|
<p>Tarea programada para ejecutar comandos.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>datetime</code>: Fecha y hora de ejecución -
|
|
<code>parameters</code>: Parámetros de ejecución - <code>status</code>:
|
|
Estado de la tarea</p>
|
|
<p><strong>Relaciones:</strong> - <code>commands</code>: Comandos a
|
|
ejecutar - <code>commandGroups</code>: Grupos de comandos -
|
|
<code>clients</code>: Clientes objetivo - <code>schedule</code>:
|
|
Programación recurrente</p>
|
|
<h4 data-number="1.8.2.6" id="trace-traza"><span
|
|
class="header-section-number">1.8.2.6</span> 7.2.6 Trace (Traza)</h4>
|
|
<p>Registro de ejecución de comandos.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>command</code>: Nombre del comando ejecutado - <code>input</code>:
|
|
Parámetros de entrada - <code>output</code>: Resultado de ejecución -
|
|
<code>status</code>: Estado (pending, processing, success, failed,
|
|
cancelled) - <code>executedAt</code>: Fecha de ejecución -
|
|
<code>finishedAt</code>: Fecha de finalización - <code>cancelled</code>:
|
|
Indica si fue cancelada - <code>jobId</code>: ID del trabajo en el
|
|
agente</p>
|
|
<p><strong>Relaciones:</strong> - <code>client</code>: Cliente donde se
|
|
ejecutó</p>
|
|
<h4 data-number="1.8.2.7" id="hardwareprofile-perfil-de-hardware"><span
|
|
class="header-section-number">1.8.2.7</span> 7.2.7 HardwareProfile
|
|
(Perfil de Hardware)</h4>
|
|
<p>Inventario de hardware de un cliente.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>cpu</code>: Información de CPU - <code>ram</code>: Memoria RAM -
|
|
<code>storage</code>: Almacenamiento - <code>networkCards</code>:
|
|
Tarjetas de red</p>
|
|
<p><strong>Relaciones:</strong> - <code>client</code>: Cliente asociado
|
|
- <code>hardwareTypes</code>: Tipos de hardware detectados</p>
|
|
<h4 data-number="1.8.2.8" id="softwareprofile-perfil-de-software"><span
|
|
class="header-section-number">1.8.2.8</span> 7.2.8 SoftwareProfile
|
|
(Perfil de Software)</h4>
|
|
<p>Software instalado en una imagen.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre del perfil</p>
|
|
<p><strong>Relaciones:</strong> - <code>software</code>: Software
|
|
incluido - <code>images</code>: Imágenes que usan este perfil</p>
|
|
<h4 data-number="1.8.2.9"
|
|
id="imagerepository-repositorio-de-imágenes"><span
|
|
class="header-section-number">1.8.2.9</span> 7.2.9 ImageRepository
|
|
(Repositorio de Imágenes)</h4>
|
|
<p>Servidor de almacenamiento de imágenes.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre del repositorio (único) - <code>ip</code>:
|
|
Dirección IP o DNS (único) - <code>port</code>: Puerto -
|
|
<code>sshPort</code>: Puerto SSH - <code>sshUser</code>: Usuario SSH -
|
|
<code>apiKey</code>: Clave API - <code>status</code>: Estado del
|
|
repositorio</p>
|
|
<p><strong>Relaciones:</strong> - <code>images</code>: Imágenes
|
|
almacenadas</p>
|
|
<h4 data-number="1.8.2.10" id="subnet-subred"><span
|
|
class="header-section-number">1.8.2.10</span> 7.2.10 Subnet
|
|
(Subred)</h4>
|
|
<p>Configuración de red.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre de la subred - <code>cidr</code>: Notación
|
|
CIDR - <code>gateway</code>: Puerta de enlace - <code>dns</code>:
|
|
Servidores DNS - <code>dhcpStart</code>: Inicio rango DHCP -
|
|
<code>dhcpEnd</code>: Fin rango DHCP</p>
|
|
<p><strong>Relaciones:</strong> - <code>clients</code>: Clientes en la
|
|
subred</p>
|
|
<h4 data-number="1.8.2.11" id="partition-partición"><span
|
|
class="header-section-number">1.8.2.11</span> 7.2.11 Partition
|
|
(Partición)</h4>
|
|
<p>Partición de disco de un cliente.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>partitionNumber</code>: Número de partición -
|
|
<code>partitionType</code>: Tipo de partición -
|
|
<code>partitionSize</code>: Tamaño - <code>partitionCode</code>: Código
|
|
de partición - <code>usedSize</code>: Tamaño usado -
|
|
<code>filesystem</code>: Sistema de archivos</p>
|
|
<p><strong>Relaciones:</strong> - <code>client</code>: Cliente
|
|
propietario - <code>image</code>: Imagen desplegada -
|
|
<code>operativeSystem</code>: Sistema operativo instalado</p>
|
|
<h4 data-number="1.8.2.12" id="pxetemplate-plantilla-pxe"><span
|
|
class="header-section-number">1.8.2.12</span> 7.2.12 PxeTemplate
|
|
(Plantilla PXE)</h4>
|
|
<p>Plantilla de arranque PXE.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre de la plantilla - <code>content</code>:
|
|
Contenido de la plantilla - <code>default</code>: Plantilla por
|
|
defecto</p>
|
|
<p><strong>Relaciones:</strong> - <code>clients</code>: Clientes que
|
|
usan la plantilla</p>
|
|
<h4 data-number="1.8.2.13" id="remotecalendar-calendario-remoto"><span
|
|
class="header-section-number">1.8.2.13</span> 7.2.13 RemoteCalendar
|
|
(Calendario Remoto)</h4>
|
|
<p>Integración con sistemas de reservas remotas.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre del calendario - <code>url</code>: URL del
|
|
servicio - <code>available</code>: Disponibilidad</p>
|
|
<p><strong>Relaciones:</strong> - <code>organizationalUnits</code>:
|
|
Unidades organizativas asociadas - <code>rules</code>: Reglas del
|
|
calendario</p>
|
|
<h4 data-number="1.8.2.14" id="user-usuario"><span
|
|
class="header-section-number">1.8.2.14</span> 7.2.14 User (Usuario)</h4>
|
|
<p>Usuario del sistema.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>username</code>: Nombre de usuario (único) -
|
|
<code>password</code>: Contraseña (hasheada) - <code>email</code>:
|
|
Correo electrónico - <code>roles</code>: Roles del usuario</p>
|
|
<p><strong>Relaciones:</strong> - <code>userGroups</code>: Grupos de
|
|
usuarios - <code>view</code>: Vista preferida</p>
|
|
<h4 data-number="1.8.2.15" id="gitrepository-repositorio-git"><span
|
|
class="header-section-number">1.8.2.15</span> 7.2.15 GitRepository
|
|
(Repositorio Git)</h4>
|
|
<p>Repositorio Git para versionado de imágenes.</p>
|
|
<p><strong>Campos principales:</strong> - <code>id</code>: UUID único -
|
|
<code>name</code>: Nombre del repositorio - <code>url</code>: URL del
|
|
repositorio - <code>branch</code>: Rama - <code>credentials</code>:
|
|
Credenciales de acceso</p>
|
|
<h3 data-number="1.8.3" id="índices-y-optimizaciones"><span
|
|
class="header-section-number">1.8.3</span> 7.3 Índices y
|
|
Optimizaciones</h3>
|
|
<p>La base de datos está optimizada con índices en: - Campos de búsqueda
|
|
frecuente (status, updatedAt) - Campos únicos (IP, MAC, username) -
|
|
Claves foráneas - Índices compuestos para consultas complejas</p>
|
|
<hr />
|
|
<h2 data-number="1.9" id="componentes-del-sistema"><span
|
|
class="header-section-number">1.9</span> 8. Componentes del Sistema</h2>
|
|
<h3 data-number="1.9.1" id="controllers-controladores"><span
|
|
class="header-section-number">1.9.1</span> 8.1 Controllers
|
|
(Controladores)</h3>
|
|
<p>El sistema cuenta con <strong>102 controladores</strong> organizados
|
|
por dominio:</p>
|
|
<h4 data-number="1.9.1.1" id="controladores-principales"><span
|
|
class="header-section-number">1.9.1.1</span> Controladores
|
|
principales:</h4>
|
|
<ul>
|
|
<li><strong>ClientController</strong>: Gestión de clientes</li>
|
|
<li><strong>ImageController</strong>: Gestión de imágenes</li>
|
|
<li><strong>OrganizationalUnitController</strong>: Gestión de unidades
|
|
organizativas</li>
|
|
<li><strong>CommandController</strong>: Gestión de comandos</li>
|
|
<li><strong>TraceController</strong>: Gestión de trazas</li>
|
|
<li><strong>UserController</strong>: Gestión de usuarios</li>
|
|
<li><strong>SubnetController</strong>: Gestión de subredes</li>
|
|
<li><strong>RepositoryController</strong>: Gestión de repositorios</li>
|
|
</ul>
|
|
<h3 data-number="1.9.2" id="states-procesadores-de-estado"><span
|
|
class="header-section-number">1.9.2</span> 8.2 States (Procesadores de
|
|
Estado)</h3>
|
|
<p>Los States implementan el patrón State de API Platform:</p>
|
|
<h4 data-number="1.9.2.1" id="states-principales-55-procesadores"><span
|
|
class="header-section-number">1.9.2.1</span> States principales (55
|
|
procesadores):</h4>
|
|
<ul>
|
|
<li><strong>Providers</strong>: Obtención de datos</li>
|
|
<li><strong>Processors</strong>: Procesamiento de escritura</li>
|
|
<li><strong>Custom States</strong>: Lógica personalizada</li>
|
|
</ul>
|
|
<h3 data-number="1.9.3" id="dtos-data-transfer-objects"><span
|
|
class="header-section-number">1.9.3</span> 8.3 DTOs (Data Transfer
|
|
Objects)</h3>
|
|
<p><strong>93 DTOs</strong> para transferencia de datos:</p>
|
|
<h4 data-number="1.9.3.1" id="tipos-de-dtos"><span
|
|
class="header-section-number">1.9.3.1</span> Tipos de DTOs:</h4>
|
|
<ul>
|
|
<li><strong>Input DTOs</strong>: Para recepción de datos</li>
|
|
<li><strong>Output DTOs</strong>: Para envío de datos</li>
|
|
<li><strong>Transformation DTOs</strong>: Para transformaciones</li>
|
|
</ul>
|
|
<h3 data-number="1.9.4" id="validators-validadores"><span
|
|
class="header-section-number">1.9.4</span> 8.4 Validators
|
|
(Validadores)</h3>
|
|
<p><strong>18 validadores personalizados</strong> para: - Validación de
|
|
IPs y MACs - Validación de rangos DHCP - Validación de particiones -
|
|
Validación de imágenes - Validación de comandos - Validación de
|
|
usuarios</p>
|
|
<h3 data-number="1.9.5"
|
|
id="eventsubscribers-suscriptores-de-eventos"><span
|
|
class="header-section-number">1.9.5</span> 8.5 EventSubscribers
|
|
(Suscriptores de Eventos)</h3>
|
|
<p><strong>8 suscriptores</strong> para: - Publicación en Mercure al
|
|
cambiar estados - Limpieza de recursos - Validaciones pre/post
|
|
persistencia - Logging de eventos</p>
|
|
<h3 data-number="1.9.6" id="factories-fábricas"><span
|
|
class="header-section-number">1.9.6</span> 8.6 Factories (Fábricas)</h3>
|
|
<p><strong>24 factories</strong> para testing con Foundry: - Creación de
|
|
entidades para tests - Datos de prueba realistas - Estados
|
|
predefinidos</p>
|
|
<hr />
|
|
<h2 data-number="1.10" id="api-restful"><span
|
|
class="header-section-number">1.10</span> 9. API RESTful</h2>
|
|
<h3 data-number="1.10.1" id="documentación"><span
|
|
class="header-section-number">1.10.1</span> 9.1 Documentación</h3>
|
|
<p>La API está completamente documentada con <strong>OpenAPI
|
|
3.0</strong> y accesible en:</p>
|
|
<pre><code>http://127.0.0.1:8080/docs</code></pre>
|
|
<h3 data-number="1.10.2" id="formato-de-respuestas"><span
|
|
class="header-section-number">1.10.2</span> 9.2 Formato de
|
|
Respuestas</h3>
|
|
<h4 data-number="1.10.2.1" id="formato-estándar-json-ld"><span
|
|
class="header-section-number">1.10.2.1</span> Formato estándar
|
|
(JSON-LD):</h4>
|
|
<div class="sourceCode" id="cb13"><pre
|
|
class="sourceCode json"><code class="sourceCode json"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="fu">{</span></span>
|
|
<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@context"</span><span class="fu">:</span> <span class="st">"/contexts/Client"</span><span class="fu">,</span></span>
|
|
<span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@id"</span><span class="fu">:</span> <span class="st">"/clients/123e4567-e89b-12d3-a456-426614174000"</span><span class="fu">,</span></span>
|
|
<span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@type"</span><span class="fu">:</span> <span class="st">"Client"</span><span class="fu">,</span></span>
|
|
<span id="cb13-5"><a href="#cb13-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">"id"</span><span class="fu">:</span> <span class="st">"123e4567-e89b-12d3-a456-426614174000"</span><span class="fu">,</span></span>
|
|
<span id="cb13-6"><a href="#cb13-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">"name"</span><span class="fu">:</span> <span class="st">"PC-01"</span><span class="fu">,</span></span>
|
|
<span id="cb13-7"><a href="#cb13-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">"mac"</span><span class="fu">:</span> <span class="st">"00:11:22:33:44:55"</span><span class="fu">,</span></span>
|
|
<span id="cb13-8"><a href="#cb13-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">"ip"</span><span class="fu">:</span> <span class="st">"192.168.1.100"</span><span class="fu">,</span></span>
|
|
<span id="cb13-9"><a href="#cb13-9" aria-hidden="true" tabindex="-1"></a> <span class="dt">"status"</span><span class="fu">:</span> <span class="st">"active"</span></span>
|
|
<span id="cb13-10"><a href="#cb13-10" aria-hidden="true" tabindex="-1"></a><span class="fu">}</span></span></code></pre></div>
|
|
<h4 data-number="1.10.2.2" id="formato-alternativo-json"><span
|
|
class="header-section-number">1.10.2.2</span> Formato alternativo
|
|
(JSON):</h4>
|
|
<div class="sourceCode" id="cb14"><pre
|
|
class="sourceCode json"><code class="sourceCode json"><span id="cb14-1"><a href="#cb14-1" aria-hidden="true" tabindex="-1"></a><span class="fu">{</span></span>
|
|
<span id="cb14-2"><a href="#cb14-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">"id"</span><span class="fu">:</span> <span class="st">"123e4567-e89b-12d3-a456-426614174000"</span><span class="fu">,</span></span>
|
|
<span id="cb14-3"><a href="#cb14-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">"name"</span><span class="fu">:</span> <span class="st">"PC-01"</span><span class="fu">,</span></span>
|
|
<span id="cb14-4"><a href="#cb14-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">"mac"</span><span class="fu">:</span> <span class="st">"00:11:22:33:44:55"</span><span class="fu">,</span></span>
|
|
<span id="cb14-5"><a href="#cb14-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">"ip"</span><span class="fu">:</span> <span class="st">"192.168.1.100"</span><span class="fu">,</span></span>
|
|
<span id="cb14-6"><a href="#cb14-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">"status"</span><span class="fu">:</span> <span class="st">"active"</span></span>
|
|
<span id="cb14-7"><a href="#cb14-7" aria-hidden="true" tabindex="-1"></a><span class="fu">}</span></span></code></pre></div>
|
|
<h3 data-number="1.10.3" id="paginación"><span
|
|
class="header-section-number">1.10.3</span> 9.3 Paginación</h3>
|
|
<p>Todas las colecciones soportan paginación:</p>
|
|
<pre><code>GET /clients?page=1&itemsPerPage=30</code></pre>
|
|
<p>Respuesta:</p>
|
|
<div class="sourceCode" id="cb16"><pre
|
|
class="sourceCode json"><code class="sourceCode json"><span id="cb16-1"><a href="#cb16-1" aria-hidden="true" tabindex="-1"></a><span class="fu">{</span></span>
|
|
<span id="cb16-2"><a href="#cb16-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@context"</span><span class="fu">:</span> <span class="st">"/contexts/Client"</span><span class="fu">,</span></span>
|
|
<span id="cb16-3"><a href="#cb16-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@id"</span><span class="fu">:</span> <span class="st">"/clients"</span><span class="fu">,</span></span>
|
|
<span id="cb16-4"><a href="#cb16-4" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@type"</span><span class="fu">:</span> <span class="st">"hydra:Collection"</span><span class="fu">,</span></span>
|
|
<span id="cb16-5"><a href="#cb16-5" aria-hidden="true" tabindex="-1"></a> <span class="dt">"hydra:member"</span><span class="fu">:</span> <span class="ot">[</span><span class="er">...</span><span class="ot">]</span><span class="fu">,</span></span>
|
|
<span id="cb16-6"><a href="#cb16-6" aria-hidden="true" tabindex="-1"></a> <span class="dt">"hydra:totalItems"</span><span class="fu">:</span> <span class="dv">150</span><span class="fu">,</span></span>
|
|
<span id="cb16-7"><a href="#cb16-7" aria-hidden="true" tabindex="-1"></a> <span class="dt">"hydra:view"</span><span class="fu">:</span> <span class="fu">{</span></span>
|
|
<span id="cb16-8"><a href="#cb16-8" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@id"</span><span class="fu">:</span> <span class="st">"/clients?page=1"</span><span class="fu">,</span></span>
|
|
<span id="cb16-9"><a href="#cb16-9" aria-hidden="true" tabindex="-1"></a> <span class="dt">"@type"</span><span class="fu">:</span> <span class="st">"hydra:PartialCollectionView"</span><span class="fu">,</span></span>
|
|
<span id="cb16-10"><a href="#cb16-10" aria-hidden="true" tabindex="-1"></a> <span class="dt">"hydra:first"</span><span class="fu">:</span> <span class="st">"/clients?page=1"</span><span class="fu">,</span></span>
|
|
<span id="cb16-11"><a href="#cb16-11" aria-hidden="true" tabindex="-1"></a> <span class="dt">"hydra:last"</span><span class="fu">:</span> <span class="st">"/clients?page=5"</span><span class="fu">,</span></span>
|
|
<span id="cb16-12"><a href="#cb16-12" aria-hidden="true" tabindex="-1"></a> <span class="dt">"hydra:next"</span><span class="fu">:</span> <span class="st">"/clients?page=2"</span></span>
|
|
<span id="cb16-13"><a href="#cb16-13" aria-hidden="true" tabindex="-1"></a> <span class="fu">}</span></span>
|
|
<span id="cb16-14"><a href="#cb16-14" aria-hidden="true" tabindex="-1"></a><span class="fu">}</span></span></code></pre></div>
|
|
<h3 data-number="1.10.4" id="filtrado"><span
|
|
class="header-section-number">1.10.4</span> 9.4 Filtrado</h3>
|
|
<p>Soporta filtros avanzados:</p>
|
|
<pre><code>GET /clients?status=active
|
|
GET /clients?organizationalUnit.name=Aula1
|
|
GET /traces?client.id=123&status=pending</code></pre>
|
|
<h3 data-number="1.10.5" id="ordenamiento"><span
|
|
class="header-section-number">1.10.5</span> 9.5 Ordenamiento</h3>
|
|
<pre><code>GET /clients?order[name]=asc
|
|
GET /traces?order[createdAt]=desc</code></pre>
|
|
<h3 data-number="1.10.6" id="endpoints-principales"><span
|
|
class="header-section-number">1.10.6</span> 9.6 Endpoints
|
|
Principales</h3>
|
|
<h4 data-number="1.10.6.1" id="autenticación"><span
|
|
class="header-section-number">1.10.6.1</span> 9.6.1 Autenticación</h4>
|
|
<pre><code>POST /auth/login
|
|
POST /auth/refresh</code></pre>
|
|
<h4 data-number="1.10.6.2" id="clientes"><span
|
|
class="header-section-number">1.10.6.2</span> 9.6.2 Clientes</h4>
|
|
<pre><code>GET /clients
|
|
POST /clients
|
|
GET /clients/{id}
|
|
PUT /clients/{id}
|
|
PATCH /clients/{id}
|
|
DELETE /clients/{id}
|
|
POST /clients/batch
|
|
POST /clients/{id}/power-on
|
|
POST /clients/{id}/power-off
|
|
POST /clients/{id}/reboot</code></pre>
|
|
<h4 data-number="1.10.6.3" id="imágenes"><span
|
|
class="header-section-number">1.10.6.3</span> 9.6.3 Imágenes</h4>
|
|
<pre><code>GET /images
|
|
POST /images
|
|
GET /images/{id}
|
|
PUT /images/{id}
|
|
DELETE /images/{id}
|
|
POST /images/{id}/deploy
|
|
POST /images/{id}/create
|
|
POST /images/{id}/backup</code></pre>
|
|
<h4 data-number="1.10.6.4" id="comandos-y-tareas"><span
|
|
class="header-section-number">1.10.6.4</span> 9.6.4 Comandos y
|
|
Tareas</h4>
|
|
<pre><code>GET /commands
|
|
POST /commands
|
|
GET /command-tasks
|
|
POST /command-tasks
|
|
PUT /command-tasks/{id}
|
|
DELETE /command-tasks/{id}</code></pre>
|
|
<h4 data-number="1.10.6.5" id="trazas"><span
|
|
class="header-section-number">1.10.6.5</span> 9.6.5 Trazas</h4>
|
|
<pre><code>GET /traces
|
|
GET /traces/{id}
|
|
PUT /traces/{id}
|
|
PATCH /traces/{id}/complete
|
|
PATCH /traces/{id}/cancel</code></pre>
|
|
<h3 data-number="1.10.7" id="códigos-de-estado-http"><span
|
|
class="header-section-number">1.10.7</span> 9.7 Códigos de Estado
|
|
HTTP</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Código</th>
|
|
<th>Significado</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td>200</td>
|
|
<td>OK - Operación exitosa</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>201</td>
|
|
<td>Created - Recurso creado</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td>204</td>
|
|
<td>No Content - Eliminación exitosa</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>400</td>
|
|
<td>Bad Request - Datos inválidos</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td>401</td>
|
|
<td>Unauthorized - No autenticado</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>403</td>
|
|
<td>Forbidden - Sin permisos</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td>404</td>
|
|
<td>Not Found - Recurso no encontrado</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>409</td>
|
|
<td>Conflict - Conflicto (cliente ocupado, constraint violation)</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td>422</td>
|
|
<td>Unprocessable Entity - Validación fallida</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>500</td>
|
|
<td>Internal Server Error - Error del servidor</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<hr />
|
|
<h2 data-number="1.11" id="seguridad-y-autenticación"><span
|
|
class="header-section-number">1.11</span> 10. Seguridad y
|
|
Autenticación</h2>
|
|
<h3 data-number="1.11.1" id="sistema-de-autenticación-jwt"><span
|
|
class="header-section-number">1.11.1</span> 10.1 Sistema de
|
|
Autenticación JWT</h3>
|
|
<p>ogCore utiliza <strong>JSON Web Tokens (JWT)</strong> para
|
|
autenticación:</p>
|
|
<h4 data-number="1.11.1.1" id="obtener-token"><span
|
|
class="header-section-number">1.11.1.1</span> 10.1.1 Obtener Token</h4>
|
|
<div class="sourceCode" id="cb24"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb24-1"><a href="#cb24-1" aria-hidden="true" tabindex="-1"></a><span class="ex">POST</span> /auth/login</span>
|
|
<span id="cb24-2"><a href="#cb24-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Content-Type:</span> application/json</span>
|
|
<span id="cb24-3"><a href="#cb24-3" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb24-4"><a href="#cb24-4" aria-hidden="true" tabindex="-1"></a><span class="kw">{</span></span>
|
|
<span id="cb24-5"><a href="#cb24-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"username"</span><span class="ex">:</span> <span class="st">"admin"</span>,</span>
|
|
<span id="cb24-6"><a href="#cb24-6" aria-hidden="true" tabindex="-1"></a> <span class="st">"password"</span><span class="ex">:</span> <span class="st">"password"</span></span>
|
|
<span id="cb24-7"><a href="#cb24-7" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span></code></pre></div>
|
|
<p>Respuesta:</p>
|
|
<div class="sourceCode" id="cb25"><pre
|
|
class="sourceCode json"><code class="sourceCode json"><span id="cb25-1"><a href="#cb25-1" aria-hidden="true" tabindex="-1"></a><span class="fu">{</span></span>
|
|
<span id="cb25-2"><a href="#cb25-2" aria-hidden="true" tabindex="-1"></a> <span class="dt">"token"</span><span class="fu">:</span> <span class="st">"eyJ0eXAiOiJKV1QiLCJhbGc..."</span><span class="fu">,</span></span>
|
|
<span id="cb25-3"><a href="#cb25-3" aria-hidden="true" tabindex="-1"></a> <span class="dt">"refresh_token"</span><span class="fu">:</span> <span class="st">"def50200a54b7b..."</span></span>
|
|
<span id="cb25-4"><a href="#cb25-4" aria-hidden="true" tabindex="-1"></a><span class="fu">}</span></span></code></pre></div>
|
|
<h4 data-number="1.11.1.2" id="usar-token"><span
|
|
class="header-section-number">1.11.1.2</span> 10.1.2 Usar Token</h4>
|
|
<p>Incluir el token en el header <code>Authorization</code>:</p>
|
|
<div class="sourceCode" id="cb26"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb26-1"><a href="#cb26-1" aria-hidden="true" tabindex="-1"></a><span class="ex">GET</span> /clients</span>
|
|
<span id="cb26-2"><a href="#cb26-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Authorization:</span> Bearer eyJ0eXAiOiJKV1QiLCJhbGc...</span></code></pre></div>
|
|
<h4 data-number="1.11.1.3" id="refresh-token"><span
|
|
class="header-section-number">1.11.1.3</span> 10.1.3 Refresh Token</h4>
|
|
<div class="sourceCode" id="cb27"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb27-1"><a href="#cb27-1" aria-hidden="true" tabindex="-1"></a><span class="ex">POST</span> /auth/refresh</span>
|
|
<span id="cb27-2"><a href="#cb27-2" aria-hidden="true" tabindex="-1"></a><span class="ex">Content-Type:</span> application/json</span>
|
|
<span id="cb27-3"><a href="#cb27-3" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb27-4"><a href="#cb27-4" aria-hidden="true" tabindex="-1"></a><span class="kw">{</span></span>
|
|
<span id="cb27-5"><a href="#cb27-5" aria-hidden="true" tabindex="-1"></a> <span class="st">"refresh_token"</span><span class="ex">:</span> <span class="st">"def50200a54b7b..."</span></span>
|
|
<span id="cb27-6"><a href="#cb27-6" aria-hidden="true" tabindex="-1"></a><span class="kw">}</span></span></code></pre></div>
|
|
<h3 data-number="1.11.2" id="control-de-acceso"><span
|
|
class="header-section-number">1.11.2</span> 10.2 Control de Acceso</h3>
|
|
<h4 data-number="1.11.2.1" id="rutas-públicas"><span
|
|
class="header-section-number">1.11.2.1</span> Rutas Públicas:</h4>
|
|
<ul>
|
|
<li><code>/auth/login</code></li>
|
|
<li><code>/auth/refresh</code></li>
|
|
<li><code>/docs</code></li>
|
|
<li><code>/opengnsys/rest/*</code> (webhooks)</li>
|
|
<li><code>/og-repository/webhook</code></li>
|
|
<li><code>/menu-browser</code></li>
|
|
</ul>
|
|
<h4 data-number="1.11.2.2" id="rutas-protegidas"><span
|
|
class="header-section-number">1.11.2.2</span> Rutas Protegidas:</h4>
|
|
<ul>
|
|
<li>Todo lo demás requiere <code>IS_AUTHENTICATED_FULLY</code></li>
|
|
</ul>
|
|
<h3 data-number="1.11.3" id="roles-de-usuario"><span
|
|
class="header-section-number">1.11.3</span> 10.3 Roles de Usuario</h3>
|
|
<p>Los roles se gestionan en la entidad <code>User</code>:</p>
|
|
<div class="sourceCode" id="cb28"><pre
|
|
class="sourceCode php"><code class="sourceCode php"><span id="cb28-1"><a href="#cb28-1" aria-hidden="true" tabindex="-1"></a><span class="va">$user</span>->setRoles([<span class="st">'ROLE_USER'</span>])<span class="ot">;</span></span>
|
|
<span id="cb28-2"><a href="#cb28-2" aria-hidden="true" tabindex="-1"></a><span class="va">$user</span>->setRoles([<span class="st">'ROLE_ADMIN'</span>])<span class="ot">;</span></span></code></pre></div>
|
|
<h3 data-number="1.11.4" id="seguridad-de-contraseñas"><span
|
|
class="header-section-number">1.11.4</span> 10.4 Seguridad de
|
|
Contraseñas</h3>
|
|
<ul>
|
|
<li>Hashing con <strong>bcrypt</strong> automático</li>
|
|
<li>Validación de fortaleza</li>
|
|
<li>Cambio de contraseña seguro</li>
|
|
</ul>
|
|
<h3 data-number="1.11.5" id="cors-cross-origin-resource-sharing"><span
|
|
class="header-section-number">1.11.5</span> 10.5 CORS (Cross-Origin
|
|
Resource Sharing)</h3>
|
|
<p>Configurado en <code>nelmio_cors.yaml</code> para permitir acceso
|
|
desde frontend.</p>
|
|
<h3 data-number="1.11.6" id="ssltls"><span
|
|
class="header-section-number">1.11.6</span> 10.6 SSL/TLS</h3>
|
|
<p>Para producción, habilitar SSL:</p>
|
|
<div class="sourceCode" id="cb29"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb29-1"><a href="#cb29-1" aria-hidden="true" tabindex="-1"></a><span class="va">SSL_ENABLED</span><span class="op">=</span>true</span></code></pre></div>
|
|
<p>Configurar certificados en <code>/certs/</code>.</p>
|
|
<hr />
|
|
<h2 data-number="1.12" id="servicios-principales"><span
|
|
class="header-section-number">1.12</span> 11. Servicios Principales</h2>
|
|
<h3 data-number="1.12.1" id="createpartitionservice"><span
|
|
class="header-section-number">1.12.1</span> 11.1
|
|
CreatePartitionService</h3>
|
|
<p><strong>Propósito</strong>: Crear y actualizar particiones de
|
|
clientes.</p>
|
|
<p><strong>Funcionalidad</strong>: - Recibe información de particiones
|
|
del agente - Crea/actualiza particiones en base de datos - Detecta tipo
|
|
de firmware (BIOS/UEFI) - Calcula códigos de partición</p>
|
|
<h3 data-number="1.12.2" id="createtraceservice"><span
|
|
class="header-section-number">1.12.2</span> 11.2 CreateTraceService</h3>
|
|
<p><strong>Propósito</strong>: Crear trazas de ejecución para tareas
|
|
programadas.</p>
|
|
<p><strong>Funcionalidad</strong>: - Genera trazas para cada combinación
|
|
cliente-comando - Gestiona comandos agrupados - Establece estado inicial
|
|
y fecha de ejecución</p>
|
|
<h3 data-number="1.12.3" id="changeclientnetworksettingsservice"><span
|
|
class="header-section-number">1.12.3</span> 11.3
|
|
ChangeClientNetworkSettingsService</h3>
|
|
<p><strong>Propósito</strong>: Cambiar configuración de red de
|
|
clientes.</p>
|
|
<p><strong>Funcionalidad</strong>: - Actualiza subnet, IP, configuración
|
|
de red - Sincroniza con servicios externos (DHCP)</p>
|
|
<h3 data-number="1.12.4" id="externalgitrepositoryservice"><span
|
|
class="header-section-number">1.12.4</span> 11.4
|
|
ExternalGitRepositoryService</h3>
|
|
<p><strong>Propósito</strong>: Gestión de repositorios Git para
|
|
imágenes.</p>
|
|
<p><strong>Funcionalidad</strong>: - Backup de imágenes a Git -
|
|
Versionado de imágenes - Sincronización con repositorios remotos</p>
|
|
<h3 data-number="1.12.5"
|
|
id="statusservice-ogbootogdhcpogrepository"><span
|
|
class="header-section-number">1.12.5</span> 11.5 StatusService
|
|
(OgBoot/OgDhcp/OgRepository)</h3>
|
|
<p><strong>Propósito</strong>: Verificar estado de servicios
|
|
externos.</p>
|
|
<p><strong>Funcionalidad</strong>: - Health checks de servicios - Manejo
|
|
de errores de conexión - Logging de estado</p>
|
|
<h3 data-number="1.12.6" id="udsclient"><span
|
|
class="header-section-number">1.12.6</span> 11.6 UDSClient</h3>
|
|
<p><strong>Propósito</strong>: Integración con UDS (Universal Desktop
|
|
Services).</p>
|
|
<p><strong>Funcionalidad</strong>: - Autenticación con UDS - Obtención
|
|
de service pools - Cálculo de asientos disponibles - Gestión de
|
|
calendarios remotos</p>
|
|
<h3 data-number="1.12.7" id="tracecreateservice"><span
|
|
class="header-section-number">1.12.7</span> 11.7
|
|
Trace/CreateService</h3>
|
|
<p><strong>Propósito</strong>: Servicio especializado para creación de
|
|
trazas.</p>
|
|
<p><strong>Funcionalidad</strong>: - Validación de parámetros de entrada
|
|
- Creación de trazas individuales o masivas</p>
|
|
<h3 data-number="1.12.8" id="utilsgetpartitioncodeservice"><span
|
|
class="header-section-number">1.12.8</span> 11.8
|
|
Utils/GetPartitionCodeService</h3>
|
|
<p><strong>Propósito</strong>: Obtener código de partición según tipo y
|
|
filesystem.</p>
|
|
<h3 data-number="1.12.9" id="utilssimplifyoglivefilenameservice"><span
|
|
class="header-section-number">1.12.9</span> 11.9
|
|
Utils/SimplifyOgLiveFilenameService</h3>
|
|
<p><strong>Propósito</strong>: Simplificar nombres de archivos OgLive
|
|
para mostrar al usuario.</p>
|
|
<h3 data-number="1.12.10"
|
|
id="utilsgetipaddressandnetmaskfromcidrservice"><span
|
|
class="header-section-number">1.12.10</span> 11.10
|
|
Utils/GetIpAddressAndNetmaskFromCIDRService</h3>
|
|
<p><strong>Propósito</strong>: Convertir notación CIDR a IP y máscara de
|
|
red.</p>
|
|
<hr />
|
|
<h2 data-number="1.13" id="comandos-de-consola"><span
|
|
class="header-section-number">1.13</span> 12. Comandos de Consola</h2>
|
|
<p>ogCore incluye <strong>18 comandos de consola</strong> para tareas
|
|
administrativas:</p>
|
|
<h3 data-number="1.13.1" id="comandos-de-inicialización"><span
|
|
class="header-section-number">1.13.1</span> 12.1 Comandos de
|
|
Inicialización</h3>
|
|
<h4 data-number="1.13.1.1"
|
|
id="cargar-grupos-de-usuario-por-defecto"><span
|
|
class="header-section-number">1.13.1.1</span> 12.1.1 Cargar Grupos de
|
|
Usuario por Defecto</h4>
|
|
<div class="sourceCode" id="cb30"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb30-1"><a href="#cb30-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:load-default-user-groups</span></code></pre></div>
|
|
<p>Crea los grupos de usuarios predeterminados del sistema.</p>
|
|
<h4 data-number="1.13.1.2" id="cargar-comandos-por-defecto"><span
|
|
class="header-section-number">1.13.1.2</span> 12.1.2 Cargar Comandos por
|
|
Defecto</h4>
|
|
<div class="sourceCode" id="cb31"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb31-1"><a href="#cb31-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:load-default-commands</span></code></pre></div>
|
|
<p>Carga los comandos básicos del sistema.</p>
|
|
<h4 data-number="1.13.1.3" id="cargar-usuario-admin"><span
|
|
class="header-section-number">1.13.1.3</span> 12.1.3 Cargar Usuario
|
|
Admin</h4>
|
|
<div class="sourceCode" id="cb32"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb32-1"><a href="#cb32-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:load-default-user-admin</span></code></pre></div>
|
|
<p>Crea el usuario administrador por defecto.</p>
|
|
<h4 data-number="1.13.1.4" id="cargar-menú-por-defecto"><span
|
|
class="header-section-number">1.13.1.4</span> 12.1.4 Cargar Menú por
|
|
Defecto</h4>
|
|
<div class="sourceCode" id="cb33"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb33-1"><a href="#cb33-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:load-default-menu</span></code></pre></div>
|
|
<p>Carga menús de arranque predeterminados.</p>
|
|
<h4 data-number="1.13.1.5" id="cargar-tipos-de-hardware"><span
|
|
class="header-section-number">1.13.1.5</span> 12.1.5 Cargar Tipos de
|
|
Hardware</h4>
|
|
<div class="sourceCode" id="cb34"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb34-1"><a href="#cb34-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:load-hardware-types</span></code></pre></div>
|
|
<p>Inicializa la tabla de tipos de hardware.</p>
|
|
<h4 data-number="1.13.1.6"
|
|
id="cargar-unidad-organizativa-por-defecto"><span
|
|
class="header-section-number">1.13.1.6</span> 12.1.6 Cargar Unidad
|
|
Organizativa por Defecto</h4>
|
|
<div class="sourceCode" id="cb35"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb35-1"><a href="#cb35-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:load-organizational-unit-default</span></code></pre></div>
|
|
<p>Crea la unidad organizativa raíz.</p>
|
|
<h3 data-number="1.13.2" id="comandos-de-operación"><span
|
|
class="header-section-number">1.13.2</span> 12.2 Comandos de
|
|
Operación</h3>
|
|
<h4 data-number="1.13.2.1"
|
|
id="verificar-disponibilidad-de-clientes"><span
|
|
class="header-section-number">1.13.2.1</span> 12.2.1 Verificar
|
|
Disponibilidad de Clientes</h4>
|
|
<div class="sourceCode" id="cb36"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb36-1"><a href="#cb36-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:check-client-availability</span></code></pre></div>
|
|
<p><strong>Ejecución</strong>: Cada 1 minuto (cron)</p>
|
|
<p>Verifica el estado de conectividad de los clientes y actualiza su
|
|
estado si no responden en un tiempo determinado.</p>
|
|
<h4 data-number="1.13.2.2" id="ejecutar-trazas-pendientes"><span
|
|
class="header-section-number">1.13.2.2</span> 12.2.2 Ejecutar Trazas
|
|
Pendientes</h4>
|
|
<div class="sourceCode" id="cb37"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb37-1"><a href="#cb37-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:execute-pending-traces</span></code></pre></div>
|
|
<p><strong>Ejecución</strong>: Cada 1 minuto (cron)</p>
|
|
<p>Procesa las trazas en estado <code>PENDING</code> y las ejecuta en
|
|
los clientes correspondientes.</p>
|
|
<h4 data-number="1.13.2.3" id="ejecutar-tareas-programadas"><span
|
|
class="header-section-number">1.13.2.3</span> 12.2.3 Ejecutar Tareas
|
|
Programadas</h4>
|
|
<div class="sourceCode" id="cb38"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb38-1"><a href="#cb38-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:run-scheduled-command-tasks</span></code></pre></div>
|
|
<p><strong>Ejecución</strong>: Cada 1 minuto (cron)</p>
|
|
<p>Ejecuta tareas programadas que han llegado a su hora de
|
|
ejecución.</p>
|
|
<h3 data-number="1.13.3" id="comandos-de-migración"><span
|
|
class="header-section-number">1.13.3</span> 12.3 Comandos de
|
|
Migración</h3>
|
|
<p>Comandos para migrar datos desde OpenGnsys 1.1:</p>
|
|
<h4 data-number="1.13.3.1" id="migrar-unidades-organizativas"><span
|
|
class="header-section-number">1.13.3.1</span> 12.3.1 Migrar Unidades
|
|
Organizativas</h4>
|
|
<div class="sourceCode" id="cb39"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb39-1"><a href="#cb39-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:organizational-unit</span></code></pre></div>
|
|
<h4 data-number="1.13.3.2" id="migrar-perfiles-de-hardware"><span
|
|
class="header-section-number">1.13.3.2</span> 12.3.2 Migrar Perfiles de
|
|
Hardware</h4>
|
|
<div class="sourceCode" id="cb40"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb40-1"><a href="#cb40-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:hardware-profile</span></code></pre></div>
|
|
<h4 data-number="1.13.3.3" id="migrar-clientes"><span
|
|
class="header-section-number">1.13.3.3</span> 12.3.3 Migrar
|
|
Clientes</h4>
|
|
<div class="sourceCode" id="cb41"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb41-1"><a href="#cb41-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:clients</span></code></pre></div>
|
|
<h4 data-number="1.13.3.4" id="migrar-sistemas-operativos"><span
|
|
class="header-section-number">1.13.3.4</span> 12.3.4 Migrar Sistemas
|
|
Operativos</h4>
|
|
<div class="sourceCode" id="cb42"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb42-1"><a href="#cb42-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:os</span></code></pre></div>
|
|
<h4 data-number="1.13.3.5" id="migrar-imágenes"><span
|
|
class="header-section-number">1.13.3.5</span> 12.3.5 Migrar
|
|
Imágenes</h4>
|
|
<div class="sourceCode" id="cb43"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb43-1"><a href="#cb43-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:image</span></code></pre></div>
|
|
<h4 data-number="1.13.3.6" id="migrar-perfiles-de-software"><span
|
|
class="header-section-number">1.13.3.6</span> 12.3.6 Migrar Perfiles de
|
|
Software</h4>
|
|
<div class="sourceCode" id="cb44"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb44-1"><a href="#cb44-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:software-profile</span></code></pre></div>
|
|
<h4 data-number="1.13.3.7" id="migrar-particiones-de-clientes"><span
|
|
class="header-section-number">1.13.3.7</span> 12.3.7 Migrar Particiones
|
|
de Clientes</h4>
|
|
<div class="sourceCode" id="cb45"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb45-1"><a href="#cb45-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console opengnsys:migration:partition-client</span></code></pre></div>
|
|
<h3 data-number="1.13.4" id="comandos-de-desarrollo"><span
|
|
class="header-section-number">1.13.4</span> 12.4 Comandos de
|
|
Desarrollo</h3>
|
|
<h4 data-number="1.13.4.1" id="crear-repositorios-de-imágenes"><span
|
|
class="header-section-number">1.13.4.1</span> 12.4.1 Crear Repositorios
|
|
de Imágenes</h4>
|
|
<div class="sourceCode" id="cb46"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb46-1"><a href="#cb46-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:create-image-repositories</span></code></pre></div>
|
|
<p>Crea repositorios de imágenes para desarrollo/testing.</p>
|
|
<h4 data-number="1.13.4.2" id="cargar-trazas-de-ejemplo"><span
|
|
class="header-section-number">1.13.4.2</span> 12.4.2 Cargar Trazas de
|
|
Ejemplo</h4>
|
|
<div class="sourceCode" id="cb47"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb47-1"><a href="#cb47-1" aria-hidden="true" tabindex="-1"></a><span class="ex">php</span> bin/console app:charge-example-trace</span></code></pre></div>
|
|
<p>Carga trazas de ejemplo para testing.</p>
|
|
<h3 data-number="1.13.5" id="configuración-de-cron"><span
|
|
class="header-section-number">1.13.5</span> 12.5 Configuración de
|
|
Cron</h3>
|
|
<p>Agregar al crontab:</p>
|
|
<div class="sourceCode" id="cb48"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb48-1"><a href="#cb48-1" aria-hidden="true" tabindex="-1"></a><span class="ex">*</span> <span class="pp">*</span> <span class="pp">*</span> <span class="pp">*</span> <span class="pp">*</span> docker exec ogcore-php php bin/console app:check-client-availability</span>
|
|
<span id="cb48-2"><a href="#cb48-2" aria-hidden="true" tabindex="-1"></a><span class="ex">*</span> <span class="pp">*</span> <span class="pp">*</span> <span class="pp">*</span> <span class="pp">*</span> docker exec ogcore-php php bin/console app:execute-pending-traces</span>
|
|
<span id="cb48-3"><a href="#cb48-3" aria-hidden="true" tabindex="-1"></a><span class="ex">*</span> <span class="pp">*</span> <span class="pp">*</span> <span class="pp">*</span> <span class="pp">*</span> docker exec ogcore-php php bin/console app:run-scheduled-command-tasks</span></code></pre></div>
|
|
<hr />
|
|
<h2 data-number="1.14" id="migraciones-de-datos"><span
|
|
class="header-section-number">1.14</span> 13. Migraciones de Datos</h2>
|
|
<h3 data-number="1.14.1" id="sistema-de-migraciones-de-doctrine"><span
|
|
class="header-section-number">1.14.1</span> 13.1 Sistema de Migraciones
|
|
de Doctrine</h3>
|
|
<p>ogCore utiliza Doctrine Migrations para gestionar cambios en el
|
|
esquema de base de datos.</p>
|
|
<h4 data-number="1.14.1.1" id="crear-una-migración"><span
|
|
class="header-section-number">1.14.1.1</span> 13.1.1 Crear una
|
|
Migración</h4>
|
|
<div class="sourceCode" id="cb49"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb49-1"><a href="#cb49-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console make:migration</span></code></pre></div>
|
|
<h4 data-number="1.14.1.2" id="ejecutar-migraciones"><span
|
|
class="header-section-number">1.14.1.2</span> 13.1.2 Ejecutar
|
|
Migraciones</h4>
|
|
<div class="sourceCode" id="cb50"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb50-1"><a href="#cb50-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:migrations:migrate</span></code></pre></div>
|
|
<h4 data-number="1.14.1.3" id="ver-estado-de-migraciones"><span
|
|
class="header-section-number">1.14.1.3</span> 13.1.3 Ver Estado de
|
|
Migraciones</h4>
|
|
<div class="sourceCode" id="cb51"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb51-1"><a href="#cb51-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:migrations:status</span></code></pre></div>
|
|
<h4 data-number="1.14.1.4" id="revertir-migración"><span
|
|
class="header-section-number">1.14.1.4</span> 13.1.4 Revertir
|
|
Migración</h4>
|
|
<div class="sourceCode" id="cb52"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb52-1"><a href="#cb52-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:migrations:migrate prev</span></code></pre></div>
|
|
<h3 data-number="1.14.2" id="migración-desde-opengnsys-1.1"><span
|
|
class="header-section-number">1.14.2</span> 13.2 Migración desde
|
|
OpenGnsys 1.1</h3>
|
|
<p>Para migrar datos desde una instalación de OpenGnsys 1.1:</p>
|
|
<h4 data-number="1.14.2.1" id="crear-base-de-datos-temporal"><span
|
|
class="header-section-number">1.14.2.1</span> 13.2.1 Crear Base de Datos
|
|
Temporal</h4>
|
|
<div class="sourceCode" id="cb53"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb53-1"><a href="#cb53-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:database:create <span class="at">--connection</span><span class="op">=</span>og_1</span></code></pre></div>
|
|
<h4 data-number="1.14.2.2" id="cargar-dump-de-opengnsys-1.1"><span
|
|
class="header-section-number">1.14.2.2</span> 13.2.2 Cargar Dump de
|
|
OpenGnsys 1.1</h4>
|
|
<div class="sourceCode" id="cb54"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb54-1"><a href="#cb54-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec <span class="at">-i</span> ogcore-database mysql <span class="at">-u</span> user <span class="at">-p</span> ogcore_old_og <span class="op"><</span> dump_og_1.1.sql</span></code></pre></div>
|
|
<h4 data-number="1.14.2.3" id="ejecutar-migraciones-1"><span
|
|
class="header-section-number">1.14.2.3</span> 13.2.3 Ejecutar
|
|
Migraciones</h4>
|
|
<p>Ejecutar los comandos de migración en orden:</p>
|
|
<div class="sourceCode" id="cb55"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb55-1"><a href="#cb55-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console opengnsys:migration:organizational-unit</span>
|
|
<span id="cb55-2"><a href="#cb55-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console opengnsys:migration:hardware-profile</span>
|
|
<span id="cb55-3"><a href="#cb55-3" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console opengnsys:migration:clients</span>
|
|
<span id="cb55-4"><a href="#cb55-4" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console opengnsys:migration:os</span>
|
|
<span id="cb55-5"><a href="#cb55-5" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console opengnsys:migration:image</span>
|
|
<span id="cb55-6"><a href="#cb55-6" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console opengnsys:migration:software-profile</span></code></pre></div>
|
|
<h3 data-number="1.14.3" id="backup-y-restauración"><span
|
|
class="header-section-number">1.14.3</span> 13.3 Backup y
|
|
Restauración</h3>
|
|
<h4 data-number="1.14.3.1" id="backup-de-base-de-datos"><span
|
|
class="header-section-number">1.14.3.1</span> 13.3.1 Backup de Base de
|
|
Datos</h4>
|
|
<div class="sourceCode" id="cb56"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb56-1"><a href="#cb56-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-database mysqldump <span class="at">-u</span> user <span class="at">-p</span> ogcore <span class="op">></span> backup_<span class="va">$(</span><span class="fu">date</span> +%Y%m%d<span class="va">)</span>.sql</span></code></pre></div>
|
|
<h4 data-number="1.14.3.2" id="restaurar-base-de-datos"><span
|
|
class="header-section-number">1.14.3.2</span> 13.3.2 Restaurar Base de
|
|
Datos</h4>
|
|
<div class="sourceCode" id="cb57"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb57-1"><a href="#cb57-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec <span class="at">-i</span> ogcore-database mysql <span class="at">-u</span> user <span class="at">-p</span> ogcore <span class="op"><</span> backup_20251008.sql</span></code></pre></div>
|
|
<hr />
|
|
<h2 data-number="1.15" id="testing-1"><span
|
|
class="header-section-number">1.15</span> 14. Testing</h2>
|
|
<h3 data-number="1.15.1" id="framework-de-testing"><span
|
|
class="header-section-number">1.15.1</span> 14.1 Framework de
|
|
Testing</h3>
|
|
<p>ogCore utiliza <strong>PHPUnit</strong> con integración de Symfony y
|
|
Doctrine.</p>
|
|
<h3 data-number="1.15.2" id="ejecutar-tests"><span
|
|
class="header-section-number">1.15.2</span> 14.2 Ejecutar Tests</h3>
|
|
<h4 data-number="1.15.2.1" id="todos-los-tests"><span
|
|
class="header-section-number">1.15.2.1</span> 14.2.1 Todos los
|
|
Tests</h4>
|
|
<div class="sourceCode" id="cb58"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb58-1"><a href="#cb58-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose exec php bin/phpunit</span></code></pre></div>
|
|
<h4 data-number="1.15.2.2" id="tests-específicos"><span
|
|
class="header-section-number">1.15.2.2</span> 14.2.2 Tests
|
|
Específicos</h4>
|
|
<div class="sourceCode" id="cb59"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb59-1"><a href="#cb59-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose exec php bin/phpunit tests/Functional/ClientTest.php</span></code></pre></div>
|
|
<h4 data-number="1.15.2.3" id="tests-con-coverage"><span
|
|
class="header-section-number">1.15.2.3</span> 14.2.3 Tests con
|
|
Coverage</h4>
|
|
<div class="sourceCode" id="cb60"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb60-1"><a href="#cb60-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose exec php bin/phpunit <span class="at">--coverage-html</span> coverage/</span></code></pre></div>
|
|
<h3 data-number="1.15.3" id="tipos-de-tests"><span
|
|
class="header-section-number">1.15.3</span> 14.3 Tipos de Tests</h3>
|
|
<h4 data-number="1.15.3.1" id="tests-funcionales"><span
|
|
class="header-section-number">1.15.3.1</span> 14.3.1 Tests
|
|
Funcionales</h4>
|
|
<p>Ubicación: <code>tests/Functional/</code></p>
|
|
<p>20 archivos de tests funcionales que prueban: - Endpoints de API -
|
|
Flujos completos - Integraciones</p>
|
|
<p>Ejemplo:</p>
|
|
<div class="sourceCode" id="cb61"><pre
|
|
class="sourceCode php"><code class="sourceCode php"><span id="cb61-1"><a href="#cb61-1" aria-hidden="true" tabindex="-1"></a><span class="kw">public</span> <span class="kw">function</span> testCreateClient()<span class="ot">:</span> <span class="dt">void</span></span>
|
|
<span id="cb61-2"><a href="#cb61-2" aria-hidden="true" tabindex="-1"></a>{</span>
|
|
<span id="cb61-3"><a href="#cb61-3" aria-hidden="true" tabindex="-1"></a> <span class="va">$client</span> <span class="op">=</span> <span class="kw">static</span>::createClient()<span class="ot">;</span></span>
|
|
<span id="cb61-4"><a href="#cb61-4" aria-hidden="true" tabindex="-1"></a> <span class="va">$client</span>->request(<span class="st">'POST'</span><span class="ot">,</span> <span class="st">'/clients'</span><span class="ot">,</span> [</span>
|
|
<span id="cb61-5"><a href="#cb61-5" aria-hidden="true" tabindex="-1"></a> <span class="st">'json'</span> => [</span>
|
|
<span id="cb61-6"><a href="#cb61-6" aria-hidden="true" tabindex="-1"></a> <span class="st">'name'</span> => <span class="st">'Test Client'</span><span class="ot">,</span></span>
|
|
<span id="cb61-7"><a href="#cb61-7" aria-hidden="true" tabindex="-1"></a> <span class="st">'mac'</span> => <span class="st">'00:11:22:33:44:55'</span><span class="ot">,</span></span>
|
|
<span id="cb61-8"><a href="#cb61-8" aria-hidden="true" tabindex="-1"></a> <span class="st">'ip'</span> => <span class="st">'192.168.1.100'</span></span>
|
|
<span id="cb61-9"><a href="#cb61-9" aria-hidden="true" tabindex="-1"></a> ]</span>
|
|
<span id="cb61-10"><a href="#cb61-10" aria-hidden="true" tabindex="-1"></a> ])<span class="ot">;</span></span>
|
|
<span id="cb61-11"><a href="#cb61-11" aria-hidden="true" tabindex="-1"></a> </span>
|
|
<span id="cb61-12"><a href="#cb61-12" aria-hidden="true" tabindex="-1"></a> <span class="va">$this</span>->assertResponseStatusCodeSame(<span class="dv">201</span>)<span class="ot">;</span></span>
|
|
<span id="cb61-13"><a href="#cb61-13" aria-hidden="true" tabindex="-1"></a>}</span></code></pre></div>
|
|
<h3 data-number="1.15.4" id="factories-para-testing"><span
|
|
class="header-section-number">1.15.4</span> 14.4 Factories para
|
|
Testing</h3>
|
|
<p>Se utilizan <strong>Zenstruck Foundry</strong> factories (24
|
|
factories) para crear datos de prueba:</p>
|
|
<div class="sourceCode" id="cb62"><pre
|
|
class="sourceCode php"><code class="sourceCode php"><span id="cb62-1"><a href="#cb62-1" aria-hidden="true" tabindex="-1"></a><span class="cn">C</span>lientFactory::createOne([</span>
|
|
<span id="cb62-2"><a href="#cb62-2" aria-hidden="true" tabindex="-1"></a> <span class="st">'name'</span> => <span class="st">'Test PC'</span><span class="ot">,</span></span>
|
|
<span id="cb62-3"><a href="#cb62-3" aria-hidden="true" tabindex="-1"></a> <span class="st">'status'</span> => <span class="st">'active'</span></span>
|
|
<span id="cb62-4"><a href="#cb62-4" aria-hidden="true" tabindex="-1"></a>])<span class="ot">;</span></span></code></pre></div>
|
|
<h3 data-number="1.15.5" id="base-de-datos-de-testing"><span
|
|
class="header-section-number">1.15.5</span> 14.5 Base de Datos de
|
|
Testing</h3>
|
|
<p>Los tests utilizan <strong>DAMA Doctrine Test Bundle</strong> para: -
|
|
Ejecutar cada test en una transacción - Rollback automático después de
|
|
cada test - Aislamiento completo entre tests</p>
|
|
<hr />
|
|
<h2 data-number="1.16" id="despliegue"><span
|
|
class="header-section-number">1.16</span> 15. Despliegue</h2>
|
|
<h3 data-number="1.16.1" id="despliegue-con-docker-compose"><span
|
|
class="header-section-number">1.16.1</span> 15.1 Despliegue con Docker
|
|
Compose</h3>
|
|
<h4 data-number="1.16.1.1" id="desarrollo-1"><span
|
|
class="header-section-number">1.16.1.1</span> 15.1.1 Desarrollo</h4>
|
|
<div class="sourceCode" id="cb63"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb63-1"><a href="#cb63-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose up <span class="at">-d</span></span></code></pre></div>
|
|
<h4 data-number="1.16.1.2" id="producción"><span
|
|
class="header-section-number">1.16.1.2</span> 15.1.2 Producción</h4>
|
|
<div class="sourceCode" id="cb64"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb64-1"><a href="#cb64-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> compose <span class="at">-f</span> docker-compose-deploy.yml up <span class="at">-d</span></span></code></pre></div>
|
|
<h3 data-number="1.16.2" id="despliegue-con-jenkins"><span
|
|
class="header-section-number">1.16.2</span> 15.2 Despliegue con
|
|
Jenkins</h3>
|
|
<p>El proyecto incluye <strong>Jenkinsfile</strong> para CI/CD.</p>
|
|
<h4 data-number="1.16.2.1" id="pipeline-stages"><span
|
|
class="header-section-number">1.16.2.1</span> Pipeline stages:</h4>
|
|
<ol type="1">
|
|
<li><strong>Checkout</strong>: Clonar repositorio</li>
|
|
<li><strong>Build</strong>: Construir imagen Docker</li>
|
|
<li><strong>Test</strong>: Ejecutar tests</li>
|
|
<li><strong>Package</strong>: Crear paquete Debian</li>
|
|
<li><strong>Deploy</strong>: Desplegar en servidor</li>
|
|
</ol>
|
|
<h3 data-number="1.16.3" id="paquete-debian"><span
|
|
class="header-section-number">1.16.3</span> 15.3 Paquete Debian</h3>
|
|
<p>El proyecto puede empaquetarse como <code>.deb</code>:</p>
|
|
<div class="sourceCode" id="cb65"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb65-1"><a href="#cb65-1" aria-hidden="true" tabindex="-1"></a><span class="ex">./package.sh</span></span></code></pre></div>
|
|
<p>Estructura del paquete en <code>debian/</code>: - Control files -
|
|
Postinst/preinst scripts - Systemd service file - Configuración</p>
|
|
<h3 data-number="1.16.4" id="configuración-de-producción"><span
|
|
class="header-section-number">1.16.4</span> 15.4 Configuración de
|
|
Producción</h3>
|
|
<h4 data-number="1.16.4.1" id="variables-de-entorno-1"><span
|
|
class="header-section-number">1.16.4.1</span> 15.4.1 Variables de
|
|
Entorno</h4>
|
|
<p>Crear <code>.env.local</code> con configuración de producción:</p>
|
|
<div class="sourceCode" id="cb66"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb66-1"><a href="#cb66-1" aria-hidden="true" tabindex="-1"></a><span class="va">APP_ENV</span><span class="op">=</span>prod</span>
|
|
<span id="cb66-2"><a href="#cb66-2" aria-hidden="true" tabindex="-1"></a><span class="va">APP_DEBUG</span><span class="op">=</span>0</span>
|
|
<span id="cb66-3"><a href="#cb66-3" aria-hidden="true" tabindex="-1"></a><span class="va">DATABASE_URL</span><span class="op">=</span><span class="st">"mysql://user:pass@localhost:3306/ogcore"</span></span>
|
|
<span id="cb66-4"><a href="#cb66-4" aria-hidden="true" tabindex="-1"></a><span class="co"># ... más configuración</span></span></code></pre></div>
|
|
<h4 data-number="1.16.4.2" id="optimizaciones"><span
|
|
class="header-section-number">1.16.4.2</span> 15.4.2 Optimizaciones</h4>
|
|
<div class="sourceCode" id="cb67"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb67-1"><a href="#cb67-1" aria-hidden="true" tabindex="-1"></a><span class="co"># Limpiar caché</span></span>
|
|
<span id="cb67-2"><a href="#cb67-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console cache:clear <span class="at">--env</span><span class="op">=</span>prod</span>
|
|
<span id="cb67-3"><a href="#cb67-3" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb67-4"><a href="#cb67-4" aria-hidden="true" tabindex="-1"></a><span class="co"># Calentar caché</span></span>
|
|
<span id="cb67-5"><a href="#cb67-5" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console cache:warmup <span class="at">--env</span><span class="op">=</span>prod</span>
|
|
<span id="cb67-6"><a href="#cb67-6" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb67-7"><a href="#cb67-7" aria-hidden="true" tabindex="-1"></a><span class="co"># Optimizar autoloader</span></span>
|
|
<span id="cb67-8"><a href="#cb67-8" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php composer dump-autoload <span class="at">--optimize</span> <span class="at">--classmap-authoritative</span></span></code></pre></div>
|
|
<h3 data-number="1.16.5" id="monitoreo"><span
|
|
class="header-section-number">1.16.5</span> 15.5 Monitoreo</h3>
|
|
<h4 data-number="1.16.5.1" id="logs"><span
|
|
class="header-section-number">1.16.5.1</span> 15.5.1 Logs</h4>
|
|
<p>Logs ubicados en <code>var/log/</code>: - <code>dev.log</code> /
|
|
<code>prod.log</code>: Logs de aplicación -
|
|
<code>nginx/access.log</code>: Accesos a nginx -
|
|
<code>nginx/error.log</code>: Errores de nginx</p>
|
|
<h4 data-number="1.16.5.2" id="syslog"><span
|
|
class="header-section-number">1.16.5.2</span> 15.5.2 Syslog</h4>
|
|
<p>Los logs también se envían a syslog para centralización.</p>
|
|
<h3 data-number="1.16.6" id="escalabilidad"><span
|
|
class="header-section-number">1.16.6</span> 15.6 Escalabilidad</h3>
|
|
<p>Para escalar horizontalmente:</p>
|
|
<ol type="1">
|
|
<li><strong>Base de datos</strong>: Usar MariaDB con replicación
|
|
master-slave</li>
|
|
<li><strong>PHP</strong>: Aumentar réplicas de contenedor PHP</li>
|
|
<li><strong>Load Balancer</strong>: Usar nginx como balanceador de
|
|
carga</li>
|
|
<li><strong>Caché</strong>: Implementar Redis para sesiones y caché</li>
|
|
<li><strong>Mercure</strong>: Escalar hub de Mercure</li>
|
|
</ol>
|
|
<hr />
|
|
<h2 data-number="1.17" id="mantenimiento-y-operaciones"><span
|
|
class="header-section-number">1.17</span> 16. Mantenimiento y
|
|
Operaciones</h2>
|
|
<h3 data-number="1.17.1" id="reiniciar-base-de-datos"><span
|
|
class="header-section-number">1.17.1</span> 16.1 Reiniciar Base de
|
|
Datos</h3>
|
|
<div class="sourceCode" id="cb68"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb68-1"><a href="#cb68-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:database:drop <span class="at">--force</span></span>
|
|
<span id="cb68-2"><a href="#cb68-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:database:create</span>
|
|
<span id="cb68-3"><a href="#cb68-3" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:migrations:migrate <span class="at">--no-interaction</span></span>
|
|
<span id="cb68-4"><a href="#cb68-4" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console doctrine:fixtures:load <span class="at">--no-interaction</span></span></code></pre></div>
|
|
<h3 data-number="1.17.2" id="limpiar-caché"><span
|
|
class="header-section-number">1.17.2</span> 16.2 Limpiar Caché</h3>
|
|
<div class="sourceCode" id="cb69"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb69-1"><a href="#cb69-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console cache:clear</span>
|
|
<span id="cb69-2"><a href="#cb69-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console cache:warmup</span></code></pre></div>
|
|
<h3 data-number="1.17.3" id="actualizar-dependencias"><span
|
|
class="header-section-number">1.17.3</span> 16.3 Actualizar
|
|
Dependencias</h3>
|
|
<div class="sourceCode" id="cb70"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb70-1"><a href="#cb70-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php composer update</span></code></pre></div>
|
|
<h3 data-number="1.17.4" id="regenerar-claves-jwt"><span
|
|
class="header-section-number">1.17.4</span> 16.4 Regenerar Claves
|
|
JWT</h3>
|
|
<div class="sourceCode" id="cb71"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb71-1"><a href="#cb71-1" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php bin/console lexik:jwt:generate-keypair <span class="at">--overwrite</span></span></code></pre></div>
|
|
<h3 data-number="1.17.5" id="backups-automáticos"><span
|
|
class="header-section-number">1.17.5</span> 16.5 Backups
|
|
Automáticos</h3>
|
|
<p>Script ejemplo para backup automático:</p>
|
|
<div class="sourceCode" id="cb72"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb72-1"><a href="#cb72-1" aria-hidden="true" tabindex="-1"></a><span class="co">#!/bin/bash</span></span>
|
|
<span id="cb72-2"><a href="#cb72-2" aria-hidden="true" tabindex="-1"></a><span class="va">DATE</span><span class="op">=</span><span class="va">$(</span><span class="fu">date</span> +%Y%m%d_%H%M%S<span class="va">)</span></span>
|
|
<span id="cb72-3"><a href="#cb72-3" aria-hidden="true" tabindex="-1"></a><span class="va">BACKUP_DIR</span><span class="op">=</span><span class="st">"/backups"</span></span>
|
|
<span id="cb72-4"><a href="#cb72-4" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb72-5"><a href="#cb72-5" aria-hidden="true" tabindex="-1"></a><span class="co"># Backup de base de datos</span></span>
|
|
<span id="cb72-6"><a href="#cb72-6" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-database mysqldump <span class="at">-u</span> user <span class="at">-p</span> password ogcore <span class="op">></span> <span class="va">$BACKUP_DIR</span>/db_<span class="va">$DATE</span>.sql</span>
|
|
<span id="cb72-7"><a href="#cb72-7" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb72-8"><a href="#cb72-8" aria-hidden="true" tabindex="-1"></a><span class="co"># Backup de archivos</span></span>
|
|
<span id="cb72-9"><a href="#cb72-9" aria-hidden="true" tabindex="-1"></a><span class="fu">tar</span> <span class="at">-czf</span> <span class="va">$BACKUP_DIR</span>/files_<span class="va">$DATE</span>.tar.gz /var/www/html/ogcore/var</span>
|
|
<span id="cb72-10"><a href="#cb72-10" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb72-11"><a href="#cb72-11" aria-hidden="true" tabindex="-1"></a><span class="co"># Limpiar backups antiguos (>30 días)</span></span>
|
|
<span id="cb72-12"><a href="#cb72-12" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> <span class="va">$BACKUP_DIR</span> <span class="at">-name</span> <span class="st">"*.sql"</span> <span class="at">-mtime</span> +30 <span class="at">-delete</span></span>
|
|
<span id="cb72-13"><a href="#cb72-13" aria-hidden="true" tabindex="-1"></a><span class="fu">find</span> <span class="va">$BACKUP_DIR</span> <span class="at">-name</span> <span class="st">"*.tar.gz"</span> <span class="at">-mtime</span> +30 <span class="at">-delete</span></span></code></pre></div>
|
|
<h3 data-number="1.17.6" id="monitoreo-de-salud"><span
|
|
class="header-section-number">1.17.6</span> 16.6 Monitoreo de Salud</h3>
|
|
<h4 data-number="1.17.6.1" id="health-check-endpoint"><span
|
|
class="header-section-number">1.17.6.1</span> Health Check Endpoint</h4>
|
|
<div class="sourceCode" id="cb73"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb73-1"><a href="#cb73-1" aria-hidden="true" tabindex="-1"></a><span class="ex">GET</span> /health</span></code></pre></div>
|
|
<h4 data-number="1.17.6.2" id="verificar-estado-de-servicios"><span
|
|
class="header-section-number">1.17.6.2</span> Verificar Estado de
|
|
Servicios</h4>
|
|
<div class="sourceCode" id="cb74"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb74-1"><a href="#cb74-1" aria-hidden="true" tabindex="-1"></a><span class="co"># PHP</span></span>
|
|
<span id="cb74-2"><a href="#cb74-2" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-php php <span class="at">-v</span></span>
|
|
<span id="cb74-3"><a href="#cb74-3" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb74-4"><a href="#cb74-4" aria-hidden="true" tabindex="-1"></a><span class="co"># Nginx</span></span>
|
|
<span id="cb74-5"><a href="#cb74-5" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-nginx nginx <span class="at">-t</span></span>
|
|
<span id="cb74-6"><a href="#cb74-6" aria-hidden="true" tabindex="-1"></a></span>
|
|
<span id="cb74-7"><a href="#cb74-7" aria-hidden="true" tabindex="-1"></a><span class="co"># MariaDB</span></span>
|
|
<span id="cb74-8"><a href="#cb74-8" aria-hidden="true" tabindex="-1"></a><span class="ex">docker</span> exec ogcore-database mysqladmin <span class="at">-u</span> user <span class="at">-p</span> status</span></code></pre></div>
|
|
<h3 data-number="1.17.7" id="rotación-de-logs"><span
|
|
class="header-section-number">1.17.7</span> 16.7 Rotación de Logs</h3>
|
|
<p>Configurar logrotate:</p>
|
|
<div class="sourceCode" id="cb75"><pre
|
|
class="sourceCode bash"><code class="sourceCode bash"><span id="cb75-1"><a href="#cb75-1" aria-hidden="true" tabindex="-1"></a><span class="ex">/var/www/html/ogcore/var/log/*.log</span> {</span>
|
|
<span id="cb75-2"><a href="#cb75-2" aria-hidden="true" tabindex="-1"></a> <span class="ex">daily</span></span>
|
|
<span id="cb75-3"><a href="#cb75-3" aria-hidden="true" tabindex="-1"></a> <span class="ex">rotate</span> 14</span>
|
|
<span id="cb75-4"><a href="#cb75-4" aria-hidden="true" tabindex="-1"></a> <span class="ex">compress</span></span>
|
|
<span id="cb75-5"><a href="#cb75-5" aria-hidden="true" tabindex="-1"></a> <span class="ex">delaycompress</span></span>
|
|
<span id="cb75-6"><a href="#cb75-6" aria-hidden="true" tabindex="-1"></a> <span class="ex">notifempty</span></span>
|
|
<span id="cb75-7"><a href="#cb75-7" aria-hidden="true" tabindex="-1"></a> <span class="ex">create</span> 0640 www-data www-data</span>
|
|
<span id="cb75-8"><a href="#cb75-8" aria-hidden="true" tabindex="-1"></a> <span class="ex">sharedscripts</span></span>
|
|
<span id="cb75-9"><a href="#cb75-9" aria-hidden="true" tabindex="-1"></a><span class="er">}</span></span></code></pre></div>
|
|
<hr />
|
|
<h2 data-number="1.18" id="integración-con-otros-servicios"><span
|
|
class="header-section-number">1.18</span> 17. Integración con Otros
|
|
Servicios</h2>
|
|
<h3 data-number="1.18.1" id="ogrepository"><span
|
|
class="header-section-number">1.18.1</span> 17.1 ogRepository</h3>
|
|
<p><strong>Propósito</strong>: Gestión de repositorios de imágenes.</p>
|
|
<p><strong>Endpoints integrados</strong>: - Crear imagen - Desplegar
|
|
imagen - Backup imagen - Eliminar imagen - Convertir a imagen virtual -
|
|
Importar imagen externa - Verificar integridad - Imagen global</p>
|
|
<p><strong>Webhook</strong>: <code>/og-repository/webhook</code></p>
|
|
<h3 data-number="1.18.2" id="ogdhcp"><span
|
|
class="header-section-number">1.18.2</span> 17.2 ogDhcp</h3>
|
|
<p><strong>Propósito</strong>: Gestión de DHCP dinámico.</p>
|
|
<p><strong>Funcionalidades</strong>: - Agregar clientes a DHCP -
|
|
Eliminar clientes de DHCP - Actualizar configuración - Gestión de
|
|
subredes</p>
|
|
<h3 data-number="1.18.3" id="ogboot"><span
|
|
class="header-section-number">1.18.3</span> 17.3 ogBoot</h3>
|
|
<p><strong>Propósito</strong>: Gestión de archivos de arranque PXE.</p>
|
|
<p><strong>Funcionalidades</strong>: - Crear archivos de arranque -
|
|
Actualizar plantillas PXE - Eliminar configuraciones - Sincronización de
|
|
menús</p>
|
|
<h3 data-number="1.18.4" id="ogagent"><span
|
|
class="header-section-number">1.18.4</span> 17.4 ogAgent</h3>
|
|
<p><strong>Propósito</strong>: Agente instalado en clientes para
|
|
ejecutar comandos.</p>
|
|
<p><strong>Operaciones</strong>: - Power on/off/reboot - Crear/desplegar
|
|
imágenes - Particionar discos - Ejecutar scripts - Obtener inventario
|
|
hardware - Verificar tamaño de particiones - Kill jobs</p>
|
|
<h3 data-number="1.18.5" id="uds-universal-desktop-services"><span
|
|
class="header-section-number">1.18.5</span> 17.5 UDS (Universal Desktop
|
|
Services)</h3>
|
|
<p><strong>Propósito</strong>: Integración con sistema de escritorios
|
|
remotos.</p>
|
|
<p><strong>Funcionalidades</strong>: - Autenticación - Obtener service
|
|
pools - Calcular disponibilidad - Gestión de reservas</p>
|
|
<h3 data-number="1.18.6" id="git-versionado-de-imágenes"><span
|
|
class="header-section-number">1.18.6</span> 17.6 Git (Versionado de
|
|
Imágenes)</h3>
|
|
<p><strong>Propósito</strong>: Versionado de imágenes con Git.</p>
|
|
<p><strong>Funcionalidades</strong>: - Backup a repositorio Git -
|
|
Versionado automático - Recuperación de versiones - Sincronización</p>
|
|
<h3 data-number="1.18.7"
|
|
id="mercure-notificaciones-en-tiempo-real"><span
|
|
class="header-section-number">1.18.7</span> 17.7 Mercure (Notificaciones
|
|
en Tiempo Real)</h3>
|
|
<p><strong>Propósito</strong>: Notificaciones push en tiempo real.</p>
|
|
<p><strong>Eventos publicados</strong>: - Cambio de estado de clientes -
|
|
Actualización de trazas - Cambios en comandos - Alertas y
|
|
notificaciones</p>
|
|
<p><strong>Suscripción del cliente</strong>:</p>
|
|
<div class="sourceCode" id="cb76"><pre
|
|
class="sourceCode javascript"><code class="sourceCode javascript"><span id="cb76-1"><a href="#cb76-1" aria-hidden="true" tabindex="-1"></a><span class="kw">const</span> eventSource <span class="op">=</span> <span class="kw">new</span> <span class="bu">EventSource</span>(<span class="st">'http://localhost:8080/.well-known/mercure?topic=/clients/{id}'</span>)<span class="op">;</span></span>
|
|
<span id="cb76-2"><a href="#cb76-2" aria-hidden="true" tabindex="-1"></a>eventSource<span class="op">.</span><span class="at">onmessage</span> <span class="op">=</span> <span class="bu">event</span> <span class="kw">=></span> {</span>
|
|
<span id="cb76-3"><a href="#cb76-3" aria-hidden="true" tabindex="-1"></a> <span class="kw">const</span> data <span class="op">=</span> <span class="bu">JSON</span><span class="op">.</span><span class="fu">parse</span>(<span class="bu">event</span><span class="op">.</span><span class="at">data</span>)<span class="op">;</span></span>
|
|
<span id="cb76-4"><a href="#cb76-4" aria-hidden="true" tabindex="-1"></a> <span class="bu">console</span><span class="op">.</span><span class="fu">log</span>(<span class="st">'Client updated:'</span><span class="op">,</span> data)<span class="op">;</span></span>
|
|
<span id="cb76-5"><a href="#cb76-5" aria-hidden="true" tabindex="-1"></a>}<span class="op">;</span></span></code></pre></div>
|
|
<hr />
|
|
<h2 data-number="1.19" id="roadmap-y-changelog"><span
|
|
class="header-section-number">1.19</span> 18. Roadmap y Changelog</h2>
|
|
<h3 data-number="1.19.1" id="versión-actual-0.5.0"><span
|
|
class="header-section-number">1.19.1</span> 18.1 Versión Actual:
|
|
0.5.0</h3>
|
|
<h3 data-number="1.19.2"
|
|
id="últimas-características-v0.25.1---octubre-2025"><span
|
|
class="header-section-number">1.19.2</span> 18.2 Últimas Características
|
|
(v0.25.1 - Octubre 2025)</h3>
|
|
<ul>
|
|
<li><strong>Tareas programadas</strong>: Sistema completo de colas y
|
|
scheduling</li>
|
|
<li><strong>Inventario hardware</strong>: Obtención automática de
|
|
inventario</li>
|
|
<li><strong>Clonado de imágenes</strong>: Mejoras en el servicio de
|
|
clonado</li>
|
|
<li><strong>Repositorios Git</strong>: Backup y gestión de
|
|
repositorios</li>
|
|
<li><strong>Particionado</strong>: Integración con agente para scripts
|
|
de particionado</li>
|
|
<li><strong>Gestión de trazas</strong>: Marcar como completadas,
|
|
cancelación</li>
|
|
<li><strong>Estados de cliente</strong>: Nuevo estado “enviado” para
|
|
Windows/Linux</li>
|
|
<li><strong>Validación de particiones</strong>: Comprobación de
|
|
tamaños</li>
|
|
<li><strong>Imagen versionada</strong>: Sistema de versionado de
|
|
imágenes</li>
|
|
<li><strong>Calendario remoto</strong>: Integración con UDS</li>
|
|
<li><strong>Mercure</strong>: Notificaciones en tiempo real</li>
|
|
<li><strong>Despliegue multicast</strong>: Modos torrent y UDPCAST</li>
|
|
</ul>
|
|
<h3 data-number="1.19.3" id="próximas-características-roadmap"><span
|
|
class="header-section-number">1.19.3</span> 18.3 Próximas
|
|
Características (Roadmap)</h3>
|
|
<h4 data-number="1.19.3.1" id="v0.6.0-q4-2025"><span
|
|
class="header-section-number">1.19.3.1</span> v0.6.0 (Q4 2025)</h4>
|
|
<ul class="task-list">
|
|
<li><label><input type="checkbox" />Dashboard de administración
|
|
mejorado</label></li>
|
|
<li><label><input type="checkbox" />Reportes y estadísticas
|
|
avanzadas</label></li>
|
|
<li><label><input type="checkbox" />API GraphQL
|
|
complementaria</label></li>
|
|
<li><label><input type="checkbox" />Mejoras en rendimiento de
|
|
queries</label></li>
|
|
</ul>
|
|
<h4 data-number="1.19.3.2" id="v0.7.0-q1-2026"><span
|
|
class="header-section-number">1.19.3.2</span> v0.7.0 (Q1 2026)</h4>
|
|
<ul class="task-list">
|
|
<li><label><input type="checkbox" />Soporte para múltiples lenguajes
|
|
(i18n completo)</label></li>
|
|
<li><label><input type="checkbox" />Sistema de plugins</label></li>
|
|
<li><label><input type="checkbox" />Mejoras en clustering</label></li>
|
|
<li><label><input type="checkbox" />API de webhooks
|
|
salientes</label></li>
|
|
</ul>
|
|
<h4 data-number="1.19.3.3" id="v1.0.0-q2-2026"><span
|
|
class="header-section-number">1.19.3.3</span> v1.0.0 (Q2 2026)</h4>
|
|
<ul class="task-list">
|
|
<li><label><input type="checkbox" />Versión estable de
|
|
producción</label></li>
|
|
<li><label><input type="checkbox" />Documentación completa de
|
|
API</label></li>
|
|
<li><label><input type="checkbox" />Guías de migración
|
|
finalizadas</label></li>
|
|
<li><label><input type="checkbox" />Certificación de
|
|
seguridad</label></li>
|
|
</ul>
|
|
<h3 data-number="1.19.4" id="changelog-resumido"><span
|
|
class="header-section-number">1.19.4</span> 18.4 Changelog Resumido</h3>
|
|
<p>Ver <code>CHANGELOG.md</code> para el historial completo de
|
|
cambios.</p>
|
|
<p><strong>Versiones destacadas</strong>:</p>
|
|
<ul>
|
|
<li><strong>0.25.1</strong> (2025-10-01): Correcciones en tareas
|
|
programadas</li>
|
|
<li><strong>0.25.0</strong> (2025-09-23): Inventario hardware</li>
|
|
<li><strong>0.24.0</strong> (2025-09-09): Servicio de eliminación de
|
|
repositorios Git</li>
|
|
<li><strong>0.23.0</strong> (2025-09-08): Backups a repositorios
|
|
Git</li>
|
|
<li><strong>0.20.0</strong> (2025-08-25): Sistema de colas y tareas</li>
|
|
<li><strong>0.15.0</strong> (2025-06-26): Integración ogGit y sistema de
|
|
cola</li>
|
|
<li><strong>0.14.0</strong> (2025-06-02): Mover equipos, imagen cache,
|
|
inicio sesión</li>
|
|
<li><strong>0.13.0</strong> (2025-05-20): Comunicación TLS con
|
|
agente</li>
|
|
<li><strong>0.12.0</strong> (2025-05-13): Tareas programadas,
|
|
integración ogGit</li>
|
|
<li><strong>0.11.0</strong> (2025-04-11): Versionado de imágenes,
|
|
ejecución de scripts</li>
|
|
<li><strong>0.10.0</strong> (2025-03-25): Imagen virtual, importar
|
|
imágenes</li>
|
|
<li><strong>0.9.0</strong> (2025-03-04): Mercure, notificaciones en
|
|
tiempo real</li>
|
|
<li><strong>0.8.0</strong> (2025-01-10): Imagen global, jerarquía de
|
|
aulas</li>
|
|
<li><strong>0.7.3</strong> (2025-01-03): Multiselección, import/export,
|
|
torrent/udpcast</li>
|
|
</ul>
|
|
<hr />
|
|
<h2 data-number="1.20" id="contribución"><span
|
|
class="header-section-number">1.20</span> 19. Contribución</h2>
|
|
<h3 data-number="1.20.1" id="guía-de-contribución"><span
|
|
class="header-section-number">1.20.1</span> 19.1 Guía de
|
|
Contribución</h3>
|
|
<p>Para contribuir al proyecto:</p>
|
|
<ol type="1">
|
|
<li><strong>Fork</strong> el repositorio</li>
|
|
<li>Crea una <strong>rama</strong> para tu feature:
|
|
<code>git checkout -b feature/nueva-funcionalidad</code></li>
|
|
<li><strong>Commit</strong> tus cambios:
|
|
<code>git commit -am 'Añade nueva funcionalidad'</code></li>
|
|
<li><strong>Push</strong> a la rama:
|
|
<code>git push origin feature/nueva-funcionalidad</code></li>
|
|
<li>Crea un <strong>Pull Request</strong></li>
|
|
</ol>
|
|
<h3 data-number="1.20.2" id="estándares-de-código"><span
|
|
class="header-section-number">1.20.2</span> 19.2 Estándares de
|
|
Código</h3>
|
|
<ul>
|
|
<li>Seguir <strong>PSR-12</strong> para PHP</li>
|
|
<li>Usar <strong>Type Hints</strong> en PHP 8.3</li>
|
|
<li>Documentar con <strong>PHPDoc</strong></li>
|
|
<li>Tests para nuevas funcionalidades</li>
|
|
<li>Commits descriptivos en español</li>
|
|
</ul>
|
|
<h3 data-number="1.20.3" id="proceso-de-revisión"><span
|
|
class="header-section-number">1.20.3</span> 19.3 Proceso de
|
|
Revisión</h3>
|
|
<ol type="1">
|
|
<li>CI/CD ejecuta tests automáticamente</li>
|
|
<li>Revisión de código por maintainers</li>
|
|
<li>Aprobación requerida antes de merge</li>
|
|
<li>Merge a rama develop</li>
|
|
<li>Release periódicos a main</li>
|
|
</ol>
|
|
<h3 data-number="1.20.4" id="reportar-bugs"><span
|
|
class="header-section-number">1.20.4</span> 19.4 Reportar Bugs</h3>
|
|
<p>Usar el sistema de Issues del repositorio:</p>
|
|
<p><strong>Template de Bug</strong>:</p>
|
|
<pre><code>**Descripción del bug**
|
|
Descripción clara y concisa del bug.
|
|
|
|
**Pasos para reproducir**
|
|
1. Ir a '...'
|
|
2. Hacer clic en '...'
|
|
3. Ver error
|
|
|
|
**Comportamiento esperado**
|
|
Lo que esperabas que sucediera.
|
|
|
|
**Screenshots**
|
|
Si aplica, añadir screenshots.
|
|
|
|
**Entorno**
|
|
- OS: [ej. Ubuntu 22.04]
|
|
- Versión: [ej. 0.5.0]
|
|
- Browser: [ej. Firefox 118]</code></pre>
|
|
<hr />
|
|
<h2 data-number="1.21" id="soporte-y-contacto"><span
|
|
class="header-section-number">1.21</span> 20. Soporte y Contacto</h2>
|
|
<h3 data-number="1.21.1" id="documentación-adicional"><span
|
|
class="header-section-number">1.21.1</span> 20.1 Documentación
|
|
Adicional</h3>
|
|
<ul>
|
|
<li><strong>API Docs</strong>: http://localhost:8080/docs</li>
|
|
<li><strong>Postman Collection</strong>:
|
|
<code>swagger-assets/ogCore.postman_collection.zip</code></li>
|
|
<li><strong>Diagramas</strong>:
|
|
<code>swagger-assets/img_bbdd.png</code></li>
|
|
</ul>
|
|
<h3 data-number="1.21.2" id="recursos"><span
|
|
class="header-section-number">1.21.2</span> 20.2 Recursos</h3>
|
|
<ul>
|
|
<li><strong>Repositorio</strong>: [URL del repositorio]</li>
|
|
<li><strong>Wiki</strong>: [URL de la wiki]</li>
|
|
<li><strong>Issues</strong>: [URL de issues]</li>
|
|
</ul>
|
|
<h3 data-number="1.21.3" id="equipo-de-desarrollo"><span
|
|
class="header-section-number">1.21.3</span> 20.3 Equipo de
|
|
Desarrollo</h3>
|
|
<p>Proyecto desarrollado por el equipo de OpenGnsys en colaboración con
|
|
universidades participantes.</p>
|
|
<h3 data-number="1.21.4" id="licencia"><span
|
|
class="header-section-number">1.21.4</span> 20.4 Licencia</h3>
|
|
<p>Proyecto propietario. Ver archivo <code>LICENSE</code> para más
|
|
información.</p>
|
|
<hr />
|
|
<h2 data-number="1.22" id="apéndices"><span
|
|
class="header-section-number">1.22</span> Apéndices</h2>
|
|
<h3 data-number="1.22.1" id="apéndice-a-glosario-de-términos"><span
|
|
class="header-section-number">1.22.1</span> Apéndice A: Glosario de
|
|
Términos</h3>
|
|
<ul>
|
|
<li><strong>Cliente</strong>: Equipo físico gestionado por el
|
|
sistema</li>
|
|
<li><strong>Imagen</strong>: Copia bit a bit de una partición de
|
|
disco</li>
|
|
<li><strong>Traza</strong>: Registro de ejecución de un comando</li>
|
|
<li><strong>Unidad Organizativa</strong>: Agrupación lógica de clientes
|
|
(aula, grupo)</li>
|
|
<li><strong>PXE</strong>: Preboot Execution Environment, arranque por
|
|
red</li>
|
|
<li><strong>ogLive</strong>: Imagen Live de arranque de OpenGnsys</li>
|
|
<li><strong>Partición</strong>: División lógica de un disco duro</li>
|
|
<li><strong>Repositorio</strong>: Servidor de almacenamiento de
|
|
imágenes</li>
|
|
</ul>
|
|
<h3 data-number="1.22.2" id="apéndice-b-puertos-y-servicios"><span
|
|
class="header-section-number">1.22.2</span> Apéndice B: Puertos y
|
|
Servicios</h3>
|
|
<table>
|
|
<thead>
|
|
<tr class="header">
|
|
<th>Puerto</th>
|
|
<th>Servicio</th>
|
|
<th>Protocolo</th>
|
|
<th>Descripción</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr class="odd">
|
|
<td>8080</td>
|
|
<td>nginx</td>
|
|
<td>HTTP</td>
|
|
<td>API y docs</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>3306</td>
|
|
<td>MariaDB</td>
|
|
<td>MySQL</td>
|
|
<td>Base de datos</td>
|
|
</tr>
|
|
<tr class="odd">
|
|
<td>9000</td>
|
|
<td>PHP-FPM</td>
|
|
<td>FastCGI</td>
|
|
<td>Procesador PHP</td>
|
|
</tr>
|
|
<tr class="even">
|
|
<td>3000</td>
|
|
<td>Mercure</td>
|
|
<td>HTTP/SSE</td>
|
|
<td>Notificaciones</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h3 data-number="1.22.3" id="apéndice-c-estructura-de-directorios"><span
|
|
class="header-section-number">1.22.3</span> Apéndice C: Estructura de
|
|
Directorios</h3>
|
|
<pre><code>ogcore/
|
|
├── bin/ # Ejecutables (console, phpunit)
|
|
├── config/ # Configuración de Symfony
|
|
│ ├── api_platform/ # Configuración de entidades API
|
|
│ ├── packages/ # Configuración de bundles
|
|
│ └── routes/ # Rutas
|
|
├── migrations/ # Migraciones de base de datos
|
|
├── public/ # Punto de entrada web
|
|
├── src/ # Código fuente
|
|
│ ├── Command/ # Comandos de consola
|
|
│ ├── Controller/ # Controladores
|
|
│ ├── Dto/ # Data Transfer Objects
|
|
│ ├── Entity/ # Entidades Doctrine
|
|
│ ├── EventListener/# Event Listeners
|
|
│ ├── EventSubscriber/ # Event Subscribers
|
|
│ ├── Factory/ # Factories para testing
|
|
│ ├── Filter/ # Filtros de API Platform
|
|
│ ├── Repository/ # Repositorios Doctrine
|
|
│ ├── Security/ # Seguridad y autenticación
|
|
│ ├── Service/ # Servicios de negocio
|
|
│ ├── State/ # States de API Platform
|
|
│ └── Validator/ # Validadores personalizados
|
|
├── tests/ # Tests
|
|
├── translations/ # Traducciones
|
|
├── var/ # Archivos variables (cache, logs)
|
|
└── vendor/ # Dependencias
|
|
</code></pre>
|
|
<h3 data-number="1.22.4"
|
|
id="apéndice-d-variables-de-entorno-completas"><span
|
|
class="header-section-number">1.22.4</span> Apéndice D: Variables de
|
|
Entorno Completas</h3>
|
|
<p>Ver archivo <code>.env</code> para todas las variables de entorno
|
|
disponibles.</p>
|
|
<hr />
|
|
<p><strong>Fecha de actualización</strong>: Octubre 2025<br />
|
|
<strong>Versión del documento</strong>: 1.0<br />
|
|
<strong>Mantenedor</strong>: Equipo OpenGnsys</p>
|
|
</body>
|
|
</html>
|