Hinweise für eigene Programme (in PHP usw.)
Stand: 02.12.2021
Aus der Konzeption des Webserverparks ergeben sich einige Besonderheiten, die beim Programmieren und Installieren eigener Programme zu beachten sind.
Notfallvorsorge
Im Falle größerer Katastrophen wird auf ein leistungsschwächeres Notfallsystem umgeschaltet. Auf diesem werden keine PHP-Skripte oder CGI-Programme ausgeführt. Sofern Sie nichts unternehmen, führt der Versuch eines Aufrufs während des Notbetriebs zu einer Fehlermeldung.
Sie können aber zu jedem PHP-Skript und zu jedem CGI-Programm eine Notfalldatei anlegen, welche angezeigt wird, falls während des Notbetriebs jemand einen Aufruf versucht. Dazu erzeugen Sie zu jeder Datei „xxxxx.php“ eine normale HTML-Datei namens „xxxxx.php-sos.html“ (analog für die Dateiendung „.cgi“). Der Name der HTML-Datei ergibt sich also aus dem Namen des Skripts/Programms durch Anhängen von „-sos.html“.
Sitzungen / Sessions
Da verschiedene WWW-Zugriffe von verschiedenen Backend-Servern verarbeitet werden, muss bei der Verwaltung von Sitzungen darauf geachtet werden, dass die Sitzungsdaten an einer Stelle abgelegt werden, auf die alle Backend-Server zugreifen können.
Beim Einrichten eines Webspaces wird für diesen Zweck das Verzeichnis /www/data/NNN/sessions/ angelegt. Sorgen Sie bitte beim Starten eines Programms dafür, dass alle Sitzungsdateien dort und alle anderen Daten, die von einem Zugriff zum nächsten überdauern sollen, ebenfalls in Unterverzeichnissen von /www/data/NNN/ abgelegt werden und nicht in /tmp/.
Wer die Programmiersprache PHP benutzt, findet die entsprechende Zeile bereits in der zuständigen Datei /www/data/NNN/php.ini eingetragen. Dort können auch weitere Konfigurationseinstellungen eingetragen werden.
Programmiersprachen / Skriptsprachen
PHP
Zur Verfügung stehen folgende selbst kompilierte PHP-Versionen. Diese sind bereits eingebunden als Apache-Handler, siehe Eigene Einstellungen im Webserverpark. Die voreingestellte Version können Sie einfach nutzen, wenn Sie eine andere Version nutzen möchten, müssten Sie eine eigene Einstellung vornehmen. Aktuell verfügbar sind:
- PHP 8.1
-
Verfügbar ab 12/2021
Voreinstellung ab 07/2022 bis voraussichtlich 06/2025 – (verlängert)
Endgültige, unwiderrufliche Abschaltung voraussichtlich 12/2025 – (verlängert)
Eigene Einstellung: AddHandler php81-script php
Aus Sicherheitsgründen nicht zur Verfügung steht das Apache-Modul mod_php. Daher stehen vereinzelte PHP-Features nicht zur Verfügung (insbesondere keine persistenten Datenbankverbindungen). Ausnahmen sind nur für extrem frequentierte Webspaces, z. B. LearnWeb, möglich.
Aufgrund der PHP-Einbindung als Apache-Handler finden PHP-Skripte, die in zugangsgeschützten Verzeichnissen liegen, die eingegebene Nutzerkennung in $_SERVER['REDIRECT_REMOTE_USER'] (anstatt wie sonst üblich in: $_SERVER['REMOTE_USER']). (Achtung: Da wir am internationalen Single Sign-On teilnehmen, kann diese Variable auch eine externe Identitätsangabe enthalten: „username“ bezeichnet eine von uns vergebene Nutzerkennung, „username@domain“ oder „username@
Perl
Perl und alle in den CentOS-7- und EPEL-Repositories vorhandenen Perl-Module sind bereits installiert und können einfach genutzt werden. Entsprechende Programme müssen aber als CGI-Programme aufgerufenen werden, siehe Eigene Einstellungen im Webserverpark).
Wenn Sie weitere Module in Ihrem Webspace installieren möchten, verwenden Sie dazu bitte das Verzeichnis /www/data/NNN/perl5lib/:
mkdir /www/data/NNN/perl5lib cd wget .../XXX-YYY-0.0.0.tar.gz tar zxf XXX-YYY-0.0.0.tar.gz cd XXX-YYY-0.0.0 perl Makefile.PL PREFIX=/www/data/NNN/perl5lib/XXX-YYY-0.0.0 make make test make install /www/bin/repairwebspace NNN
Da der Webserver die Umgebungsvaraiable PERL5LIB=/www/data/NNN/perl5lib setzt, werden die so erzeugten Module problemlos gefunden.
Aus Sicherheitsgründen nicht zur Verfügung steht das Apache-Modul mod_perl. Daher stehen vereinzelte Perl-Features nicht zur Verfügung (insbesondere keine persistenten Datenbankverbindungen).
Andere
Alle weiteren zum Lieferumfang von CentOS 7 gehörenden Sprachen können ebenfalls genutzt werden. Entsprechende Programme müssen aber als CGI-Programme aufgerufenen werden, siehe Eigene Einstellungen im Webserverpark.
Weitere Software
In gewissem Rahmen kann systemseitig vom Ihnen gewünschte Software nachinstalliert werden, vorzugsweise aus den CentOS-7- und EPEL-Repositories. Bitte nehmen Sie bei Bedarf frühzeitig Kontakt mit uns auf, damit wir gemeinsam die beste Lösung für Ihre Problemstellung finden können.
Versand von E-Mails
E-Mails können ganz normal mit den Werkzeugen der verwendeten Skriptsprache verschickt werden. Jedoch sollten Sie darauf achten, dass als Absender eine sinnvolle Adresse eingetragen wird, damit eventuelle Fehlermeldungen bei Ihnen landen und nicht die Systemverwalter belästigen:
Wer die PHP-Funktion mail() benutzt, sollte bitte als fünftes Argument (additional parameters) die Angabe „-f absender“ angeben, etwa so:
$ok=mail($to,$subj,$message,'','-f username@uni-muenster.de');
Wer direkt die Systemfunktion /usr/sbin/sendmail benutzt, sollte dabei ebenfalls die Option „-f Absender“ angeben.
Regelmäßig ablaufende Programme (Cron-Jobs)
Das Installieren von Cron-Jobs ist auf dem Webserverpark nicht möglich. Sie können jedoch in Ihrem Hauptverzeichnis ein Verzeichnis /www/data/NNN/cron und darin eine Datei /www/data/NNN/cron/daily ablegen und mit dem Befehl „chmod +x /www/data/NNN/cron/daily“ ausführbar machen. Diese Datei wird dann täglich einmal in der Nacht irgendwann zwischen 3 Uhr und 5 Uhr aufgerufen.
Falls es unbedingt nötig ist, können Sie im gleichen Verzeichnis auch Skripte namens /www/data/NNN/cron/xxx.loop ablegen (xxx passend ersetzen). Das System schaut alle fünf Minuten nach diesen Skripten: Falls ein Skript gerade nicht läuft und seit dem Ende des vorherigen Laufs mindestens fünf Minuten vergangen sind, wird es neu gestartet. Für diese Skripte gilt ein CPU-Zeit-Limit von nur gut einer Minute. Normalerweise läuft so ein Skript also alle 10 Minuten. Um ein Skript stündlich auszuführen, ergänzen Sie ein „sleep 3000“ (= eine Stunde minus 10 Minuten).
MySQL-Datenbanken
Auf Wunsch kann einem Infoanbieter eine MySQL- (genauer: MariaDB-) Datenbank zur Verfügung gestellt werden. Der Zugriff auf diese Datenbank erfordert TLS-Verschlüsselung, damit das Datenbankpasswort nicht im Klartext durch das Netz geschickt wird. In PHP könnte das so aussehen:
$dbhost='mysql.uni-muenster.de'; $dbport=3306; $dbuser='.....'; $dbpass=chop(file_get_contents('.....')); # Passwort aus Datei $dbname='.....; $conn=mysqli_init(); mysqli_options($conn, MYSQLI_OPT_CONNECT_TIMEOUT, 5); mysqli_ssl_set($conn, null, null, '/www/data/sys/pem/all-rootca.pem', # Wurzelzertifikate null, null ); if(!mysqli_real_connect($conn, $dbhost,$dbuser,$dbpass,$dbname,$dbport,null, MYSQLI_CLIENT_SSL) ){ ... Fehlerbehandlung ... }
oder so mit PDO:
$dbhost='mysql.uni-muenster.de'; $dbport=3306; $dbuser='.....'; $dbpass=chop(file_get_contents('.....')); # Passwort aus Datei $dbname='.....; try{ $pdo=new PDO("mysql:host=$dbhost;port=$dbport;dbname=$dbname", $dbuser,$dbpass,[ PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true, PDO::MYSQL_ATTR_SSL_CA=>'/www/data/sys/pem/all-rootca.pem', ] ); ..... }catch(PDOException $e){ ... Fehlerbehandlung ... }