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). Créer une nouvelle vm

Nous devons allouer une adresse IP publique pour notre instance et attendre son initialisation. Attendre l'initialisation

N'oubliez pas de configurer le DNS une fois que vous avez obtenu l'adresse IP publique de la plateforme Bluemix. N'oubliez pas de noter l'adresse IP

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.

Écran d'accueil

Comme nous le voyons, la boîte est correctement configurée. Boîte configurée correctement

La configuration initiale se déroule sans problème. Configuration initiale

Comme nous le voyons, tous les plugins et thèmes personnalisés sont en place, par exemple "Blocs : Level up !" : Blocs : Level up ! présent

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.

À propos du projet

zero dependency role to install Moodle on debian system

Installer
ansible-galaxy install ThePrudents.moodle
Licence
Unknown
Téléchargements
70
Propriétaire
StarterSquad team