MoodleMU: Die Erste…

Ein ganz simp­le Metho­de, um meh­re­re Mood­le­sys­te­me mit einer ein­zi­gen Code­ba­sis auf dem glei­chen Webs­pace zu betrei­ben, führt über eine dyna­mi­sche config.php. Vor­aus­set­zung ist, dass die Mood­le­da­tei­en in einem Ver­zeich­nis auf dem Ser­ver lie­gen, das ich ein­fach ein­mal „foo” nen­ne. Auf die­ses Ver­zeich­nis müs­sen meh­re­re Sub­do­mains zei­gen, wie sie in fast jedem Webs­pace­pa­ket inklu­diert sind z.B.

http://heim.domain.tld

http://schu­le.domain.tld

Jetzt wird die config.php so modi­fi­ziert, dass sie in Abhän­gig­keit von der auf­ge­ru­fe­nen Sub­do­main die für Mood­le essen­ti­el­len Varia­blen anders setzt. Hier ist das voll­stän­di­ge Code­bei­spiel, was bit­te als Denk­an­stoß ver­stan­den wer­den soll, auch wenn es viel­leicht sogar so läuft:

<?php

# Pfad zum Ver­zeich­nis, in dem alle Daten­ver­zeich­nis­se der Mood­lein­stan­zen lie­gen
$datadir_base=”/beispiel/pfad/zum/datenverzeichnis/”;

# Hier gewin­nen wir den ers­ten Domain­teil der Sub­do­main
$domain_parts=explode(„.”, $_SERVER[‚SERVER_NAME’]);
$instance=$domain_parts[0];

# Zugangs­da­ten: $sql_user, $sql_pass, $sql_db

$mood­le­sys­tems = array(

heim”  => array(„sql_db”=>„moodle01”,„sql_user”=>„user01”,„sql_passwd”=>„passwd01”),


„schu­le” => array(„sql_db”=>„moodle02”,„sql_user”  => „user02”,„sql_passwd” => „passwd02”),


);

if (!$moodlesystems[$instance][„sql_db”]) {

die(„Keine gül­ti­ge Sub­do­main!”);

}

$sql_db = $moodlesystems[$instance][„sql_db”];
$sql_user = $moodlesystems[$instance][„sql_user”];
$sql_passwd = $moodlesystems[$instance][„sql_passwd”];
$data­dir = $datadir_base.$instance;

unset($CFG);

$CFG->dbtype    = ‚mys­ql’;
$CFG->dbhost    = ‚local­host’;
$CFG->dbname    = $sql_db;
$CFG->dbuser    = $sql_user;
$CFG->dbpass    = $sql_passwd;
$CFG->dbpersist =  fal­se;
$CFG->prefix    = ‚mdl_’;

$CFG->wwwroot   = ‚http://’.$instance.’.domain.tld’;
$CFG->dirroot   = ‚/pfad/zum/moodle/code/foo’;
$CFG->dataroot  = $data­dir;
$CFG->admin     = ‚admin’;

$CFG->directorypermissions = 00777;  // try 02777 on a ser­ver in Safe Mode

require_once(„$CFG->dirroot/lib/setup.php”);
// MAKE SURE WHEN YOU EDIT THIS FILE THAT THERE ARE NO SPACES, BLANK LINES,
// RETURNS, OR ANYTHING ELSE AFTER THE TWO CHARACTERS ON THE NEXT LINE.
?>

Ein paar Erläu­te­run­gen:

Das Daten­ver­zeich­nis muss so hei­ßen wie der oben rot mar­kier­te Domai­n­an­teil und im Pfad „/beispiel/pfad/zum/datenverzeichnis/” lie­gen, also z.B. „/beispiel/pfad/zum/datenverzeichnis/heim” bzw. „/beispiel/pfad/zum/datenverzeichnis/schu­le”.

Jetzt kann ich für jedes Mood­le eine eige­ne Daten­bank, einen eige­nen Daten­bank­be­nut­zer und ein eige­nes Daten­bank­pass­wort fest­le­gen. Das geschieht in einer sol­chen Zei­le:

heim”  => array(„sql_db”=>„moodle01”,„sql_user”=>„user01”,„sql_passwd”=>„passwd01”),

Davon kann ich belie­big vie­le „sta­peln”, d.h. so vie­le Zei­len, wie ich Sub­do­mains und Daten­ban­ken anle­gen kann, was vom Webs­pace abhän­gig ist. Allein mit die­ser Lösung muss ich dann nur noch eine Code­ba­sis pfle­gen — es gibt aber auch Nach­tei­le:

  1. Sämt­li­che SQL-Zugangs­da­ten ste­hen in einer ein­zi­gen Datei — das tun sie bei Mood­le stan­dard­mä­ßig aber auch. Schö­ner wäre es, die­se Daten von außer­halb des Web­roots zu inklu­die­ren oder ver­schlüs­selt in eine MyS­QL-DB zu schrei­ben — dann steht der Schlüs­sel zwar immer noch in der config.php, aber nun denn…
  2. Man kann auf die­se Wei­se nur Mood­les unter einer Sub­do­main von einer Haupt­do­main lau­fen las­sen — mög­lich wäre mit mar­gi­na­len Ände­run­gen auch sowas wie http://www.domain.tld/heim. Aber das ist schon eine Ein­schrän­kung in der Namens­ge­bung. Wenn man das Array noch wei­ter auf­bohrt, sind aber auch völ­lig ver­schie­de­ne Domains und Daten­ver­zeich­nis­se denk­bar.

Schön ist, das die­ser Ansatz auf jedem stink­nor­ma­len Webs­pace läuft, wenn man meh­re­re MyS­QL-Daten­ban­ken und die Mög­lich­keit zur Ein­rich­tung von Sub­do­mains hat. Ob Mood­le auf so einem „stink­nor­ma­len” Webs­pace dann per­for­mant läuft, ist noch eine ande­re Sache. Für den ambi­tio­nier­ten Leh­rer, der nur mit einer klei­ne­ren Lern­grup­pe arbei­tet und viel­leicht neben­bei noch Refe­ren­da­re aus­bil­det und der dafür zwei getrenn­te Mood­les haben will, soll­te das schon so ganz gut hin­hau­en.

Die­se Lösung soll­te vom Ansatz her auch her­vor­ra­gend auf mana­ged Ser­vern mit Plesk & Co. lau­fen, wenn es mehr und per­for­man­te­re Mood­les sein dür­fen. So kön­nen auch Kli­ckibun­ti-Natu­ren vie­le Instan­zen aktu­ell hal­ten und die Back­up­pro­ble­ma­tik über die ein­ge­bau­te Funk­tio­na­li­tät von z.B. Plesk lösen. Es gibt sehr gute und güns­ti­ge (nicht „bil­li­ge”)  mit­tel­stän­di­sche Anbie­ter in die­sem Bereich, die auch ger­ne den Ser­ver für Mood­le fit machen (inkl. z.B. TeX-Fil­ter usw.). Ab ca. 150,- Euro/Monat bekommt man da schon was Anstän­di­ges und wenn 20 Schu­len mit­ma­chen…

Für den nächs­ten Arti­kel zu Mood­leMU gie­re ich nach einem Onlin­e­up­date für Mood­le á la Wor­d­Press — kli­cken und gut.  Authen­ti­fi­zie­ren kann man ja treff­lich gehen den Admi­nac­count von Mood­le. Das wird schwie­rig, da der Down­load von moodle.org via PHP schon zu Time­outs füh­ren kann (und die DB vor­sichts­hal­ber gesi­chert wer­den muss) — da gibt es aber bestimmt Tricks — bei Wor­d­Press klappt es ja auch irgend­wie.

6-12-2010 — UPDATE1:

Out-of-the-Box läuft das Script so nicht, bzw. bis­her sub­op­ti­mal — zumin­dest hin­ter einem Rever­se Pro­xy. Ich tes­te noch etwas her­um — also: Erst­mal nur ein Denk­an­stoß.

Facebook Like

2 Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.