Shopware & Docker | shopwareLabs

Docker ist aktuell auf dem Vormarsch. Auch hier im Blog habe ich schon ein paar Beiträge darüber verfasst. Hier soll es aber nochmal um die explizite Nutzung von Docker mit Shopware gehen.

shopwareLabs Repo

Shopware hat in seinem Labs bereits ein shopware-docker Projekt angelegt welches ziemlich einfach zu benutzen ist. Ich habe selbst auch schon Dockerfiles dazu angelegt, muss aber sagen, dass ich mittlerweile lieber dieses Repo dazu nutze. Warum zeigt sich in Kürze…

Installation

Repo clonen

git clone https://github.com/shopwareLabs/shopware-docker
cd shopware-docker

Bevor Ihr weiter macht empfehle ich euch

chmod -R 777 dev-ops/docker/_volumes/app-es-data/
chmod -R 777 dev-ops/docker/_volumes/app-redisdata/

auszuführen und falls Ihr bereits elasticsearch laufen habt diesen Service zu deaktivieren, denn sonst kommt es zu folgendem Error:

        Starting shopwaredocker_app_es_1 ...
        Recreating shopwaredocker_app_mysql_1 ...
        Recreating shopwaredocker_app_mysql_1
        Starting shopwaredocker_app_redis_1 ...
        Starting shopwaredocker_app_es_1
Starting shopwaredocker_app_es_1 ... error

        ERROR: for shopwaredocker_app_es_1  Cannot start service app_es: driver failed programming external connectivity on endpoint shopwaredocker_app_es_1 (d5b101e3a25f3eb97e2462f5721e08c16d718edbce38aRecreating shopwaredocker_app_mysql_1 ... done
Recreating shopwaredocker_app_server_1 ...
Recreating shopwaredocker_app_server_1 ... done

        ERROR: for app_es  Cannot start service app_es: driver failed programming external connectivity on endpoint shopwaredocker_app_es_1 (d5b101e3a25f3eb97e2462f5721e08c16d718edbce38a004e0af18b5ef5d84a9): Error starting userland proxy: listen tcp 0.0.0.0:9300: bind: address already in use
        Encountered errors while bringing up the project.

Execution aborted, a subcommand failed!
#Elasticsearch stoppen
sudo service elasticsearch stop

Los geht’s…

./psh.phar docker:start

# Shopware installieren
./psh.phar docker:ssh
./psh.phar init

Für ältere Versionen hängt Ihr einfach –sw-version=5.X.X an den init Befehl an.

Nach dem init Befehl solltet Ihr eine Success Meldung erhalten:

...
(5/6) Starting
> echo "All containers started successfully"
        All containers started successfully
        
(6/6) Starting
> echo "Web server IP: http://10.100.111.46"
        Web server IP: http://10.100.111.46
        
Duration: 2s
All commands successfully executed!

 

Shop aufrufen

Der Shop ist nun unter http://10.100.111.46 verfügbar. Der Login für http://10.100.111.46/backend/ ist demo / demo 

Mögliche Konfigurationen

Standardmäßig ist nur die DB in der config.php inkludiert. Kein Debugging, ES oder Redis. Das lässt sich mit der psh.phar leicht ändern.

Debug Modus

./psh.phar debug-on

erweitert die config.php File im SW Container um:

  'errorHandler' => 
  array (
    'throwOnRecoverableError' => true,
  ),
  'front' => 
  array (
    'noErrorHandler' => true,
    'throwExceptions' => true,
    'disableOutputBuffering' => true,
    'showException' => true,
  ),
  'model' => 
  array (
    'cacheProvider' => 'array',
  ),
  'phpsettings' => 
  array (
    'error_reporting' => 32767,
    'display_errors' => 1,
  ),
);

 

Elasticsearch

./psh.phar es-on

erweitert die config.php File im SW Container um:

  'es' => 
  array (
    'enabled' => true,
    'number_of_replicas' => 0,
    'number_of_shards' => NULL,
    'client' => 
    array (
      'hosts' => 
      array (
        0 => '10.100.111.48:9200',
      ),
    ),
  ),
);

alle weiteren Befehle findet Ihr unter shopware-docker/dev-ops/common/actions

Das ganze vereinfacht das testen von Plugins oder neuen Versionen enorm. Natürlich sollte man das ganze dann immer auf seiner eigenen Instanz gegenprüfen – aber um schnell an erste Infos zu kommen ist das ganz echt top.

Container stoppen und löschen

Ist man mit den Tests fertig kann man die Container einfach mit ./psh.phar docker:stop  stoppen und danach mit ./psh.phar docker:destroy löschen.

Ich möchte hier nicht auf alle Befehle eingehen – diese befinden sich unter

shopware-docker/dev-ops/docker/actions

und werden jeweils mit docker:SHELLSCRIPT ausgeführt.

 

Warum ich das Repo nutze

Das shopwareLabs Repo liefert schon alle zusätzlichen Komponenten beim initialisieren mit (Elasticsearch, Redis etc.) und man kann simpel zwischen den Versionen wechseln ohne jedes mal die File anzupassen oder eine Liste mit Links zu erstellen.

Um an schon bestehenden Projekten zu arbeiten nutze ich einfach die DB Dumps und das jeweilige Repo des Shops. Geht es aber um Performance Tests oder Setup Tests greife ich gerne auf die Docker Variante zurück. Hier spart man sich das mühselige aufsetzen von ES und Redis sowie das löschen der DB danach.

Auch die Pluginentwicklung für versch. Versionen ist über das Docker Repo wesentlich einfacher – man kann zwischen den Versionen hin und herspringen und kann einfach über ./psh.phar init-plugins seine Plugins einbinden.

Leider führt sw:plugin:refresh in dem Script immer zu:

         WARNING! Could not connect to database. Message from SQL Server: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/micha/docker/shopware/shopware-docker/shopware/engine/Shopware/Components/DependencyInjection/Bridge/Db.php 
        
                                                                                                                          
          [Symfony\Component\DependencyInjection\Exception\RuntimeException]                                              
          You have requested a synthetic service ("db_connection"). The DIC does not know how to construct this service.  
                                                                                                                          
        
        sw:plugin:refresh
        
        
Execution aborted, a subcommand failed!

Was aber nicht weiter schlimm ist, da das Plugin soweit verfügbar ist. Müsste man sich aber in der Zukunft mal anschauen.

Das aufsetzen des kompletten Stacks dauert bei mir übrigens nur 6 Minuten. Ziemlich flott.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.