alias für keyhelp-php81 usw ?  [GELÖST]

Diskussionen zur Bedienung von KeyHelp.
Post Reply
bernhard
Posts: 144
Joined: Fri 29. May 2020, 14:36

alias für keyhelp-php81 usw ?

Post by bernhard »

Hallo Keyhelp Team,

ich arbeite bei meinen Web-Projekten mehr und mehr von der Kommandozeile, weil da Sachen wie Import/Export-Skripte einfach verlässlicher laufen.

Jetzt kann ich entsprechend der gesetzten PHP Version der Domain statt "php" den entsprechenden Befehl "keyhelp-php81" oder "keyhelp-php82" benutzen, was schon mal toll ist.

Es ist aber immer wieder mal auch ein Problem oder zumindest umständlich - daher wollte ich fragen, ob es möglich wäre, einen generischen alias zu haben, der immer die aktuelle PHP Version der entsprechenden Domain verwendet? Die Zuordnung müsste ja über das DocumentRoot eigentlich möglich sein?

also wenn ich zb in /home/users/foo/www/domain-mit-php81/ den Befehl "domain-php scripts/import.php" ausführe, dann würde das mit php8.1 laufen.

wenn ich in /home/users/foo/www/domain-mit-php82 denselben Befehl ausführe, dann würde er PHP8.2 nehmen, weil even für dieses DocRoot 8.2 ausgewählt ist und nicht 8.1

Ich weiß jetzt gar nicht, ob das technisch überhaupt möglich ist, aber ich denke einmal ja :)

2 Gründe für den Wunsch:

1) Wenn man viele Projekte verwaltet, dann merkt man sich das eventuell nicht auswendig, welches Projekt welche Version hat und man muss immer erst nachsehen
2) Für automatisierte Deployments ist das aktuelle Verhalten auch nicht ideal. Ich muss die PHP-Version, die meine Github Actions verwenden, immer in irgendeiner Config angeben. Das ist zwar möglich, aber schreit nach Fehlern, wenn man mal Projekte updated und dann vergisst, die PHP-Version in der Deployment Pipeline anzupassen. So Dinge laufen immer ne Zeit lang gut und dann eines Tages gibt es Probleme und man weiß nicht warum, weil die Umstellung evtl. schon länger her ist und man das Problem damit dann gar nicht mehr in Verbindung bringt.

Falls jemand andere Lösungsvorschläge hat bin ich dankbar.
User avatar
Alexander
Keyweb AG
Posts: 3842
Joined: Wed 20. Jan 2016, 02:23

Re: alias für keyhelp-php81 usw ?

Post by Alexander »

Hallo,
Es ist aber immer wieder mal auch ein Problem oder zumindest umständlich - daher wollte ich fragen, ob es möglich wäre, einen generischen alias zu haben, der immer die aktuelle PHP Version der entsprechenden Domain verwendet? Die Zuordnung müsste ja über das DocumentRoot eigentlich möglich sein?
Diese Information wäre nicht eindeutig. Es könnten mehrere Domains auf das selbe Verzeichnis zeigen, die alle mit einer unterschiedlichen PHP-Version betrieben werden könnten.

---

Ich warne schon mal davor, den Binarynamen "php" auf eine der zusätzlich installierbaren PHP-Versionen umzubiegen. Das führt ganz sicher früher oder später zu Problemen. Auf KeyHelp Systemen wird davon ausgegangen, das sich unter "php" immer die vom Betriebssystem vorgegeben PHP-Version befindet.
Mit freundlichen Grüßen / Best regards
Alexander Mahr

**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
bernhard
Posts: 144
Joined: Fri 29. May 2020, 14:36

Re: alias für keyhelp-php81 usw ?

Post by bernhard »

Hallo Alexander, danke für deine Antwort!
Ich warne schon mal davor, den Binarynamen "php" auf eine der zusätzlich installierbaren PHP-Versionen umzubiegen. Das führt ganz sicher früher oder später zu Problemen. Auf KeyHelp Systemen wird davon ausgegangen, das sich unter "php" immer die vom Betriebssystem vorgegeben PHP-Version befindet.
Danke, das ist mir klar :) Deshalb war meine Idee, einen zusätzlichen generischen namen ala "domain-php" einzuführen.
Diese Information wäre nicht eindeutig. Es könnten mehrere Domains auf das selbe Verzeichnis zeigen, die alle mit einer unterschiedlichen PHP-Version betrieben werden könnten.
Hmm... ja stimmt, schade. Für mich wäre das aber kein Thema, denn ich hab immer nur eine Domain pro Document Root. Ich denke - aber das ist nur eine Vermutung - dass das bei den meisten so ist.

Wäre es möglich, dass einfach die erste oder letzte Domain gewinnt? Für mich wäre das eine wunderbare Lösung, die mir einiges an Setup sparen und Fehler vermeiden würde und für jeden, der unterschiedliche Domains auf demselben Document Root betreibt, blieben immer noch die bereits vorhandenen commands ala keyhelp-php81 usw.
User avatar
Alexander
Keyweb AG
Posts: 3842
Joined: Wed 20. Jan 2016, 02:23

Re: alias für keyhelp-php81 usw ?

Post by Alexander »

Du könntest dir die Aliase auch selbst im System anlegen:

Code: Select all

ln -s /opt/keyhelp/php/<PHP-VERSION>/bin/php /usr/bin/meine-domain-php
ln -s /opt/keyhelp/php/<PHP-VERSION>/bin/php /usr/bin/meine-zweite-domain-php
Mit freundlichen Grüßen / Best regards
Alexander Mahr

**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
bernhard
Posts: 144
Joined: Fri 29. May 2020, 14:36

Re: alias für keyhelp-php81 usw ?

Post by bernhard »

Hallo Alexander,

vielen Dank für den Input! Das löst mein Problem leider nicht - im Gegenteil, das macht das Setup noch komplizierter und fehleranfälliger, als wenn ich gleich keyhelp-php81 usw nutze.

Aktuell hab ich die PHP-Version von jedem Projekt an 3 Stellen:
  1. In DDEV für's lokale Entwickeln
  2. Im Keyhelp für das Produktivsystem (und eventuell zusätzlich auf einem Stagingsystem)
  3. Im Deployment-Skript, das über Github Actions gesteuert wird
Den dritten Punkt könnte ich mir sparen, wenn KeyHelp meinen Vorschlag unterstützen würde. Dann könnte ich das hier:

Code: Select all

<?php
require_once __DIR__ . "/Deployment.php";
$deploy = new Deployment($argv);

// use php8.2 for deployment
$deploy->php("keyhelp-php82");

$deploy->run();
Ersetzen durch das:

Code: Select all

...
// use php-version set by the KeyHelp domain
$deploy->php("domain-php");
...
ANDERE IDEE!

Könnte KeyHelp die verwendete PHP-Version als ENV Variable setzen? Dann könnte ich die Variable einfach auslesen und im Skript verwenden:

Code: Select all

...
$deploy->php($_ENV['KEYHELP_DOMAIN_PHP']);
...
Das würde dann sogar auf Domain-Ebene klappen, also unterschiedliche Domains auf gleichem DocRoot würden einfach unterschiedliche Variablen setzen :)

Ich könnte mir die ->php() Zeile sogar komplett sparen, da das Deployment ein Open-Source Modul von mir ist, wo ich das Feature global einbauen könnte. Wenn KEYHELP_DOMAIN_PHP gesetzt ist, dann nimmt das Deployment den Befehl, der dort hinterlegt ist (zB "keyhelp-php81") und wenn nicht, dann nimmt es einfach nur "php".

Das wäre echt toll und ich glaube nicht, dass das irgendwelche ungewünschten Nebeneffekte haben könnte?
bernhard
Posts: 144
Joined: Fri 29. May 2020, 14:36

Re: alias für keyhelp-php81 usw ?

Post by bernhard »

Ich kann scheinbar meinen Betrag nicht bearbeiten, deshalb muss ich leider doppel-posten :(
ANDERE IDEE!

Könnte KeyHelp die verwendete PHP-Version als ENV Variable setzen? Dann könnte ich die Variable einfach auslesen und im Skript verwenden:
Das ist leider Blödsinn - ich habe gerade selbst gemerkt, dass das nicht funktionieren kann, da ja die Github Action das Deployment via SSH startet und damit keine ENV variablen gesetzt sind. Die Action stößt ja dann erst das Deployment per PHP an, und dafür muss Github schon wissen, welche PHP Version genommen werden soll.

Wenn es allerdings - wie in meinem ursprünglichen Vorschlag - einen generischen "domain-php" command gäbe, dann könnte die Github Action einfach "domain-php /path/to/script.php" ausführen und Keyhelp würde sich darum kümmern, das mit der richtigen PHP-Version auszuführen... *träum
User avatar
Alexander
Keyweb AG
Posts: 3842
Joined: Wed 20. Jan 2016, 02:23

Re: alias für keyhelp-php81 usw ?  [GELÖST]

Post by Alexander »

Schau mal, ob das für dich passen würde:

Installation:

Code: Select all

# Script Installieren - für Debian 10, Debian 11 Ubuntu 20
wget https://install.keyhelp.de/misc/php71/keyhelp_domain_php -O /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ; chown keyhelp:keyhelp /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ;

# Script Installieren - für Ubuntu 22
wget https://install.keyhelp.de/misc/php81/keyhelp_domain_php -O /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ; chown keyhelp:keyhelp /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ;

# Script Installieren - für Debian 12
wget https://install.keyhelp.de/misc/php82/keyhelp_domain_php -O /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ; chown keyhelp:keyhelp /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ;


# Link erstellen, so dass künftig der Befehl "keyhelp_domain_php" genutzt werden kann
ln -s /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php /usr/bin/keyhelp-domain-php ;

# Ausführen-Berechtigungen setzen
chmod 0755 /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ;

Immer wenn du nun den Befehl "keyhelp-domain-php" aufrufst und dich in einem Verzeichnis befindet, dass zu einem Zielverzeichnis einer Domain zurückzuführen ist wird dessen entsprechende PHP Version verwendet. Alle angegeben Parameter werden durchgeschleift. Du kannst also die selben Parameter nutzen, wie beim PHP-Binary. Das heißt zum schnellen testen, einfach "-v" anhängen und du bekommst die Version.

Code: Select all

keyhelp-domain-php -v
Sollte sich das aktuelle Verzeichnis, in dem man sich befindet nicht auf eine Domain zurückzuführen sein, wird immer auf "php" zurückgefallen.


Edit: - und _ korrigiert
Mit freundlichen Grüßen / Best regards
Alexander Mahr

**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
bernhard
Posts: 144
Joined: Fri 29. May 2020, 14:36

Re: alias für keyhelp-php81 usw ?

Post by bernhard »

Yeah!!! Sehr geil, ja, das klappt!! Du hast allerdings zwei Fehler in deinen Commands ( _ und - vertauscht):

Code: Select all

# falsch
ln -s /home/keyhelp/www/keyhelp/bin/keyhelp-domain-php.php /usr/bin/keyhelp-domain-php ;

# richtig
ln -s /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php /usr/bin/keyhelp-domain-php ;

# falsch
chmod 0755 /home/keyhelp/www/keyhelp/bin/keyhelp-domain-php.php ;

# richtig
chmod 0755 /home/keyhelp/www/keyhelp/bin/keyhelp_domain_php.php ;
Mit den angepassten Commands klappt das genau so, wie ich es mir vorgestellt habe 8-)

Vielen Dank!! Ich nehme an, das wird dann in eines der nächsten Updates einfließen?
User avatar
Alexander
Keyweb AG
Posts: 3842
Joined: Wed 20. Jan 2016, 02:23

Re: alias für keyhelp-php81 usw ?

Post by Alexander »

Danke,

Hab die Datei noch last-minute umbenannt und dann ... *oops* :oops: . Es sollte jetzt alle - und _ korrigiert sein.

Ich nehme an, das wird dann in eines der nächsten Updates einfließen?
Ja
Mit freundlichen Grüßen / Best regards
Alexander Mahr

**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
Post Reply