Um Pimcore auf Ihrem Cluster zu installieren, folgen Sie bitte Schritt für Schritt dieser Installationsanleitung.
Bei maxcluster ist es möglich, Pimcore in den Versionen 6.9 sowie 10.5 zu hosten. Auch das Hosting der nächsten Pimcore Major-Version 11.0 wird möglich sein, sobald diese offiziell erschienen ist.
Bei Neukunden sind die Systemanforderungen bei der Bereitstellung des Web Clusters bereits installiert bzw. vorinstalliert.
Unseren Bestandskunden empfehlen wir, per E-Mail oder Telefon Kontakt zu unserer technischen Beratung aufzunehmen, um überprüfen zu lassen, ob die Systemanforderungen erfüllt sind. Gerne hilft Ihnen die technische Beratung unter beratung@maxcluster.de oder per Telefon unter +49 (0) 5251 4141-350 weiter.
1. Systemanforderungen überprüfen
Eine Auflistung der Systemanforderungen, die Pimcore in der jeweiligen Version mitbringt, finden Sie in unserem zugehörigen FAQ-Artikel.
2. Vorbereitungen
Um Pimcore auf Ihrem Web Cluster betreiben zu können, benötigen Sie eine neue Domain als vHost. Dafür müssen Sie in unserem Managed Center zunächst einen Webserver auswählen. Bei maxcluster haben Sie die Wahl zwischen Apache und NGINX. Wir empfehlen die Verwendung von Apache. Wenn Sie stattdessen NGINX nutzen möchten, wenden Sie sich bitte an unser Service-Team.
2.1 Apache einrichten
Durch die mitgelieferte .htaccess-Datei müssen an der Konfiguration von Apache in der Regel keine Änderungen vorgenommen werden. Eine Ausnahme besteht bei der Verwendung von Pimcore 10.5.
2.2 Domain anlegen
Im Folgenden ist die Einrichtung von Pimcore beispielhaft unter Apache beschrieben. Melden Sie sich im Managed Center an und folgen Sie den Anweisungen auf den Screenshots, um in den Bereich Apache (Punkt 1) zu wechseln und klicken Sie auf Domains + (Punkt 2) um eine neue Domain anzulegen.
Unter Allgemein (Punkt 1) tragen Sie den gewünschten Domainnamen in das Feld Domain (Punkt 2) ein.
Hinweis: Wir benutzen für diese Dokumentation in den Screenshots den Namen pimcore.c-xx.maxcluster.net. Wann immer Sie im weiteren Verlauf dieser Anleitung diesen Domain-Namen oder den Platzhalter ${VHOST}
sehen, sollten Sie ihn durch den von Ihnen in diesem Schritt gewählten Domainnamen ersetzen.
Zu beachten ist, dass Sie hier einen neuen Domain-Namen verwenden, da im späteren Verlauf der Installation alle Dateien im DocumentRoot dieser Domain gelöscht werden.
Wechseln Sie danach auf den Reiter SSL-Zertifikat (Punkt 1), setzen Sie den Haken bei Let’s Encrypt-Zertifikat (Punkt 2) und wählen Sie im Pull-Down-Menü die IP-Adresse des Clusters aus (Punkt 3). Dies dient der Einrichtung eines Let’s Encrypt-SSL-Zertifikats, damit Ihre Webseite mittels HTTPS aufgerufen werden kann.
Wechseln Sie danach auf den Reiter SSL-Optionen (Punkt 1). Dort aktivieren Sie nun die automatische Weiterleitung auf SSL (Punkt 2), damit Ihre Pimcore-Instanz ausschließlich verschlüsselt aufgerufen werden kann.
2.3 PHP-Version festlegen
Wechseln Sie auf den Reiter Modus (Punkt 1). Je nach verwendeter Pimcore-Version wählen Sie an der im Screenshot gezeigten Stelle die passende PHP-Version aus. Die richtigen PHP-Versionen zur Pimcore-Version sind:
- Pimcore 6.9: PHP 8.0
- Pimcore 10.5: ⩾ PHP 8.0
- Pimcore 11 (dev): ⩾ PHP 8.1
In diesem Beispiel verwenden wir PHP 8.1 als PHP-Version (Punkt 2).
Bestätigen Sie alle Eingaben, indem Sie auf Speichern klicken (Punkt 3).
Damit die Cronjobs später fehlerfrei laufen, müssen Sie noch die zu Ihrer Pimcore-Version passende PHP-CLI-Version einstellen. Wählen Sie analog zum Screenshot die passende PHP-Version:
- Pimcore 6.9: PHP 8.0
- Pimcore 10.5: ⩾ PHP 8.0
- Pimcore 11 (dev): ⩾ PHP 8.1
Wenn alles korrekt eingestellt ist, sollte die Anzeige im Managed Center wie folgt aussehen:
- Domain
- Die PHP-Version, die zu der von Ihnen installierten Pimcore-Version passt
- Die PHP-CLI-Version, die zu der von Ihnen installierten Pimcore-Version passt
3. Redis-Instanz anlegen
Das Anlegen einer Redis-Instanz ist für Pimcore zwar optional, aber sehr empfehlenswert. Wird der Cache in Redis ausgelagert, kann die Performance von Pimcore deutlich verbessert werden.
Um eine neue Instanz anzulegen, klicken Sie im Managed Center in dem linken Navigationsmenü zuerst auf Cache & Queue und anschließend auf Redis (Punkt 1). Danach wählen Sie die Option Redis Server + (Punkt 2).
Legen Sie zunächst eine Beschreibung für die neue Redis-Instanz an. Im Beispiel haben wir Pimcore als Beschreibungstext (Punkt 1) gewählt.
Stellen Sie die Instanz nun auf Optimiert für Cache (Punkt 2) ein, legen Sie 1 GB RAM unter Arbeitsspeicher (Punkt 3) fest und wählen Sie unter Max Memory Policy (Punkt 4) die Einstellung 'volatile-lru' aus.
Speichern Sie Ihre Eingaben, indem Sie auf Speichern klicken (Punkt 5).
Speichern Sie sich anschließend den Port ab, da Sie diesen später für die Anpassung der Umgebungsvariablen benötigen.
4. MySQL-Datenbank anlegen
Wählen Sie unter Datenbank & Suche den Punkt MySQL (Punkt 1) aus und danach die Option Datenbanken + (Punkt 2). Geben Sie der Datenbank im nächsten Schritt eine passende Beschreibung.
Der Beschreibungstext (Punkt 1) hilft Ihnen innerhalb des Managed Centers, bei der Zugehörigkeit die Übersicht zu behalten. Im folgenden Beispiel haben wir Pimcore als Beschreibungstext gewählt.
Bestätigen Sie Ihre Eingaben, indem Sie auf Speichern klicken (Punkt 2).
Anschließend werden Ihnen die Zugangsdaten der Datenbank angezeigt. Bitte speichern Sie den Datenbanknamen, den Datenbank-Benutzer und das Datenbank-Passwort zwischen, da Sie diese ebenfalls später für die Anpassung der Umgebungsvariablen benötigen.
5. Pimcore installieren
Führen Sie die folgenden Schritte in der vorgegebenen Reihenfolge aus.
5.1 Umgebungsvariablen setzen
Bevor Sie die Umgebungsvariablen setzen können, müssen zunächst ein vHost und eine Datenbank angelegt sein. Nun benötigen Sie den Datenbanknamen, -benutzer und -passwort Ihrer MySQL-Datenbank sowie den Namen des vHosts (in diesem Fall 'pimcore.c-xx.maxcluster.net'). Im folgenden Beispiel verwenden wir Platzhalter für die Umgebungsvariablen. Bitte beachten Sie, dass diese Platzhalter durch individuell gesetzte Werte ersetzt werden müssen!
VHOST=pimcore.c-xx.maxcluster.net
PROJEKTNAME=pimcore
MYSQL_USERNAME=db-user-1
MYSQL_PASSWORD=supersicheresPasswort
MYSQL_DB=db-1
PIMCORE_ADMIN=admin
PIMCORE_PASSWORD=supersicheresPasswort
5.2 Pimcore downloaden
Nun können Sie mit dem Download der jeweiligen Pimcore-Version starten:
Pimcore 6.9
Für Pimcore 6.9 müssen Sie folgenden Befehl ausführen:
composer2 create-project pimcore/skeleton:2.8.22 /var/www/share/$VHOST/$PROJEKTNAME --no-cache
Pimcore 10.5
Für Pimcore 10.5 müssen Sie folgenden Befehl ausführen:
composer2 create-project pimcore/skeleton:10.2.3 /var/www/share/$VHOST/$PROJEKTNAME --no-cache
Pimcore 11.0
Für Pimcore 11.0 müssen Sie folgenden Befehl ausführen:
composer2 create-project pimcore/skeleton:11.0.0-ALPHA1 /var/www/share/$VHOST/$PROJEKTNAME --no-cache
Hinweis zur Composer-Version
Sollten Sie im Managed Center unter Webserver > Apache oder Webserver > NGINX bereits 'Composer 2' unter der Schaltfläche 'PHP Composer' ausgewählt haben, kann 'composer2' im jeweiligen Befehl auch durch 'composer' ersetzt werden.
5.3 Symlink erstellen
Da Pimcore einen public-Ordner nutzt, auf den das Document-Root zeigen muss, muss nun unter dem vHost ein Symlink gesetzt werden, damit der public-Ordner vom Webserver ausgeliefert werden kann.
rm -r $HOME/$VHOST/htdocs
ln -s $HOME/$VHOST/$PROJEKTNAME/public $HOME/$VHOST/htdocs
cd $HOME/$VHOST/$PROJEKTNAME
5.4 Pimcore-Installation
Installieren Sie Pimcore, indem Sie den non-interaktiven Installer ausführen:
./vendor/bin/pimcore-install --admin-username=$PIMCORE_ADMIN --admin-password=$PIMCORE_PASSWORD --mysql-username=$MYSQL_USERNAME --mysql-password=$MYSQL_PASSWORD --mysql-database=$MYSQL_DB --ignore-existing-config -vvv -n
6. Cronjobs einrichten
Legen Sie die folgenden Cronjobs mittels crontab -e über die Kommandozeile an:
cat <(crontab -l) <(echo '*/5 * * * * $HOME/$VHOST/$PROJEKTNAME/bin/console pimcore:maintenance --async') | crontab -
cat <(crontab -l) <(echo '*/5 * * * * $HOME/$VHOST/$PROJEKTNAME/bin/console messenger:consume pimcore_core pimcore_maintenance pimcore_image_optimize --time-limit=300') | crontab -
Sie können die Cronjobs auch über das Managed Center einrichten. Weitere Informationen dazu finden Sie HIER.
7. .htaccess-Datei anlegen
Verwenden Sie Pimcore 10.5, müssen Sie nun die folgende .htaccess-Datei anlegen:
nano $HOME/$VHOST/$PROJEKTNAME/public/.htaccess
Im nächsten Schritt fügen Sie folgenden Inhalt in die angelegte Datei ein:
# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the
# start page (path '/') because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex index.php
# By default, Apache does not evaluate symbolic links if you did not enable this
# feature in your server configuration. Uncomment the following line if you
# install assets as symlinks or if you experience problems related to symlinks
# when compiling LESS/Sass/CoffeScript assets.
# Options FollowSymlinks
# Disabling MultiViews prevents unwanted negotiation, e.g. '/index' should not resolve
# to the front controller '/index.php' but be rewritten to '/index.php/index'.
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
# mime types
AddType video/mp4 .mp4
AddType video/webm .webm
AddType image/webp .webp
AddType image/jpeg .pjpeg
Options +SymLinksIfOwnerMatch
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
RewriteEngine On
<IfModule mod_headers.c>
<FilesMatch '\.(jpe?g|png)$'>
Header always unset X-Content-Type-Options
</FilesMatch>
</IfModule>
# Determine the RewriteBase automatically and set it as environment variable.
# If you are using Apache aliases to do mass virtual hosting or installed the
# project in a subdirectory, the base path will be prepended to allow proper
# resolution of the index.php file and to redirect to the correct URI. It will
# work in environments without path prefix as well, providing a safe, one-size
# fits all solution. But as you do not need it in this case, you can comment
# the following 2 lines to eliminate the overhead.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect to URI without front controller to prevent duplicate content
# (with and without `/index.php`). Only do this redirect on the initial
# rewrite by Apache and not on subsequent cycles. Otherwise we would get an
# endless redirect loop (request -> rewrite to front controller ->
# redirect -> request -> ...).
# So in case you get a 'too many redirects' error or you always get redirected
# to the start page because your Apache does not expose the REDIRECT_STATUS
# environment variable, you have 2 choices:
# - disable this feature by commenting the following 2 lines or
# - use Apache >= 2.3.9 and replace all L flags by END flags and remove the
# following RewriteCond (best solution)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
<IfModule mod_status.c>
RewriteCond %{REQUEST_URI} ^/(fpm|server)-(info|status|ping)
RewriteRule . - [L]
</IfModule>
# restrict access to dotfiles
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule /\.|^\.(?!well-known/) - [F,L]
# ASSETS: check if request method is GET (because of WebDAV) and if the requested file (asset) exists on the filesystem, if both match, deliver the asset directly
RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)
RewriteCond %{DOCUMENT_ROOT}/var/assets%{REQUEST_URI} -f
RewriteRule ^(.*)$ /var/assets%{REQUEST_URI} [PT,L]
# Thumbnails
RewriteCond %{REQUEST_URI} .*/(image|video)-thumb__[\d]+__.*
RewriteCond %{DOCUMENT_ROOT}/var/tmp/thumbnails%{REQUEST_URI} -f
RewriteRule ^(.*)$ /var/tmp/thumbnails%{REQUEST_URI} [PT,L]
# static pages
SetEnvIf Request_URI ^(.*)$ STATIC_PAGE_URI=$1
SetEnvIf Request_URI / STATIC_PAGE_URI=/%home
RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)
RewriteCond %{QUERY_STRING} !(pimcore_editmode=true|pimcore_preview|pimcore_version)
RewriteCond %{DOCUMENT_ROOT}/var/tmp/pages%{STATIC_PAGE_URI}.html -f
RewriteRule ^(.*)$ /var/tmp/pages%{STATIC_PAGE_URI}.html [PT,L]
# cache-buster rule for scripts & stylesheets embedded using view helpers
RewriteRule ^cache-buster\-[\d]+/(.*) $1 [PT,L]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]
# Rewrite all other queries to the front controller.
RewriteRule ^ %{ENV:BASE}/index.php [L]
7.1 Optionale Performance-Optimierungen innerhalb der .htaccess-Datei
<IfModule mod_deflate.c>
# Force compression for mangled headers.
# http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding 'gzip,deflate' env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# Compress all output labeled with one of the following MIME-types
# (for Apache versions below 2.3.7, you don't need to enable `mod_filter`
# and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
# as `AddOutputFilterByType` is still in the core directives).
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml application/javascript application/json \
application/vnd.ms-fontobject application/x-font-ttf application/rss+xml \
application/x-web-app-manifest+json application/xhtml+xml \
application/xml font/opentype image/svg+xml image/x-icon \
text/css text/html text/plain text/x-component text/xml text/javascript
</IfModule>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault 'access plus 31536000 seconds'
# specific overrides
#ExpiresByType text/css 'access plus 1 year'
</IfModule>
<IfModule pagespeed_module>
# pimcore mod_pagespeed integration
# pimcore automatically disables mod_pagespeed in the following situations: debug-mode on, /admin, preview, editmode, ...
# if you want to disable pagespeed for specific actions in pimcore you can use $this->disableBrowserCache() in your action
RewriteCond %{REQUEST_URI} ^/(mod_)?pagespeed_(statistics|message|console|beacon|admin|global_admin)
RewriteRule . - [L]
ModPagespeed Off
AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html
ModPagespeedModifyCachingHeaders off
ModPagespeedRewriteLevel PassThrough
# low risk filters
ModPagespeedEnableFilters remove_comments,recompress_images
# low and moderate filters, recommended filters, but can cause problems
ModPagespeedEnableFilters lazyload_images,extend_cache_images,inline_preview_images,sprite_images
ModPagespeedEnableFilters combine_css,rewrite_css,move_css_to_head,flatten_css_imports,extend_cache_css,prioritize_critical_css
ModPagespeedEnableFilters extend_cache_scripts,combine_javascript,canonicalize_javascript_libraries,rewrite_javascript
# high risk
#ModPagespeedEnableFilters defer_javascript,local_storage_cache
</IfModule>
Weitere Performance-Anpassungen
Weitere Tipps zur Optimierung der Performance unter Pimcore 10.5 finden Sie in diesem Artikel.
Bei Fragen steht Ihnen unser Support telefonisch unter 05251/414130 oder per E-Mail an support@maxcluster.de zur Verfügung.
Veröffentlicht am 01.03.2024