OPcache Clear - Deployment Pipeline

Vorwort

Der PHP-Prozess des Webservers unterscheidet sich von dem PHP-Prozess der CLI Umgebung. Angesichts dessen ist es nicht möglich, dass der PHP OPcache via CLI geleert werden kann.



Clear-Script-Bereitstellung

Folgendes PHP-Script muss im Document-Root-Verzeichnis der Shopware 6 Applikation bereitgestellt werden:


Beispiel Pfad:

/var/www/creoline-demo.com/releases/current/public/opcache.php


opcache.php

<?php

$allowList = [
    '127.0.0.1',
    '10.20.0.1',
    '10.20.0.2',
    '10.20.0.3',
    '10.20.0.4',
];

header('Content-Type: text/plain');

if(!in_array($_SERVER['REMOTE_ADDR'], $allowList)) {
    http_response_code(403);
    echo "The ip {$_SERVER['REMOTE_ADDR']} is not allowed to execute this script.\n";
    return;
}

$status = opcache_get_status(false);

if(!$status['opcache_enabled']) {
    http_response_code(400);
    echo "OPcache is not enabled.\n";
    return;
}

$memoryUsed = round($status['memory_usage']['used_memory'] / 1024 / 1024);
$memoryFree = round($status['memory_usage']['free_memory'] / 1024 / 1024);

if(opcache_reset()) {
    http_response_code(200);
    echo "OpCache has been cleared successfully. Used memory: {$memoryUsed} MiB - Free memory: {$memoryFree} MiB\n";
} else {
    http_response_code(400);
    echo "OpCache could not be cleared.\n";
}


Die IP-Adressen in AllowList müssen an die VPC-IP-Adressen der App-Server angepasst werden.



Deployment Integration

Im letzten Schritt, nachdem Symlink-Flip, muss das Script von jedem App-Server wie folgt aufgerufen werden:

curl -k --fail-with-body --retry 3 --retry-all-errors http://127.0.0.1/opcache.php -H "Host: www.creoline-demo.com"


Der Host-Header muss auf die entsprechende Domain, die in der NGINX Vhost Config angegeben ist, angepasst werden. Sofern keine Domain angegeben wurde, kannd er Host Header entfallen.



Fehlerbehandlung

Success

  • cURL Exitcode: 0
  • Der OPcache wurde erfolgreich geleert


Error

  • cURL Exitcode: 22
  • Der OPcache konnte auch nach 3 Versuchen nicht geleert werden. Fehleranalyse siehe HTTP-Body.



Ähnliche Artikel