ThePrudents.moodle
Instalación de Moodle en Ubuntu 14.04 en el entorno de nube de BlueMix con Ansible
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).
Necesitamos asignar una dirección IP pública a nuestra instancia y esperar a que se inicialice.
No olvides configurar el DNS una vez que tengas la dirección IP pública de la plataforma Bluemix.
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.
Como vemos, la caja está configurada correctamente.
La 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!":
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.
ansible-galaxy install ThePrudents.moodle