Magento 2.2.3 – Snabbare
I den här guiden ska vi få upp hastigheten på en lokalt installerad Magento 2.2.3 som installerats med MySQL, Apache2, PHP 7.0 på en Ubuntu 16.04 LTS.
https://charzam.com/2018/04/29/magento-2-2-3-installation/
Målet är att få ett snabbare utveckligssystem lokalt. Några av tipsen nedan kan även användas i en skarp miljö.
Magentokommandot
Du kommer att behöva köra magentokommandot ganska många gånger.
Gå in i magentokatalogen och skriv:
sudo php bin/magento
Om du vill ha det lite smidigare kan du göra så här:
Gå in i magentokatalogen/bin och skriv pwd för att få den fulla sökvägen hit.
Jag har: /home/peter/sites/m2/bin
nano /home/peter/.bashrc
export PATH=$PATH:/home/peter/sites/m2/bin chmod 755 /home/peter/sites/m2/bin/magento
Stäng terminalen och öppna den på nytt för att .profile ska läsas in.
Nu ska du kunna skriva magento från valfri plats.
Jag fick ett felmeddelande ”cache_dir ”/home/peter/sites/m2/var/page_cache” is not writable”.
sudo chmod -R 777 /home/peter/sites/m2/var/
Sedan fungerade Magento 2.
Rensa cache
Du kommer att behöva rensa en massa cacher ganska ofta när du utvecklar med Magento 2. Kan vara bra att samla allt i en körbar bash-fil.
nano /home/peter/sites/m2/bin/aa
#!/bin/bash sudo rm -rf /vagrant/src/magento2/var/di/* sudo rm -rf /vagrant/src/magento2/var/generation/* sudo rm -rf /vagrant/src/magento2/var/cache/* sudo rm -rf /vagrant/src/magento2/var/page_cache/* echo flushall | redis-cli magento cache:flush sudo service php7.0-fpm restart
Ge din fil exekveringsrättigheter:
chmod 755 /home/peter/sites/m2/bin/aa
Du kan nu skriva aa från valfri katalog och du får alla cacher rensade i Magento 2.
Du kanske får ett felmeddelande från redis-cli. Låt det vara. Vi kommer till redis lite senare.
Developer mode
I developer mode är saker lite smidigare medan du utvecklar, på bekostnad av hastighet. Rekommenderar developer mode i alla fall. Vi ska kolla på hastigheten senare.
https://charzam.com/2016/08/07/magento-2-1-mode/
magento deploy:mode:set developer
OP cache
När ett PHP script ska köras görs det om till byte-kod och körs sedan. OP cache lagrar undan byte-koden. Nästa gång samma script ska köras hämtar OP cache byte-koden så slipper PHP översätta scriptet till byte-kod. Det gör att PHP kör igång snabbare. Det här vill du ha över allt men inte på den mapp där du utvecklar din modul, för då måste du hela tiden rensa OP cache.
Kontrollera först att OP cache är aktivt i din phpinfo.
Du kan svartlista kataloger så de inte kommer med i OP cache.
sudo gedit /etc/php/opcache.blacklist
Min lista ser ut så här:
/home/peter/sites/m2/app/code/charzam/* /home/peter/sites/m2/app/design/* /home/peter/sites/m2/vendor/charzam/* /home/peter/sites/m2/pub/* /home/peter/sites/m2/index.php
Efter att du ändrat i listan behöver du starta om PHP
sudo service php7.0-fpm restart
Vhost
När du satte upp din domän att fungera med din Magento2 katalog så gick du nog rakt på root-katalogen där index.php ligger. Du kan med fördel använda pub/index.php istället, så ändra i din vhost så rooten är mot /pub
sudo gedit /etc/apache2/sites-enabled/000-default.conf
Starta om webbservern
sudo service apache2 restart
Glöm inte att rensa cache: aa
Refresha webbplatsen i webbläsaren.
PHP info
Det är alltid bra att ha en PHP info så du kan se vad som är installerat, inställningar, sökvägar till ini filer.
Skapa en fil i pub/phpinfo.php
Innehåll:
<?php phpinfo();
Testa: http://local.m2.charzam/phpinfo.php
PHP
Kör phpinfo och se där var din php.ini fil finns.
Min är här: /etc/php/7.0/apache2/php.ini
Sök i phpinfo efter ”memory_limit”. Jag har 128Mb och vill öka det till 1Gb.
sudo gedit /etc/php/7.0/apache2/php.ini
Sök efter ”memory_limit”, ändra från 128M till 1024M.
Starta om PHP
sudo service php7.0-fpm restart
Kolla i phpinfo. Ditt minne bör nu vara local value: 768Mb, master value: 1024Mb
magento sätter sitt minne i pub/.user.ini till 768Mb. Du kan utöka det om du vill där.
MySQL
Din databasmotor behöver tilldelat minne i sina inställningar för att fungera bra.
sudo gedit /etc/mysql/my.cnf
Här inkluderar den bara alla filer från
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
MySQL Mer minne
Hur mycket minne har din MySQL tilldelat? Du kan se det genom att köra ett SQL kommando:
SHOW VARIABLES;
Eller en specifik variabel
SHOW VARIABLES where Variable_name = "innodb_buffer_pool_size";
Jag vill ha andra inställningar. Skapa en fil:
sudo gedit /etc/mysql/conf.d/magento2.cfg
och lägg detta i filen:
[mysqld] innodb_buffer_pool_size=4096M innodb_thread_concurrency=16 query_cache_size=1024M query_cache_limit=64M
Starta om MySQL
sudo /etc/init.d/mysql start
MySQL Loggar
Du kan aktivera loggar
#general_log_file
#log_slow_queries
Loggen för långsamma sql frågor kan vara navändbar för att hitta flaskhalsar.
Redis cache
Redis är en minnesdatabas som lagrar data med key-value. Den är mycket snabb. Redis kan användas i Magento 2 för lagring av sessionsdata, block cache, full page cache.
Du kan läsa mer om Redis här: https://charzam.com/2016/08/11/redis/
Installera Redis
sudo apt-get install redis-server
Nu behöver du ändra i app/etc/env.php och lägga till följande:
'session' => array( 'save' => 'redis', 'redis' => array( 'host' => '127.0.0.1', 'port' => '6379', 'database' => '0', 'password' => '', 'timeout' => '2.5', 'persistent_identifier' => '', 'compression_threshold' => '2048', 'compression_library' => 'gzip', 'log_level' => '1', 'max_concurrency' => '6', 'break_after_frontend' => '5', 'break_after_adminhtml' => '30', 'first_lifetime' => '600', 'bot_first_lifetime' => '60', 'bot_lifetime' => '7200', 'disable_locking' => '0', 'min_lifetime' => '60', 'max_lifetime' => '2592000', ), ), 'cache' => array( 'frontend' => array( 'default' => array( 'backend' => 'Cm_Cache_Backend_Redis', 'backend_options' => array( 'server' => '127.0.0.1', 'port' => '6379', 'database' => '1', ), ), 'page_cache' => array( 'backend' => 'Cm_Cache_Backend_Redis', 'backend_options' => array( 'server' => '127.0.0.1', 'port' => '6379', 'database' => '2', 'compress_data' => '0', ), ), ), ),
Det finns redan en sektion som ser ut så här:
'session' => array( 'save' => 'files', ),
Ta bort den.
Töm cachen med cc och läs om sidan.
Kontrollera nu i redis om det finns några nycklar där. Se hur man gör här:
https://charzam.com/2016/08/11/redis/
redis-cli keys * select 1 keys * select 2 keys * exit
Rättighetsproblem
Om du får problem med att Magento 2 inte kan skapa alla filer som behövs, försök då att sätta ägaren till www-data. Gå in i magento rootkatalogen och skriv;
sudo chown -R www-data:www-data * sudo chmod -R 777 *
Admin inställningar
Alla systeminställningar finns här:
Admin >> Stores >> Configuration
Gå in där och ställ in följande:
Catalog >> Cataglog >> Storefront >>
”Use Flat Catalog Category” = Ja
”Use Flat Catalog Product” = Ja
Gå in i Admin >> System >> Cache management. Kontrollera att ALLA cacher är påslagna.
Kör:
magento indexer:reindex
Rensa cache i admin
Admin >> System >> cache management har två knappar.
”Flush cache storage” – Den rensar kopplade cacheservrar (Redis) ordentligt. Precis som kommandot aa gör.
”Flush Magento cache” – Den rensar den här Magento2 installationens keys i Redis. En lite lättare rensning som inte påverkar andra Magento2 servrar som använder samma Redis.
När du utvecklar kan du med fördel använda aa kommandot.
Cron
I Linux finns crontab -e som du kan använda för att kunna redigera crontab i Linux. Crontab är en schemaläggare för att köra program. Kör crontab -e och lägg till dessa rader:
* * * * * /home/peter/sites/m2/bin/magento cron:run --group="default" >> /home/peter/sites/m2/var/log/cron-default.log 2>&1 * * * * * /home/peter/sites/m2/bin/magento cron:run --group="index" >> /home/peter/sites/m2/var/log/cron-index.log 2>&1
Nu kan du titta i var/log ifall det finns fler loggfiler, då ser du om cron körts.
Du kan också titta i databastabellen ”cron_schedule” om Magento2 har fyllt på med data där, i så fall fungerar cron.
Slutligen
Nu är webbplatsen ganska rapp. Mycket tack vare Redis.
Jag avslutar guiden här men om du vill börja utveckla i Magento 2 kan jag rekommendera att du nu ser till att du får igång xdebug i en editor som klarar xdebug.
https://charzam.com/2011/08/27/xdebug-installera/
https://charzam.com/2016/06/11/felsoka-xdebug/