¿Puedo trabajar con Moodle en un Proyecto Laravel?

Laravel Sail Linux

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.

Comentarios

Dejá una respuesta