info@madafa.de

Installation der E-Learning Plattform ILIAS

ILIAS ist eine Open-Source E-Learning Plattform mit welcher Lernmodule, Tests und Prüfungen, Portfolios, Umfragen, Wikis und Blogs erstellt werden können. Hierbei fallen keinerlei Lizenzkosten an, jedoch besteht die Möglichkeit einer freiwilligen Mitgliedschaft im kostenpflichtigen ILIAS-Verein, was eine direkte Einflussnahme auf den Entwicklungsprozess der Plattform bietet.

Die ILIAS-Plattform wird sowohl Bundesweit, als auch International von unzähligen Hochschulen verwendet, findet aber auch bei kleinen Firmen und privaten Einzelnutzern Anwendung. Eine Liste aller bis dato registrierten Installationen kann hier eingesehen werden: https://docu.ilias.de/ilias.php?ref_id=3444&cmd=show&cmdClass=ildclrecordlistgui&cmdNode=j3:5j:5n&baseClass=ilRepositoryGUI

In diesem Beitrag wollen wir uns Schritt für Schritt ansehen, wie wir die ILIAS Plattform auf einem Linux Server installieren und bereitstellen können. In diesem Beispiel verwenden wir einen Ubuntu 20.04 Server.

Installation aller nötigen Abhängigkeiten

Für das Bereitstellen einer IILIAS Installation wird eine Reihe von Abhängigkeiten und Tools benötigt. So benötigt ILIAS beispielsweise ein Webserver, PHP, eine Datenbank und weitere kleinere Tools.

Bevor wir mit der eigentlich Installation von ILIAS beginnen, installieren wir erst einmal alle nötigen Abhängigkeiten.

Als ersten Schritt überprüfen wir, ob unsere Ubuntu Version auf dem neusten Stand ist und installieren gegebenenfalls benötigte Updates. Hierfür führen wir folgende Kommandos aus:

apt-get update
apt-get upgrade

Möglicherweise sind einige Basispakte, die für die Installation von ILIAS erforderlich sind, nicht installiert. Mit folgenden Kommandos prüfen wir, ob die benötigten Pakete installiert sind, und installieren diese gegebenenfalls:

apt install ubuntu-server
apt install language-pack-en
apt install sudo
apt install lsb-core
apt install rsyslog

Nachdem wir die Basispakete und alle nötigen Updates installiert haben, können wir damit beginnen die Abhängigkeiten zu installieren.

Apache2

Als erstes installieren wir den Apache-Webserver. Hierfür führen wir folgendes Kommando aus:

apt-get install apache2 apache2-doc libapache2-mod-xsendfile

Anschließend aktivieren wir einige Apache-Module mit folgendem Kommando:

a2enmod rewrite dav_fs dav expires headers proxy socache_shmcb ssl vhost_alias dav ssl http2 mod_authnz_ldap ldap

Um nun die neue Konfiguration zu aktivieren, führen wir:

systemctl restart apache2

aus. Erhalten wir hier keine Ausgabe, war das Neustarten von Apache erfolgreich.

PHP

Nachdem wir den Webserver erfolgreich installiert haben, können wir mit der Installation von PHP beginnen. Um diese zu starten führen wir folgende Befehle aus:

apt install php7.4 php7.4-gd php7.4-xsl php7.4-ldap php7.4-xmlrpc php7.4-dev php7.4-curl php7.4-cli php7.4-common php7.4-soap php7.4-mbstring php7.4-intl php7.4-xml libapache2-mod-php7.4 php7.4-zip php-apcu php7.4-imagick php7.4-bcmath php7.4-gmp

phpenmod opcache

apt install php7.4-curl php7.4-json php7.4-mysql php7.4-opcache php7.4-readline libapache2-mod-php7.4

MariaDB

Da nun Webserver und PHP installiert sind, können wir mit der Installation der Datenbank fortfahren. Wir wählen hier das Datenbankensystem MariaDB. Hierfür führen wir als erstes die Kommandos

sudo apt-get install mariadb-server galera mariadb-client libmariadb3 mariadb-backup mariadb-common

apt-get install mariadb-server

aus. Anschließend installieren wir MySQL. Mit folgendem Kommando starten wir die Installation:

mysql_secure_installation

Während der Installation werden wir nun durch einen Dialog geführt. Wir beantworten die Fragen wie folgt:

  • Change the root password? [Y/n] → Y
  • Remove anonymous users? [Y/n] → Y
  • Disallow root login remotely? [Y/n] → Y
  • Remove test databse and access to it? [Y/n] → Y
  • Reload privilege tables now? [Y/n] → Y

War die Installation erfolgreich, erhalten wir folgende Ausgabe:

Weitere kleinere Tools

Da wir nun alle Hauptabhängigkeiten erfolgreich installiert haben, können wir nun noch ein paar kleinere Abhängigkeiten und Tools wie beispielsweise zip, git und curl installieren. Hierfür führen wir folgendes Kommando einmalig aus:

apt install zip git htop wget curl htmldoc mailutils imagemagick ffmpeg openjdk-11-jre python phantomjs abiword libreoffice mailutils davfs2 nano memcached php-memcached composer nmon clamav ghostscript-x wkhtmltopdf php-tcpdf xvfb

Während der Installation erscheint ein Dialogfenster zur Installation von davfs2. Wir wählen hier Yes.

Nachdem die Installation abgeschlossen ist, haben wir alle notwendigen Abhängigkeiten erfolgreich installiert.

Als letzten Schritt überprüfen wir noch, ob die Datum- und Uhrzeiteinstellungen korrekt gesetzt sind. Hierfür führen wir das Kommando

date

aus. Anschließend müssen wir noch eine lokale Variable für die deutsche Textausgabe setzen. Um zu überprüfen, welche lokalen Variablen bereits angelegt sind, führen wir den Befehl

locale -a

aus und erhalten folgende Ausgabe:

Wir können sehen, dass die Variable für die deutsche Textsetzung fehlt. Um diese nun hinzuzufügen, müssen wir sie zuerst mit dem Kommando

locale-gen de_DE.UTF-8

anlegen. Mit dem Kommando

update-locale LANG=de_DE.UTF-8

können wir dieser Variable nun die deutsche Textsetzung zuweisen.

Netzwerkkonfiguration

Um die Netzwerkkonfiguration vorzunehmen, erstellen wir folgende Datei mit dem Nano Texteditor:

nano /etc/sysctl.d/90-socket-tuning.conf

und konfigurieren sie wie folgt:

#
# Socket tuning
#
 
# Recieve and Send Socket Mem Buffer Sizes
net.core.rmem_max=4194304
net.core.wmem_max=4194304
 
# Sockets (default 128)
net.core.somaxconn = 4096
 
# Increase the number of outstanding syn requests allowed.
# c.f. The use of syncookies.
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_syncookies = 1
 
# Widen local portrange
net.ipv4.ip_local_port_range = 2051 64512

Anschließend speichern wir unsere Konfiguration und schließen den Editor.

Konfiguration der Datenbank

Um nun die Datenbank korrekt zu konfigurieren öffnen wir folgende Datei:

nano /etc/mysql/conf.d/ilias.cnf

Wir konfigurieren die Datenbank wie folgt:

[Service]
LimitMEMLOCK=infinity
LimitNOFILE=524288
TimeoutStartSec=600
ExecStartPre=/bin/sync
ExecStartPre=/sbin/sysctl -q -w vm.drop_caches=3
 
innodb_strict_mode=OFF
log_error = /var/log/mysql/error.log
slow_query_log_file    = /var/log/mysql/mariadb-slow.log
long_query_time        = 0.5
log_slow_rate_limit    = 1000
log_slow_verbosity     = query_plan,explain
default_storage_engine  = InnoDB
sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

Anschließend speichern wir unsere Konfiguration und schließen den Editor. Zum anwenden der Konfiguration starten wir den Webserver und die Datenbank neu:

service apache2 restart
service mariadb restart

Konfiguration von PHP

Damit wir die Konfiguration von PHP vornehmen können, müssen wir folgende Datei mit einem Texteditor öffnen:

nano /etc/php/7.4/apache2/php.ini

Hier müssen wir nun folgende Werte setzten. Mit der Tastenkombination strg+w können wir die Suchfunktion nutzen, um die Variablen schnell zu finden:

max_execution_time = 600
max_input_vars = 10000
memory_limit = 512M

post_max_size = 512M
upload_max_filesize = 512M

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
display_errors = On

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 14400
session.hash_function = 0
session.cookie_httponly = On
session.save_handler = files
session.cookie_secure = On

allow_url_fopen = On

opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

apc.enabled=1
pc.shm_size=256M
apc.ttl=7200
apc.enable_cli=1
apc.gc_ttl=3600
apc.entries_hint=4096
apc.slam_defense=1
apc.serializer=igbinary

Anschließend starten wir den Webserver neu:

systemctl restart apache2

Konfiguration der vHosts

Nachdem wir nun die Netzwerk-, sowie die PHP- und Datenbankkonfigurationen durchgeführt haben, können wir damit beginnen unsere eigenen vHosts zu konfigurieren. Zunächst prüfen wir, welche vHosts aktuell auf unserem Ubuntu Server laufen. Hierfür führen wir folgendes Kommando aus:

ls /etc/apache2/sites-enabled

Als Ausgabe erhalten wir nun alle aktuell laufenden Sites:

Wir deaktivieren nun alle aktiven vHosts. In unserem Falle ist der einzige akut laufende vHost 000-default.conf. Wir deaktivieren ihn mit:

a2dissite 000-default.conf

Zum Speichern der Konfiguration starten wir den Webserver neu:

systemctl reload apache2

Wir überprüfen erneut, ob es aktive vHosts auf unserem System gibt. Sollten wir hier nun keine Ausgabe erhalten, haben wir die vHosts erfolgreich gelöscht und können nun damit fortfahren unsere eigenen vHosts zu konfigurieren. Hierfür wechseln wir zunächst in das dafür vorgesehene Verzeichnis:

cd /etc/apache2/sites-available

Hier fügen wir nun folgende vHosts hinzu:

  • touch 000-bbs-ilias.conf – Für die ILIAS Hauptseite
  • touch pad.bbs-ilias.conf – Für Etherpad
  • touch chat.bbs-ilias.conf – Für die Chatfunktion

Als erstes konfigurieren wir den vHosts für die ILIAS Hauptseite. Wir öffnen die Konfigurationsdatei mit:

nano 000-bbs-ilias.conf

und konfigurieren diesen wie folgt:

<VirtualHost bbs-ilias.de:80>
        ServerAdmin admin@bbs-ilias.de
        ServerName www.bbs-ilias.de
        ServerAlias www.bbs-ilias.de
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        KeepAlive off
        HostNameLookups off
        Protocols h2 http/1.1
 
 
 
    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
 
        DocumentRoot /var/www/html
        #Or its this path?
        #DocumentRoot /var/www
 
        XSendFilePath /var/www/html
        XSendFilePath /opt
 
 
<Directory /var/www/html/>
        <IfModule mod_php7.c>
                php_flag register_globals off
        </IfModule>
 
        Options -Indexes +FollowSymlinks
 
        DirectoryIndex index.php
        DirectoryIndex index.html
        DirectoryIndex index.htm
 
        AllowOverride All
        Require all granted
 
</Directory>
 
</VirtualHost>

Anschließend konfigurieren wir den vHost für Etherpad:

nano pad.bbs-ilias.conf
<VirtualHost pad.bbs-ilias.de:80>
  LoadModule  proxy_module        /usr/lib/apache2/modules/mod_proxy.so
  LoadModule  proxy_http_module   /usr/lib/apache2/modules/mod_proxy_http.so
  LoadModule  headers_module      /usr/lib/apache2/modules/mod_headers.so
  LoadModule  deflate_module      /usr/lib/apache2/modules/mod_deflate.so
 
  ProxyVia On
  ProxyRequests Off
  ProxyPass / http://localhost:9001/
  ProxyPassReverse / http://localhost:9001/
  ProxyPreserveHost on
  <Proxy *>
    Options FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Proxy>
 
</VirtualHost>

Als letztes konfigurieren wir den vHost für die Chatfunktion:

nano chat.bbs-ilias.conf
<VirtualHost chat.bbs-ilias.de:80>
        LoadModule  proxy_module         /usr/lib/apache2/modules/mod_proxy.so
        LoadModule  proxy_http_module    /usr/lib/apache2/modules/mod_proxy_http.so
        LoadModule  headers_module       /usr/lib/apache2/modules/mod_headers.so
        LoadModule  deflate_module       /usr/lib/apache2/modules/mod_deflate.so
 
        ProxyVia On
        ProxyRequests Off
        ProxyPass / http://127.0.0.1:8080/
        ProxyPassReverse / http://127.0.0.1:8080/
        ProxyPreserveHost on
 
        <Proxy *>
                Options FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Proxy>
 
</VirtualHost>

Um nun unsere Konfigurationen zu aktivieren führen wir nacheinander die Befehle:

a2ensite 000-bbs-ilias.conf
a2ensite pad.bbs-ilias.conf
a2ensite chat.bbs-ilias.conf

aus, und starten anschließend den Webserver neu:

systemctl restart apache2

SSL-Zertifikat mit Cerbot installieren

Nachdem wir die vHosts angelegt und konfiguriert haben, wollen wir noch ein SSL-Zertifikat installieren. Hierfür werden wir Cerbot nutzen, welches wir mit folgendem Kommando installieren können:

apt install certbot python3-certbot-apache

Mit dem Kommando

certbot --apache

können wir nun mit der Hinterlegung des Zertifikats beginnen. Während dieses Prozesses müssen wir eine Notfall-E-Mail-Adresse angeben und festlegen für welche vHost wir HTTPS aktivieren wollen:

Weitere Apache und Server Konfigurationen

Haben wir HTTPS für unsere vHosts aktiviert, können wir noch einige kleinere Konfigurationen durchführen:

nano /etc/apache2/envvars

APACHE_ULIMIT_MAX_FILES='ulimit -n 128000'

nano /etc/systemd/system.conf

DefaultLimitNOFILE=524288

ILIAS Herunterladen

Nun, da wir endlich unseren Server, sowie alle Nötigen Abhängigkeiten installiert und konfiguriert haben, können wir mit der tatsächlichen Installation von ILIAS beginnen.

Hierfür erstellen wir als erstes folgende Verzeichnisse:

  • mkdir /opt/iliasdata
  • mkdir /opt/iliasdata/lucene
  • mkdir /opt/iliasdata/iliaslog
  • mkdir /opt/iliasdata/errorlog

Anschließend wechseln wir in das Webserververzeichnis

cd /var/www/html

und laden anschließend ILIAS via Git herunter. Hierfür führen wir folgenden Befehl aus:

git clone https://github.com/ILIAS-eLearning/ILIAS.git ilias

Nachdem ILIAS heruntergeladen wurde passen wir noch alle Berechtigungen an:

chown -R www-data:www-data /var/www/html
chown -R www-data:www-data /opt/iliasdata
chmod -R 774 /var/www/html
chmod -R 770 /opt/iliasdata

Erstellen eines ILIAS Clients

Um nun einen ILIAS Client zu erstellen benötigen wir als erstes eine JSON-Datei. In dieser können wir dann alle Konfigurationsparameter für unseren Client festlegen. Wir erstellen die JSON-Datei indem wir folgende Kommandos nacheinander ausführen:

mkdir /opt/iliasdata/scripts/clients
nano/opt/iliasdata/scripts/clients/clientname1.json

Anschließend konfigurieren wir die JSON-Datei wie folgt:

{
        "common" : {
               "client_id" : "test7",
               "server_timezone" : "Europe/Berlin",
               "register_nic" : true
        },
        "database" : {
                "type" : "innodb",
                "host" : "localhost",
                "port" : "3306",
                "database" : "db_test7",
                "user" : "root",
                "password" : "mysqlrootpassword",
                "create_database" : true
        },
        "filesystem" : {
                "data_dir" : "/opt/iliasdata"
        },
        "http" : {
                "path" : "http://bbs-ilias.de"
        },
        "language" : {
                "default_language" : "de",
                "install_languages" : ["de"]
        },
        "logging" : {
                "enable" : true,
                "path_to_logfile" : "/opt/iliasdata/iliaslog/ilias.log",
                "errorlog_dir" : "/opt/iliasdata/errorlog/"
        },
        "systemfolder" : {
                "contact" : {
                    "firstname" : "Wolfgang",
                    "lastname" : "Huebsch",
                    "email" : "admin@yourdomain.com"
                }
        },
        "globalcache" : {
                      "service" : "apc",
                      "components" : {
                      "clng" : true,
                      "comp" : true,
                      "events" : true,
                      "global_screen" : true,
                      "obj_def" : true,
                      "ilctrl" : true,
                      "tpl" : true,
                      "tpl_blocks" : true,
                      "tpl_variables" : true
        }
    },
        "utilities" : {
                "path_to_convert" : "/usr/bin/convert",
                "path_to_zip" : "/usr/bin/zip",
                "path_to_unzip" : "/usr/bin/unzip"
        
    },
    "pdfgeneration" : {
               "path_to_phantom_js" : "/usr/bin/phantomjs"
    },
 
    "preview" : {
               "path_to_ghostscript" : "/usr/bin/gs"
    },
 
    "mediaobject" : {
               "path_to_ffmpeg" : "/usr/bin/ffmpeg"
    },
 
    "style" : {
                "manage_system_styles" : true,
                "path_to_lessc" : "/usr/bin/lessc"
    },
 
    "systemfolder" : {
                "client" : {
                    "name" : "test7",
                    "description" : "Test Installation for ILIAS 7",
                    "institution" : "Atomic Powerplant Springfield"
        },
    "contact" : {
                "firstname" : "Homer",
                "lastname" : "Simpson",
                "title" : "Sir",
                "position" : "Security Inspector Sector 7G",
                "institution" : "Atomic Powerplant Springfield",
                "street" : "742 Evergreen Terrace",
                "zipcode" : "12345",
                "city" : "Springfield",
                "country" : "USA",
                "phone" : "(939) 555-0113",
                "email" : "Chunkylover53@aol.com"
        }
    }
}

Nachdem wir unsere JSON-Datei konfiguriert haben erstellen wir den tatsächlichen ILIAS Client. Hierfür wechseln wir zunächst in das ILIAS Verzeichnis

cd /var/www/html/ilias

und erstellen den Client mit

php setup/setup.php install/opt/iliasdata/scripts/clients/clientname1.json

Wurde der Client erfolgreich erstellt, erhalten wir folgende Ausgabe.

Jetzt müssen wir lediglich alle Berechtigungen anpassen:

chown -R www-data:www-data /var/www/html
chown -R www-data:www-data /opt/iliasdata
chmod -R 774 /var/www/html
chmod -R 770 /opt/iliasdata

Nächste Schritte

Wir haben in diesem Beitrag gesehen, wie wir eine Basis-ILIAS Installation auf einem Ubuntu-Server bereitstellen können. Basis aus dem Grund, dass es dank des Open Source Konzepts sowie der großen und sehr aktiven Community, unzählige Plugins und Varianten gibt, um die ILIAS Plattform genau an die persönlichen Präferenzen anzupassen. So können wir beispielsweise RPC-Server Installieren, um PDFs zu generieren und um eine Search-Engine für unsere Installation bereitzustellen. Oder wir installieren Mathjax und STACK-Maxima und machen unsere ILIAS Installation zu einer Mathematik Plattform mit der wir mathematische Ausdrücke, Graphen oder Übungsaufgaben und Tests erstellen können. Uns sind für die Konfiguration unseres Servers keine Grenzen gesetzt.

Eine Übersicht der verfügbaren Plugins finden Sie hier: https://docu.ilias.de/ilias.php?ref_id=1442&cmdClass=ilrepositorygui&cmdNode=j3&baseClass=ilRepositoryGUI

Wie die einzelnen Plugins installiert werden können, ist unter den jeweiligen Beschreibung angegeben. Schauen Sie sich die Auswahl der Plugins in Ruhe an und konfigurieren Sie Ihre ILIAS Installation ganz nach Ihren Vorstellungen und Wünschen.