moodle

Установка Moodle на Ubuntu 14.04 в облачной среде BlueMix с использованием ansible

Введение

Moodle – это платформа для управления курсами с открытым исходным кодом, которая позволяет создавать онлайн-учебные сайты. Название означает Модульная Объектно-Ориентированная Динамическая Учебная Среда (Modular Object-Oriented Dynamic Learning Environment). Она имеет множество функций, обеспечивающих эффективное онлайн-обучение, которое может масштабироваться от небольшого количества студентов до сотен.

Например, вы можете внедрить отправку заданий, викторины, часто задаваемые вопросы (FAQ), оценивание, мгновенные сообщения, форумы и т.д. Поскольку это модульное программное обеспечение, его можно расширять с помощью плагинов для добавления дополнительных функций.

Moodle обычно работает на LAMP (Linux, Apache, MySQL и PHP), но также может быть использован с другими веб-серверами, такими как nginx и даже на Windows под управлением IIS.

Модульность имеет свои плюсы и минусы: обычно, если вы — преподаватель, у вас есть собственный предпочтительный набор тем и плагинов. Это делает начальную установку Moodle настоящей головной болью для не технических пользователей.

К счастью, инструмент автоматизации развертывания под названием ansible сэкономит вам время на установку.

Проблемы, которые нужно решить

  • Описать необходимые компоненты Moodle
  • При желании установить MySQL (можно использовать внешнюю базу данных)
  • При желании установить LAMP (возможно, вы обновите сам Moodle).
  • При желании установить плагины и темы Moodle на ваш выбор
  • Установить основные компоненты Moodle

Давайте пройдемся по этапам.

Описание необходимых компонентов Moodle

Согласно официальному руководству по установке на https://docs.moodle.org/30/en/Step-by-step_Installation_Guide_for_Ubuntu нужно перечислить как зависимости пакетов, так и необходимые расширения php.

  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

Для самого Moodle необходимо указать предпочитаемые параметры доступа к базе данных, домен, который вы планируете назначить для экземпляра Moodle, и предпочитаемое местоположение. Также стоит проверить, какая версия Moodle является самой последней стабильной, и указать это.

  moodle_db_type: 'mysqli' # 'pgsql', 'mariadb', 'mysqli', 'mssql', 'sqlsrv' или '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"
  # Узнать на сайте - на данный момент 30 является последней стабильной
  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 может быть установлен либо из git-репозитория, либо путем загрузки артефактов. Считается, что вариант с git поддерживается проще.

Мы поддерживаем оба способа, вы выбираете лучший для вашей ситуации.

# В настоящее время git - самый простой, также поддерживается: веб,
  option_install_moodle: git

Опциональная установка MySQL

Хотя Moodle поддерживает несколько баз данных, MySQL является самой типичной и известной базой данных на unix. Чтобы установить MySQL, вам нужно будет указать только желаемые учетные данные root для mysql.

  mysql_host: "127.0.0.1"
  mysql_root_user: root
  mysql_root_password: SOMEROOTSECUREPASSWORD

У Moodle есть свои предпочтения для конфигурации MySQL. Это обрабатывается с помощью пользовательского шаблона my.cnf, который вы можете проверить по этой ссылке: https://github.com/ThePrudents/moodle/blob/master/templates/mysql/my.cnf.j2

Самостоятельный рецепт для установки MySQL можно найти здесь: https://github.com/ThePrudents/moodle/blob/master/tasks/mysql.yml

Опциональная установка LAMP

Для LAMP у нас есть возможность установить apache либо в режиме worker, либо в режиме prefork. Это влияет на PHP: он будет установлен либо как PHP-FPM, либо через модуль mod_php apache. На данный момент режим worker предпочтителен.

  apache_mode: worker # используйте переменные prefork или worker
  apache2_disable_default: true

  php_family: default # 5.4 | 5.5 | 5.6 | default

Вам может быть полезно проверить рецепты для установки Apache (https://github.com/ThePrudents/moodle/blob/master/tasks/apache.yml) и PHP (https://github.com/ThePrudents/moodle/blob/master/tasks/php_apache.yml) для получения более подробной информации.

Обратите внимание, что поскольку Moodle требует установки дополнительных расширений php, мы добавили дополнительный шаг, который можно проверить здесь: https://github.com/ThePrudents/moodle/blob/master/tasks/php_additional_extensions.yml

Опциональные пользовательские плагины и темы Moodle

Большинство плагинов и тем устанавливаются путем распаковки архива в соответствующие папки. Мы можем легко автоматизировать этот процесс, вам нужно только сообщить информацию о ваших предпочтительных плагинах:

 moodle_plugins:
    - {
      name: auth_googleoauth2,
      desc: "Аутентификация: 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: "Деятельности: Контрольный список",
      url: "https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip",
      dest: mod #/checklist
      }
    - {
      name: block_xp,
      desc: "Блоки: Уровень вверх!",
      url: "https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip",
      dest: blocks #/block_xp
      }
    - {
      name: theme_essential,
      desc: "Темы: Основная",
      url: "https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip",
      dest: theme #/theme_essential
      }

Установка основных компонентов Moodle

На этом этапе мы создаем каталоги Moodle (исходный, данные, плагины), выполняем конфигурацию базы данных, настраиваем виртуальный хост Apache для этого экземпляра.

Подробности шагов можно проверить по этой ссылке: https://github.com/ThePrudents/moodle/blob/master/tasks/moodle.yml

Код в действии

Для того чтобы иметь возможность запускать развертывание, нам понадобятся ansible и prudentia. Оба инструмента написаны на чистом Python. Ansible — это инструментарий для devops, а prudentia добавляет «синтетический сахар» для легкого запуска ansible playbook. Подробнее на pypi https://pypi.python.org/pypi/prudentia. Для Ubuntu ваши типичные шаги для получения инструментов:

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

Чтобы повторно использовать роль Moodle, типичный синтаксис будет следующим: (обратите внимание, что вы можете переопределить любые параметры роли, что делает рецепт достаточно гибким)

  roles:
     - {
         role: "pr-moodle",
         moodle_db_host: '127.0.0.1',
         moodle_db_name: 'moodle',
         moodle_db_user: 'moodle',
         moodle_db_pass: 'yoursupersecurepassword',
         moodle_app_domain: "yourdomainname.com"

       }

В файл оболочки для выполнения провизии


# Статические параметры
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 <


Запуск на BlueMix

IBM Bluemix – это облачная платформа как услуга (PaaS), разработанная IBM. Она поддерживает несколько языков программирования и сервисов, а также интегрированный DevOps для разработки, запуска, развертывания и управления приложениями в облаке. Один из предоставляемых сервисов называется Виртуальные Машины.

Выбираем образ ubuntu 14.04.3 LTS (доступный для официальной загрузки). Создать новую vm

Нам нужно выделить публичный IP-адрес для нашего экземпляра и дождаться его инициализации. Ждем инициализацию

Не забудьте настроить DNS, как только вы получите публичный IP-адрес с платформы Bluemix. Не забудьте отметить IP-адрес

Время выполнять провизию. После ее выполнения вы обычно увидите успешный лог провизионера ansible.

TASK: [pr-moodle | Настройка Moodle] ******************************************
changed: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Настройка cron] **************************************
changed: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Создание базы данных Moodle] ***************************
changed: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Создание пользователя базы данных Moodle] ****************************
changed: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | создание конфигурации сайта apache] *****************
changed: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | создание конфигурации сайта apache] *****************
ok: [bluemix.moodle.dev]

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

TASK: [pr-moodle | Moodle | Создание каталога для загруженных плагинов] **********
changed: [bluemix.moodle.dev]

TASK: [pr-moodle | Moodle | Загрузка плагинов] *********************************
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Аутентификация: 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': 'Деятельности: Контрольный список'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Блоки: Уровень вверх!'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Блоки: Индикатор прогресса'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Темы: Основная'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Темы: Академия'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Темы: Эгуро'})

TASK: [pr-moodle | Moodle | Создание каталога для загруженных плагинов] **********
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Аутентификация: 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': 'Деятельности: Контрольный список'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Блоки: Уровень вверх!'})
ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Блоки: Индикатор прогресса'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Темы: Основная'})
ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Темы: Академия'})
ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Темы: Эгуро'})

TASK: [pr-moodle | Moodle | Распаковка плагинов] ***********************************
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Аутентификация: 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': 'Деятельности: Контрольный список'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Блоки: Уровень вверх!'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Блоки: Индикатор прогресса'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Темы: Основная'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Темы: Академия'})
changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Темы: Эгуро'})

TASK: [pr-moodle | UFW | Разрешить входящие http и https] *************************
skipping: [bluemix.moodle.dev] => (item=http)
skipping: [bluemix.moodle.dev] => (item=https)

TASK: [Общая настройка | Предотвращение запроса информации от ucf] **********************
skipping: [bluemix.moodle.dev]

TASK: [Общая настройка | Сообщение дня, объясняющее, что сервер находится под контролем Prudentia] ***
changed: [bluemix.moodle.dev]

TASK: [Общая настройка | Установка общих пакетов apt] ****************************
changed: [bluemix.moodle.dev] => (item=build-essential,reptyr,htop,curl,python-software-properties,python-httplib2)

NOTIFIED: [pr-moodle | перезапустить apache2] ***************************************
changed: [bluemix.moodle.dev]

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

Время выполнения – 3 минуты

Как видите, за менее чем 5 минут у нас есть готовый Moodle для конфигурации.

При переходе на сайт мы увидим начальный экран Moodle. Начальный экран

Как видно, коробка настроена правильно. Коробка настроена правильно

Начальная настройка проходит гладко. Начальная настройка проходит гладко

Как видно, все пользовательские плагины и темы на месте, например "Блоки: Уровень вверх!": Блоки: Уровень вверх! присутствует

Что можно улучшить

В идеале, рецепт можно расширить, чтобы он был полностью неинтерактивным. Кажется, что Moodle позволит такую настройку в будущем (глядя на install.php). К сожалению, на данный момент документация не предоставляет ясного способа, как это сделать, если не написать сценарий для конфигурации и БД существующего Moodle.

Читатели могут предложить варианты.

О проекте

zero dependency role to install Moodle on debian system

Установить
ansible-galaxy install ThePrudents/moodle
Лицензия
Unknown
Загрузки
61
Владелец
StarterSquad team