Sign inSign up

molero/moodle

By molero

•Updated 7 days ago

Moodle LMS con PHP 8.3, Apache, PostgreSQL 17 y Redis - imagen mantenible y actualizable

Image
0

10K+

molero/moodle repository overview

⁠🎓 Moodle Docker — Imagen personalizada y mantenible (Moodle 5.2)

Docker Build Docker Hub

Stack Docker completo para Moodle LMS basado en moodlehq/moodle-php-apache:8.3, con código de Moodle descargado directamente desde GitHub en tiempo de build.

Esta rama (moodle-5.2) sigue MOODLE_502_STABLE, así que en teoría ya incluye los futuros parches de la serie 5.2.x (5.2.1, 5.2.2...) — pero la recogida no es automática. Cuando Moodle publique un nuevo parche, lanza el workflow a mano desde GitHub Actions ("Docker Build and Publish" → Run workflow), o haz push de cualquier cambio a esta rama; el build siempre usa el HEAD actual de MOODLE_502_STABLE en ese momento.

⁠Servicios

ServicioImagenPuerto
Moodle (PHP 8.3 + Apache)tesudacochino/moodle:<version>8080
PostgreSQL 17postgres:17-alpineinterno
Redis 7redis:7-alpineinterno

⁠🚀 Inicio rápido

⁠1. Clonar y configurar
# Copiar y editar el archivo de configuración
cp .env.example .env

Edita .env y cambia al menos:

  • MOODLE_ADMIN_PASS — contraseña del admin
  • DB_PASS — contraseña de PostgreSQL
  • MOODLE_WWWROOT — URL de acceso (si no es localhost)
⁠2. Build y arranque
make build   # Build de la imagen (descarga Moodle desde GitHub, ~5 min)
make up      # Levanta el stack completo
make logs    # Ver el progreso de instalación

La primera vez Moodle instala la base de datos automáticamente. Accede en: http://localhost:8080⁠


⁠📋 Comandos disponibles

make help          # Ver todos los comandos con descripción
make up            # Levantar el stack
make down          # Parar el stack
make restart       # Reiniciar contenedores
make status        # Estado de los contenedores
make logs          # Logs en tiempo real
make shell         # Bash en el contenedor Moodle
make shell-db      # psql en PostgreSQL
make backup        # Backup de BD + moodledata → ./backups/
make restore DB=backups/db_XXX.sql.gz   # Restaurar backup
make purge         # Purgar caches de Moodle
make info          # Info del entorno

⁠🔄 Actualizar Moodle

⁠Método 1 — Script interactivo (recomendado)
./scripts/update-moodle.sh MOODLE_502_STABLE

El script hace backup automático, actualiza la versión, rebuilda y ejecuta la migración de BD.

⁠Método 2 — Manual paso a paso
# 1. Backup de seguridad (¡no saltarse este paso!)
make backup

# 2. Cambiar versión en .env
# Edita .env y cambia MOODLE_VERSION=MOODLE_502_STABLE

# 3. Rebuild de la imagen (descarga la nueva versión de GitHub)
make rebuild

# 4. Aplicar upgrade de base de datos
make upgrade
⁠Ramas de Moodle disponibles
Rama GitVersión MoodleSoporte
MOODLE_502_STABLE5.2.x✅ Última versión (requiere PHP >= 8.3)
MOODLE_500_STABLE5.0.xActiva
MOODLE_405_STABLE4.5.xLTS ✅ Recomendada
MOODLE_404_STABLE4.4.xActiva

⁠🧩 Plugins de terceros

Añade plugins a plugins.txt y ejecuta:

make install-plugins
make upgrade   # Para registrar los nuevos plugins en la BD

Formato de plugins.txt:

# tipo/nombre   url_repositorio   rama
mod/attendance  https://github.com/danmarsden/moodle-mod_attendance   MOODLE_502_STABLE
theme/moove     https://github.com/willianmano/moodle-theme-moove      MOODLE_502_STABLE

⁠⚙️ Configuración

⁠Variables de entorno (.env)
VariableDefaultDescripción
MOODLE_VERSIONMOODLE_502_STABLERama de Moodle a usar
MOODLE_WWWROOThttp://localhost:8080URL pública de Moodle
MOODLE_ADMIN_USERadminUsuario administrador
MOODLE_ADMIN_PASSAdmin1234!Contraseña admin
MOODLE_LANGesIdioma por defecto
DB_NAMEmoodleNombre de la BD
DB_USERmoodleUsuario de BD
DB_PASSmoodleContraseña de BD
HTTP_PORT8080Puerto HTTP del host
⁠📧 Configuración de Correo (SMTP)

Moodle 5.2 en este stack permite configurar el correo directamente desde variables de entorno. Descomenta y ajusta en tu .env:

  • SMTP_HOSTS: Servidor SMTP (ej: smtp.gmail.com:587)
  • SMTP_USER: Usuario (ej: [email protected])
  • SMTP_PASS: Contraseña o App Password
  • SMTP_SECURE: tls o ssl
  • SMTP_NOREPLY_ADDRESS: Dirección de remitente para notificaciones
⁠⏰ Tareas programadas (Cron)

El cron de Moodle está integrado en el contenedor. Se ejecuta cada minuto automáticamente. Puedes ver el log del cron con:

docker exec -it moodle tail -f /var/log/moodle-cron.log

⁠💾 Backups

Los backups se guardan en ./backups/ con timestamp:

  • db_YYYYMMDD_HHMMSS.sql.gz — Volcado de PostgreSQL
  • moodledata_YYYYMMDD_HHMMSS.tar.gz — Archivos de Moodle

⁠🔒 Notas de seguridad

  • moodlehq/moodle-php-apache está pensado para desarrollo/staging, no producción.
  • Para producción, usa HTTPS (MOODLE_SSLPROXY=true) y contraseñas fuertes.
  • El archivo config.php se genera dinámicamente y hereda las variables del sistema.
  • El servicio cron inyecta las variables de entorno necesarias desde /etc/environment.

⁠🐛 Troubleshooting

"The Moodle root directory must not be publicly accessible" (Moodle 5.1+) Desde Moodle 5.1, el código web-accesible vive en /public dentro del checkout — DocumentRoot debe apuntar ahí, no a la raíz. Ya está corregido en config/apache/moodle.conf en esta rama (moodle-5.2 en adelante). Si creas una nueva rama de imagen para una serie ≥5.1, verifica que ese archivo siga apuntando a /var/www/html/public — las ramas de series anteriores (4.5, 5.0) no tienen ese directorio y deben mantener DocumentRoot /var/www/html.

El cron no envía correos Verifica que las variables SMTP_* en el .env son correctas y reinicia el stack:

make restart

Permisos de archivos Si editas archivos manualmente, asegúrate de que pertenecen a www-data:

docker exec -it moodle chown -R www-data:www-data /var/www/html

Tag summary

Content type

Image

Digest

sha256:b42c7c49d…

Size

471 MB

Last updated

7 days ago

docker pull molero/moodle