Academia Deltamontero · Documentación
Arquitectura

Datos y almacenamiento

Qué vive en MariaDB, qué vive en moodledata, qué está en el respaldo y qué queda fuera del servidor.

Mapa de datos

QuéDónde vive¿Persiste entre despliegues?¿En el respaldo?
Usuarios, matrículas, avances, notas, intentos, certificados emitidos, reglas, configuración de Moodle, registro de correosMariaDB 11.4 (volumen mariadb_data)SíSí (database.sql.gz)
Archivos subidos (PDF, imágenes, documentos), logos y fuentes cargados en el almacén de MoodlemoodledataSíSí (moodledata.tar.gz)
Cachés, sesiones, temporales y papelera de Moodlemoodledata (cache, localcache, sessions, temp, trashdir)SíNo: Moodle los regenera
Código de Moodle y plugins, parches, scripts, recursos de marcaImagen Docker (se construye desde GitHub)Se reemplaza en cada despliegueNo hace falta: se reconstruye desde el repositorio
config.phpDentro del contenedor (/var/www/html/config.php)No: se regenera en cada arranqueNo hace falta
Contraseñas y claves (base de datos, SMTP, IA, cuenta de respaldo)Variables de entorno de CoolifySí, en CoolifyNo por defecto (--with-env las incluye en texto plano)
VideosYouTube y Cloudflare R2Fuera del servidorNo

Si se pierden mariadb_data y moodledata, se pierde la información aunque el código esté en GitHub. El respaldo cubre exactamente esos dos volúmenes. Las variables de entorno deben guardarse aparte en un gestor de contraseñas (tarea marcada como pendiente en docs/drp.md).

Base de datos

  • Motor: MariaDB 11.4 LTS, controlador mariadb nativo de Moodle, prefijo de tablas mdl_.
  • Cotejamiento: utf8mb4_unicode_ci, igual en el servidor y en config.php.
  • Base y usuario por defecto: moodle / moodleuser (configurables con MYSQL_DATABASE y MYSQL_USER).
  • La base solo es accesible desde la red interna de Docker.

Tablas propias de la Academia

Además de las tablas de Moodle y de los plugins de terceros, los plugins propios crean:

TablaPluginContenido
local_deltamodules_maillocal_deltamodulesCola de correos y registro de envíos (se conserva 180 días)
local_deltamodules_pwtokenlocal_deltamodulesEnlaces de un solo uso para crear contraseña; solo se guarda el hash
local_deltamodules_reviewlocal_deltamodulesHistorial de la revisión anual de módulos
local_deltamodules_team / local_deltamodules_teammemlocal_deltamodulesEquipos de seguimiento (líder e integrantes)
local_deltamodules_replocal_deltamodulesInformes personalizados guardados desde Reportes
local_deltamodules_client / local_deltamodules_clientcodelocal_deltamodulesEmpresas cliente y sus códigos de registro
local_deltamodules_excllocal_deltamodulesMódulos desactivados a una persona que los recibiría por cargo o empresa
local_deltamodules_rulelocal_deltamodulesReglas propias de un módulo (las que no siguen la regla general)
local_deltamodules_chunkslocal_deltamodulesFragmentos de contenido de video con su embedding (preparada; hoy no se usa en el chat)
local_candenrol_codelocal_candidate_enrollmentCódigos de acceso a la prueba técnica de selección

Otros datos propios se guardan como configuración de Moodle (config_plugins), por ejemplo los errores del último despliegue (local_deltamodules/deploy_errors), el estado del respaldo (backup_last_ok, backup_last_fail) o las condiciones de uso del Asistente de IA (aiterms_*).

moodledata

Volumen montado en /var/www/moodledata y compartido por moodle y moodle-cron. Contiene el almacén de archivos de Moodle (todo lo que se sube a la plataforma) y los directorios de trabajo (cachés, sesiones, temporales). El entrypoint.sh ajusta su dueño a www-data en cada arranque.

Las copias automáticas por curso de Moodle (archivos .mbz) están apagadas (backup_auto_active = 0): duplicarían cada curso dentro de moodledata y harían crecer el respaldo real sin aportar nada.

Respaldo

El respaldo lo hace el host, no Moodle. Resumen técnico (procedimiento completo en Operación):

ElementoDetalle
Scriptinfrastructure/scripts/backup.sh (lo llama backup-daily.sh)
Contenidodatabase.sql.gz (mariadb-dump --single-transaction --routines --triggers, utf8mb4), moodledata.tar.gz sin cachés ni sesiones, manifest.txt (fecha, versión de Moodle, wwwroot, cotejamiento, número de tablas y archivos) y SHA256SUMS
FormatoUn archivo delta-lms_backup_AAAA-MM-DD_HHMMSS.tar más su .sha256, creados con permisos solo para el dueño (umask 077)
FrecuenciaDiario a las 2:00 de Ecuador (activo en producción desde 2026-10-06)
Retención en el servidor14 respaldos en /var/backups/delta-lms
Copia externaPrevista con rclone, cifrada, 90 días. Pendiente: elegir y configurar el destino
Avisobackup-daily.sh informa el resultado a Moodle (local/deltamodules/cli/backup_status.php); si falla, se envía correo a los super administradores y al correo de soporte y aparece un aviso en su Área personal
Estado visibleAdministración del sitio → Cursos → Copias de seguridad → Respaldos de la Academia
ObjetivosPérdida máxima de un día de datos (RPO 24 h) y unas 2 horas para volver a estar en línea (RTO)

Los respaldos contienen datos personales (nombres, cédulas, correos, notas). La copia que salga del servidor debe ir cifrada (remoto crypt de rclone) y la clave de cifrado debe guardarse en el gestor de contraseñas. Ver Seguridad.

Contenido fuera del servidor

Videos

Los videos de la Academia no se alojan en el servidor: es una política del proyecto para no inflar el respaldo. Se integran por enlace:

  • YouTube: videos no listados de la empresa, insertados en actividades de mod_interactivevideo. Los módulos creados con el constructor propio usan siempre la fuente YouTube.
  • Cloudflare R2: según docs/drp.md, también hay videos alojados en R2. La cuenta de R2 de los videos es hoy personal y debe pasar a una cuenta de la empresa. Cómo se insertan esos videos en las actividades: Por confirmar (el constructor de módulos del repositorio solo genera actividades de YouTube).

Inventario de contenido

docs/modules-info/academia_dm_contenido.json es el inventario de temas con su código PowerBuilder, objetivo y enlace. Se incluye en la imagen (/opt/academia-dm/) y lo usan los scripts de creación de cursos. La estructura vigente de módulos la define además infrastructure/moodle/manual-academia.json (12 módulos del Manual de Perfiles de Formación, la Prueba Técnica de Selección y el curso de apoyo de IA).

Artefactos del repositorio hermano

El repositorio lms-course-scrap (independiente) genera chunks.jsonl, cuestionarios .gift y puntos de control de video. En este repositorio solo se incluyen los puntos de control ya generados en infrastructure/moodle/checkpoints/ (importables con import-checkpoints.php). Ver Inteligencia artificial.

En esta página