ThePrudents.moodle
Installation de Moodle sur Ubuntu 14.04 dans un environnement cloud BlueMix avec Ansible
Introduction
Moodle est une plateforme de gestion de cours open source qui vous permet de créer des sites d'apprentissage en ligne. Le nom signifie Environnement d'Apprentissage Dynamique Orienté Objet Modulaire et il propose de nombreuses fonctionnalités permettant une expérience d'apprentissage en ligne efficace, pouvant évoluer d'un petit nombre d'étudiants à des centaines.
Par exemple, vous pouvez introduire la soumission de devoirs, des quiz, des FAQ, des systèmes de notation, des messages instantanés, des forums de discussion, etc. De plus, étant un logiciel modulaire, il peut être étendu avec des plugins pour ajouter des fonctionnalités supplémentaires.
Moodle fonctionne généralement sur LAMP (Linux, Apache, MySQL et PHP), mais peut également être utilisé avec d'autres serveurs web, comme nginx ou même sur Windows sous IIS.
La modularité a ses avantages et ses inconvénients – généralement, si vous êtes enseignant, vous avez votre propre ensemble de thèmes et de plugins préférés. Cela rend l’installation initiale de Moodle vraiment difficile pour les utilisateurs non techniques.
Heureusement, un outil d'automatisation de déploiement appelé Ansible vous fera gagner du temps lors de l'installation.
Contexte
Défis à relever
- Décrire les composants Moodle souhaités
- Installer MySQL en option (vous pouvez utiliser une base de données externe)
- Installer LAMP en option (peut-être que vous mettez à jour Moodle lui-même)
- Installer les plugins et thèmes Moodle de votre choix en option
- Installer les composants principaux de Moodle
Passons étape par étape.
Décrire les composants Moodle souhaités
Selon le tutoriel d'installation officiel trouvé sur https://docs.moodle.org/30/en/Step-by-step_Installation_Guide_for_Ubuntu, listons les dépendances des paquets et les extensions PHP nécessaires.
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
Pour Moodle, nous devons spécifier les paramètres d'accès à la base de données préférés, le domaine que vous prévoyez d’assigner à l'instance Moodle et l'emplacement préféré. Vous voudrez également vérifier quelle est la version stable de Moodle la plus récente et la spécifier également.
moodle_db_type: 'mysqli' # 'pgsql', 'mariadb', 'mysqli', 'mssql', 'sqlsrv' ou '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" 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 peut être installé soit à partir d'un dépôt git, soit par téléchargement d'un artefact. L'option git est généralement plus facile à maintenir.
Nous soutenons les deux méthodes ici, à vous de choisir celle qui vous convient le mieux.
# Actuellement, git est le plus simple, également supporté : web, option_install_moodle: git
Installation de MySQL optionnelle
Bien que Moodle prenne en charge plusieurs bases de données, MySQL est la base de données la plus courante et connue sur Unix. Pour installer MySQL, vous devrez spécifier les identifiants root de MySQL souhaités.
mysql_host: "127.0.0.1" mysql_root_user: root mysql_root_password: UNMOTDEPASSESECURE
Moodle a ses propres préférences pour la configuration de MySQL. Celles-ci sont prises en compte par un modèle my.cnf personnalisé, que vous pouvez consulter ici : https://github.com/ThePrudents/moodle/blob/master/templates/mysql/my.cnf.j2
Une recette autonome pour installer MySQL se trouve ici : https://github.com/ThePrudents/moodle/blob/master/tasks/mysql.yml
Installation de LAMP optionnelle
Pour LAMP, nous avons la possibilité d'installer Apache soit en mode worker soit en mode prefork. Cela a un impact sur PHP : il sera installé soit comme PHP-FPM soit via le module mod_php d'Apache. De nos jours, le mode worker est préféré.
apache_mode: worker # utiliser les variables prefork ou worker apache2_disable_default: true php_family: default # 5.4 | 5.5 | 5.6 | default
Vous voudrez peut-être consulter les recettes pour installer Apache (https://github.com/ThePrudents/moodle/blob/master/tasks/apache.yml) et PHP (https://github.com/ThePrudents/moodle/blob/master/tasks/php_apache.yml) pour plus de détails.
Notez que comme Moodle nécessite l'installation d'extensions PHP supplémentaires, nous avons introduit une étape supplémentaire, comme vous pouvez le voir ici : https://github.com/ThePrudents/moodle/blob/master/tasks/php_additional_extensions.yml
Plugins et thèmes Moodle personnalisés optionnels
La plupart des plugins et thèmes sont installés en décompressant l'archive dans les dossiers appropriés. Nous pouvons facilement automatiser ce processus si vous nous donnez simplement les informations sur vos plugins préférés :
moodle_plugins: - { name: auth_googleoauth2, desc: "Authentification : 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: "Activités : Checklist", url: "https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip", dest: mod #/checklist } - { name: block_xp, desc: "Blocs : Level up !", url: "https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip", dest: blocks #/block_xp } - { name: theme_essential, desc: "Thèmes : Essential", url: "https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip", dest: theme #/theme_essential }
Installer les composants principaux de Moodle
À ce stade, nous créons les répertoires de Moodle (source, données, plugins), configurons la base de données et configurons l'hôte virtuel Apache pour cette instance.
Les détails des étapes peuvent être consultés à cet emplacement : https://github.com/ThePrudents/moodle/blob/master/tasks/moodle.yml
Code en action
Pour pouvoir exécuter le provisioning, nous aurons besoin d’Ansible et de Prudentia. Les deux outils sont en pur Python. Ansible est un outil DevOps, tandis que Prudentia fournit une "syntaxe facilitée" pour exécuter facilement des playbooks Ansible. Voir plus de détails sur pypi https://pypi.python.org/pypi/prudentia. Pour Ubuntu, vos étapes typiques pour obtenir les outils sont :
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
Pour réutiliser le rôle Moodle, la syntaxe typique est la suivante : (veuillez noter que vous pouvez remplacer n'importe quel paramètre de rôle, ce qui rend la recette suffisamment flexible)
roles: - { role: "pr-moodle", moodle_db_host: '127.0.0.1', moodle_db_name: 'moodle', moodle_db_user: 'moodle', moodle_db_pass: 'votremotdepasseultrasecure', moodle_app_domain: "votredomain.com" }
Fichier Shell pour exécuter le provisioning de la boîte
# Paramètres statiques WORKSPACE=./ BOX_PLAYBOOK=$WORKSPACE/boxes/prod.yml BOX_NAME=moodle_staging BOX_ADDRESS=192.168.0.17 BOX_USER=youruser BOX_PWD=yourpass prudentia ssh <<EOF unregister $BOX_NAME register $BOX_PLAYBOOK $BOX_NAME $BOX_ADDRESS $BOX_USER $BOX_PWD provision $BOX_NAME EOF
Fonctionnement sur BlueMix
IBM Bluemix est une plateforme cloud en tant que service (PaaS) développée par IBM. Elle prend en charge plusieurs langages de programmation et services ainsi qu'un DevOps intégré pour construire, exécuter, déployer et gérer des applications dans le cloud. L'un des services fournis est appelé Machines Virtuelles.
Choisissons l'image Ubuntu 14.04.3 LTS (disponible dans les téléchargements officiels).
Nous devons allouer une adresse IP publique pour notre instance et attendre son initialisation.
N'oubliez pas de configurer le DNS une fois que vous avez obtenu l'adresse IP publique de la plateforme Bluemix.
Il est temps d'exécuter la configuration. Après avoir exécuté la configuration, vous verrez généralement un journal de réussite du provisionneur Ansible.
TASK: [pr-moodle | Configure Moodle] ****************************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Set up cron] ************************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Create Moodle database] *************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Create Moodle db user] **************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | create apache site configuration] ***************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | create apache site configuration] ***************** ok: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | a2ensite moodle] ********************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Create directory for downloaded plugins] ********** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Download plugins] ********************************* changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Authentification : Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip', 'dest': 'mod', 'name': 'mod_checklist', 'desc': 'Activités : Checklist'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Blocs : Level up !'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Blocs : Progress Bar'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Thèmes : Essential'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Thèmes : Academi'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Thèmes : Eguru'}) TASK: [pr-moodle | Moodle | Create directory for downloaded plugins] ********** changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Authentification : Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip', 'dest': 'mod', 'name': 'mod_checklist', 'desc': 'Activités : Checklist'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Blocs : Level up !'}) ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Blocs : Progress Bar'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Thèmes : Essential'}) ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Thèmes : 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': 'Thèmes : Eguru'}) TASK: [pr-moodle | Moodle | Unpack plugins] *********************************** changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Authentification : Google / Facebook / Github / Linkedin / DropBox / Windows / VK / Battle.net'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip', 'dest': 'mod', 'name': 'mod_checklist', 'desc': 'Activités : Checklist'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Blocs : Level up !'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Blocs : Progress Bar'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Thèmes : Essential'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Thèmes : Academi'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Thèmes : Eguru'}) TASK: [pr-moodle | UFW | Allow incoming http & https] ************************* skipping: [bluemix.moodle.dev] => (item=http) skipping: [bluemix.moodle.dev] => (item=https) TASK: [Common setup | Preventing ucf to ask information] ********************** skipping: [bluemix.moodle.dev] TASK: [Common setup | Message of the day explaining server is under Prudentia control] *** changed: [bluemix.moodle.dev] TASK: [Common setup | Install common apt packages] **************************** changed: [bluemix.moodle.dev] => (item=build-essential,reptyr,htop,curl,python-software-properties,python-httplib2) NOTIFIED: [pr-moodle | restart apache2] *************************************** changed: [bluemix.moodle.dev] PLAY RECAP ******************************************************************** bluemix.moodle.dev : ok=60 changed=52 unreachable=0 failed=0 La lecture du jeu a pris 3 minutes
Comme vous le voyez, en moins de 5 minutes, nous avons notre Moodle prêt à être configuré.
En naviguant sur le site, nous verrons l'écran de démarrage initial de Moodle.
Comme nous le voyons, la boîte est correctement configurée.
La configuration initiale se déroule sans problème.
Comme nous le voyons, tous les plugins et thèmes personnalisés sont en place, par exemple "Blocs : Level up !" :
Qu'est-ce qui peut être amélioré
Idéalement, la recette peut être étendue pour être totalement non interactive. Moodle semble permettre une telle configuration à l'avenir (en regardant le fichier install.php). Malheureusement, à présent, la documentation ne fournit pas de méthode claire pour le faire, à moins que vous ne programmiez la configuration et la base de données d'un Moodle existant.
Les lecteurs sont invités à donner des conseils sur les options.
ansible-galaxy install ThePrudents.moodle