Programvarurekommendationer
Följande programvara krävs för produktionsinstanser av Commerce:
- PHP
- Nginx och PHP-FPM
- MySQL
- Elasticsearch eller OpenSearch
För driftsättningar med flera servrar eller för handlare som planerar att skala sin verksamhet rekommenderar vi följande:
- Varnish cache
- Redis för sessioner (från 2.0.6+)
- En separat Redis-instans som din standardcache (använd inte den här instansen som sidcache)
Se systemkraven om du vill ha information om vilka versioner som stöds av respektive programtyp.
Operativsystem
Operativsystemskonfigurationer och optimeringar liknar varandra för Commerce jämfört med andra webbprogram med hög belastning. När antalet samtidiga anslutningar som hanteras av servern ökar kan antalet tillgängliga socketar allokeras helt. Linux-kärnan har stöd för en mekanism för att återanvända TCP-anslutningar. Om du vill aktivera den här funktionen anger du följande värde i /etc/sysctl.conf
:
net.ipv4.tcp_tw_reuse = 1
Kernelparametern net.core.somaxconn
styr det maximala antalet öppna socketar som väntar på anslutningar. Det här värdet kan ökas till 1024, men det bör vara relaterat till serverns förmåga att hantera den här mängden. Om du vill aktivera den här kernel-parametern anger du följande värde i /etc/sysctl.conf
:
net.core.somaxconn = 1024
PHP
Magento stöder fullt ut PHP 7.3 och 7.4. Det finns flera faktorer att ta hänsyn till när PHP konfigureras för att få maximal hastighet och effektivitet vid behandling av begäranden.
PHP-tillägg
Vi rekommenderar att listan med aktiva PHP-tillägg begränsas till de som krävs för funktionen Commerce.
Magento Open Source och Adobe Commerce:
- ext-bcmath
- ext-type
- extrakrullning
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- textobensl
- ext-pcre
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- textsocketar
- extranatrium
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
Dessutom kräver Adobe Commerce:
- ext-bcmath
- ext-type
- extrakrullning
- ext-dom
- ext-fileinfo
- ext-gd
- ext-hash
- ext-iconv
- ext-intl
- ext-json
- ext-libxml
- ext-mbstring
- textobensl
- ext-pcre
- ext-pdo_mysql
- ext-simplexml
- ext-soap
- textsocketar
- extranatrium
- ext-spl
- ext-tokenizer
- ext-xmlwriter
- ext-xsl
- ext-zip
- lib-libxml
- lib-openssl
Om du lägger till fler tillägg ökar bibliotekets laddningstid.
php-mcrypt
har tagits bort från PHP 7.2 och ersatts med sodium
library. Kontrollera att natrium är korrekt aktiverat när du uppgraderar PHP.PHP-inställningar
För att garantera att alla Commerce-instanser körs utan att dumpdata eller kod dumpas på disken anger du minnesgränsen enligt följande:
memory_limit=1G
För felsökning ökar du värdet till 2G.
Konfiguration av Realpath_cache
Om du vill förbättra prestanda för Commerce lägger du till eller uppdaterar följande rekommenderade realpath_cache
-inställningar i filen php.ini
. Med den här konfigurationen kan PHP-processer cachelagra sökvägar till filer i stället för att leta upp dem varje gång en sida läses in. Se Prestandajustering i PHP-dokumentationen.
realpath_cache_size=10M
realpath_cache_ttl=7200
ByteCode
Om du vill få ut maximal hastighet av Commerce på PHP 7 måste du aktivera OpCache-modulen och konfigurera den korrekt. De här inställningarna rekommenderas för modulen:
opcache.memory_consumption=512
opcache.max_accelerated_files=60000
opcache.consistency_checks=0
opcache.validate_timestamps=0
opcache.enable_cli=1
När du finjusterar minnestilldelningen för opcache bör du ta hänsyn till storleken på Magento-kodbasen och alla dina tillägg. Magento prestandateam använder värdena i det föregående exemplet för testning eftersom det ger tillräckligt med utrymme i opcache för det genomsnittliga antalet installerade tillägg.
Om du har en dator med lite minne och du inte har många tillägg eller anpassningar installerade kan du använda följande inställningar för att få ett liknande resultat:
opcache.memory_consumption=64
opcache.max_accelerated_files=60000
APCU
Vi rekommenderar att du aktiverar PHP APCu-tillägget och konfigurerar composer
så att det stöds för optimering för maximala prestanda. Det här tillägget cachelagrar filplatser för öppnade filer, vilket ökar prestanda för Commerce serveranrop, inklusive sidor, Ajax-anrop och slutpunkter.
Redigera din apcu.ini
-fil så att den innehåller följande:
extension=apcu.so
[apcu]
apc.enabled = 1
Webbserver
Magento har fullt stöd för webbservrarna Nginx och Apache. Commerce innehåller rekommenderade exempelkonfigurationsfiler i <magento_home>/nginx.conf.sample
- (Nginx) och <magento_home>.htaccess.sample
-filerna (Apache). Nginx-exemplet innehåller inställningar för bättre prestanda och är utformat så att liten omkonfiguration krävs. Några av de bästa metoderna för konfiguration som definieras i exempelfilen är:
- Inställningar för cachelagring av statiskt innehåll i en webbläsare
- Inställningar för minne och körningstid för PHP
- Inställningar för innehållskomprimering
Du bör också konfigurera antalet trådar för bearbetning av indatabegäran enligt nedan:
MySQL
Det här dokumentet innehåller inga detaljerade MySQL justeringsanvisningar eftersom varje butik och miljö är olika, men vi kan göra några allmänna rekommendationer.
Det har gjorts många förbättringar i MySQL 5.7.9 Vi är säkra på att MySQL distribueras med bra standardinställningar. De viktigaste inställningarna är:
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_buffer_pool_instances
och innodb_buffer_pool_size
så att varje buffertpoolinstans är minst 1 GB.max_connections
max_connections
ska korrelera med det totala antalet PHP-trådar som konfigurerats i programservern. En allmän rekommendation skulle vara 300 för en liten och 1 000 för en medelstor miljö.innodb_thread_concurrency
innodb_thread_concurrency = 2 * (NumCPUs + NumDisks)
Varnish
Magento rekommenderar att du använder Varnish som helsidescache-server för din butik. PageCache-modulen finns fortfarande i kodbasen, men den bör bara användas i utvecklingssyfte. Den ska inte användas tillsammans med, eller i stället för, Varnish.
Installera Varnish på en separat server framför webbskiktet. Den ska acceptera alla inkommande begäranden och tillhandahålla cachelagrade sidkopior. För att Varnish ska kunna fungera effektivt med skyddade sidor kan en SSL-termineringsproxy placeras framför Varnish. Nginx kan användas för detta ändamål.
Commerce distribuerar en exempelkonfigurationsfil för Varnish (version 4 och 5) som innehåller alla rekommenderade inställningar för prestanda. Bland de viktigaste prestandaaspekterna finns följande:
- Hälsokontroll vid serverdel avfrågar servern Commerce för att avgöra om den svarar i tid.
- I Respitläge kan du instruera Varnish att behålla ett objekt i cachen efter TTL-perioden (Time to Live) och att hantera det här inaktuella innehållet om Commerce inte är felfritt eller om det inte har hämtats färskt innehåll än.
- Sankt läge svartlistar ohälsosamma Commerce servrar under en konfigurerbar tidsperiod. Därför kan felfria backends inte generera trafik när Varnish används som belastningsutjämnare.
Mer information om hur du implementerar de här funktionerna finns i Avancerat Varnish konfiguration.
Optimera resursprestanda
I allmänhet rekommenderar vi att du lagrar dina resurser (bilder, JS, CSS osv.) på ett CDN för optimala prestanda.
Om din plats inte kräver att du distribuerar ett stort antal språkområden och dina servrar finns i samma region som de flesta av dina kunder, kan du få betydande prestandavinster till en lägre kostnad genom att lagra dina resurser i Varnish i stället för att använda ett CDN.
Om du vill lagra dina resurser i Varnish lägger du till följande VCL-poster i default.vcl
-filen som genereras av Commerce för Varnish 5.
Lägg till följande i slutet av programsatsen if
för PURGE-begäranden i underrutinen vcl_recv
:
# static files are cacheable. remove SSL flag and cookie
if (req.url ~ "^/(pub/)?(media|static)/.*\.(ico|html|css|js|jpg|jpeg|png|gif|tiff|bmp|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)$") {
unset req.http.Https;
unset req.http./* {{ ssl_offloaded_header }} */;
unset req.http.Cookie;
}
I underrutinen vcl_backend_response
söker du efter programsatsen if
som tar bort cookien för GET
- eller HEAD
-begäranden.
Det uppdaterade if
-blocket ska se ut så här:
# validate if we need to cache it and prevent from setting cookie
# images, css and js are cacheable by default so we have to remove cookie also
if (beresp.ttl > 0s && (bereq.method == "GET" || bereq.method == "HEAD")) {
unset beresp.http.set-cookie;
if (bereq.url !~ "\.(ico|css|js|jpg|jpeg|png|gif|tiff|bmp|gz|tgz|bz2|tbz|mp3|ogg|svg|swf|woff|woff2|eot|ttf|otf)(\?|$)") {
set beresp.http.Pragma = "no-cache";
set beresp.http.Expires = "-1";
set beresp.http.Cache-Control = "no-store, no-cache, must-revalidate, max-age=0";
}
}
Starta om servern Varnish om du vill tömma cachade resurser när du uppgraderar webbplatsen eller distribuerar/uppdaterar resurser.
Cachelagring och sessionsservrar
Magento har ett antal alternativ för att lagra cacheminne och sessionsdata, bland annat Redis, Memcache, filsystem och databas. Vissa av dessa alternativ beskrivs nedan.
Inställningar för en webbnod
Om du planerar att betjäna all trafik med bara en webbnod är det inte klokt att placera cachen på en fjärr-Redis-server. Använd i stället filsystemet eller en lokal Redis-server. Om du vill använda filsystemet placerar du cachemapparna på en volym som är monterad i ett RAM-filsystem. Om du vill använda en lokal Redis-server rekommenderar vi att du konfigurerar Redis så att den använder socketar för direkta anslutningar i stället för att utbyta data via HTTP.
Konfigurera flera webbnoder
Redis är det bästa alternativet för att konfigurera flera webbnoder. Eftersom Commerce aktivt cachelagrar mycket data för bättre prestanda bör du vara uppmärksam på nätverkskanalen mellan webbnoderna och Redis-servern. Du vill inte att kanalen ska bli en flaskhals för behandling av begäranden.