ThePrudents.moodle
Instalacja Moodle na Ubuntu 14.04 w chmurze BlueMix za pomocą ansible
Wprowadzenie
Moodle to otwarto-źródłowa platforma zarządzania kursami, która umożliwia tworzenie stron do nauki online. Nazwa oznacza "Modular Object-Oriented Dynamic Learning Environment" i oferuje wiele funkcji, które pozwalają na efektywne doświadczenie nauki online, od niewielkiej liczby uczniów do setek.
Możesz na przykład wprowadzić przesyłanie prac, quizy, FAQ, ocenianie, wiadomości, fora dyskusyjne itp. Jako że jest to oprogramowanie modułowe, można je rozszerzyć o wtyczki, aby dodać dodatkowe funkcjonalności.
Moodle zazwyczaj działa na LAMP (Linux, Apache, MySQL i PHP), ale może być także używany z innymi serwerami WWW, takimi jak nginx, a nawet na Windows w środowisku IIS.
Modularność ma swoje zalety i wady - zwykle, jeśli jesteś nauczycielem, masz swój ulubiony zestaw motywów i wtyczek. To sprawia, że początkowa instalacja Moodle jest prawdziwym wyzwaniem dla użytkowników nie-technicznych.
Na szczęście narzędzie do automatyzacji wdrożeń o nazwie Ansible zaoszczędzi Twoje czas przy instalacji.
Tło
Wyzwania do rozwiązania
- Opisz pożądane komponenty Moodle
- Opcjonalnie zainstaluj MySQL (możesz użyć zewnętrznej bazy danych)
- Opcjonalnie zainstaluj LAMP (może chcesz zaktualizować sam Moodle)
- Opcjonalnie zainstaluj wybrane wtyczki i motywy Moodle
- Zainstaluj podstawowe komponenty Moodle
Idźmy krok po kroku.
Opis pożądanych komponentów Moodle
Na podstawie oficjalnego samouczka instalacji dostępnego pod tym adresem: https://docs.moodle.org/30/en/Step-by-step_Installation_Guide_for_Ubuntu, podajemy zależności pakietów i potrzebne rozszerzenia 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
Dla Moodle musimy określić preferowane parametry dostępu do bazy danych, domenę, którą planujesz przypisać instancji Moodle, preferowane miejsce. Może również chcesz sprawdzić, jaka jest najnowsza stabilna wersja Moodle i określić ją.
moodle_db_type: 'mysqli' # 'pgsql', 'mariadb', 'mysqli', 'mssql', 'sqlsrv' lub '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" # Sprawdź na stronie - w tym momencie 30 jest stabilną wersją 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 można zainstalować zarówno z repozytorium git, jak i przez pobieranie artefaktów. Opcja git jest uważana za łatwiejszą w konserwacji.
Obsługujemy obie metody - wybierz najlepszą dla siebie.
# Obecnie git jest najłatwiejszą opcją, obsługiwane również: web, option_install_moodle: git
Opcjonalna instalacja MySQL
Choć Moodle obsługuje wiele baz danych, MySQL jest najczęściej używaną bazą danych na systemach Unix. Aby zainstalować MySQL, musisz jedynie określić pożądane dane uwierzytelniające root.
mysql_host: "127.0.0.1" mysql_root_user: root mysql_root_password: SOMEROOTSECUREPASSWORD
Moodle ma swoje preferencje co do konfiguracji MySQL. Są one definiowane przez własny szablon my.cnf, który można zobaczyć pod tym linkiem: https://github.com/ThePrudents/moodle/blob/master/templates/mysql/my.cnf.j2
Samodzielny przepis na zainstalowanie MySQL można znaleźć tutaj: https://github.com/ThePrudents/moodle/blob/master/tasks/mysql.yml
Opcjonalna instalacja LAMP
W przypadku LAMP mamy możliwość zainstalowania Apache w trybie worker lub prefork. Ma to wpływ na PHP: będzie zainstalowane jako PHP-FPM lub przez moduł mod_php Apache. Obecnie preferowany jest tryb worker.
apache_mode: worker # użyj zmiennych prefork lub worker apache2_disable_default: true php_family: default # 5.4 | 5.5 | 5.6 | default
Możesz sprawdzić przepisy na zainstalowanie Apache (https://github.com/ThePrudents/moodle/blob/master/tasks/apache.yml) oraz PHP (https://github.com/ThePrudents/moodle/blob/master/tasks/php_apache.yml) dla uzyskania dodatkowych informacji.
Zauważ, że ponieważ Moodle wymaga instalacji dodatkowych rozszerzeń PHP, wprowadziliśmy dodatkowy krok, co można sprawdzić tutaj: https://github.com/ThePrudents/moodle/blob/master/tasks/php_additional_extensions.yml
Opcjonalne wtyczki i motywy Moodle
Większość wtyczek i motywów jest instalowanych poprzez rozpakowywanie archiwum do odpowiednich folderów. Proces ten można łatwo zautomatyzować, wystarczy podać nam informacje o preferowanych wtyczkach:
moodle_plugins: - { name: auth_googleoauth2, desc: "Autoryzacja: 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: "Aktywności: Lista kontrolna", url: "https://moodle.org/plugins/download.php/9703/mod_checklist_moodle30_2015110800.zip", dest: mod #/checklist } - { name: block_xp, desc: "Bloki: Poziom w górę!", url: "https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip", dest: blocks #/block_xp } - { name: theme_essential, desc: "Motywy: Podstawowy", url: "https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip", dest: theme #/theme_essential }
Instalacja podstawowych komponentów Moodle
Na tym etapie tworzymy katalogi Moodle (źródło, dane, wtyczki), konfigurujemy bazę danych i ustawiamy wirtualny host Apache dla tej instancji.
Szczegóły kroków można sprawdzić pod tym adresem: https://github.com/ThePrudents/moodle/blob/master/tasks/moodle.yml
Kod w akcji
Aby móc uruchomić wdrożenie, potrzebujemy Ansible i Prudentia. Oba narzędzia są napisane w czystym pythonie. Ansible to zestaw narzędzi DevOps, natomiast Prudentia zapewnia "syntaktyczny cukier" do łatwego uruchamiania playbooków Ansible. Więcej szczegółów na stronie pypi https://pypi.python.org/pypi/prudentia.
Dla Ubuntu typowe kroki, aby uzyskać narzędzia są następujące:
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
Aby ponownie użyć roli Moodle, typowa składnia to: (pamiętaj, że możesz nadpisać dowolny parametr roli, co czyni przepis wystarczająco elastycznym)
roles: - { role: "pr-moodle", moodle_db_host: '127.0.0.1', moodle_db_name: 'moodle', moodle_db_user: 'moodle', moodle_db_pass: 'ytwojesuperbezpieczneshaslo', moodle_app_domain: "twojadomena.com" }
Plik skryptowy do uruchomienia wdrożenia
# Statyczne parametry WORKSPACE=./ BOX_PLAYBOOK=$WORKSPACE/boxes/prod.yml BOX_NAME=moodle_staging BOX_ADDRESS=192.168.0.17 BOX_USER=twoj_użytkownik BOX_PWD=twoje_hasło prudentia ssh <<EOF unregister $BOX_NAME register $BOX_PLAYBOOK $BOX_NAME $BOX_ADDRESS $BOX_USER $BOX_PWD provision $BOX_NAME EOF
Uruchamianie na BlueMix
IBM Bluemix to platforma chmurowa jako usługa (PaaS) opracowana przez IBM. Obsługuje wiele języków programowania i usług oraz zintegrowany DevOps do budowy, uruchamiania, wdrażania i zarządzania aplikacjami w chmurze. Jedna z usług, którą oferuje, nazywa się Wirtualne Maszyny.
Wybierz obraz Ubuntu 14.04.3 LTS (dostępny do pobrania).
Musimy przydzielić publiczny adres IP dla naszej instancji i poczekać na jej inicjalizację.
Nie zapomnij skonfigurować DNS, gdy otrzymasz publiczny adres IP z platformy Bluemix.
Czas rozpocząć wdrożenie. Po wykonaniu wdrożenia zazwyczaj zobaczysz pomyślne logi programisty Ansible.
TASK: [pr-moodle | Konfiguracja Moodle] ************************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Ustawienie cron] ******************************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Utworzenie bazy danych Moodle] ****************** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Utworzenie użytkownika bazy danych Moodle] ******** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | utworzenie konfiguracji witryny apache] ********** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | utworzenie konfiguracji witryny apache] ********** ok: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | a2ensite moodle] ******************************* changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Utworzenie katalogu dla pobranych wtyczek] ******** changed: [bluemix.moodle.dev] TASK: [pr-moodle | Moodle | Pobranie wtyczek] ******************************* changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Autoryzacja: 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': 'Aktywności: Lista kontrolna'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Bloki: Poziom w górę!'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Bloki: Pasek postępu'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Motywy: Podstawowy'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Motywy: Akademickie'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Motywy: Eguru'}) TASK: [pr-moodle | Moodle | Utworzenie katalogu dla pobranych wtyczek] ********** changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Autoryzacja: 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': 'Aktywności: Lista kontrolna'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Bloki: Poziom w górę!'}) ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Bloki: Pasek postępu'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Motywy: Podstawowy'}) ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Motywy: Akademickie'}) ok: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Motywy: Eguru'}) TASK: [pr-moodle | Moodle | Rozpakowanie wtyczek] ****************************** changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9695/auth_googleoauth2_moodle30_2015110600.zip', 'dest': 'auth', 'name': 'auth_googleoauth2', 'desc': 'Autoryzacja: 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': 'Aktywności: Lista kontrolna'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/9400/block_xp_moodle30_2015092800.zip', 'dest': 'blocks', 'name': 'block_xp', 'desc': 'Bloki: Poziom w górę!'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10263/block_progress_moodle30_2016011300.zip', 'dest': 'blocks', 'name': 'block_progress', 'desc': 'Bloki: Pasek postępu'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10342/theme_essential_moodle30_2016010201.zip', 'dest': 'theme', 'name': 'theme_essential', 'desc': 'Motywy: Podstawowy'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10165/theme_academi_moodle30_2015122500.zip', 'dest': 'theme', 'name': 'theme_academi', 'desc': 'Motywy: Akademickie'}) changed: [bluemix.moodle.dev] => (item={'url': 'https://moodle.org/plugins/download.php/10321/theme_eguru_moodle30_2015122800.zip', 'dest': 'theme', 'name': 'theme_eguru', 'desc': 'Motywy: Eguru'}) TASK: [pr-moodle | UFW | Zezwól na ruch http i https] ************************* skipping: [bluemix.moodle.dev] => (item=http) skipping: [bluemix.moodle.dev] => (item=https) TASK: [Wspólna konfiguracja | Zapobiegaj zapytaniom o informacje] ************** skipping: [bluemix.moodle.dev] TASK: [Wspólna konfiguracja | Wiadomość dnia wyjaśniająca, że serwer jest pod kontrolą Prudentia] *** changed: [bluemix.moodle.dev] TASK: [Wspólna konfiguracja | Instalacja wspólnych pakietów apt] **************** 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 Uruchomienie zajęło 3 minuty
Jak widzisz, w mniej niż 5 minut mamy naszego moodle gotowego do konfiguracji.
Po przejściu na stronę zobaczysz początkowy ekran startowy Moodle.
Jak widzimy - skrzynka jest poprawnie skonfigurowana.
Początkowa konfiguracja przebiega płynnie.
Jak widzimy, wszystkie niestandardowe wtyczki i motywy są na miejscu, na przykład "Bloki: Poziom w górę!":
Co można poprawić
Idealnie, przepis może być rozszerzony, aby był całkowicie bezinterakcyjny. Moodle wydaje się dopuszczać taką konfigurację w przyszłości (patrząc na install.php). Niestety, obecnie dokumentacja nie zapewnia klarownego sposobu na zrealizowanie tego, chyba że zaprogramujesz konfigurację i bazę danych istniejącego moodle.
Czytelnicy są mile widziani, aby doradzić opcje.
ansible-galaxy install ThePrudents.moodle