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 (доступный для официальной загрузки).
Нам нужно выделить публичный IP-адрес для нашего экземпляра и дождаться его инициализации.
Не забудьте настроить DNS, как только вы получите публичный IP-адрес с платформы Bluemix.
Время выполнять провизию. После ее выполнения вы обычно увидите успешный лог провизионера 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.
Читатели могут предложить варианты.
ansible-galaxy install ThePrudents/moodle