TSN-Ranksystem icon indicating copy to clipboard operation
TSN-Ranksystem copied to clipboard

Datei "worker.php" um POST-Paramter ergänzen

Open Holt31 opened this issue 3 years ago • 5 comments

Vorhandenes Feature

1) Ich beziehe mich auf das folgende bestehende Feature:** Cronjob der Datei "worker.php".

2) Was möchtest du hinzufügen oder ändern?** Die Befehle mittels Postparameter ausführen.

3) Was wäre der Vorteil?** Leute die das TS3-Rankingsystem in einem Dockerimage nutzen oder in einem Kubernetes-Cluster haben den Nachteil, dass diese nur schwer einen Cronjob erstellen können. Für solche Probleme gibt es beispielsweise Seiten wie "https://cron-job.org/". Das Problem ist, dass man die Datei nicht mittels Parameter (bspw. https://ts3ranking.example.com/worker.php?check=true) etc. aufrufen kann. Dadurch ist es nicht möglich Webcronjobs zu nutzen. Mit dieser Featureerweiterung würde das funktionieren.

Holt31 avatar May 15 '21 21:05 Holt31

Hi, ich hab das ganze bei mir so gelöst, dass ich einfach die worker.php im Container zyklisch laufen lasse: https://github.com/JVMerkle/TS3-Ranksystem/blob/master/docker-entrypoint.sh#L49. Das ist zwar nicht das Nonplusultra, aber ganz okay. Vielleicht hilft dir das, das ganze ohne (externe) cron-jobs anzugehen.

JVMerkle avatar May 15 '21 21:05 JVMerkle

@JVMerkle danke für den Hinweis. Leider bringt mir das nicht viel, da ich einen eigenen nginx-Dockercontainer im Kubernetes-Cluster verwende. Da muss ich das Image wohl anpassen. Eine saubere Lösung ist dies allerdings dennoch nicht.

Holt31 avatar May 15 '21 22:05 Holt31

Also fürs Erste die wohl unsauberste Lösung überhaupt, aber für alle die nen Webcron benötigen wohl der einfachste Weg. Man erstellt in dem Ordner wo die "worker.php" liegt eine Datei mit dem Namen "cron.php" (Dateiname kann beliebig sein). Diese bekommt den folgenden Inhalt:

<?php
    exec("php worker.php check");

Sollte man so wie ich mehrere PHP-Versionen im Dockerimage nutzen, so kann es nötig sein, dass der Befehl um die entsprechende PHP-Version ergänzt werden muss. Bspw. mit php8.0:

<?php
    exec("php8.0 worker.php check");

Den Befehl php8.0 worker.php check sollte man vorher als entsprechender User (bspw. www-data) natürlich prüfen.

Wie bereits erwähnt, ist dies keine saubere, aber wenigstens funktionierende Lösung. Die URL zur erzeugten PHP-Datei gibt man nun im Webcron-Dienst an.

Holt31 avatar May 20 '21 18:05 Holt31

Die worker.php über einen POST abzubilden, würde ja heißen, jeder kann von außen den Bot starten, stoppen, etc. könnte.

Man müsste dies also absichern vor unbefugten Zugriffen. Spontan würde mir da einfallen das Query- oder Webinterface Passwort als Übergabe-Parameter mitzugeben. So ganz glücklich finde ich das allerdings nicht.. Wie würdest du dir das denn vorstellen? Bzw. wie wird es bei anderen Anwendungen gelöst, welche du im docker/cluster betreibst?

Newcomer1989 avatar Aug 06 '21 20:08 Newcomer1989

Ich hab leider keine Anwendungen die so funktionieren wie der TS3-Rankingbot. Dieser ist der einzige Bot, der sich so über PHP starten / stoppen lässt etc. Andere Anwendungen nutzen den Cronjob nur für interne Features (bspw. Nextcloud). Mir fällt höchstens ein, dafür eine REST-Schnittstelle zu programmieren. Über das Webinterface lässt sich dann ein API-Key generieren, welcher dafür benutzt werden kann den Bot neuzustarten etc.

Den kann man dann auch auf den Web-Cron-Portalen bspw. https://cron-job.org/ verwenden. image

Ist aus meiner Sicht die sicherste Variante um andere Leute davon abzuhalten den Bot neuzustarten etc. und zudem die Einzige die mir diesbezüglich auf die Schnelle einfällt.

Eine API gibt es ja bereits. Theoretisch müsste man diese einfach nur so erweitern, dass diese auch in der worker.php oder ähnliches verwendet werden kann.

Holt31 avatar Aug 08 '21 14:08 Holt31

Ist zwar schon eine ganze Weile her... Aber die Funktion ist nun Teil der aktuellen Beta, falls du das vorab mal probieren magst 1.3.22-beta-1

In die Beta kommst du über das Webinterface -> Anderes -> Update-Channel

Das Update erfolgt nach Botneustart dann nach einiger Zeit automatisch. Ansonsten kann man es mit dem Bot Command !update beschleunigen.

Aktiviert wird das ganze dann im Webinterface -> Add-ons-> API über den neuen Berechtigungsschalter. Ansonsten ist die Funktion bei Aufruf des Links mittels dem jeweiligen API Key dann beschrieben - siehe Parameter 'bot'.

Gebe gerne mal Feedback, ob es passt oder wenn noch was zu ändern / verbessern wäre.

Newcomer1989 avatar Dec 28 '22 22:12 Newcomer1989

Release 1.3.22 is out

Newcomer1989 avatar Feb 01 '23 21:02 Newcomer1989