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.

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:

  1. Domain
  2. Die PHP-Version, die zu der von Ihnen installierten Pimcore-Version passt
  3. 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