Shopware 6 Background Queue Worker einrichten (Unmanaged Server)
Dieser Artikel bezieht sich auf die Einrichtung und Steuerung der Shopware 6 Background Queue Worker für Server im Support-Level "Unmanaged". Sofern Sie Ihren Shopware Server im Support-Level "Managed" bestellt haben, nutzen Sie bitte folgenden Artikel: Shopware 6 Background Queue Worker einrichten (Managed Server)
Shopware 6 verwendet für die Verarbeitung von Hintergrundaufgaben sowie für die Verarbeitung von wiederkehrenden Aufgaben sogenannte Message Queue Worker. In der Standard-Konfiguration von Shopware 6 werden diese über den angemeldeten Administrator im Browser ausgeführt. Sobald mehr als ein Administrator angemeldet ist, werden diese Message Queue Worker mehrfach ausgeführt und es kann zu einer sehr hohen CPU Last sowie zu Problemen bei der Ausführung von PHP kommen.
Um dieses Problem dauerhaft zu lösen, bietet Shopware 6 die Möglichkeit, die Ausführung dieser Message Queue Worker in den Hintergrund zu verlagern, genauer gesagt als CLI Command.
Deaktivierung der Frontend Message Queue Worker
Um die Shopware 6 Message Queue Worker für die angemeldeten Administratoren zu deaktivieren, muss eine zz-creoline.yaml Config Datei als Systembenutzer im Shopware Verzeichnis /config/packages
angelegt werden.
Melden Sie sich dazu zuerst als Systembenutzer an:
su <SYSTEMBENUTZER>
Und erzeugen Sie nun die Config Datei:
nano config/packages/zz-creoline.yaml
Tipp: Bei unseren Managed Shopware Servern befindet sich das korrekte Document-Root Verzeichnis unter dem absoluten Pfad: /var/www/vhosts/meine-shop-domain.de/httpdocs/
# /var/www/vhosts/meine-shop-domain.de/httpdocs/config/packages/zz-creoline.yaml
shopware:
admin_worker:
enable_admin_worker: false
Nachdem die Config-Datei erstellt wurde, muss der Shopware Cache geleert werden, damit die neue Konfigurationsdatei aktiviert wird:
bin/console cache:clear
bin/console darf niemals mit root-Rechten ausgeführt werden! Bitte immer vorher als Systembenutzer anmelden.
Bei unseren Managed Shopware Servern stehen verschiedene PHP-Binaries für die Ausführung der CLI Konsole zur Verfügung. Um den Cache mit der PHP 8.2 CLI zu leeren, muss folgendes Command ausgeführt werden:
/opt/plesk/php/8.2/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console cache:clear
Einrichtung der Message Queue Worker als systemd Service
Um eine dauerhafte Ausführung der Message Queue Worker zu gewährleisten, empfehlen wir die Einrichtung als systemd Service. Hierzu müssen zwei service Dateien angelegt werden:
Ab hier werden root-Rechte benötigt
touch /etc/systemd/system/shopware_consumer.service
touch /etc/systemd/system/shopware_scheduled_tasks.service
Anschließend wird der Shopware Message Queue Consumer wie folgt definiert:
# /etc/systemd/system/shopware_consumer.service
[Unit]
Description=Shopware Message Queue Consumer
After=mysql.service
StartLimitIntervalSec=0
[Service]
Type=simple
User=ssh_example_user
Restart=always
RestartSec=10
ExecStart=/opt/plesk/php/8.3/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console messenger:consume async failed --time-limit=120 --memory-limit=512M
[Install]
WantedBy=multi-user.target
Sofern Sie eine ältere Shopware Version einsetzen, muss hier alternativ der default
Receiver hinzugefügt werden. Beispiel für default
Receiver:
ExecStart=/opt/plesk/php/8.3/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console messenger:consume failed default --time-limit=120 --memory-limit=512M
Sofern Sie mehr als nur einen Receiver registriert haben, können Sie mehrere Receiver hintereinander angeben oder für jeden Receiver einen eigenen Service definieren. Beispiel für mehrere Receiver:
messenger:consume default receiver2 fasttrack
Zum Bearbeiten der Datei können Sie den vorinstallierten Texteditor nano
oder vi
verwenden. Beispiel zum Öffnen und Bearbeiten der Datei:
nano /etc/systemd/system/shopware_consumer.service
Fügen Sie anschließend den oben abgebildeten Inhalt aus der Zwischenablage ein und speichern Sie die Änderungen mit dem Tastaturkürzel STRG + X
. Bestätigen Sie die Dateiänderung anschließend mit der Taste Y
und Enter
.
Wichtig: Achten Sie auf korrekte Angaben von Verzeichnissen und korrekten Systembenutzern. In diesem Beispiel befindet sich die Installation in dem Verzeichnis /var/www/vhosts/meine-shop-domain.de/. Dieses Verzeichnis dient nur als Beispiel und muss auf den korrekten Pfad Ihrer Installation angepasst werden.
Neben dem Consumer Service wird zusätzlich noch der Service für die wiederkehrenden Aufgaben benötigt:
# /etc/systemd/system/shopware_scheduled_tasks.service
[Unit]
Description=Shopware Scheduled Tasks Runner
After=mysql.service
StartLimitIntervalSec=0
[Service]
Type=simple
User=ssh_example_user
Restart=always
RestartSec=10
ExecStart=/opt/plesk/php/8.3/bin/php /var/www/vhosts/meine-shop-domain.de/httpdocs/bin/console scheduled-task:run --time-limit=120 --memory-limit=512M
[Install]
WantedBy=multi-user.target
Wichtig: Auch bei dem Scheduled Tasks Service muss das korrekte Verzeichnis und der entsprechende Systembenutzer für Ihre Shopware 6 Installation angegeben werden.
Nachdem die beiden Services eingerichtet wurden, müssen diese nur noch gestartet werden:
systemctl start shopware_consumer
systemctl start shopware_scheduled_tasks
systemctl enable shopware_consumer
systemctl enable shopware_scheduled_tasks
Tipp: Werden nachträglich Änderungen an einem oder mehreren systemd-Services durchgeführt, muss der Befehl systemctl daemon-reload
durchgeführt werden, damit die kürzlichen Änderungen wirksam werden.