Contao 4 auf Shared Hosting ohne SSH
(Kommentare: 3)
In vielen Foren-Beiträgen ist zu lesen, dass Contao nicht auf Shared-Hosting-Paketen ohne SSH zu installieren bzw. zu nutzen sei oder kein Update (via Composer) möglich sei.
Nach viel Googelei, Frust und Rumprobiererei: es kann doch gehen. Auf 3 solchen Produkten habe ich es geschafft, Contao 4 zu installieren und sogar ein Update via Composer zu machen.
In der Regel reicht dazu ja der Contao-Manager, bei Host Europe bspw. aber brach die Installation ab und es war eine manuelle Installation nötig.
Der Trick, falls etwas mit dem Manager nicht geht: einen Micky-Maus-Manager bauen als PHP-Skript, das den Composer oder die Contao-Console via exec() aufruft.
Ein solches beispielhaftes Skript (c44sh.php) ist ganz unten zum Kopieren bzw. Download zu finden.
Hier beschreibe ich meine Aktivitäten für's "Erst mal zum Laufen kriegen". Mit dem echten Betrieb habe ich noch keine Erfahrungen...
Die üblichen (und zusätzlichen) Vorbereitungen
- FTP: Neues Verzeichnis /contao4/ im Webspace anlegen, darunter /web/. (Bei Host Europe z.B. darauf achten, dass der FTP-User dem Hauptbenutzer (üblicherweise wp_...) entspricht, sonst gibt es Probleme mit den Dateirechten.)
- Hosting Backend: Subdomain (z.B. c4.mydomain.tld) einrichten mit o.g. /web/ als Document Root, PHP 7 einstellen. Checken, dass noch mind. 120MB Plattenplatz da ist.
- FTP: Contao Check holen und in /web/ uploaden und http://c4.mydomain.tld/check/ im Browser aufrufen
Wenn alles okay, kann es weiter gehen. - U.g. c44sh.php in (neuem) Verzeichnis /c44sh/ unter /web/ hoch laden, kann man für einige der folgenden Schritte gebrauchen. Vor Installation mit dem Manager muss man's löschen, der Manager mag gerne saubere Verzeichnisse. Nach der Installation kann's wieder hoch geladen werden.
- Hosting Backend: Neue Datenbank einrichten und Zugangsdaten merken.
Installation mit Contao Manager
Erfolgreich durchgeführt:
- RB Media Group GmbH » Webhosting - RB Profi Paket L ohne SSH: Contao 4.4.14, danach Update auf 4.4.16
- austriawebhosting.at, ohne SSH: Contao 4.5.6
Prozess:
- Wie auf Contao.org beschrieben, contao-manager.phar runter laden, ins o.g. /web/ hochladen und in contao-manager.phar.php umbenennen.
- http://c4.mydomain.tld/contao-manager.phar.php
Initialisierungsprozess folgen. Wenn die Installation abbricht / hängen bleibt, dann was bisher erzeugt wurde löschen und manuelle Installation probieren. - Falls der Manager keine passende Konfiguration für den Hoster vorliegen hat, muss man den Pfad zu PHP-7-Binary selbst heraus bekommen. Dafür kann das c44sh.php helfen.
Z.B. durch die Kommandos...
- info: Wird PHP 7 angezeigt?
- which php: Wo liegt PHP? Z.B. in /usr/bin/php
- ls /usr/bin: Vermutlich ist php ein Link auf eine andere Stelle, z.B. /opt/php-7.1/bin/php - also sollte /opt/php-7.1/bin/php das PHP Binary sein
- Nach erfolgreicher Installation sollte man dann zu http://c4.mydomain.tld/contao/install wechseln und die Installation finalisieren können. Der Manager kann dann erneut genutzt werden, um z.B. später Pakete zu installieren oder aktualisieren, den Cache zu löschen, die Autoload-Dateien neu zu erstellen etc.
Installation manuell
Erfolgreich durchgeführt:
- Host Europe WebPack 4 L ohne SSH: Contao 4.4.14, danach Update auf 4.4.16
Prozess:
- Download Contao-ZIP von contao.org, entpacken, hochladen in o.g. /contao4/
- http://c4.mydomain.tld/contao/install - Installationsprozess folgen...
- contao-manager.phar runter laden, ins o.g. /web/ hochladen und in contao-manager.phar.php umbenennen.
- http://c4.mydomain.tld/contao-manager.phar.php
Initialisierungsprozess folgen. Bzgl. Konfiguration siehe oben bei "Installation mit Contao Manager".
Updates
Pakete zu aktualisieren via Contao Manager gab in meinen Fällen keine Fehlermeldungen, außer bei Host Europe monierte der Composer, dass allow_url_fopen nicht erlaubt sei und /tmp nicht schreibbar wäre. Entspechendes habe ich in das u.g. c44sh.php eingebaut, um es damit machen zu können. Für den Contao Manager habe ich die /web/.htaccess ergänzen müssen, wobei ich das Temp-Dir mittels phpinfo ermittelt habe.
php_value max_execution_time 300 php_value allow_url_fopen 1 php_value sys_temp_dir /is/htdocs/user_tmp/wpXXXXX_XXXXXXX
Eigene Contao 3 Extensions in Contao 4
Es soll ja ganz einfach gehen, indem man seine eigenen, selbst programmierten, nicht öffentlichen Extensions hochlädt ins Verzeichnis /system/modules/ und dann nach Cache löschen sowie Datenbank aktualisieren (via http://.../contao/install) damit arbeiten kann.
Fast.
Ich konnte die Datenbank aktualisieren und meine neuen Elemente im Backend anlegen. Aber die Klassen wurden nicht geladen und damit die Elemente weder im Backend noch im Frontend angezeigt. Nach viel Googelei und Rumprobieren: die composer.json im ROOT-Verzeichnis muss ergänzt werden, damit das Autoloading die Klassen findet. Z.B. so (wobei x_test natürlich für den Namen meiner Extension steht):
Contao 4.4.15
{ "alles_was_bisher_drin_stand": { }, "autoload": { "classmap": [ "system/modules/x_test/classes", "system/modules/x_test/elements" ] } }
Contao 4.5.6
{ "alles_was_bisher_drin_stand": { }, "autoload": { "extra": { "contao": { "sources": { "x_test": "system/modules/x_test" } } } } }
c44sh.php
c44sh.php ist eine Art quick and dirty micky maus contao manager für Shared Hosting ohne SSH: In diesem Skript werden via exec() Kommandos auf der Kommandozeile abgesetzt, z.B. composer- oder contao-console-Aufrufe. (Es gibt auch PHP Shell (http://phpshell.sourceforge.net/), aber hier ist ein bisschen was vorbereitet.)
Möge es anderen hilfreich sein oder als Anregung dienen. (Experientell! Keine Gewähr, keine Garantie, keine Haftung...!)
Installation
- Hochladen in (neues) Verzeichnis /c44sh/ unter /web/. Dieses Verzeichnis sollte dann bei Zeiten via htaccess Passwort-geschützt werden!
- Dazu composer.phar von https://getcomposer.org/download/ holen und in /contao4/ hochladen.
Aufruf, Nutzung
Aufruf im Browser mit http://c4.mydomain.tld/c44sh/c44sh.php.
Das Skript zeigt ein bisschen System-Info und ein Formular zum Auswählen des Kommandos (which, ls, console, composer, info (= phpinfo)). Dazu ein Feld für die Parameter (z.B. Verzeichnis für ls, Befehl für Composer, ...). Auf Klick wird das Kommando dann via exec() abgesetzt und die erzeugte Ausgabe angezeigt.
Mit dessen Hilfe (nutze ls-Kommandos) sollte der Pfad zum PHP-7-Binary heraus gefunden und in Zeile 15 ($php = '...') eingetragen werden - interessant für Composer-Aufrufe, denn je nach System / Provider ist dies nicht zwingend bekannt bzw. nicht zwingend die PHP-7-Version.
Wichtig!
- Experiementell!
- Vor der Nutzung in den Code gucken, was da gemacht wird!
- Positive Erfahrungen bisher bei RB Media Group, Host Europe, Austria WebHosting.
- Strato (wenn PHP INTL könnte, würde es ja gehen...): klappt noch nicht, weil dort das c44sh.php sich quasi rekursiv selbst aufruft statt den Compser... :(
- Mittwald (wobei dort gäbe es ja SSH...): Obacht, hier habe ich den Webserver zum Absturz gebracht. Neustart ggf. triggern durch PHP-Version umsetzen...
Kommentare
Kommentar von Matthias Dittrich |
Vielen Dank für die Info. Muss ich nach dem Wochenende gleich ausprobieren.
Sonnige Grüße aus Bad Füssing
Kommentar von Stefan Dahlmann |
Im Prinzip ein guter Gedanke mit dem o.g. PHP-Script "c44sh.php". Ich sehe allerdings mittlerweile den Sinn des o.g. PHP-Scriptes nicht mehr so ganz, denn es gibt mittlerweile den "Composer Cloud Resolver" im Contao Manager offiziell für die Installation von Contao incl. Erweiterungen, wenn Memory-Limit etc. nicht ausreichen bei Share Hosting wie z.B. bei Strato. Strato bietet offiziell seit PHP 7.2 die intl Erweiterung an. Contoa inkl. Contao Manager mit aktivierten Composer Cloud Resolver funktioniert einwandfrei.
Kommentar von webdecker |
Ja, die Entwicklung ging ja weiter, der Contao Manager ist besser geworden und in der Regel braucht man nix weiter.
War für Fälle (seinerzeit), wo das noch oft nicht funktioniert hat und wenn man keinen SSH-Zugang hat und dennoch Composer oder Consolen-Tasks ausführen möchte / muss.
Einen Kommentar schreiben