Moodle con Docker usando Apache, PHP-FPM y MySQL en un entorno de desarrollo seguro

Instalar Moodle 4.5 en Docker con Apache, PHP-FPM y MySQL: Guía Paso a Paso

Moodle con Docker es una forma práctica de crear un entorno de desarrollo, pruebas o validación técnica sin tener que configurar manualmente Apache, PHP, MySQL y certificados locales en tu máquina.

Qué vas a montar con Moodle con Docker

En esta guía vas a montar Moodle 4.5 con una arquitectura separada en tres servicios: Apache como servidor web, PHP-FPM para ejecutar Moodle y MySQL como base de datos.

El entorno también incluye volúmenes persistentes para conservar el código de Moodle, la base de datos y el directorio moodledata, además de HTTPS local mediante mkcert.

La idea no es solo levantar Moodle, sino entender qué hace cada pieza y qué deberías revisar antes de adaptar una instalación similar a producción.

Al final tendrás:

  • Un entorno local de Moodle 4.5 funcionando con Docker.
  • Una arquitectura separada en Apache, PHP-FPM y MySQL.
  • Un directorio moodledata persistente.
  • HTTPS local con certificados generados mediante mkcert.
  • Un fichero docker-compose.yml reutilizable.
  • Una base técnica para probar plugins, themes e integraciones Moodle.

Este tutorial está pensado para desarrolladores, administradores Moodle, responsables técnicos de plataformas LMS y equipos EdTech que necesitan un entorno controlado para desarrollo, pruebas o validación técnica.

Importante: esta guía está orientada principalmente a desarrollo. Un Moodle de producción necesita seguridad, backups, monitorización, cron, caché, correo transaccional, actualizaciones y hardening del sistema.

Qué es Moodle y por qué sigue siendo relevante

Moodle es una plataforma LMS open source utilizada para crear, gestionar y evaluar experiencias de aprendizaje online. Permite organizar cursos, matricular usuarios, publicar recursos, crear actividades, evaluar mediante cuestionarios, gestionar calificaciones, emitir informes y ampliar la plataforma mediante plugins.

Su principal ventaja es que no es una herramienta cerrada. Moodle puede adaptarse a instituciones educativas, universidades, centros de formación, administraciones públicas y empresas que necesitan una plataforma de aprendizaje flexible, integrable y mantenible.

Desde el punto de vista técnico, Moodle es una aplicación PHP que trabaja sobre una base de datos relacional. Por eso, para ejecutarlo correctamente, necesitamos preparar un entorno con servidor web, PHP, base de datos, almacenamiento persistente y configuración adecuada para ficheros, sesiones, extensiones y tareas programadas.

En este artículo vamos a trabajar con Moodle 4.5, Apache, PHP-FPM y MySQL. Aunque existen otras combinaciones posibles, esta arquitectura es muy útil para aprender cómo se conectan las piezas principales de una instalación Moodle moderna.

Moodle con Docker: cuándo tiene sentido usarlo

Moodle con Docker tiene sentido cuando necesitas levantar un entorno reproducible sin contaminar tu sistema operativo con versiones concretas de PHP, MySQL, Apache o extensiones adicionales.

Docker no convierte automáticamente una instalación en segura, escalable o preparada para producción. Lo que sí aporta es una forma ordenada de definir los servicios, sus dependencias, sus volúmenes y sus variables de configuración.

Un entorno de Moodle con Docker resulta especialmente útil cuando necesitas probar plugins, validar actualizaciones, desarrollar themes o preparar una demo sin tocar una plataforma Moodle real.

En proyectos Moodle, este enfoque resulta especialmente útil para:

  • Probar plugins sin tocar una instalación real.
  • Desarrollar themes personalizados.
  • Validar integraciones con LTI, SCORM, xAPI o sistemas externos.
  • Preparar pruebas de actualización entre versiones.
  • Reproducir errores de cliente en un entorno controlado.
  • Formar a equipos técnicos en administración Moodle.
  • Crear entornos temporales de demostración.

La ventaja más importante no es “usar Docker porque sí”, sino poder documentar la arquitectura como código. Si otra persona del equipo clona el repositorio y ejecuta los mismos comandos, debería poder llegar a un entorno equivalente.

Arquitectura de Moodle con Docker

Para montar Moodle con Docker vamos a separar la arquitectura en tres servicios principales:

  • Apache, como servidor web encargado de recibir las peticiones HTTP y HTTPS.
  • PHP-FPM, como servicio encargado de ejecutar el código PHP de Moodle.
  • MySQL, como base de datos relacional donde Moodle guardará usuarios, cursos, actividades, calificaciones, configuración y registros internos.

Además, usaremos volúmenes para conservar los datos aunque los contenedores se detengan o se eliminen:

  • ./application/moodle: código fuente de Moodle.
  • ./application/moodledata: archivos subidos, cachés y datos generados por Moodle.
  • ./application/mysql_data: datos persistentes de MySQL.
  • ./application/ssl: certificados locales para HTTPS.

Cómo fluye una petición en Moodle con Docker

Cuando un usuario accede al Moodle local desde el navegador, la petición llega primero a Apache. Si la petición corresponde a un archivo PHP, Apache la envía a PHP-FPM mediante FastCGI.

Después, PHP-FPM ejecuta Moodle, consulta MySQL si es necesario y devuelve la respuesta generada a Apache. Finalmente, Apache entrega la página al navegador.

Este desacoplamiento permite que el servidor web y el proceso PHP tengan responsabilidades separadas. En entornos reales, esta separación facilita ajustes de rendimiento, diagnóstico de errores y evolución hacia arquitecturas más escalables.

Moodle con Docker usando Apache, PHP-FPM y MySQL en un entorno de desarrollo seguro
Arquitectura visual de un entorno Moodle con Docker basado en Apache, PHP-FPM, MySQL y HTTPS local.

Requisitos previos

Antes de empezar, conviene comprobar que tienes las herramientas necesarias instaladas y que tu equipo tiene recursos suficientes.

  • Docker Desktop en Windows o macOS, o Docker Engine en Linux.
  • Docker Compose V2, usando el comando docker compose.
  • Git, para descargar Moodle desde el repositorio oficial.
  • Un editor de código como Visual Studio Code, PhpStorm o similar.
  • Al menos 4 GB de RAM disponibles para Docker en desarrollo local.
  • Conocimientos básicos de terminal, YAML y estructura de proyectos web.

Para una máquina local de desarrollo, 4 GB de RAM asignados a Docker suelen ser suficientes para trabajar con comodidad. Para producción, la estimación cambia por completo: dependerá de usuarios concurrentes, cursos, tamaño de archivos, plugins instalados, estrategia de caché, base de datos, backups y monitorización.

También conviene revisar los requisitos oficiales de Moodle antes de fijar versiones. En Moodle 4.5, PHP 8.3 es una opción válida, MySQL 8.0 es la versión mínima y el parámetro max_input_vars debe estar configurado como mínimo en 5000.

Estructura de carpetas del proyecto

Vamos a crear una estructura simple, fácil de entender y suficiente para un entorno local de pruebas.

moodle-45-docker/
├── apache/
│   └── conf/
│       └── httpd.conf
├── application/
│   ├── moodle/
│   ├── moodledata/
│   ├── mysql_data/
│   └── ssl/
├── docker-compose.yml
├── Dockerfile.php
└── php.ini

Crea la estructura con estos comandos:

mkdir -p moodle-45-docker/apache/conf
mkdir -p moodle-45-docker/application/moodle
mkdir -p moodle-45-docker/application/moodledata
mkdir -p moodle-45-docker/application/mysql_data
mkdir -p moodle-45-docker/application/ssl

cd moodle-45-docker

Esta separación ayuda a distinguir configuración, aplicación, datos persistentes y certificados. Es una decisión sencilla, pero muy útil cuando el entorno empieza a crecer.

docker-compose.yml para Moodle con Docker

Para que una instalación de Moodle con Docker sea mantenible, conviene separar claramente los servicios, los volúmenes persistentes y los ficheros de configuración.

El fichero docker-compose.yml define los servicios necesarios para levantar Moodle. En versiones modernas de Docker Compose ya no es necesario declarar version: "3.8"; Compose V2 usa la Compose Specification y la propiedad version se mantiene solo por compatibilidad.

Crea un fichero llamado docker-compose.yml en la raíz del proyecto con este contenido:

name: moodle45-local

services:
  apache:
    image: httpd:2.4
    container_name: moodle_apache
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./apache/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf:ro
      - ./application/moodle:/var/www/moodle
      - ./application/ssl:/etc/ssl/certs:ro
    networks:
      - moodle_network
    depends_on:
      - php

  php:
    build:
      context: .
      dockerfile: Dockerfile.php
    container_name: moodle_php
    volumes:
      - ./application/moodle:/var/www/moodle
      - ./application/moodledata:/var/www/moodledata
      - ./php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
    environment:
      TZ: Europe/Madrid
    networks:
      - moodle_network

  mysql:
    image: mysql:8.0
    container_name: moodle_mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: moodle
      MYSQL_USER: moodleuser
      MYSQL_PASSWORD: moodlepassword
      TZ: Europe/Madrid
    volumes:
      - ./application/mysql_data:/var/lib/mysql
    networks:
      - moodle_network

networks:
  moodle_network:
    driver: bridge

Este fichero crea tres contenedores conectados a una misma red interna. Apache queda expuesto en los puertos 80 y 443, PHP-FPM queda disponible dentro de la red Docker y MySQL solo se comunica con Moodle desde la red interna.

Para un entorno local, las contraseñas del ejemplo son suficientes como punto de partida. Para cualquier entorno compartido o accesible desde internet, deben sustituirse por secretos reales y una estrategia de gestión de credenciales adecuada.

Dockerfile PHP para Moodle

Moodle necesita varias extensiones PHP para funcionar correctamente. En lugar de usar una imagen genérica sin control, vamos a crear una imagen PHP-FPM personalizada con las extensiones necesarias.

Crea el fichero Dockerfile.php en la raíz del proyecto:

FROM php:8.3-fpm

RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libicu-dev \
    libxml2-dev \
    libxslt1-dev \
    libonig-dev \
    libcurl4-openssl-dev \
    libssl-dev \
    libldap2-dev \
    libsodium-dev \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install \
        mysqli \
        pdo_mysql \
        zip \
        gd \
        intl \
        soap \
        xsl \
        mbstring \
        exif \
        opcache \
        sodium \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /var/www/moodle

Este Dockerfile instala PHP 8.3 y extensiones habituales en instalaciones Moodle. Dependiendo de tus plugins, puedes necesitar extensiones adicionales, pero esta base cubre un escenario de desarrollo bastante completo.

Configuración PHP para Moodle

La configuración de PHP es una parte crítica de Moodle. No basta con que PHP arranque: hay límites de memoria, subida de archivos, tiempo de ejecución y variables de entrada que pueden afectar directamente a formularios, copias de seguridad, restauraciones de cursos y administración de plugins.

Crea un fichero php.ini en la raíz del proyecto:

memory_limit = 512M
upload_max_filesize = 128M
post_max_size = 128M
max_execution_time = 300
max_input_vars = 5000
max_file_uploads = 50

date.timezone = Europe/Madrid

opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 2
opcache.validate_timestamps = 1

En desarrollo, opcache.validate_timestamps = 1 permite que los cambios en el código se detecten sin reiniciar constantemente PHP-FPM. En producción, los valores de OPcache deberían revisarse con una política más conservadora y adaptada al despliegue.

Configuración de Apache

Apache actuará como servidor web y enviará las peticiones PHP al contenedor moodle_php. Para ello necesitamos cargar los módulos adecuados y configurar un VirtualHost HTTPS.

Módulos y configuración base de Apache

Crea el fichero apache/conf/httpd.conf y añade primero esta configuración base:

ServerRoot "/usr/local/apache2"

Listen 80
Listen 443

LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule headers_module modules/mod_headers.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule alias_module modules/mod_alias.so

User www-data
Group www-data

DocumentRoot "/var/www/moodle"

<Directory "/var/www/moodle">
    Options +FollowSymLinks
    AllowOverride All
    Require all granted
    DirectoryIndex index.php
</Directory>

<FilesMatch \.php$>
    SetHandler "proxy:fcgi://moodle_php:9000"
</FilesMatch>

VirtualHost HTTP con redirección a HTTPS

Después añade el VirtualHost para redirigir las peticiones HTTP hacia HTTPS:

<VirtualHost *:80>
    ServerName localhost
    Redirect permanent / https://localhost/
</VirtualHost>

VirtualHost HTTPS para Moodle

Por último, añade el VirtualHost HTTPS. Este bloque activa SSL, apunta a los certificados locales y envía las peticiones PHP al contenedor PHP-FPM.

<VirtualHost *:443>
    ServerName localhost
    DocumentRoot "/var/www/moodle"

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/localhost.pem
    SSLCertificateKeyFile /etc/ssl/certs/localhost-key.pem

    ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://moodle_php:9000/var/www/moodle/$1

    <Directory "/var/www/moodle">
        Options +FollowSymLinks -Indexes
        AllowOverride All
        Require all granted
        DirectoryIndex index.php

        RewriteEngine On
        RewriteRule "(\/vendor\/)" - [F]
        RewriteRule "(\/node_modules\/)" - [F]
        RewriteRule "(^|/)\.(?!well-known\/)" - [F]
        RewriteRule "(composer\.json)" - [F]
        RewriteRule "(\.lock)" - [F]
        RewriteRule "(\/environment.xml)" - [F]
        RewriteRule "(\/install.xml)" - [F]
        RewriteRule "(\/README)" - [F]
        RewriteRule "(\/readme)" - [F]
        RewriteRule "(\/moodle_readme)" - [F]
        RewriteRule "(\/upgrade\.txt)" - [F]
        RewriteRule "(phpunit\.xml\.dist)" - [F]
        RewriteRule "(\/tests\/behat\/)" - [F]
        RewriteRule "(\/fixtures\/)" - [F]
    </Directory>
</VirtualHost>

ErrorLog /proc/self/fd/2
CustomLog /proc/self/fd/1 combined

Esta configuración es suficiente para desarrollo local. Además, añade algunas reglas básicas para evitar el acceso directo a directorios y archivos sensibles. Aun así, no sustituye una revisión de seguridad completa para producción.

HTTPS local con mkcert

Moodle trabaja mejor cuando el entorno se parece lo máximo posible al entorno real. Por eso, incluso en local, es recomendable usar HTTPS. Para evitar certificados autofirmados con errores en el navegador, usaremos mkcert.

En macOS puedes instalarlo con Homebrew:

brew install mkcert
brew install nss

En Windows puedes instalarlo con Chocolatey:

choco install mkcert

En Linux, primero instala las herramientas NSS si son necesarias y después instala mkcert según tu distribución:

sudo apt install libnss3-tools

Después instala la autoridad local de confianza:

mkcert -install

Y genera los certificados para localhost dentro del directorio application/ssl:

mkcert \
  -key-file application/ssl/localhost-key.pem \
  -cert-file application/ssl/localhost.pem \
  localhost 127.0.0.1 ::1

Recuerda que mkcert genera certificados confiables para desarrollo local, pero no configura Apache por ti. Por eso hemos montado los certificados en el contenedor y los hemos referenciado en el VirtualHost HTTPS.

Descargar Moodle 4.5

Para descargar Moodle, puedes usar Git y clonar la rama correspondiente. En este ejemplo usamos la rama estable de Moodle 4.5:

git clone -b MOODLE_405_STABLE https://github.com/moodle/moodle.git application/moodle

Si el directorio application/moodle ya existe y no está vacío, puedes clonarlo en una carpeta temporal y mover el contenido después.

También puedes descargar Moodle desde la web oficial, pero para entornos técnicos Git suele ser más cómodo porque facilita comprobar ramas, aplicar actualizaciones y trabajar con control de versiones.

Arrancar los contenedores

Una vez preparados los ficheros, puedes construir y levantar el entorno con:

docker compose up -d --build

Comprueba que los contenedores están en ejecución:

docker compose ps

También puedes revisar los logs si algo falla:

docker compose logs -f apache
docker compose logs -f php
docker compose logs -f mysql

Si todo ha ido bien, deberías poder acceder a Moodle desde:

https://localhost

Instalar Moodle desde el navegador

Al acceder a https://localhost, Moodle iniciará el asistente de instalación. Durante el proceso tendrás que elegir idioma, confirmar rutas y configurar la base de datos.

En el paso de base de datos, usa estos valores:

CampoValor
Tipo de base de datosMySQL mejorado / mysqli
Servidormysql
Nombre de base de datosmoodle
Usuariomoodleuser
Contraseñamoodlepassword
Prefijo de tablasmdl_
Puerto3306

El nombre del servidor de base de datos es mysql porque ese es el nombre del servicio definido en docker-compose.yml. Docker Compose permite que los contenedores se resuelvan entre sí usando el nombre del servicio dentro de la misma red.

Después, Moodle comprobará requisitos, instalará tablas y te pedirá configurar el usuario administrador. Cuando termine el proceso, ya tendrás un Moodle 4.5 funcional en tu entorno local.

Configurar el cron de Moodle

Un Moodle sin cron no está completo. Las tareas programadas gestionan procesos internos como envíos de notificaciones, procesamiento de colas, limpieza de sesiones, actividades programadas y mantenimiento interno.

Para ejecutar el cron manualmente dentro del contenedor PHP:

docker compose exec php php /var/www/moodle/admin/cli/cron.php

En desarrollo puedes ejecutarlo manualmente cuando lo necesites. En producción debe configurarse como tarea programada real, normalmente cada minuto, según la documentación oficial de Moodle y las necesidades de la plataforma.

Una opción simple para desarrollo es añadir un servicio específico para cron, aunque para este tutorial lo mantenemos manual para no complicar la primera instalación.

Recursos oficiales para trabajar con Moodle con Docker

Antes de adaptar este entorno a tus necesidades, conviene revisar la documentación oficial de las tecnologías utilizadas:

Estos enlaces salientes ayudan a contrastar versiones, requisitos, opciones de instalación y buenas prácticas antes de convertir este entorno en una base de trabajo real.

Qué cambiar antes de producción

Aunque este entorno de Moodle con Docker puede servir como base técnica, no debería publicarse en producción sin revisar credenciales, permisos, backups, cron, HTTPS real y monitorización.

Montar Moodle en local es una cosa. Publicar Moodle para usuarios reales es otra muy distinta. El entorno de este tutorial es una base técnica, no una receta final de despliegue productivo.

Antes de llevar una instalación Moodle a producción, deberías revisar como mínimo estos puntos:

  • Cambiar todas las contraseñas de ejemplo.
  • Usar HTTPS real con certificados públicos, no mkcert.
  • Configurar correctamente el cron.
  • Revisar permisos de moodledata.
  • Separar base de datos y aplicación si el proyecto va a crecer.
  • Configurar backups automáticos y restauraciones probadas.
  • Revisar límites de PHP según el tamaño real de cursos y copias de seguridad.
  • Activar monitorización de CPU, memoria, disco, logs y disponibilidad.
  • Configurar correo saliente correctamente.
  • Revisar plugins instalados, compatibilidad y política de actualización.
  • Proteger archivos sensibles y directorios internos.
  • Configurar caché, sesiones y almacenamiento según la carga esperada.

En plataformas institucionales, además, hay que valorar cumplimiento normativo, privacidad, retención de datos, roles, autenticación, trazabilidad, integraciones externas y plan de mantenimiento.

¿Vas a llevar Moodle a producción?

Este entorno es una buena base para desarrollo o pruebas, pero una instalación Moodle real necesita arquitectura, seguridad, rendimiento, backups, monitorización, actualizaciones y una política clara de mantenimiento.

Si necesitas instalar, migrar, auditar o securizar Moodle para una institución educativa o empresa, puedo ayudarte a diseñar una solución estable, mantenible y alineada con tus necesidades reales.

Errores frecuentes al montar Moodle con Docker

Moodle no conecta con MySQL

Comprueba que estás usando mysql como servidor de base de datos, no localhost. Dentro de Docker Compose, el nombre correcto es el nombre del servicio definido en el fichero YAML.

El navegador no confía en el certificado

Asegúrate de haber ejecutado mkcert -install y de haber generado los certificados en la ruta correcta. También revisa que Apache esté leyendo exactamente los ficheros localhost.pem y localhost-key.pem.

Problemas de permisos en moodledata

Si Moodle no puede escribir en moodledata, revisa permisos del directorio en el host y dentro del contenedor. En desarrollo puedes ajustar permisos de forma más flexible, pero en producción conviene aplicar una política estricta.

Aviso de max_input_vars

Moodle 4.5 requiere que max_input_vars tenga un valor mínimo de 5000. Si ves un aviso durante la instalación, revisa que el fichero php.ini se esté montando correctamente dentro del contenedor PHP.

Los puertos 80 o 443 ya están ocupados

Si tienes otro servidor web en tu máquina, Docker no podrá usar esos puertos. Puedes cambiar el mapeo en docker-compose.yml, por ejemplo:

ports:
  - "8080:80"
  - "8443:443"

En ese caso, accederías a Moodle desde https://localhost:8443, ajustando también la configuración si fuera necesario.

Preguntas frecuentes sobre Moodle con Docker

¿Puedo usar este entorno para producción?
Como base técnica, sí. Como despliegue final, no sin revisar seguridad, backups, cron, monitorización, HTTPS real, rendimiento, credenciales y estrategia de actualizaciones.

¿Por qué usar PHP-FPM en lugar de mod_php?
PHP-FPM separa la ejecución PHP del servidor web. Esto facilita la gestión de procesos, mejora el aislamiento y encaja mejor con arquitecturas basadas en contenedores.

¿Puedo usar MariaDB en lugar de MySQL?
Sí, Moodle soporta varias bases de datos, incluida MariaDB. Sin embargo, debes revisar siempre los requisitos exactos de la versión de Moodle que vayas a instalar.

¿Por qué usar mkcert?
Porque permite generar certificados locales confiables para desarrollo. Evita muchos problemas típicos de trabajar con HTTPS falso o certificados autofirmados que el navegador no reconoce.

¿Qué diferencia hay entre docker compose y docker-compose?
docker-compose era el comando clásico de Compose V1. En Docker Compose V2 se usa normalmente docker compose, integrado como subcomando de Docker.

¿Necesito ejecutar el cron de Moodle?
Sí. Moodle depende del cron para ejecutar tareas programadas. En desarrollo puedes lanzarlo manualmente, pero en producción debe estar configurado de forma automática.

¿Puedo instalar plugins en este entorno?
Sí. De hecho, uno de los usos más interesantes de este entorno es probar plugins, themes, integraciones y actualizaciones sin afectar a una plataforma real.

Conclusión: Moodle con Docker es una buena base, no el final del camino

Moodle con Docker es una excelente forma de crear un entorno técnico reproducible para desarrollo, pruebas, formación interna o validación de configuraciones. Separar Apache, PHP-FPM y MySQL ayuda a entender mejor cómo funciona Moodle por dentro y facilita mantener cada pieza bajo control.

La clave está en no confundir un entorno funcional con una arquitectura de producción. Levantar Moodle en local es solo el primer paso. Para publicar una plataforma real necesitas pensar en seguridad, rendimiento, backups, monitorización, actualizaciones, cron, correo, caché, autenticación e integraciones.

En definitiva, Moodle con Docker es una excelente opción para crear entornos reproducibles de desarrollo, pruebas y validación técnica, siempre que se entienda la diferencia entre un laboratorio local y una plataforma Moodle lista para producción.

Si estás aprendiendo Moodle o necesitas probar desarrollos, esta arquitectura es una base muy útil. Si estás preparando una plataforma para una institución educativa o una empresa, conviene dar el siguiente paso: diseñar una instalación robusta, mantenible y preparada para crecer.

Categories: ,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *