Deployment auf versch. Appservern

Wir sind gerade dabei unser Deployment umzukrempeln, dabei bin ich auf einige Probleme gestoßen:

1. Cache leeren über die API oder clear_cache.sh

Es ist immer noch nicht möglich über http://www.meinshop.ch/api/caches/all alle Caches zu leeren, man muss über ein Array und eine Schleife alle durchrattern (config http template proxy doctrine-proxy opcache )

However - dieser Call löscht nicht den Inhalt des web/cache Verzeichnisses - das macht wiederrum nur der call des Shellscriptes var/cache/clear_cache.sh - dieser wiederrum löscht nicht den opcache oder den config cache. Heißt das, ich muss beide Befehle ausführen um ein sauberes System zu bekommen?

2. css und js Files

Wir arbeiten mit einem Adminserver und Appservern (wie von SW empfohlen) - lösche ich nun den Cache über clear_cache.sh werden beim Aufruf neue Files erzeugt mit einem Timestamp, diese unterscheiden sich natürlich vom Adminserver oder anderen Appservern - wie macht Ihr das? Vorher haben wir einfach auf dem Adminserver die Themes kompiliert und dann auf die Appserver gesynct, durch das neue Deployment wollten wir aber eigentlich den kompletten Cache löschen und initial über Curl aufrufen auf den jeweiligen Appservern um diese Dateien zu erzeugen und das kompilieren von Smarty anzustoßen. Das verursacht bei uns nämlich extreme Serverlast und führt teilweise dazu das unser Apache “crasht”.

3. Allgemein (VCS)

Wir nutzen einen Gitlab Server für die VC und würden dort die gitlab-ci.yml nutzen. Ein Kollege empiehlt einfach das Git Repo in das Rootverzeichniss zu packen und einfach über SSH einen pull auszuführen. Wie ist hier eure Erfahrung? Jemand Tipps? Eventuell einen guten Blogbeitrag dazu im Netz?

 

Zu 2:

Der Timestamp steht in einer aktuellen SW Version in der Datenbank. Damit hast Du keine differenzen mehr zwischen den einzelnen App Servern was die web files angeht.

Idealerweise je nach Artikel Anzahl. Cache auf dem Admin Server leeren, theme generieren, cache aufwärmen und dann syncen. 

Zu 3:

Git pull funktioniert ja imo nur wenn Du das ganze Shopware Verzeichnis im Repo hast. Möchtest Du das wirklich? Bei uns hat immer gut funktioniert Plugins und Themes im Repo zu haben. Das Deployment lief dann wie folgt:

  • Auschecken auf dem ci
  • syncen auf dem admin server
  • ggf. Datenbank updates ausführen 
  • ggf. Plugin Updates ausführen
  • cache leeren
  • theme generieren
  • cache leeren
  • ggf. http cache warm up 
  • syncen auf die admin server

 

Gruß

1 „Gefällt mir“

@Thomas schrieb:

Zu 2:

Der Timestamp steht in einer aktuellen SW Version in der Datenbank. Damit hast Du keine differenzen mehr zwischen den einzelnen App Servern was die web files angeht.

Idealerweise je nach Artikel Anzahl. Cache auf dem Admin Server leeren, theme generieren, cache aufwärmen und dann syncen. 

Zu 3:

Git pull funktioniert ja imo nur wenn Du das ganze Shopware Verzeichnis im Repo hast. Möchtest Du das wirklich? Bei uns hat immer gut funktioniert Plugins und Themes im Repo zu haben. Das Deployment lief dann wie folgt:

  • Auschecken auf dem ci
  • syncen auf dem admin server
  • ggf. Datenbank updates ausführen 
  • ggf. Plugin Updates ausführen
  • cache leeren
  • theme generieren
  • cache leeren
  • ggf. http cache warm up 
  • syncen auf die admin server

 

Gruß

Wo steht das ganze denn in der DB? 

Müsste in der s_core_config_values stehen. Das Element in der s_core_config_elements heißt „assetTimestamp“.

Also in der _elements die ID raussuchen, in der Values steht dann der customized Wert.

1 „Gefällt mir“

@Moritz Naczenski schrieb:

Müsste in der s_core_config_values stehen. Das Element in der s_core_config_elements heißt „assetTimestamp“.

Also in der _elements die ID raussuchen, in der Values steht dann der customized Wert.

 

Danke, gefunden. Heißt ja dann, sobald ich clear_cache.sh  auf einem Appserver ausführe, ist der Admin und alle anderen Appserver Schrott. Also auf dem Adminserver kompilieren und auf die Appserver syncen.

 

Eure Doku sagt ja:

SyncingAnchor link for: syncing

After deploying Shopware from VCS, installing plugins or generating themes from the admin panel the file base of the admin server should be synced to all the appservers. rsync is a commonly used tool for this kind of task - but you could also consider using lsyncd, which is an extension to rsync and watches and syncs directories automatically. As most shop setups are quite individual and will include custom plugins, there is no finite list of directories that needs to be synced. Generally all files / directories of the Shopware setup should be synced across the appservers. The following directories, however, need special treatment:

No syncing :

  • /var/cache: Handled individually on every appserver, no syncing
  • /web: Handled individually on every appserver, no syncing needed as of Shopware 5.2

Wenn Du den Cache auf dem Admin leerst musst Du nicht das web Verzeichnis syncen. Du möchtest aber nicht das diese auf den App Servern erstellt werden. Daher die Empfehlung doch zu syncen… 

@Thomas schrieb:

Wenn Du den Cache auf dem Admin leerst musst Du nicht das web Verzeichnis syncen. Du möchtest aber nicht das diese auf den App Servern erstellt werden. Daher die Empfehlung doch zu syncen… 

 

Ja. Habe ich jetzt auch so umgebaut, dass er vor dem Prozess sw:theme:cache:generaten auf dem Adminserver ausführt und dann den web/cache Ordner synct. Teste jetzt noch, ob es dann auch mit mehreren funtkioniert, ohne das diese die Files selbst erstellen, da der Html Cache so lange nicht geleert wird, bis der Appserver aus dem Loadbalancing raus ist.