Etiqueta: moodle

  • ¿Puedo trabajar con Moodle en un Proyecto Laravel?

    ¿Puedo trabajar con Moodle en un Proyecto Laravel?

    Estoy trabajando en un proyecto Lucy. Que es un sistema de gestión académica. Y tengo que activarlo contra Moodle en principio y luego contra Microsoft Teams. Para probar Moodle, necesito tenerlo levantado en un entorno de producción. ¿Se puede integrarlo en Sails?

    Sí, podemos hacerlo de las dos formas:

    • A) Integrarlo al stack de Sail con un docker-compose.override.yml. Es práctico para un entorno de pruebas único (Laravel + DB + Moodle en la misma red).
    • B) Correr Moodle en un compose aparte. Es más limpio si querés aislar servicios, reiniciar/actualizar Moodle sin tocar tu app o usar otra DB/volúmenes.

    Para “probar contra él” localmente, A suele ser suficiente. Abajo te dejo un override listo con Moodle (Bitnami) usando el MySQL del stack Sail.


    Opción A — Agregar Moodle al proyecto Sail (recomendado para pruebas locales)

    Crea docker-compose.override.yml en la raíz del proyecto Laravel:

    services:
      # Moodle (servidor web + PHP en un solo contenedor)
      moodle:
        image: bitnami/moodle:latest
        depends_on:
          - mysql         # o "mariadb" si ese es tu servicio DB en Sail
        environment:
          # Datos del admin de Moodle
          MOODLE_USERNAME: admin
          MOODLE_PASSWORD: admin123
          MOODLE_EMAIL: [email protected]
    
          # Conexión a la base (apunta al servicio DB de Sail)
          MOODLE_DATABASE_TYPE: mysqli         # o "pgsql" si usás Postgres
          MOODLE_DATABASE_HOST: ${DB_HOST:-mysql}
          MOODLE_DATABASE_PORT_NUMBER: ${FORWARD_DB_PORT:-3306}
          MOODLE_DATABASE_USER: ${DB_USERNAME:-sail}
          MOODLE_DATABASE_PASSWORD: ${DB_PASSWORD:-password}
          MOODLE_DATABASE_NAME: moodle         # DB nueva para Moodle
    
          # Opcionales útiles
          PHP_MEMORY_LIMIT: 512M
          PHP_UPLOAD_MAX_FILESIZE: 64M
          PHP_POST_MAX_SIZE: 64M
          # MOODLE_SITE_NAME: "Moodle local"
          # MOODLE_PASSWORD_POLICY: "false"
    
        ports:
          - "${FORWARD_MOODLE_PORT:-8083}:8080"  # http://localhost:8083
        volumes:
          - moodle_app:/bitnami/moodle
          - moodle_data:/bitnami/moodledata
        networks:
          - sail
    
    volumes:
      moodle_app:
      moodle_data:
    
    networks:
      sail:
        external: true
        name: ${APP_SERVICE:-sail}
    

    Antes de levantar, asegurate de crear la base moodle en tu MySQL de Sail (o define DB_USERNAME con permisos para crearla). Si preferís que Moodle la cree, dale permisos de creación al usuario.

    Levantar:

    ./vendor/bin/sail up -d
    

    Abrí http://localhost:8083 (admin/admin123 según lo configurado arriba).
    Tu Laravel puede “probar contra Moodle” vía HTTP (APIs/rest, OAuth2, LTI, etc.). Si necesitás que Moodle haga callbacks a Laravel, usa APP_URL y el puerto expuesto de tu app.

    Notas

    • Si usás Postgres en Sail, cambia:
      • depends_on: [pgsql]
      • MOODLE_DATABASE_TYPE: pgsql
      • MOODLE_DATABASE_PORT_NUMBER: 5432
      • MOODLE_DATABASE_HOST: pgsql
    • Moodle requiere un cron. El contenedor Bitnami trae cron integrado. Si querés forzarlo: MOODLE_ENABLE_CRON: "yes" (ya suele venir activo). Alternativa: programar un curl al cron.php con un contenedor sidecar.

    Opción B — Moodle en un compose separado (más aislamiento)

    En otra carpeta:

    services:
      moodle:
        image: bitnami/moodle:latest
        environment:
          MOODLE_USERNAME: admin
          MOODLE_PASSWORD: admin123
          MOODLE_EMAIL: [email protected]
          MOODLE_DATABASE_TYPE: mysqli
          MOODLE_DATABASE_HOST: db
          MOODLE_DATABASE_PORT_NUMBER: 3306
          MOODLE_DATABASE_USER: moodle
          MOODLE_DATABASE_PASSWORD: moodlepass
          MOODLE_DATABASE_NAME: moodle
        ports:
          - "8083:8080"
        volumes:
          - moodle_app:/bitnami/moodle
          - moodle_data:/bitnami/moodledata
        depends_on:
          - db
    
      db:
        image: mysql:8
        environment:
          MYSQL_DATABASE: moodle
          MYSQL_USER: moodle
          MYSQL_PASSWORD: moodlepass
          MYSQL_ROOT_PASSWORD: rootpass
        volumes:
          - db_data:/var/lib/mysql
    
    volumes:
      moodle_app:
      moodle_data:
      db_data:
    

    Luego docker compose up -d. Tu app Laravel puede hablar con Moodle vía http://localhost:8083.


    ¿Cuál conviene?

    • Integrado (override): setup más rápido; todo en una sola red; ideal para pruebas de integración locales.
    • Separado: reinicios y upgrades de Moodle sin afectar Sail; mejor si querés probar múltiples versiones de Moodle o DB diferente.