Plesk

TYPO3 Composer-Installation schlägt auf Plesk fehl

caticonslite_bm_alt

In der Datei „composer.json“ von TYPO3 is für „post-autoload-dump“ ein Script definiert:

"scripts":{
   "typo3-cms-scripts": [
      "typo3cms install:fixfolderstructure",
      "typo3cms install:generatepackagestates"
   ],
   "post-autoload-dump": [
      "@typo3-cms-scripts"
   ]
}

Dieses Script wird nach jeder Generierung der Autoload-Information ausgeführt, z.B. beim „composer install“ oder „composer dump-autoload“. Erfüllt der Standard-PHP-Interpreter auf dem Command Line Interface (CLI) nicht die Versionsvoraussetzungen von TYPO3, so schlägt die Ausführung von z.B. „/opt/plesk/php/7.2/bin/php composer.phar install“ mit folgender bzw. einer ähnlichen Fehlermeldung fehl:

PHP Warning:  Unsupported declare 'strict_types' in /var/www/vhosts/webentwickler.at/httpdocs/vendor/helhum/typo3-console/Scripts/typo3-console.php on line 2
PHP Parse error:  syntax error, unexpected '(' in /var/www/vhosts/webentwickler.at/httpdocs/vendor/helhum/typo3-console/Scripts/typo3-console.php on line 32
Script typo3cms install:fixfolderstructure handling the typo3-cms-scripts event returned with error code 255
Script @typo3-cms-scripts was called via post-autoload-dump

Der Fehler kann behoben werden, indem bei den Scripts der zu verwendende PHP-Interpreter und der Pfad zum Binary-Verzeichnis von Composer ergänzt werden:

"scripts":{
   "typo3-cms-scripts": [
      "/opt/plesk/php/7.2/bin/php /var/www/vhosts/webentwickler.at/httpdocs/vendor/bin/typo3cms install:fixfolderstructure",
      "/opt/plesk/php/7.2/bin/php /var/www/vhosts/webentwickler.at/httpdocs/vendor/bin/typo3cms install:generatepackagestates"
   ],
   "post-autoload-dump": [
      "@typo3-cms-scripts"
   ]
}

Anschließend können „composer install“ oder „composer dump-autoload“ ausgeführt werden.

TYPO3 mit Komprimierung auf Plesk-Host mit Reverse Proxy nginx

caticonslite_bm_alt

Wird in TYPO3 die Frontend-Komprimierung mit „$GLOBALS[‚TYPO3_CONF_VARS‘][‚FE‘][‚compressionLevel‚] = 9″ und in den TypoScript-Setup-Einstellungen „config.compressJs“ bzw. „config.compressCss“ aktiviert, werden statische „pre-rendered“ JavaScript- und CSS-Dateien im gzip-Format im Ordner „typo3temp/compressor“ abgelegt. Für die korrekte Auslieferung ist für Apache (z.B. in der Datei .htaccess) die folgende Konfiguration erforderlich:

<FilesMatch "\.js\.gzip$">
	AddType "text/javascript" .gzip
</FilesMatch>
<FilesMatch "\.css\.gzip$">
	AddType "text/css" .gzip
</FilesMatch>
AddEncoding gzip .gzip

Seit Plesk 12 wird nginx als Reverse Proxy eingesetzt und statische Dateien werden nicht mehr von Apache, sondern direkt von nginx ausgeliefert. Das führt dazu, dass nginx die Dateien zwar mit dem korrekten „Content-Type“, aber ohne erforderliches „Content-Encoding: gzip“ im HTTP-Header ausliefert und infolgedessen die Dateien vom Browser falsch (so als wären sie nicht komprimiert) interpretiert werden. Analog zur o.g. Konfiguration für Apache ist auch eine Konfiguration für nginx erforderlich: In Plesk kann unter „Einstellungen für Apache & nginx“ der Domain entweder die Option „Intelligente Bearbeitung statischer Dateien“ deaktiviert werden (nicht empfohlen), oder folgende Konfiguration unter „Zusätzliche nginx-Anweisungen“ hinterlegt werden:

location ~ "\.js\.gzip$" {
	add_header Content-Encoding gzip;
	gzip off;
	types { text/javascript gzip; }
}
location ~ "\.css\.gzip$" {
	add_header Content-Encoding gzip;
	gzip off;
	types { text/css gzip; }
}

Diese Konfiguration bringt nginx dazu die komprimierten JS- und CSS-Dateien analog zu Apache zu behandeln und das erforderliche „Content-Encoding: gzip“ im HTTP-Header zu setzen.

 nach oben