Moodle mit Docker installieren: Schritt-für-Schritt-Anleitung
Moodle ist eines der bekanntesten Open-Source-Lernmanagementsysteme, mit dem Sie Online-Kurse erstellen, verwalten und bereitstellen können. Besonders praktisch: Mit Docker lässt sich Moodle schnell und sauber installieren, ohne dass Sie sich um komplexe Abhängigkeiten kümmern müssen. In dieser Anleitung erfahren Sie Schritt für Schritt, wie die Moodle-Installation mit Docker auch ohne Vorkenntnisse funktioniert.
Schritt 1: Voraussetzungen und passende Serverwahl
Bevor Sie mit der Moodle-Docker-Installation beginnen können, benötigen Sie einen Server sowie eine grundlegende Umgebung für Docker. Wichtig ist vor allem, dass die gewählte Serverleistung zu Ihrem Anwendungsfall passt. Moodle kann je nach Nutzung unterschiedlich ressourcenintensiv sein. Darüber hinaus sollten einige grundlegende technische Voraussetzungen erfüllt sein, damit die Installation reibungslos funktioniert:
- Betriebssystem: Eine aktuelle Linux-Distribution wie Ubuntu 22.04 oder neuer wird empfohlen.
- Root- oder sudo-Zugriff: Sie benötigen administrative Rechte, um Software zu installieren und Dienste zu konfigurieren.
- Stabile Internetverbindung: Für den Download der Docker-Images sowie spätere Updates ist Zugang zum Internet Voraussetzung.
- Offene Ports: Standardmäßig wird Port 80 für den Zugriff auf Moodle verwendet. Dieser sollte in der Firewall freigegeben sein.
- Ausreichender Speicherplatz: Mindestens 5 GB freier Speicher für Installation, Datenbank und erste Inhalte ist erforderlich.
- Domain (optional, aber empfohlen): Für den produktiven Einsatz ist eine eigene Domain sinnvoll, insbesondere in Kombination mit HTTPS.
Im Folgenden finden Sie eine Übersicht typischer Einsatzszenarien mit passenden Serverkonfigurationen. So können Sie einschätzen, welche Ressourcen Sie benötigen.
Moodle für Einzelpersonen und Lehrkräfte
Wenn Sie Moodle alleine oder in kleinen Gruppen nutzen möchten, reichen bereits vergleichsweise geringe Ressourcen aus. Typische Anwendungsfälle sind Online-Kurse für einzelne Klassen, Nachhilfeangebote oder kleinere Weiterbildungsprojekte. In solchen Szenarien greifen meist nur wenige Nutzer gleichzeitig auf die Plattform zu, sodass die Anforderungen überschaubar bleiben.
Eine Konfiguration mit 2 vCores und 4 GB RAM ist dafür in der Regel ausreichend. Wichtig ist vor allem eine stabile Performance bei parallelen Zugriffen. Der benötigte Speicherplatz hängt stark davon ab, wie viele Inhalte Sie bereitstellen, insbesondere bei größeren Dateien wie Videos oder Präsentationen. Planen Sie hier besser etwas zusätzlichen Puffer ein.
Moodle für Schulen und Weiterbildungseinrichtungen
Für Schulen oder Bildungsanbieter mit mehreren Klassen und einer größeren Nutzerbasis steigen die Anforderungen bereits deutlich. Mehr gleichzeitige Zugriffe, umfangreichere Kursinhalte und eine intensivere Nutzung der Plattform wirken sich direkt auf die benötigte Leistung aus.
Hier empfiehlt sich eine Konfiguration mit mindestens 4 vCores und 4 bis 8 GB RAM. Damit stellen Sie sicher, dass sowohl die Kursverwaltung als auch die Nutzerinteraktionen auch bei höherer Last zuverlässig und ohne spürbare Verzögerungen funktionieren. Auch der Speicherbedarf wächst in diesem Szenario schnell an, da regelmäßig neue Inhalte hinzugefügt werden.
Moodle für kleine und mittlere Unternehmen (KMU)
Unternehmen nutzen Moodle häufig für interne Schulungen, Onboarding-Prozesse oder E-Learning-Angebote für Mitarbeitende. In diesen Fällen spielen neben der Nutzeranzahl auch Faktoren wie Stabilität, Verfügbarkeit und Skalierbarkeit eine wichtige Rolle.
Eine Konfiguration mit 6 vCores und 8 GB RAM bietet in diesem Fall eine solide Grundlage für einen reibungslosen Betrieb. Damit können auch mehrere parallele Schulungen und Zugriffe problemlos verarbeitet werden. Zusätzlich sollten Sie ausreichend Speicher für Lernmaterialien sowie regelmäßige Backups einplanen, um langfristig flexibel zu bleiben.
Moodle für große Organisationen
Wenn Moodle unternehmensweit eingesetzt wird oder eine große Anzahl gleichzeitiger Nutzerinnen und Nutzer auf die Plattform zugreift, benötigen Sie eine deutlich leistungsstärkere Infrastruktur. Typische Beispiele sind Hochschulen, große Unternehmen oder Plattformen mit externen Teilnehmenden.
In solchen Fällen sind mindestens 8 vCores und 16 GB RAM empfehlenswert. Diese Ausstattung ermöglicht es, auch bei hoher Auslastung eine stabile und performante Umgebung bereitzustellen. Darüber hinaus sollten Sie sich frühzeitig mit Themen wie Skalierung, Lastverteilung und automatisierten Backups beschäftigen, um einen langfristig zuverlässigen Betrieb sicherzustellen.
Übersichtstabelle: Moodle-Anwendungsfälle auf einen Blick
| Anwendungsgebiet | Empfohlene Konfiguration | Typische gleichzeitige User |
|---|---|---|
| Einzelpersonen / Lehrende | 2 vCores CPU, 4 GB RAM, 80–120 GB NVMe | bis ca. 10–20 User |
| Schule und Weiterbildung | 4 vCores CPU, 4 - 8 GB RAM, 120–160 GB NVMe | ca. 20–100 User |
| KMU / kleine Unternehmen | 6 vCores CPU, 8 GB RAM, 200–240 GB NVMe | ca. 100–300 User |
| Große Organisationen / Admins | 8+ vCores CPU, 16+ GB RAM, 300+ GB NVMe | 300+ User |
Lassen Sie sich von den Vorteilen überzeugen. Probieren Sie Ihren Virtual Server ganz in Ruhe 30 Tage lang aus!
Wenn Sie sich noch nicht sicher sind, ob Moodle die richtige Plattform für Sie ist, lohnt sich ein Blick auf Alternativen wie ILIAS oder Canvas. Moodle überzeugt vor allem durch seine Flexibilität, große Community und zahlreiche Erweiterungsmöglichkeiten. Im Vergleich Moodle vs. ILIAS punktet letzteres mit einem starken Fokus auf Datenschutz und strukturierte Lerninhalte, während Canvas im Vergleich zu Moodle für seine moderne Benutzeroberfläche und einfache Bedienung bekannt ist.
Schritt 2: Docker und Docker Compose installieren
Zunächst müssen Docker und Docker Compose auf Ihrem Server installiert werden. Diese Tools ermöglichen es Ihnen, Moodle in Containern auszuführen, sodass alle benötigten Komponenten sauber voneinander getrennt und einfach verwaltet werden können. Aktualisieren Sie hierzu zunächst die Paketliste Ihres Systems und installieren Sie anschließend Docker sowie Docker Compose aus dem aktuellen Docker-Repository:
Starten Sie damit, die Paketliste zu aktualisieren und benötigte Tools zu installieren:
sudo apt update
sudo apt install -y ca-certificates curl gnupgbashNun fügen Sie mit folgendem Befehl den Docker-GPG-Key hinzu:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.ascbashAuch das Docker-Repository lässt sich im Terminal herunterladen:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullbashNun können Sie Docker ganz einfach installieren:
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginbashNach der Installation sollten Sie mit den folgenden Terminalbefehlen sicherstellen, dass der Docker-Dienst automatisch startet und direkt aktiviert wird:
sudo systemctl enable docker
sudo systemctl start dockerbashStandardmäßig können Docker-Befehle nur mit sudo ausgeführt werden. Wenn Sie Docker ohne sudo nutzen möchten, können Sie Ihren User zur entsprechenden Benutzergruppe hinzufügen:
sudo usermod -aG docker $USERbashDamit diese Änderung wirksam wird, müssen Sie sich einmal ab- und wieder anmelden.
Wenn Sie Moodle in einer verwalteten Hosting-Umgebung betreiben möchten, kann eine Installation über Plesk eine gute Wahl sein. Die Moodle-Installation mit Plesk bietet eine grafische Oberfläche, mit der sich Docker-Container, Domains und SSL-Zertifikate komfortabel verwalten lassen. Für komplexere und skalierbare Setups eignet sich hingegen ein Kubernetes-Install von Moodle: Hier können Sie Ihre Moodle-Instanz flexibel skalieren und auch größere Nutzerzahlen zuverlässig bedienen.
Der Installationserfolg lässt sich überprüfen, indem Sie sich die Version der soeben installierten Docker-Engine anzeigen lassen:
docker --versionbash
Schritt 3: Projektverzeichnis erstellen
Erstellen Sie nun ein eigenes Verzeichnis für Ihre Moodle-Installation. Dadurch bleiben alle zugehörigen Dateien übersichtlich an einem zentralen Ort gespeichert, was die spätere Verwaltung erleichtert. Führen Sie dazu folgende Befehle im Terminal aus:
mkdir ~/moodle-docker
cd ~/moodle-dockerbashNun befinden Sie sich im Arbeitsverzeichnis, in dem Sie im nächsten Schritt die Konfigurationsdateien erstellen können.
Schritt 4: Docker-Compose-Datei erstellen
Nun erstellen Sie die zentrale Konfigurationsdatei für Ihre Moodle-Installation. Diese sogenannte docker-compose.yml legt fest, welche Container gestartet werden, wie sie miteinander kommunizieren und welche Einstellungen verwendet werden. Docker Compose ist dabei besonders hilfreich, da mehrere Container, in diesem Fall Moodle und die Datenbank, gemeinsam als eine Anwendung orchestriert werden. Statt alles manuell zu konfigurieren, definieren Sie hier einmal die komplette Umgebung.
Erstellen Sie zunächst die Datei im zuvor angelegten Verzeichnis:
nano docker-compose.ymlbashFügen Sie anschließend folgenden Inhalt ein:
services:
db:
image: mariadb:11.4
container_name: moodle-db
restart: always
environment:
MARIADB_ROOT_PASSWORD: rootpassword
MARIADB_DATABASE: moodle
MARIADB_USER: moodle
MARIADB_PASSWORD: moodlepassword
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- db_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
moodle:
build: .
container_name: moodle-app
restart: always
ports:
- "80:80"
volumes:
- ./moodle:/var/www/html
- ./moodledata:/var/www/moodledata
depends_on:
db:
condition: service_healthy
volumes:
db_data:yamlDiese Konfiguration nutzt getrennte Container für Anwendung und Datenbank. Der db-Container stellt die Datenbank bereit, in der Moodle alle Inhalte und Nutzerinformationen speichert. Im moodle-Container läuft der Apache-Webserver mit PHP für die Moodle-Anwendung. Die eigentlichen Moodle-Dateien werden im nächsten Schritt bereitgestellt.
Im Gegensatz zu älteren Anleitungen wird hier kein vorkonfiguriertes Komplett-Image verwendet. Stattdessen basiert das Setup auf einer generischen PHP-Umgebung. Das erhöht die Flexibilität und vermeidet Abhängigkeiten von nicht mehr gepflegten Images.
Ersetzen Sie die in der Konfiguration verwendeten Beispielpasswörter unbedingt durch sichere Kennwörter. Für den produktiven Einsatz empfiehlt es sich zudem, sensible Zugangsdaten nicht direkt in der docker-compose.yml zu speichern. Stattdessen können Sie eine .env-Datei verwenden, um Passwörter getrennt von der Konfiguration zu verwalten. Für höhere Sicherheitsanforderungen bieten sich darüber hinaus Docker Secrets oder vergleichbare Mechanismen an.
Da das verwendete PHP-Image keine für Moodle notwendigen Erweiterungen enthält, wird im nächsten Schritt ein eigenes Image erstellt.
Schritt 5: PHP-Umgebung vorbereiten und Dockerfile erstellen
Das standardmäßig verwendete PHP-Image enthält nicht alle Erweiterungen, die Moodle für einen fehlerfreien Betrieb benötigt. Dazu zählen unter anderem Komponenten für die Datenbankanbindung, die Bildverarbeitung sowie Internationalisierungsfunktionen. Damit die Anwendung korrekt installiert werden kann und typische Fehler während des Setups vermieden werden, sollten Sie daher vorab eine angepasste PHP-Umgebung (mindestens PHP 8.3) erstellen.
Dies geschieht über ein eigenes Dockerfile. Darin definieren Sie, auf welchem Basis-Image Ihr Container aufbauen soll, und welche zusätzlichen Pakete und PHP-Erweiterungen installiert werden. Auf diese Weise erhalten Sie eine Umgebung, die besser auf die Anforderungen von Moodle abgestimmt ist als ein unverändertes Standard-Image.
Erstellen Sie zunächst im Projektverzeichnis eine neue Datei mit dem Namen Dockerfile:
nano DockerfilebashFügen Sie anschließend folgenden Inhalt ein:
FROM php:8.3-apache
ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN apt-get update && apt-get install -y \
libpng-dev \
libjpeg-dev \
libfreetype6-dev \
libzip-dev \
libxml2-dev \
libicu-dev \
libonig-dev \
libcurl4-openssl-dev \
libsodium-dev \
unzip \
git \
wget \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install \
mysqli \
pdo \
pdo_mysql \
gd \
intl \
xml \
zip \
opcache \
soap \
exif \
mbstring \
curl \
sodium \
&& echo "max_input_vars=5000" > /usr/local/etc/php/conf.d/moodle.ini \
&& sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' \
/etc/apache2/sites-available/*.conf \
/etc/apache2/apache2.conf \
/etc/apache2/conf-available/*.conf \
&& printf '<Directory /var/www/html/public>\n AllowOverride None\n Require all granted\n DirectoryIndex index.php\n FallbackResource /r.php\n</Directory>\n' \
> /etc/apache2/conf-available/moodle.conf \
&& a2enmod rewrite \
&& a2enconf moodledockerfileSeit Moodle 5.1 liegt der öffentlich erreichbare Teil der Anwendung im Unterordner public. Deshalb muss Apache so konfiguriert werden, dass nicht /var/www/html, sondern /var/www/html/public als DocumentRoot verwendet wird. Zusätzlich wird FallbackResource /r.php gesetzt, damit Moodle-URLs korrekt verarbeitet werden.
Schritt 6: Moodle-Code herunterladen
Laden Sie nun die aktuelle Moodle-Version (hier „5.2 stable“) direkt von der offiziellen Quelle herunter:
wget -O moodle.tgz https://download.moodle.org/download.php/direct/stable502/moodle-latest-502.tgzbashEntpacken Sie anschließend das Archiv:
tar -xvzf moodle.tgzbashErstellen Sie zusätzlich das Datenverzeichnis:
mkdir moodledata
sudo chmod 777 -R moodledatabashDieses Verzeichnis wird von Moodle für Uploads, Caches und temporäre Dateien benötigt. Beachten Sie dabei: Für einfache Testinstallationen funktioniert das Berechtigungsmuster 777 gut. In produktiven Umgebungen sollten Besitzerkonten und Rechte aber enger gesetzt werden, z. B. auf den Apache-User.
Setzen Sie außerdem die passenden Rechte für den Moodle-Ordner:
sudo chown -R 33:33 moodle
sudo chmod -R 755 moodlebashSchritt 7: Moodle starten
Nachdem Sie die Konfigurationsdatei erstellt haben, können Sie die Container starten. Das Docker-Compose-Plugin lädt dabei automatisch die benötigten Images herunter, falls diese noch nicht vorhanden sind, und startet anschließend alle definierten Dienste. Führen Sie dazu folgenden Befehl aus:
docker compose up -d --buildbash
Die Option -d steht für „detached mode“, sodass die Container im Hintergrund laufen und Ihr Terminal weiterhin nutzbar bleibt.
Um zu überprüfen, ob alle Container korrekt gestartet wurden, können Sie sich den aktuellen Status anzeigen lassen:
docker psbashIn der Ausgabe sollten nun sowohl der Moodle-Container als auch die Datenbank als „Up“ (laufend) angezeigt werden.

Schritt 8: Moodle im Browser aufrufen
Nachdem die Container erfolgreich gestartet wurden, können Sie Ihre Moodle-Instanz im Browser aufrufen. Öffnen Sie dazu einen Webbrowser Ihrer Wahl und geben Sie die IP-Adresse Ihres Servers mit dem entsprechenden Port ein:
http://IHRE-SERVER-IP:80Ersetzen Sie IHRE-SERVER-IP durch die tatsächliche öffentliche IP-Adresse Ihres Servers. Sobald die Seite geladen ist, startet automatisch der Einrichtungsassistent von Moodle, der Sie durch die grundlegende Konfiguration führt.

Schritt 9: Ersteinrichtung abschließen
Im nächsten Schritt schließen Sie die Ersteinrichtung direkt im Browser ab. Moodle führt Sie dabei Schritt für Schritt durch die wichtigsten Konfigurationspunkte.
Zunächst wählen Sie die gewünschte Sprache aus und bestätigen die Systemprüfung. Bei der Datenbankverbindung geben Sie die entsprechenden Daten aus Ihrer Konfigurationsdatei ein. Als Datenbankhost verwenden Sie db, als Datenbankname moodle, als Benutzername moodle und als Passwort das in der docker-compose.yml hinterlegte Kennwort.

Anschließend erstellen Sie ein Administrator-Konto, mit dem Sie später Zugriff auf das Backend haben.

Nun können Sie grundlegende Einstellungen Ihrer Website, wie den Namen der Plattform, konfigurieren.
Nach erfolgreichem Abschluss der Einrichtung werden Sie automatisch zum Moodle-Dashboard weitergeleitet und können direkt mit der Nutzung beginnen.
Für einen dauerhaft zuverlässigen Betrieb sollten Sie anschließend noch den Moodle-Cron einrichten. Dieser Hintergrundprozess führt regelmäßig geplante Aufgaben aus, etwa Benachrichtigungen, Wartungsprozesse oder automatische Backups. In Docker-Setups lässt sich der Cron-Aufruf beispielsweise mit folgendem Befehl testen:
docker compose exec moodle php /var/www/html/admin/cli/cron.phpbashFür den produktiven Einsatz von Moodle empfiehlt es sich außerdem, die Plattform nicht nur über die Server-IP, sondern über eine eigene Domain bereitzustellen. In Kombination mit einem Reverse Proxy wie NGINX können Sie den Zugriff sauber steuern und gleichzeitig HTTPS aktivieren. Ein SSL-Zertifikat, beispielsweise über Let’s Encrypt, sorgt dafür, dass die Verbindung verschlüsselt ist und Nutzerdaten geschützt übertragen werden. Dadurch wirkt Ihre Plattform nicht nur professioneller, sondern erfüllt auch wichtige Sicherheitsanforderungen. Gerade bei der Nutzung durch externe Teilnehmerinnen und Teilnehmer oder Mitarbeitende ist dies relevant.

