Installationsanleitung für Pimcore

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.

Systemanforderungen überprüfen

Eine Auflistung der Systemanforderungen, die Pimcore in der jeweiligen Version mitbringt, finden Sie in unserem zugehörigen FAQ-Artikel.

Vorbereitungen

Um Pimcore auf Ihrem Web Cluster betreiben zu können, benötigen Sie eine neue Domain. 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.

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.

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 zu wechseln und eine neue Domain anzulegen:

1_ManagedCenter_Domain anlegen

Tragen Sie den gewünschten Domainnamen in das Feld "Domain" ein. Wir benutzen für diese Dokumentation in den Screenshots den Namen "pimcore.c-109.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.

2_ManagedCenter_Domain anlegen

Wechseln Sie danach auf den Reiter "SSL-Zertifikat", setzen Sie den Haken bei "Let’s Encrypt-Zertifikat" und wählen Sie im Pull-Down-Menü die IP-Adresse des Clusters aus. Dies dient der Einrichtung eines Let’s Encrypt-SSL-Zertifikats, damit Ihre Webseite mittels HTTPS aufgerufen werden kann:

3_SSL-Zertifikat-aktivieren

Wechseln Sie danach auf den Reiter "SSL-Optionen". Dort aktivieren Sie die automatische Weiterleitung auf SSL, damit Ihre Pimcore-Instanz ausschließlich verschlüsselt aufgerufen werden kann:

4_SSL-Zertifikat-Optionen

PHP-Version festlegen

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:

5_PHP-Version-festlegen

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

6_PHP-CLI-Version-festlegen

Wenn alles korrekt eingestellt ist, sollte die Anzeige im Managed Center wie folgt aussehen (an den mit "2" und "3" markierten Stellen sollte die PHP- und PHP-CLI-Version zu sehen sein, die zu der von Ihnen installierten Pimcore-Version passt):

7_PHP-Einstellungen-pruefen

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 unter Cache & Queue > Redis auf eine der beiden Schaltflächen "Neuer Redis-Server". Legen Sie zunächst eine Beschreibung für die neue Redis-Instanz an. Im Beispiel haben wir "Pimcore" als Beschreibungstext gewählt.

8_Redis-Instanz-anlegen

Stellen Sie die Instanz nun auf "Optimiert für Cache" ein, legen Sie 1 GB RAM unter "Arbeitsspeicher" fest und wählen Sie unter "Max Memory Policy" die Einstellung "volatile-lru" aus:

9_Redis-Instanz-anlegen

Speichern Sie sich anschließend den Port ab, da Sie diesen später für die Anpassung der Umgebungsvariablen benötigen:

10_Redis-Port-speichern

MySQL-Datenbank anlegen

Wählen Sie unter Datenbank und Suche > MySQL eine der beiden Schaltflächen "Neue Datenbank" aus und geben Sie der Datenbank im nächsten Schritt eine passende Beschreibung:

11_MySQL-Datenbank-anlegen

Der Beschreibungstext hilft Ihnen innerhalb des Managed Centers, bei der Zugehörigkeit die Übersicht zu behalten. Im folgenden Beispiel haben wir "Pimcore" als Beschreibungstext gewählt:

12_MySQL-Datenbank-anlegen

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:

13_MySQL-Datenbank-Spezifikationen

Pimcore installieren

Führen Sie die folgenden Schritte in der vorgegebenen Reihenfolge aus.

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-109.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-109.maxcluster.net
PROJEKTNAME=pimcore
MYSQL_USERNAME=db-user-1
MYSQL_PASSWORD=supersicheresPasswort
MYSQL_DB=db-1
PIMCORE_ADMIN=admin
PIMCORE_PASSWORD=supersicheresPasswort

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.

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

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

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 -

.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]

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.

Sollten Sie Rückfragen haben oder Unterstützung benötigen, wenden Sie sich gerne an unseren Service per E-Mail support@maxcluster.de oder telefonisch +49 5251 41 41 30.

logo

Sie benötigen Unterstützung?

maxcluster GmbH
24 / 7 Kundensupport
Telefon:
+49 5251 414130
Telefon:
support@maxcluster.de
image
image