Sign inSign up

molero/moodle

By molero

Updated 5 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 sigue MOODLE_502_STABLE — un cron semanal en CI (solo funciona porque este workflow vive en main, la rama por defecto; GitHub Actions ignora schedule: en cualquier otra rama) reconstruye la imagen contra el HEAD actual de esa rama, así que los futuros parches de la serie 5.2.x (5.2.1, 5.2.2...) se publican solos, sin tocar este repo.

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:ba114c2f5

Size

471.1 MB

Last updated

5 days ago

docker pull molero/moodle