ThePrudents.moodle

Instalación de Moodle en Ubuntu 14.04 en el entorno de nube de BlueMix con Ansible

Estado de construcción

Introducción

Moodle es una plataforma de gestión de cursos de código abierto que permite crear sitios de aprendizaje en línea. Su nombre significa Entorno de Aprendizaje Dinámico Modular Orientado a Objetos, y cuenta con varias características que permiten una experiencia de aprendizaje en línea efectiva, que puede escalar desde un pequeño número de estudiantes hasta cientos.

Por ejemplo, podrías introducir la entrega de tareas, cuestionarios, preguntas frecuentes, calificaciones, mensajes instantáneos, foros de discusión, etc. Dado que es un software modular, se puede ampliar con complementos para agregar funcionalidades adicionales.

Moodle normalmente se ejecuta sobre LAMP (Linux, Apache, MySQL y PHP), pero también puede utilizarse con otros servidores web, como nginx e incluso en Windows bajo IIS.

La modularidad es tanto una ventaja como una desventaja: generalmente, si eres el profesor, tienes tu propio conjunto preferido de temas y complementos. Esto hace que la instalación inicial de Moodle sea un verdadero dolor para los usuarios no técnicos.

Afortunadamente, la herramienta de automatización de despliegues llamada Ansible te ahorrará tiempo en la instalación.

Antecedentes

Desafíos a abordar

  • Describir los componentes deseados de Moodle
  • Instalar MySQL opcionalmente (puedes usar una base de datos externa)
  • Instalar LAMP opcionalmente (quizás necesites actualizar Moodle)
  • Instalar los complementos y temas de Moodle que prefieras
  • Instalar los componentes centrales de Moodle

Vamos paso a paso.

Describiendo los componentes deseados de Moodle

Según el tutorial oficial de instalación que se encuentra en https://docs.moodle.org/30/en/Step-by-step_Installation_Guide_for_Ubuntu, enumeremos las dependencias de paquetes y las extensiones PHP necesarias.

  pkg_dependencies:
    - git
    - curl
    - python-dev
    - libmysqlclient-dev
    - graphviz
    - aspell
    - clamav
    - unzip

  php_extensions:
    - php5-mysql
    - php5-intl
    - php5-xmlrpc
    - php5-pspell
    - php5-curl
    - php5-gd
    - php5-ldap

Para Moodle en sí, necesitamos especificar los parámetros de acceso a la base de datos preferidos, el dominio que planeas asignar a la instancia de Moodle y la ubicación preferida. También querrás comprobar cuál es la versión estable más reciente de Moodle y especificarla también.

  moodle_db_type: 'mysqli' #  'pgsql', 'mariadb', 'mysqli', 'mssql', 'sqlsrv' o 'oci'
  moodle_db_host: '{{mysql_host}}'
  moodle_db_name: 'moodle'
  moodle_db_user: 'moodle'
  moodle_db_pass: 'moodle'
  moodle_app_domain: "moodle.dev"
  moodle_app_root: "/opt/moodle"
  moodle_app_wwwroot: "{{ moodle_app_root }}/moodle"
  moodle_app_datadir: "{{moodle_app_root}}/moodledata"
  moodle_app_plugindir: "{{moodle_app_root}}/downloadedplugins"
  # Consulta en el sitio - en ese momento 30 es reciente y estable
  moodle_git_version: "MOODLE_30_STABLE"
  moodle_artifact_baseurl: https://download.moodle.org/download.php/direct/stable30
  moodle_archive_version: "moodle-latest-30.tgz"

  moodle_user: "{{ansible_user_id}}"

  moodle_admin_user: "6NHkm*S!^W4w"

Moodle puede instalarse desde un repositorio git o mediante la descarga de un artefacto. La opción git se considera más fácil de mantener.

Aquí apoyamos ambas opciones, tú decides la mejor para tu caso.

# Actualmente git es lo más fácil, también soportado: web,
  option_install_moodle: git

Instalación opcional de MySQL

Aunque Moodle admite múltiples bases de datos, MySQL es la base de datos más típica y conocida en Unix. Para instalar MySQL, solo necesitarás especificar las credenciales deseadas del usuario root de MySQL.

  mysql_host: "127.0.0.1"
  mysql_root_user: root
  mysql_root_password: SOMEROOTSECUREPASSWORD

Moodle tiene sus propias preferencias para la configuración de MySQL. Estas se abordan mediante una plantilla personalizada my.cnf, como puedes comprobar en este enlace: https://github.com/ThePrudents/moodle/blob/master/templates/mysql/my.cnf.j2

Una receta autónoma para instalar MySQL se puede encontrar aquí: https://github.com/ThePrudents/moodle/blob/master/tasks/mysql.yml

Instalación opcional de LAMP

Para LAMP, tenemos la capacidad de instalar Apache ya sea en modo worker o prefork. Esto afecta a PHP: se instalará como PHP-FPM o mediante el módulo mod_php de Apache. Hoy en día, el modo worker es el preferido.

  apache_mode: worker # usar variables prefork o worker
  apache2_disable_default: true

  php_family: default # 5.4 | 5.5 | 5.6 | default

Es posible que desees revisar las recetas para instalar Apache (https://github.com/ThePrudents/moodle/blob/master/tasks/apache.yml) y PHP (https://github.com/ThePrudents/moodle/blob/master/tasks/php_apache.yml) para más detalles.

Ten en cuenta que, dado que Moodle requiere que se instalen extensiones PHP adicionales, hemos introducido un paso adicional, como se puede comprobar aquí: https://github.com/ThePrudents/moodle/blob/master/tasks/php_additional_extensions.yml

Instalación opcional de complementos y temas personalizados de Moodle

La mayoría de los complementos y temas se instalan descomprimiendo el archivo en las carpetas adecuadas. Podemos automatizar fácilmente ese proceso; solo necesitas darnos la información de tus complementos preferidos:

 moodle_plugins:
    - {
      name: auth_googleoauth2,
      desc: "Autenticación: Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net",
      url: "https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip",
      dest: auth #/googleoauth2
      }
    - {
      name: mod_checklist,
      desc: "Actividades: Lista de comprobación",
      url: "https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip",
      dest: mod #/checklist
      }
    - {
      name: block_xp,
      desc: "Bloques: ¡Sube de nivel!",
      url: "https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip",
      dest: blocks #/block_xp
      }
    - {
      name: theme_essential,
      desc: "Temas: Esencial",
      url: "https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip",
      dest: theme #/theme_essential
      }

Instalación de los componentes centrales de Moodle

En este paso creamos los directorios de Moodle (fuente, datos, complementos), realizamos la configuración de la base de datos y configuramos el host virtual de Apache para esta instancia.

Los detalles de los pasos se pueden consultar en esta ubicación: https://github.com/ThePrudents/moodle/blob/master/tasks/moodle.yml

Código en acción

Para poder ejecutar la provisión, necesitamos Ansible y Prudentia. Ambas herramientas son puramente de Python. Ansible es un conjunto de herramientas de devops, mientras que Prudentia proporciona una "sintaxis amigable" para ejecutar fácilmente los playbooks de Ansible. Más detalles en pypi https://pypi.python.org/pypi/prudentia. Para Ubuntu, tus pasos típicos para obtener las herramientas son:

sudo apt-get install git
sudo apt-get install python-pip
pip install -U pip
pip install -U ansible==1.9.4
pip install prudentia

Para reutilizar el rol de Moodle, la sintaxis típica es: (ten en cuenta que puedes anular cualquier parámetro del rol, lo que hace la receta lo suficientemente flexible)

  roles:
     - {
         role: "pr-moodle",
         moodle_db_host: '127.0.0.1',
         moodle_db_name: 'moodle',
         moodle_db_user: 'moodle',
         moodle_db_pass: 'tucontraseñaaltasegura',
         moodle_app_domain: "tudominiocom.com"

       }

Archivo shell para ejecutar la provisión de la caja:


# Parámetros estáticos
WORKSPACE=./
BOX_PLAYBOOK=$WORKSPACE/boxes/prod.yml
BOX_NAME=moodle_staging
BOX_ADDRESS=192.168.0.17
BOX_USER=tuusuario
BOX_PWD=tupassword

prudentia ssh <<EOF
unregister $BOX_NAME

register
$BOX_PLAYBOOK
$BOX_NAME
$BOX_ADDRESS
$BOX_USER
$BOX_PWD

provision $BOX_NAME
EOF

Ejecutando en BlueMix

IBM Bluemix es una plataforma de nube como servicio (PaaS) desarrollada por IBM. Soporta varios lenguajes de programación y servicios, así como DevOps integrado para construir, ejecutar, desplegar y gestionar aplicaciones en la nube. Uno de los servicios proporcionados se llama Máquinas Virtuales.

Elijamos la imagen de Ubuntu 14.04.3 LTS (disponible en descargas oficiales). Crear nueva VM

Necesitamos asignar una dirección IP pública a nuestra instancia y esperar a que se inicialice. Esperar a que se inicialice

No olvides configurar el DNS una vez que tengas la dirección IP pública de la plataforma Bluemix. No olvides anotar la dirección IP

Es hora de ejecutar la provisión. Después de ejecutar la provisión, típicamente verás un registro exitoso del aprovisionador de Ansible.

TASK: [pr-moodle | Configurar Moodle] ******************************************
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Configurar cron] **************************************
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Crear base de datos de Moodle] ***************************
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Crear usuario de la base de datos de Moodle] ****************************
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | crear configuración del sitio apache] *****************
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | crear configuración del sitio apache] *****************
ok: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | a2ensite moodle] **********************************
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Crear directorio para plugins descargados] **********
cambiado: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Descargar plugins] *********************************
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Autenticación: Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip', 'dest': 'mod', 'name': 'mod_checklist', 'desc': 'Actividades: Lista de comprobación'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Bloques: ¡Sube de nivel!'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Bloques: Barra de progreso'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Temas: Esencial'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Temas: Academi'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Temas: Eguru'})

TASK: [pr-moodle | Moodle | Crear directorio para plugins descargados] **********
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Autenticación: Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip', 'dest': 'mod', 'name': 'mod_checklist', 'desc': 'Actividades: Lista de comprobación'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Bloques: ¡Sube de nivel!'})
ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Bloques: Barra de progreso'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Temas: Esencial'})
ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Temas: Academi'})
ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Temas: Eguru'})

TASK: [pr-moodle | Moodle | Descomprimir plugins] ***********************************
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Autenticación: Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip', 'dest': 'mod', 'name': 'mod_checklist', 'desc': 'Actividades: Lista de comprobación'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Bloques: ¡Sube de nivel!'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Bloques: Barra de progreso'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Temas: Esencial'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Temas: Academi'})
cambiado: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Temas: Eguru'})

TASK: [pr-moodle | UFW | Permitir http y https entrantes] *************************
omitido: [bluemix.moodle.dev] => (item=http)
omitido: [bluemix.moodle.dev] => (item=https)

TASK: [Configuración común | Previniendo que ucf pida información] **********************
omitido: [bluemix.moodle.dev]

TASK: [Configuración común | Mensaje del día explicando que el servidor está bajo el control de Prudentia] ***
cambiado: [bluemix.moodle.dev]

TASK: [Configuración común | Instalar paquetes comunes de apt] ****************************
cambiado: [bluemix.moodle.dev] => (item=build-essential,reptyr,htop,curl,python-software-properties,python-httplib2)

NOTIFICADO: [pr-moodle | reiniciar apache2] ***************************************
cambiado: [bluemix.moodle.dev]

PLAY RECAP ********************************************************************
bluemix.moodle.dev         : ok=60   changed=52   unreachable=0    failed=0

La ejecución del juego tomó 3 minutos

Como ves, en menos de 5 minutos tenemos nuestro Moodle listo para configuración.

Al navegar al sitio, veremos la pantalla inicial de inicio de Moodle.

Pantalla inicial

Como vemos, la caja está configurada correctamente. Caja configurada correctamente

La configuración inicial transcurre sin problemas. Configuración inicial transcurre sin problemas

Como vemos, todos los complementos y temas personalizados están en su lugar, por ejemplo "Bloques: ¡Sube de nivel!": Bloques: ¡Sube de nivel! está presente

Qué se puede mejorar

Idealmente, la receta se puede extender para ser totalmente no interactiva. Moodle parece permitir tal configuración en el futuro (mirando install.php). Desafortunadamente, en este momento, la documentación no proporciona una forma clara de hacerlo, a menos que scriptes la configuración y la base de datos de Moodle existente.

Los lectores son bienvenidos a aconsejar sobre las opciones.

Acerca del proyecto

zero dependency role to install Moodle on debian system

Instalar
ansible-galaxy install ThePrudents.moodle
Licencia
Unknown
Descargas
70
Propietario
StarterSquad team