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). Utwórz nową vm

Musimy przydzielić publiczny adres IP dla naszej instancji i poczekać na jej inicjalizację. Czekaj na inicjalizację

Nie zapomnij skonfigurować DNS, gdy otrzymasz publiczny adres IP z platformy Bluemix. Nie zapomnij zanotować adresu IP

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. Początkowy ekran

Jak widzimy - skrzynka jest poprawnie skonfigurowana. Skrzynka skonfigurowana poprawnie

Początkowa konfiguracja przebiega płynnie. Początkowa konfiguracja przebiegła gładko

Jak widzimy, wszystkie niestandardowe wtyczki i motywy są na miejscu, na przykład "Bloki: Poziom w górę!": Bloki: Poziom w górę! jest obecny

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.

O projekcie

zero dependency role to install Moodle on debian system

Zainstaluj
ansible-galaxy install ThePrudents.moodle
Licencja
Unknown
Pobrania
70
Właściciel
StarterSquad team