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 correos | MariaDB 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 Moodle | moodledata | Sí | Sí (moodledata.tar.gz) |
| Cachés, sesiones, temporales y papelera de Moodle | moodledata (cache, localcache, sessions, temp, trashdir) | Sí | No: Moodle los regenera |
| Código de Moodle y plugins, parches, scripts, recursos de marca | Imagen Docker (se construye desde GitHub) | Se reemplaza en cada despliegue | No hace falta: se reconstruye desde el repositorio |
config.php | Dentro del contenedor (/var/www/html/config.php) | No: se regenera en cada arranque | No hace falta |
| Contraseñas y claves (base de datos, SMTP, IA, cuenta de respaldo) | Variables de entorno de Coolify | Sí, en Coolify | No por defecto (--with-env las incluye en texto plano) |
| Videos | YouTube y Cloudflare R2 | Fuera del servidor | No |
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
mariadbnativo de Moodle, prefijo de tablasmdl_. - Cotejamiento:
utf8mb4_unicode_ci, igual en el servidor y enconfig.php. - Base y usuario por defecto:
moodle/moodleuser(configurables conMYSQL_DATABASEyMYSQL_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:
| Tabla | Plugin | Contenido |
|---|---|---|
local_deltamodules_mail | local_deltamodules | Cola de correos y registro de envíos (se conserva 180 días) |
local_deltamodules_pwtoken | local_deltamodules | Enlaces de un solo uso para crear contraseña; solo se guarda el hash |
local_deltamodules_review | local_deltamodules | Historial de la revisión anual de módulos |
local_deltamodules_team / local_deltamodules_teammem | local_deltamodules | Equipos de seguimiento (líder e integrantes) |
local_deltamodules_rep | local_deltamodules | Informes personalizados guardados desde Reportes |
local_deltamodules_client / local_deltamodules_clientcode | local_deltamodules | Empresas cliente y sus códigos de registro |
local_deltamodules_excl | local_deltamodules | Módulos desactivados a una persona que los recibiría por cargo o empresa |
local_deltamodules_rule | local_deltamodules | Reglas propias de un módulo (las que no siguen la regla general) |
local_deltamodules_chunks | local_deltamodules | Fragmentos de contenido de video con su embedding (preparada; hoy no se usa en el chat) |
local_candenrol_code | local_candidate_enrollment | Có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):
| Elemento | Detalle |
|---|---|
| Script | infrastructure/scripts/backup.sh (lo llama backup-daily.sh) |
| Contenido | database.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 |
| Formato | Un archivo delta-lms_backup_AAAA-MM-DD_HHMMSS.tar más su .sha256, creados con permisos solo para el dueño (umask 077) |
| Frecuencia | Diario a las 2:00 de Ecuador (activo en producción desde 2026-10-06) |
| Retención en el servidor | 14 respaldos en /var/backups/delta-lms |
| Copia externa | Prevista con rclone, cifrada, 90 días. Pendiente: elegir y configurar el destino |
| Aviso | backup-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 visible | Administración del sitio → Cursos → Copias de seguridad → Respaldos de la Academia |
| Objetivos | Pé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.