Webserver mittels des PHP aufsetzen

Für die Entwicklung im Web-Bereich wird meist ein lokaler Webserver benötigt, welcher meist über PHP, eine Datenbank z.B. MariaDB und den eigentlichen Webserver verfügt. Allerdings muss nicht für jeden Fall gleich ein Nginx installiert werden.

Der PHP-Webserver

Ist ein PHP installiert, z.B. unter macOS über Homebrew:

brew install php

kann dieses genutzt werden, um einen Webserver mittels PHP im Terminal zu realisieren. Dafür dient die Option -S:

sudo php -S localhost:80

Als Parameter wird die Adresse und der gewünschte Port angegeben. Das sudo wird benötigt, um den privilegierten Port zu nutzen. Anschließend hört PHP auf dem Port und der Adresse und bearbeitet entsprechende Anfragen.

WordPress Pseudo-Cronjob-System deaktivieren

WordPress verfügt über ein Pseudo-Cronjob-System, über welches regelmäßige Aufgaben seitens WordPress ausgeführt werden. Hintergrund ist, dass die meisten Webhosting-Pakete über keine echte Cronjob-Funktionalität verfügen. Ausgelöst wird das Pseudo-Cronjob-System durch Besuche der Webseite.

Allerdings führt dies auch zu Problemen; da es so vorkommen kann, das bestimmte Dinge, wie die Veröffentlichung geplanter Artikel, sich verzögern können. Wird WordPress auf einem dedizierten Server ausgeführt, kann hier auf einen echten Cronjob gewechselt werden. Dazu müssen zur Konfigurationsdatei wp-config.php folgende Zeilen hinzugefügt werden:

/* Deaktiviere WordPress Pseudo-Cronjob-System */
define('DISABLE_WP_CRON', true);

Damit die Cronjob-Funktionalität weiterhin funktioniert, muss der Cronjob entsprechend eingetragen werden. Dazu wird die Crontab-Datei im Kontext des Nutzers www-data geöffnet:

sudo -u www-data crontab -e

Dort sollte dann die entsprechende Zeile hinzugefügt werden:

*/1  *    * * *   php /var/www/wordpress/wp-cron.php

Damit werden die Aufgaben, welche WordPress im Rahmen seines Pseudo-Cronjob-System durchführt, nun durch einen echten Cronjob durchgeführt. Damit ist die Zuverlässigkeit des Systems erhöht und geplante Aufgaben, werden immer zeitnah erledigt.

Zurückbehaltene Pakete unter Ubuntu aktualisieren

Unter Umständen kann es vorkommen, das bei einer Paketaktualisierung mittels apt folgende Meldung erscheint:

The following packages have been kept back:
grub-efi-amd64 grub-efi-amd64-bin grub-efi-amd64-signed gzip php8.1-bcmath php8.1-cli php8.1-common php8.1-curl php8.1-fpm php8.1-gd php8.1-gmp php8.1-imap php8.1-intl php8.1-mbstring php8.1-mysql php8.1-opcache php8.1-phpdbg php8.1-readline php8.1-sqlite3 php8.1-xml php8.1-zip
0 upgraded, 0 newly installed, 0 to remove and 21 not upgraded.

Grund für diese Meldung kann unter anderem sein, das in der Abhängigkeitskette für eines der Pakete ein neues Paket dazugekommen ist. Daneben werden Pakete in der gleichen Version im Normalfall nicht noch einmal aktualisiert. Soll ein solches zurückgehaltenes Paket trotzdem installiert bzw. aktualisiert werden, so kann hierfür folgender Befehl genutzt werden:

apt install --only-upgrade php8.1-zip

Anschließend wird das Paket aktualisiert. Allerdings sollte diese Option mit Bedacht gewählt werden, da es unter Umständen zu Änderungen kommen kann, welche das System bzw. Teile davon in einem nicht funktionsfähigen Zustand zurücklassen, sodass anschließend nachkonfiguriert werden muss.

WordPress CLI installieren und nutzen

Für das Content-Management-System WordPress existiert neben dem eigentlichen System auch eine separate Kommandozeile. Die hört auf den Namen WP-CLI und muss im ersten Schritt installiert werden:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
mv wp-cli.phar /usr/local/bin/wp

Damit ist die WP-CLI installiert und kann über das Kommando:

wp --info

getestet werden. Um WP-CLI aktuell zu halten, kann das Kommando:

wp cli update

genutzt werden.

Grundsätzlich sollten die Befehle der WP-CLI im Kontext des Webserver-Nutzers ausgeführt werden. In den meisten Fällen ist dies www-data. Eine Ausnahme bilden die Befehle zur Installation und zur Aktualisierung. Wird versucht ein WP-CLI-Befehl unter dem root-Nutzer auszuführen, so erhält der Nutzer folgende Meldung:

Error: YIKES! It looks like you’re running this as root. You probably meant to run this as the user that your WordPress installation exists under.

If you REALLY mean to run this as root, we won’t stop you, but just bear in mind that any code on this site will then have full control of your server, making it quite DANGEROUS.

If you’d like to continue as root, please run this again, adding this flag: –allow-root

If you’d like to run it as the user that this site is under, you can run the following to become the respective user:

sudo -u USER -i — wp

Per sudo mit dem korrekten Nutzer ausgeführt funktioniert das Ganze:

sudo -u www-data wp transient delete --all
Success: 163 transients deleted from the database.

Mittels der WP-CLI lassen sich eine Reihe von Aufgaben bewerkstelligen. So verfügt die CLI über Methoden, um Kommentare zu erzeugen und zu verwalten. Mit dem Befehl:

wp comment delete $(wp comment list --status=spam --format=ids)

können z.B. alle Spam-Kommentare gelöscht werden. Über den core-Namespace können unter anderem WordPress-Updates vorgenommen werden:

wp core update

Vor allem im Zusammenhang mit einer Automation spielt WP-CLI seine Stärken aus. So können neue WordPress-Installationen angelegt werden und entsprechende Plugins automatisch installiert werden. In der Entwickler-Dokumentation von WordPress findet sich eine Referenz der Befehle der WP-CLI.

Entwickelt wird WP-CLI auf Github. Lizenziert ist das CLI unter der MIT-Lizenz und damit freie Software. Die offizielle Seite des Projektes ist unter wp-cli.org zu finden.

Freies Soundboard nun mit Broadcast-Funktionalität

Vor einigen Jahren hatte ich ein Soundboard entwickelt, welches ich vor allem für Pen & Paper-Rollenspiele benutzt habe. In Zeiten einer weltweiten Pandemie wäre es ziemlich unverantwortlich sich für ein solches Pen & Paper zusammen in einen Raum zu sitzen. Aus diesem Grund habe ich mein Soundboard um eine Broadcast-Funktionalität erweitert. Damit kann der Gamemaster die Master-Komponente nutzen, während die Spieler die Broadcast-Variante benutzen.

Das neue Soundboard; nun mit einer Remote-Komponente

Technisch läuft die Kommunikation der einzelnen Clients mit der Master-Komponente über einen Websocket-Server der in PHP implementiert wurde. Wenn der Gamemaster einen Clip abspielt, wird dieser bei den Spielern ebenfalls abgespielt. Jeder Spieler kann die Gesamtlautstärke individuell einstellen, während der Gamemaster die relative Lautstärke der Clips zueinander einstellen kann.

Zur Nutzung des Soundboard müssen die Soundclips in den assets-Ordner kopiert werden und dazu eine passende boards.json-Datei geschrieben werden. Ein Beispiel dieser Datei befindet sich im Repository. Anschließend kann das Soundboard im Browser genutzt werden. Soundclips können einzeln oder in einer Schleife abgespielt werden. Für jeden Clip lässt sich daneben die Lautstärke einzeln regeln. Auch das Abspielen von mehreren Clips parallel ist kein Problem. Zu finden ist das Soundboard auf GitHub. Lizenziert ist es unter der AGPL in der Version 3 und somit freie Software.