Technologieführer

Moodle 3.2 auf CentOS 7 mit Nginx, PHP‑FPM 7.0 und MariaDB installieren

8 min read Installation Aktualisiert 08 Oct 2025
Moodle 3.2 auf CentOS 7 mit Nginx & MariaDB
Moodle 3.2 auf CentOS 7 mit Nginx & MariaDB

Kurzfassung: Diese Schritt-für-Schritt-Anleitung zeigt, wie Sie Moodle 3.2 auf einem CentOS 7 Server einrichten: Nginx als Webserver, PHP‑FPM 7.0 als PHP‑Handler und MariaDB als Datenbank. Enthalten sind SELinux‑, Firewalld‑, SSL‑Konfigurationen, Rollenchecklisten, Sicherheits‑Härtung und Migrationshinweise.

Worum es hier geht: Installation und Inbetriebnahme einer produktionsreifen Moodle‑Instanz unter CentOS 7 mit Fokus auf Sicherheit, Performance und Wartbarkeit.

Wichtig: Ersetzen Sie in der Anleitung alle Beispielpasswörter (z. B. hakaselabs123) durch sichere, eindeutige Passwörter und passen Sie Domainnamen an Ihre Umgebung an.

Übersicht

Ziel dieses Tutorials ist es, Moodle 3.2 auf CentOS 7 lauffähig zu bekommen. Die Anleitung umfasst:

  • Installation von Nginx
  • Installation und Konfiguration von PHP‑FPM 7.0
  • Installation und Konfiguration von MariaDB
  • Download und Konfiguration von Moodle
  • SSL und Virtual Host für HTTPS
  • SELinux und Firewalld konfigurieren
  • Webinstallations‑Schritte von Moodle
  • Exklusive Zusatzabschnitte: Checklisten, Sicherheits‑Härtung, Alternativansätze, Akzeptanzkriterien und Migrationshinweise

Voraussetzungen

  • CentOS 7 Server
  • Root‑ oder Sudo‑Rechte
  • Funktionsfähige Internetverbindung zum Herunterladen von Paketen

Hinweis: Diese Anleitung verwendet die stabile Moodle‑Version 3.2 wie in der Ausgangsdokumentation angegeben. Bei neueren Moodle‑Versionen prüfen Sie bitte die jeweiligen Systemanforderungen.

Was wir tun werden

  1. Nginx installieren
  2. PHP‑FPM installieren und konfigurieren
  3. MariaDB installieren und konfigurieren
  4. Moodle herunterladen und konfigurieren
  5. SSL und Virtual Host konfigurieren
  6. SELinux und Firewalld anpassen
  7. Moodle per Webinstaller installieren
  8. Tests, Absicherungen und Betriebs‑Checklisten

Schritt 1 - Nginx installieren

In diesem Schritt installieren wir Nginx aus dem EPEL‑Repository. Nginx ist im Standard‑CentOS‑Repository nicht enthalten, daher fügen wir das EPEL‑Repository hinzu.

Installieren Sie das EPEL‑Repository:

yum -y install epel-release

Installieren Sie Nginx aus dem EPEL‑Repository:

yum -y install nginx

Starten und aktivieren Sie Nginx:

systemctl start nginx  
systemctl enable nginx

Überprüfen Sie offene Ports mit netstat:

netstat -plntu

Installation von Nginx auf CentOS 7

Hinweis: Falls netstat nicht vorhanden ist, installieren Sie net-tools:

yum -y install net-tools

Schritt 2 - PHP‑FPM installieren und konfigurieren

Moodle 3.2 unterstützt PHP 7; in diesem Tutorial verwenden wir PHP 7.0. Da PHP‑FPM 7.0 nicht im Standard‑Repository vorhanden ist, nutzen wir das Drittanbieter‑Repository “webtatic”.

Fügen Sie webtatic hinzu:

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Installieren Sie PHP‑FPM und die Moodle‑benötigten Erweiterungen:

yum install -y graphviz aspell php70w-fpm php70w-cli php70w-pspell php70w-curl php70w-gd php70w-intl php70w-mysql php70w-xml php70w-xmlrpc php70w-ldap php70w-zip php70w-json php70w-opcache php70w-readline php70w-mbstring php70w-soap

Wenn die Installation abgeschlossen ist, bearbeiten Sie die PHP‑Konfiguration:

vim /etc/php.ini

Suchen und setzen Sie:

cgi.fix_pathinfo=0

Speichern und schließen.

Bearbeiten Sie die PHP‑FPM Pool‑Konfiguration:

cd /etc/php-fpm.d/  
vim www.conf

Ändern Sie Benutzer und Gruppe auf nginx:

user = nginx  
group = nginx

Nutzen Sie einen Socket anstelle eines Ports:

listen = /run/php-fpm/php-fpm.sock

Konfigurieren Sie Besitzer, Gruppe und Rechte des Sockets:

listen.owner = nginx  
listen.group = nginx  
listen.mode = 0660

Beschränken Sie PHP auf .php‑Dateien:

security.limit_extensions = .php

Aktivieren Sie die Standard‑Umgebungsvariablen für PHP‑FPM:

env[HOSTNAME] = $HOSTNAME  
env[PATH] = /usr/local/bin:/usr/bin:/bin  
env[TMP] = /tmp  
env[TMPDIR] = /tmp  
env[TEMP] = /tmp

Erstellen Sie das Session‑Verzeichnis und setzen Sie Rechte:

mkdir -p /var/lib/php/session/  
chown -R nginx:nginx /var/lib/php/session/

Besitzer des Socket‑Verzeichnisses setzen:

chown -R nginx:nginx /run/php-fpm/

Starten und aktivieren Sie PHP‑FPM:

systemctl start php-fpm  
systemctl enable php-fpm

Prüfen Sie den Socket:

netstat -lx | grep php-fpm.sock

Schritt 3 - MariaDB installieren und konfigurieren

Als Datenbank verwenden wir MariaDB. Wir installieren mariadb‑server aus den CentOS‑Repos, konfigurieren den Root‑Zugang und legen eine Datenbank sowie einen Benutzer für Moodle an.

Installieren:

yum -y install mariadb-server mariadb

Konfiguration anpassen:

vim /etc/my.cnf

Fügen Sie im Abschnitt [mysqld] am Ende ein:

default_storage_engine = innodb  
innodb_file_per_table = 1  
innodb_file_format = Barracuda

Starten und aktivieren:

systemctl start mariadb  
systemctl enable mariadb

Sichern Sie die MariaDB‑Installation und setzen Sie ein Root‑Passwort:

mysql_secure_installation

Folgen Sie den Abfragen und entfernen Sie Testzugänge und anonymen Benutzer.

Erstellen Sie die Datenbank und den Benutzer für Moodle (ersetzen Sie Passwort und Namen in der Praxis durch sichere Werte):

mysql -u root -p

SQL‑Befehle in der MySQL‑Konsole:

CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;  
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';  
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'hakaselabs123';  
FLUSH PRIVILEGES;

Datenbank für Moodle konfigurieren

Hinweis: Wählen Sie hier ein starkes Passwort und erwägen Sie, Verbindungsbeschränkungen (Host) und separate Benutzerrechte für einzelne Aufgaben anzulegen.

Schritt 4 - Moodle herunterladen und konfigurieren

Installieren Sie git, falls noch nicht vorhanden:

yum -y install git

Erstellen Sie das Webroot und klonen Sie das Moodle‑Repository:

mkdir -p /var/www/
cd /var/www/  
git clone https://github.com/moodle/moodle.git

Wechseln Sie in das Moodle‑Verzeichnis und listen Sie Branches:

cd moodle/  
git branch -a

Checkout des stabilen Zweigs MOODLE_32_STABLE:

git branch --track MOODLE_32_STABLE orogin/MOODLE_32_STABLE  
git checkout MOODLE_32_STABLE

Kontrollieren Sie den Status:

git status

Sollte so aussehen:

# On branch MOODLE_32_STABLE  
nothing to commit, working directory clean

Moodle herunterladen und konfigurieren

Erstellen Sie das Datenverzeichnis und setzen Sie Rechte:

mkdir -p /var/moodledata  
chown -R nginx:nginx /var/moodledata  
chmod 777 /var/moodledata

Setzen Sie Rechte für das Webverzeichnis:

chown -R nginx:nginx /var/www/moodle  
chmod 755 /var/www/moodle

Schritt 5 - SSL und Virtual Host konfigurieren

Für den produktiven Betrieb sollten Sie ein offizielles Zertifikat (z. B. Let’s Encrypt) verwenden. In diesem Tutorial generieren wir ein selbstsigniertes Zertifikat für Tests.

Zertifikatsverzeichnis erstellen und Zertifikat erzeugen:

mkdir -p /etc/nginx/ssl/  
openssl req -new -x509 -days 365 -nodes -out /etc/nginx/ssl/moodle.crt -keyout /etc/nginx/ssl/moodle.key

Setzen Sie die Berechtigungen für den privaten Schlüssel:

chmod 600 /etc/nginx/ssl/moodle.key

Selbstsigniertes Zertifikat erstellen

Erstellen Sie eine Nginx‑Site‑Konfiguration:

cd /etc/nginx/  
vim conf.d/moodle.conf

Fügen Sie die Virtual Host Konfiguration (Beispiel) hinzu:

# PHP Upstream Handler  
upstream php-handler {  
    server unix:/run/php-fpm/php-fpm.sock;  
}  
   
# Nginx redirect HTTP to HTTPS - moodle.hakase-labs.com  
server {  
    listen 80;  
    server_name moodle.hakase-labs.com;  
    # enforce https  
    return 301 https://$server_name$request_uri;  
}  
   
# HTTPS Configuration  
server {  
        server_name          moodle.hakase-labs.com;  
   
        listen               *:443 ssl http2;  
        listen               [::]:443 ssl http2;  
   
        # SSL Configuration     
        ssl  on;  
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA128:DHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA128:ECDHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA128:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA128:DHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA384:AES128-GCM-SHA128:AES128-SHA128:AES128-SHA128:AES128-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";  
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;  
        ssl_prefer_server_ciphers on;  
        ssl_session_cache shared:SSL:10m;  
        add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";  
        add_header X-Frame-Options DENY;  
        add_header X-Content-Type-Options nosniff;  
        ssl_session_tickets off;  
        #ssl_stapling on;  
        #ssl_stapling_verify on;  
        resolver_timeout 5s;  
        ssl_certificate /etc/nginx/ssl/moodle.crt;  
        ssl_certificate_key /etc/nginx/ssl/moodle.key;  
        
        # Root Moodle Data DIrectory  
        root /var/www/moodle;  
        rewrite ^/(.*\.php)(/)(.*)$ /$1?file=/$3 last;  
   
        location ^~ / {  
                try_files $uri $uri/ /index.php?q=$request_uri;  
                index index.php index.html index.htm;  
   
                location ~ \.php$ {  
                        include fastcgi.conf;  
                        fastcgi_pass php-handler;  
                }  
        }  
}

Testen und neustarten:

nginx -t  
systemctl restart nginx

SSL und Virtual Host sind nun eingerichtet.

Schritt 6 - SELinux und Firewalld konfigurieren

Wenn SELinux aktiviert ist (Enforcing), passen Sie die Kontextberechtigungen an. Wenn SELinux deaktiviert ist, können Sie diesen Abschnitt überspringen, sollten aber die Firewalld‑Regeln trotzdem setzen.

Prüfen Sie SELinux:

sestatus

SELinux Status prüfen

Installieren Sie das SELinux‑Management‑Tool:

yum -y install policycoreutils-python

Setzen Sie die passenden SELinux‑Kontexte:

semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/moodle(/.*)?'  
restorecon -Rv '/var/www/moodle/'  
   
semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata(/.*)?'  
restorecon -Rv '/var/moodledata/'

Firewalld installieren und konfigurieren:

yum -y install firewalld
systemctl start firewalld  
systemctl enable firewalld

Öffnen Sie HTTP/HTTPS/SSH:

firewall-cmd --permanent --add-service=http  
firewall-cmd --permanent --add-service=https  
firewall-cmd --permanent --add-service=ssh

Neu laden und prüfen:

firewall-cmd --reload  
firewall-cmd --list-all

Schritt 7 - Moodle installieren (Webinstaller)

Öffnen Sie Ihren Browser und rufen Sie die Domain Ihres Virtual Hosts auf, z. B. https://moodle.hakase-labs.com. Folgen Sie dem Installationswizard:

  • Sprache wählen
  • Moodle‑Webadresse, Moodle‑Verzeichnis (/var/www/moodle) und moodledata (/var/moodledata) eingeben
  • Datenbanktreiber: MySQL
  • Datenbankverbindungsdaten eingeben (moodledb, moodleuser, Passwort)
  • Lizenz akzeptieren
  • Systemchecks durchführen (stellen Sie sicher, dass alle PHP‑Erweiterungen vorhanden sind)
  • Administrator‑Benutzer erstellen
  • Frontpage konfigurieren

Die Screenshots in der Originalanleitung zeigen die einzelnen Schritte und Bestätigungen.

Schritt 8 - Tests

Besuchen Sie die Moodle‑Startseite und die Login‑Seite, prüfen Sie das Dashboard und die Site‑Administration. Testen Sie Dateupload, Kursanlage und Theme‑Rendern.

Moodle Startseite

Moodle Login

Moodle Dashboard

Zusätzliche Abschnitte: Praxistipps, Sicherheit und Betriebswissen

Wichtig: Die folgenden Erweiterungen und Checklisten sind praxisorientiert und helfen beim stabilen und sicheren Betrieb einer Moodle‑Instanz in Produktion.

Sicherheits‑Härtung (Basisebenen)

  • Verwenden Sie ein offizielles TLS‑Zertifikat (Let’s Encrypt oder CA‑Zertifikat).
  • Deaktivieren Sie unsichere TLS‑Versionen (TLSv1, TLSv1.1) in produktiven Umgebungen; aktivieren Sie TLSv1.2 und TLSv1.3 sofern verfügbar.
  • Führen Sie regelmäßige Updates von OS, PHP, Nginx und Moodle durch.
  • Beschränken Sie Datenbankzugriff auf notwendige Hosts (keine öffentliche Erreichbarkeit).
  • Nutzen Sie starke Passwortrichtlinien und Zwei‑Faktor‑Authentifizierung für Admin‑Konten.
  • Setzen Sie HTTP‑Header: HSTS, X‑Frame‑Options, X‑Content‑Type‑Options wie in der Nginx‑Konfiguration gezeigt.
  • Sichern Sie Backups (Datenbankdump + moodledata + moodle‑Codebase) automatisiert und testen Sie Wiederherstellungen.

SELinux‑ und Rechte‑Hinweise

  • Vermeiden Sie 777 als Standardberechtigung; setzen Sie sie nur temporär während der Konfiguration, wenn nötig. In der Anleitung wurde 777 für /var/moodledata gesetzt — prüfen Sie, ob restriktivere Rechte ausreichend sind (z. B. 770 mit nginx‑Besitz).
  • Prüfen Sie nach Änderungen an Codes oder Plugins die SELinux‑Kontexte erneut.

Performance‑Tipps

  • Aktivieren Sie PHP‑OpCache (in PHP‑Konfiguration bereits enthalten: opcache). Passen Sie opcache.memory_size, opcache.max_accelerated_files und opcache.validate_timestamps an die Umgebung an.
  • Skalierung: Bei größerer Last können Sie Nginx als Reverse Proxy nutzen und mehrere PHP‑FPM‑Backends betreiben (upstream mit mehreren sockets/hosts).
  • Caching: Verwenden Sie Memcached oder Redis für Session‑ und MUC‑Caching (Moodle unterstützt beide).

Backups und Wiederherstellung (Kurzspielplan)

  • Täglich: mysqldump der Moodle‑Datenbank + rsync/Archiv des moodledata.
  • Wöchentlich: Volles Backup der Codebasis + Datenbanken.
  • Testen Sie Wiederherstellungen in einer Staging‑Umgebung monatlich.

Alternativen und Abwägungen

  • Webserver: Apache mit mod_php oder php‑fpm ist eine Alternative zu Nginx; Apache bietet .htaccess‑Kompatibilität, Nginx ist leichter und performant bei statischen Inhalten.
  • Datenbank: PostgreSQL ist eine gut unterstützte und robuste Alternative zu MariaDB/MySQL für Moodle.
  • PHP‑Version: Neuere Moodle‑Versionen können höhere PHP‑Versionen verlangen (PHP 7.4, 8.x). Prüfen Sie die Moodle‑Dokumentation vor einem Upgrade.

Wann diese Anleitung nicht passt

  • Sie betreiben eine sehr große Nutzerbasis (mehrere Zehntausende gleichzeitiger Nutzer): Benötigt horizontale Skalierung, Load Balancer, dedizierte Cache‑Layer und Monitoring.
  • Sie nutzen managed Hosting oder PaaS, bei dem Systempakete nicht frei installierbar sind (dann verwendet der Anbieter eigene Prozesse).
  • Sie benötigen spezielle Integrationen (LDAP/SSO), die zusätzliche Konfiguration erfordern.

Kompatibilitäts‑ und Migrationshinweise

  • Versionen: Moodle 3.2 ist alt; vor einem Upgrade auf eine neuere Moodle‑Version lesen Sie die Upgrading‑Notes der Moodle‑Dokumentation.
  • Plugins: Prüfen Sie die Kompatibilität aller Plugins mit der Ziel‑Moodle‑Version.
  • Testmigration: Erstellen Sie eine Staging‑Instanz und migrieren Sie Daten dort, bevor Sie die Produktion umstellen.

Rollenbasierte Checkliste

Admin (Inbetriebnahme):

  • OS‑Updates durchführen
  • Nginx, PHP‑FPM, MariaDB installieren
  • SELinux‑Kontexte setzen
  • SSL‑Zertifikat installieren
  • Moodle‑Datenbank und moodledata anlegen

Operator (Betrieb):

  • tägliche Sicherungen prüfen
  • Logrotationsregeln implementieren
  • Performance‑Metriken (CPU, RAM, DB‑Latenz) überwachen

Sicherheitsverantwortlicher:

  • regelmäßige Benutzerbereinigung
  • Audit‑Logs prüfen
  • Schwachstellen‑Scans planen

SOP / Playbook für Wartungsfenster

  1. Wartungsfenster ankündigen (E‑Mail + Webseite)
  2. Read‑only Modus in Moodle aktivieren
  3. Vollbackup: DB dump + moodledata + Code
  4. Paketupdates (OS, PHP, Nginx)
  5. Moodle‑Upgrade/Plugin‑Updates durchführen
  6. Tests: Anmelden, Kurszugriff, Datei Upload
  7. Monitoring prüfen, Read‑only Modus entfernen

Akzeptanzkriterien

  • Moodle‑Startseite lädt fehlerfrei über HTTPS
  • Admin‑Login funktioniert
  • Kurs anlegen und Dateiupload funktionieren
  • Cronjob läuft (site admin → Scheduled tasks)
  • Backups sind vorhanden und Wiederherstellung getestet

Mini‑Methodologie: Schnelle Fehlerdiagnose

  1. Prüfen Sie Nginx‑ und PHP‑FPM‑Logs (/var/log/nginx/, /var/log/php-fpm/)
  2. Prüfen Sie MariaDB‑Logs (/var/log/mariadb/)
  3. Prüfen Sie SELinux‑AVCs (ausearch, audit.log)
  4. Replizieren Sie das Problem mit curl -I https://your.domain

Faktenbox: Wichtige Pfade und Befehle

  • Webroot: /var/www/moodle
  • Moodle data: /var/moodledata
  • PHP‑FPM socket: /run/php-fpm/php-fpm.sock
  • MariaDB Standardport: 3306
  • Nginx Konfig: /etc/nginx/conf.d/moodle.conf

Kurzankündigung (100–200 Wörter)

Wir haben erfolgreich Moodle 3.2 auf CentOS 7 mit Nginx, PHP‑FPM 7.0 und MariaDB installiert. Die Anleitung umfasst die komplette Einrichtung: Webserver, PHP, Datenbank, SSL, SELinux‑Kontexte und Firewalld‑Regeln. Zusätzlich erhalten Sie Sicherheits‑ und Performance‑Tipps, Checklisten für Admins und Betreiber sowie ein kleines Playbook für Wartungsfenster. Diese Basisinstallation eignet sich für kleine bis mittlere Installationen; für größere Umgebungen werden zusätzliche Skalierungs‑ und Monitoringmaßnahmen empfohlen. Ersetzen Sie bitte die Beispielpasswörter durch sichere Werte und nutzen Sie ein offizielles TLS‑Zertifikat in Produktionsumgebungen.

Social‑Preview Vorschläge

OG Title: Moodle 3.2 auf CentOS 7 mit Nginx & MariaDB installieren OG Description: Schritt‑für‑Schritt‑Guide zur Einrichtung von Moodle 3.2 mit SSL, SELinux und Sicherheits‑Checklisten.

Zusammenfassung

  • Mit dieser Anleitung richten Sie eine funktionale Moodle‑Instanz unter CentOS 7 ein.
  • Achten Sie auf sichere Passwörter, offizielle TLS‑Zertifikate und regelmäßige Backups.
  • Für Produktionsumgebungen prüfen Sie Skalierung, Monitoring und regelmäßige Updates.

Referenz

Autor
Redaktion

Ähnliche Materialien

Einstellungen-Icon im Startmenü wiederherstellen
Windows Hilfe

Einstellungen-Icon im Startmenü wiederherstellen

Scrollleisten in Windows 10 & 11 anpassen
Windows

Scrollleisten in Windows 10 & 11 anpassen

Automatische Sicherheitsupdates für Ubuntu 16.04
Systemadministration

Automatische Sicherheitsupdates für Ubuntu 16.04

Android-App-Berechtigungen einschränken
Android-Anleitungen

Android-App-Berechtigungen einschränken

Chef-Server auf Ubuntu 17.04 installieren
DevOps

Chef-Server auf Ubuntu 17.04 installieren

Microsoft Teams Fehler 500 beheben — 9 Lösungen
Fehlerbehebung

Microsoft Teams Fehler 500 beheben — 9 Lösungen