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.
Klicke auf die Schaltfläche Weiter, um fortzufahren. Als nächstes prüft das Installationsprogramm die Systemvoraussetzungen.
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.
Klicke auf die Schaltfläche Weiter, sobald die Installation abgeschlossen ist. Als Nächstes erstellst du ein Administratorkonto, indem du die geforderten Kontodaten eingibst.
Wenn du fertig bist, scrolle nach unten und klicke auf Profil aktualisieren, um fortzufahren.
Als Nächstes wirst du aufgefordert, die Einstellungen für die Startseite von Moodle zu konfigurieren.
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.
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.