So installierst du die Moodle eLearning Plattform auf Rocky Linux 8

Moodle ist ein kostenloses, quelloffenes Online-Lernmanagementsystem (LMS). Es ermöglicht es Lehrkräften, eine voll funktionsfähige Website für Bildungskurse mit einem Online-Klassenzimmer zu erstellen. Es ist in PHP geschrieben. Es bietet eine Vielzahl von Funktionen wie Wiki, Benotung, Aufgabenübermittlung, Online-Quiz, Diskussionsforen und vieles mehr.

Diese Anleitung erklärt, wie du Moodle auf einem Rocky Linux 8 Server installierst.

Voraussetzungen

  • Ein Server, auf dem Rocky Linux 8 läuft.
  • Ein Domainname, der auf den Server verweist. Für unser Tutorial werden wir die Domain moodle.example.com verwenden.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Stelle sicher, dass alles auf dem neuesten Stand ist.
    $ sudo dnf update
    
  • Installiere grundlegende Hilfspakete. Einige von ihnen sind vielleicht schon installiert.
    $ sudo dnf install wget curl nano unzip yum-utils -y
    

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Rocky Linux verwendet die Firewalld Firewall. Überprüfe den Status der Firewall.

$ sudo firewall-cmd --state
running

Die Firewall arbeitet mit verschiedenen Zonen, wobei die öffentliche Zone die Standardzone ist, die wir verwenden werden. Liste alle Dienste und Ports auf, die auf der Firewall aktiv sind.

$ sudo firewall-cmd --permanent --list-services

Es sollte die folgende Ausgabe angezeigt werden.

cockpit dhcpv6-client ssh

Moodle braucht HTTP- und HTTPS-Ports, um zu funktionieren. Öffne sie.

$ sudo firewall-cmd --add-service=http --permanent
$ sudo firewall-cmd --add-service=https --permanent

Lade die Firewall neu, um die Änderungen zu übernehmen.

$ sudo firewall-cmd --reload

Schritt 2 – Git installieren

Git wird von Moodle benötigt, um die Anwendungsdateien zu erfassen. Installiere Git.

$ sudo dnf install git

Schritt 3 – PHP installieren und konfigurieren

Wir müssen PHP 8.0 installieren, damit Moodle für unseren Lehrgang funktioniert. Der erste Schritt besteht darin, das Epel-Repository zu installieren.

$ sudo dnf install epel-release

Als nächstes installierst du das Remi-Repository.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Prüfe, ob PHP Streams verfügbar sind.

$ dnf module list php -y
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language
php                 8.0                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

Die Standardversion ist 7.2. Aktiviere das PHP 8.0 Repository von Remi.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

Installiere PHP und die erforderlichen Erweiterungen, die für Moodle benötigt werden.

$ sudo dnf install graphviz aspell ghostscript clamav php-fpm php-iconv php-curl php-mysqlnd php-cli php-mbstring php-xmlrpc php-soap php-zip php-gd php-xml php-intl php-json php-sodium php-opcache

Überprüfe die Installation.

$ php --version
PHP 8.0.21 (cli) (built: Jul  6 2022 10:13:53) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.21, Copyright (c), by Zend Technologies

Öffne die Datei php.ini zum Bearbeiten.

$ sudo nano /etc/php.ini

Ändere die Werte der folgenden Variablen, um die Größe des Mailanhangs auf 25 MB zu setzen.

upload_max_filesize = 25M
post_max_size = 25M

Entferne als Nächstes die Variable max_input_vars, indem du das Semikolon davor entfernst und ihren Wert in 5000 änderst.

max_input_vars = 5000

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Finde die Zeilen user=apache und group=apache in der Datei und ändere sie wie folgt.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Als Nächstes kommentierst du die Zeilen Besitzer der Socket-Datei, Gruppe und Standardberechtigung aus und änderst sie wie unten gezeigt.

; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server.
; Default Values: user and group are set as the running user
;                 mode is set to 0660
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Als nächstes kommentierst du die folgende Zeile aus, indem du ein Semikolon davor setzt.

;listen.acl_users = apache,nginx

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Gib dem PHP-Sitzungsverzeichnis die richtigen Berechtigungen.

$ chown -R nginx:nginx /var/lib/php/session/

Aktiviere und starte den PHP-FPM-Dienst.

$ sudo systemctl enable php-fpm --now

Schritt 4 – MySQL installieren und konfigurieren

Installiere den MySQL-Server.

$ sudo dnf install mysql-server

Bestätige die Installation, indem du die Version überprüfst.

$ mysql --version
mysql  Ver 8.0.26 for Linux on x86_64 (Source distribution)

Aktiviere und starte den MySQL-Dienst.

$ sudo systemctl enable mysqld --now

Führe das Skript für die sichere Installation aus.

$ sudo mysql_secure_installation

Du wirst mehrere Aufforderungen erhalten. Bei der ersten Aufforderung wirst du gefragt, ob du das Validate Password Plugin installieren möchtest. Drücke Y, um das Plugin zu installieren. Wähle 2 als Sicherheitsstufe, damit dein Passwort mindestens 8 Zeichen lang ist und eine Mischung aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthält.

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: (Press Y)

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: (Type 2)

Als nächstes wirst du aufgefordert, ein sicheres Root-Passwort zu erstellen. Achte darauf, dass dein Passwort den Anforderungen des Validate Plugins entspricht.

Please set the password for root here.

New password:

Re-enter new password:

Als Nächstes werden dir mehrere Fragen zur Erhöhung der Sicherheit der Datenbank gestellt. Drücke bei jeder Aufforderung Y.

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : (Press Y)
Remove anonymous users? (Press y|Y for Yes, any other key for No) : (Press Y)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : (Press Y)
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : (Press Y)
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : (Press Y)
Success.

All done!

Melde dich in der MariaDB-Shell an.

$ sudo mysql

Erstelle eine Datenbank für Moodle.

mysql > CREATE DATABASE moodledb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Erstelle einen SQL-Benutzer für den Zugriff auf die Datenbank. Ersetze YourPassword23! durch ein Passwort deiner Wahl.

mysql > create user 'moodleuser'@'localhost' IDENTIFIED BY 'YourPassword23!';

Gewähre moodleuser Zugriff auf die Datenbank.

mysql > GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodledb.* TO 'moodleuser'@'localhost';

Lade die Berechtigungstabelle neu.

mysql > FLUSH PRIVILEGES;

Beende die Shell.

mysql > exit

Schritt 5 – Nginx installieren

Rocky Linux wird mit einer älteren Version von Nginx ausgeliefert. Um die neueste Version zu installieren, musst du das offizielle Nginx-Repository herunterladen.

Erstelle und öffne die Datei /etc/yum.repos.d/nginx.repo zur Erstellung des offiziellen Nginx-Repositorys.

$ sudo nano /etc/yum.repos.d/nginx.repo

Füge den folgenden Code in die Datei ein.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Installiere den Nginx-Server.

$ sudo dnf install nginx

Überprüfe die Installation.

$ nginx -v
nginx version: nginx/1.22.0

Schritt 6 – Moodle installieren

Erstelle das öffentliche Verzeichnis für Moodle.

$ sudo mkdir /var/www/html/moodle

Erteile dem angemeldeten Benutzer die Erlaubnis, auf das Verzeichnis zuzugreifen.

$ sudo chown -R $USER:$USER /var/www/html/moodle

Wechsle in das öffentliche Verzeichnis.

$ cd /var/www/html/moodle

Klone das Moodle-Github-Repository.

$ git clone https://github.com/moodle/moodle.git .

Überprüfe die Liste der verfügbaren Zweige.

$ git branch -a

Im Moment ist MOODLE_400_STABLE die letzte verfügbare Version. Erstelle einen lokalen Zweig mit dem Namen MOODLE_400_STABLE und lege fest, dass er den entfernten Zweig verfolgt.

$ git branch --track MOODLE_400_STABLE origin/MOODLE_400_STABLE

Wechsle zu dem neu erstellten lokalen Zweig.

$ git checkout MOODLE_400_STABLE

Erstelle ein Datenverzeichnis für Moodle.

$ sudo mkdir /var/moodledata

Gib dem Moodle-Datenverzeichnis die richtigen Berechtigungen.

$ sudo chown -R nginx /var/moodledata
$ sudo chmod -R 775 /var/moodledata

Erteile Schreibrechte für das Moodle-Verzeichnis.

$ sudo chmod -R 755 /var/www/html/moodle

Schritt 7 – Moodle konfigurieren

Wechsle in das Moodle-Verzeichnis.

$ cd /var/www/html/moodle

Kopiere die Beispielkonfigurationsdatei, um die Moodle-Konfigurationsdatei zu erstellen.

$ cp config-dist.php config.php

Öffne die Konfigurationsdatei zum Bearbeiten.

$ nano config.php

Suche den Abschnitt „Datenbankkonfiguration“ und konfiguriere die Datenbank, in der alle Moodle-Daten gespeichert werden sollen, wie unten gezeigt.

$CFG->dbtype    = 'mysqli';      // 'pgsql', 'mariadb', 'mysqli', 'auroramysql', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native';     // 'native' only at the moment
$CFG->dbhost    = 'localhost';  // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname    = 'moodledb';     // database name, eg moodle
$CFG->dbuser    = 'moodleuser';   // your database username
$CFG->dbpass    = 'YourPassword23!';   // your database password
$CFG->prefix    = 'mdl_';       // prefix to use for all table names

Lege auch den Moodle-Domänennamen und das Datenverzeichnis fest.

$CFG->wwwroot   = 'https://moodle.example.com';
$CFG->dataroot  = '/var/moodledata';

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Schritt 8 – SSL installieren

Das Certbot-Tool generiert SSL-Zertifikate mithilfe der Let’s Encrypt API. Es benötigt das EPEL-Repository, aber da wir es bereits installiert haben, können wir direkt fortfahren. Gib den folgenden Befehl ein, um es zu installieren.

$ sudo dnf install certbot

Erstelle das SSL-Zertifikat.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d moodle.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/moodle.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Erstelle ein Challenge-Web-Root-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Erstelle einen Cron Job zur Erneuerung des SSL-Zertifikats. Er wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstelle dazu zunächst die Datei /etc/cron.daily/certbot-renew und öffne sie zur Bearbeitung.

$ sudo nano /etc/cron.daily/certbot-renew

Füge den folgenden Code ein.

#!/bin/sh
certbot renew --cert-name moodle.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Ändere die Berechtigungen für die Aufgabendatei, um sie ausführbar zu machen.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Schritt 9 – Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/moodle.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/moodle.conf

Füge den folgenden Code in die Datei ein.

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    listen [::]:80;
    server_name moodle.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name moodle.example.com;
    root   /var/www/html/moodle;
    index  index.php;

    ssl_certificate     /etc/letsencrypt/live/moodle.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/moodle.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/moodle.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/moodle.access.log main;
    error_log  /var/log/nginx/moodle.error.log;
    
    client_max_body_size 25M;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ ^(.+\.php)(.*)$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index index.php;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        include /etc/nginx/mime.types;
        include fastcgi_params;
        fastcgi_param  PATH_INFO  $fastcgi_path_info;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    
    # Hide all dot files but allow "Well-Known URIs" as per RFC 5785
	location ~ /\.(?!well-known).* {
    	return 404;
	}
 
	# This should be after the php fpm rule and very close to the last nginx ruleset.
	# Don't allow direct access to various internal files. See MDL-69333
	location ~ (/vendor/|/node_modules/|composer\.json|/readme|/README|readme\.txt|/upgrade\.txt|db/install\.xml|/fixtures/|/behat/|phpunit\.xml|\.lock|environment\.xml) {
     	deny all;
	    return 404;
	}
}

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf und bearbeite sie.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Aktiviere und starte den Nginx-Dienst, um die neue Konfiguration zu aktivieren.

$ sudo systemctl enable nginx --now

Wenn du die folgende Fehlermeldung erhältst, liegt das höchstwahrscheinlich an SELinux-Einschränkungen.

nginx: [emerg] open() "/var/run/nginx.pid" failed (13: Permission denied)

Um den Fehler zu beheben, führe die folgenden Befehle aus.

$ sudo ausearch -c 'nginx' --raw | audit2allow -M my-nginx
$ sudo semodule -X 300 -i my-nginx.pp

Starte den Nginx-Dienst erneut.

$ sudo systemctl start nginx

Schritt 10 – SELinux konfigurieren

Ändere den Dateisicherheitskontext für das Web- und Datenverzeichnis von Moodle.

$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/moodle'
$ sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/moodledata'
$ sudo restorecon -Rv '/var/www/html/moodle'
$ sudo restorecon -Rv '/var/moodledata'

Konfiguriere SELinux so, dass Netzwerkverbindungen von Moodle zugelassen werden.

$ sudo setsebool -P httpd_can_network_connect on

Schritt 11 – Abschließen der Moodle-Installation

Öffne die URL https://moodle.example.com in deinem Browser und du bekommst den folgenden Willkommensbildschirm zu sehen.

Moodle Willkommensseite

Klicke auf die Schaltfläche Weiter, um fortzufahren. Als nächstes prüft das Installationsprogramm die Systemvoraussetzungen.

Moodle Systemanforderungen

Wenn alles in Ordnung ist, scrolle nach unten und klicke auf die Schaltfläche Weiter, um mit der Installation der Dateien und der Einrichtung der Datenbank fortzufahren.

Moodle Installations Seite

Klicke auf die Schaltfläche Weiter, sobald die Installation abgeschlossen ist. Als Nächstes erstellst du ein Administratorkonto, indem du die geforderten Kontodaten eingibst.

Moodle Administrator Konto einrichten

Wenn du fertig bist, scrolle nach unten und klicke auf Profil aktualisieren, um fortzufahren.

Moodle Administrator Konto Update

Als Nächstes wirst du aufgefordert, die Einstellungen für die Startseite von Moodle zu konfigurieren.

Moodle Site Home Einstellungen

Konfiguriere sie nach deinen Wünschen und klicke auf Änderungen speichern, um zum Moodle-Dashboard zu gelangen. Klicke unten auf den Link Überspringen, wenn du deine Moodle-Website nicht bei dem Unternehmen registrieren möchtest.

Moodle Dashboard

Jetzt kannst du die Lernplattform nutzen.

Fazit

Damit ist unser Tutorium zur Installation der Lernplattform Moodle auf einem Rocky Linux 8 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …