Hogyan frissítsük Matomo (korábban Piwik) webanalitikai rendszerünket a 4.x verzióra (2. oldal)

botond küldte be 2020. 12. 15., k – 09:34 időpontban

Tartalom

  1. oldal: Matomo frissítése előtti beállítások, frissítés
  2. oldal: Frissítés utáni beállítások, geolokáció

 

A 2. oldal tartalma

 

Folytatás

A leírás első oldalán elvégeztük a Matomo (Piwik) webanalitikai rendszer frissítése előtti szükséges beállításokat, és frissítettük a rendszert, ezen az oldalon pedig elvégezzük a frissítések utáni szükséges beállításokat.

 

 

Matomo 4 - A frissítés utáni rendszerkövetelmények biztosítása

A Matomo (Piwik) webanalitikai rendszer telepítése után már eleget tettünk a rendszerkövetelményeknek, de a mostani főverzió frissítése után szerverünknek meg kell felelnie a megváltozott rendszerigényeknek is. Ezek hosszú listájához az Admin főoldal középső, "Rendszerellenőrzés" panelén lévő "View the full system check report" linkre kattintva juthatunk el:

Matomo - Rendszerellenőrzés oldal

Ezen az oldalon kapunk egy igen hosszú listát, amin akad néhány megoldásra váró probléma is. Ezek természetesen nagyban függenek a rendszerünk konfigurációjától, ezért más szerveren más állapotok fordulhatnak elő, amik között eltérő hibák is lehetnek. Ebben a leírásban most ezeken haladunk végig amik ebben a listában vannak. Egyéb hibákat ebben a leírásban most nem tárgyalunk, de ha a Matomo rendszerünket az itt található korábbi telepítési útmutató szerint végeztük, akkor nagy valószínűséggel itt nem fogunk találkozni más problémákkal.

A lista elején láthatjuk, hogy például a PHP verziónk rendben van, frissebb, mint a Matomo 4 számára szükséges 7.2.5-ös minimum verzió. Fent találunk egy külön görgethető panelt, amiben log fájl formában jelennek meg az információk. Ez a rész nem annyira áttekinthető, mint az alatta lévő formázott lista elrendezés, így görgessünk is tovább az alatta lévő részre.

Fájlintegritás

A fájlintegritás amolyan biztonsági és technikai ellenőrzés, amiben a Matomo összehasonlítja a telepített példányunkban lévő fájlokat az adott verzióhoz tartozó "sablonnal". Így például ha a Matomo könyvtáraiban felesleges fájlt talál, akkor jelzi, hogy azok nem kellenek a jelenlegi verzióban, így törölhetjük őket. Vagy ha valamelyik fájl mérete nem egyezik meg a "gyári" példány megfelelő fájljának méretével, akkor is jelez. Ugyanígy, ha hiányzik valami, azt is jelzi nekünk. Továbbá a rendszer össze is állítja a futtatandó kész Shell parancsokat, amikkel javíthatjuk a hibákat.

Nálam ezt jeleníti meg a rendszer:

Matomo - Rendszerellenőrzés - Fájlintegritási hibák

Ha itt nem jelenik meg egy hasonló szürke panel, hanem zöld pipa van a fájlintegritás sorában, akkor itt nincs teendőnk, ugorjuk át ezt a részt. De a főverzió frissítése után szinte biztos, hogy törölgetnünk kell pár dolgot.

Itt lépjünk be a matomo felhasználónkkal, amit még telepítés után hoztunk létre neki (a PHP-FPM miatt), és azzal futtassuk a parancsokat. Root felhasználóból egyszerűen átléphetünk a su parancs segítségével a matomo felhasználóba:

su -l matomo
Persze root-ként is futtathatnánk, de ha már van neki külön felhasználója, akkor célszerű ha minden Matomo-val kapcsolatos feladatot azzal végzünk. Így például ha netán olyan parancs kerülne itt elő, amivel létre kellene hozni fájlokat, vagy könyvtárakat, akkor a létrehozott dolgok tulajdonosa is megfelelő lesz.

Ha viszont anno a Matomo telepítése után nem hoztunk létre ilyen felhasználót, mert nem készítettük el a PHP-FPM módosítást, akkor futtassuk root-ként a megadott parancsokat.

Ezek alapján tehát nekem futtatnom kell az alábbi parancsokat:

rm -Rf /opt/matomo/libs/bower_components
rm \
    "/opt/matomo/bower.json" \
    "/opt/matomo/composer.json" \
    "/opt/matomo/composer.lock" \
    "/opt/matomo/js/piwik-min.js" \
    "/opt/matomo/js/piwik.js.orig" \
    "/opt/matomo/misc/gpl-3.0.txt" \
    "/opt/matomo/misc/others/ExamplePiwikTracker.php" \
    "/opt/matomo/vendor/davaxi/sparkline/.codeclimate.yml"
Az áttekinthetőség kedvéért a második parancsot több sorba tördeltem, hogy keskenyebb kijelzőkön is olvasható legyen.
Az iménti parancsok csak az én szituációmra vonatkoznak, más rendszerben lehet, hogy ezektől eltérő parancsokat kell futtatni, ezért a szürke panelről másoljuk ki a saját parancsainkat.

A kért parancsok futtatása után frissítsük az F5-el a lista oldalt, és győződjünk meg róla, hogy az iménti szürke panel eltűnt, és a helyére zöld pipa került.

Adatbázis

A következő megoldásra váró probléma az adatbázisra vonatkozik. Illetve itt több teendőnk is van.

Matomo - Rendszerellenőrzés - Adatbázis karakterkódolása

Adatbázis konvertálása

Itt annyi a lényeg, hogy a Matomo 4 más karakterkódolást használ, aminek segítségével meg tud jeleníteni különböző speciális karaktereket is, mint például az emojik, stb. Ezt valamiért nem végzi el a frissítő rendszerük, biztos okkal, tehát futtassuk a megadott parancsot:

/opt/matomo/console core:convert-to-utf8mb4

Matomo adatbázis konvertálása

A parancs futtatásakor először kiírja, hogy a művelet során leállítja a weboldalak forgalmának követését és rákérdez, hogy futtathatja-e a műveletet. Itt mehet az "y".

 

 

Az adataink mennyiségétől függően ez eltérő idő alatt fut le. Az adatmennyiséget meghatározó tényezők: mért weboldalak száma, weboldalak forgalma és a Matomo példányunk "életkora". Ez utóbbi azért, mert a rendszer havi összesítő táblákat is létrehoz, amikből sokkal gyorsabban ki tudja olvasni a statisztikai kimutatásokat. Így ha régóta használjuk a Matomo-t, akkor több táblát kell átkonvertálnia.

Matomo adatbázis konvertálása kész

Itt néhány másodperc alatt lefutott. De például a rendes szerveremen ez több percet is igénybe vett.

LOAD DATA INFILE engedélyezése

A LOAD DATA INFILE MySQL/MariaDB lehetőség segítségével az adatbázis nagy sebességgel képes fájlokból sorokat beolvasni. A Matomo (Piwik) webanalitikai rendszer erre támaszkodva sokkal gyorsabban fogja tudni beolvasni az eltárolt adatokat, amikor például különböző statisztikai összesítéseket, kimutatásokat kérünk tőle.

A hibaüzenet tehát, ami megmaradt az adatbázis résznél az előző probléma elhárítása után:

Matomo - Rendszerellenőrzés - Adatbázis - LOAD DATA INFILE hiba

Ebben a PHP környezetben alapból ki van kapcsolva ez a PHP mysqli tulajdonság, de máshol lehet, hogy be van kapcsolva, ezért nem adja ezt a hibát. Utóbbi esetben ugorjuk át ezt a részt.

A LOAD DATA INFILE bekapcsolásához engedélyezni kell a "mysqli.allow_local_infile" PHP változót. Alapesetben ennyi is elég hozzá, de előfordulhat, hogy kell még mellé egy megfelelő "open_basedir" beállítás is, hogy a PHP minden esetben hozzáférjen a szükséges fájlokhoz, ezáltal a mysqli bővítmény is. Így célszerű mindkettőt beállítani, hogy biztosan működjön.

Ezeknek a PHP változóknak a beállítását kétféleképpen oldhatjuk meg, attól függően, hogy annak idején a Matomo telepítése után elvégeztük-e a PHP-FPM átállítást.
Beállítás PHP-FPM esetén

Amennyiben elvégeztük a fentebb említett PHP-FPM beállítást, ebben az esetben lépjünk be root-ként a Matomo rendszerünket futtato PHP-FPM pool-jába, és szerkesszük a konfigurációs fájlt. Nálam például ezen a Debian 9-es szerveren:

nano /etc/php/7.4/fpm/pool.d/matomo.conf

A fájl végén vannak a saját PHP beállítások, amiket anno létrehoztunk, ezekhez adjuk hozzá az alábbi két sort:

[...]
php_admin_value[mysqli.allow_local_infile] = on
php_admin_value[open_basedir] = "/opt/matomo:/opt/matomo/tmp/assets"
[...]

Tehát hogy így nézzen ki a fájlunk vége:

Matomo - PHP-FPM beállítása - LOAD DATA INFILE és open_basedir engedélyezése

Mentsük le, majd indítsuk újra ezt a PHP-FPM-et:

systemctl restart php7.4-fpm.service

Természetesen ha másik PHP-vel futtatjuk a Matomo-t, akkor annak a pool-jában szerkesszük a konfigurációs fájlt és annak az FPM szolgáltatását indítsuk újra.

Ennek előnye, hogy ezek a beállítások csak a Matomo futási környezetére vannak hatással.

Beállítás alapértelmezett PHP mód esetén

Ha nem állítottuk át a Matomo rendszerünket PHP-FPM-re, akkor alapesetben mod_php módban (Apache modulként) fut a rendszerünk. Keressük meg annak a PHP-nek a php.ini fájlját amelyik futtatja a Matomo webstatisztikánkat, és azt nyissuk meg root-ként szerkesztésre.

Ezen a Debian 9 (Stretch) szerveren az alapértelmezett PHP a 7.0, de most a frissítéskor muszáj volt feltennünk egy újabb PHP-t, ami legalább a 7.2.5. Tehát ennek megfelelően keressük meg az ini fájlt. Például itt a 7.4 esetében:

nano /etc/php/7.4/apache2/php.ini

És adjuk a végéhez az alábbi két sort:

[...]
mysqli.allow_local_infile = On
open_basedir = "/opt/matomo:/opt/matomo/tmp/assets"

Ezután indítsuk újra az Apache-ot, mivel ilyenkor ez futtatja a PHP-t:

systemctl restart apache2.service

 

Ha elvégeztük a PHP változók beállítását, akkor ezt a problémát is elhárítottuk:

Matomo - Rendszerellenőrzés - Adatbázis - LOAD DATA INFILE rendben

Ha ezekkel a beállításokkal mégse sikerülne megoldani a problémát, akkor a Matomo hibaelhárító oldalán találhatunk még ötleteket, hogy mi akadályozhatja még a LOAD DATA INFILE működését.

 

 

A lista végére is értünk, ebben a telepítésben nincs egyéb probléma. Ilyenkor a lap tetején egy zöld keretes panelen jelzi nekünk, hogy hibátlan a Matomo konfigurációnk:

Matomo - Hibátlan rendszer konfiguráció

 

Geolokáció

Bár ez a téma még beleférne a frissítés utáni követelmények fejezetébe is, ám a Geolokáció érdemel egy külön fejezetet, mivel egyrészt nem alapfeltétel, tehát nem kötelező a beállítása/használata, másrészt ennek a beállítása, beüzemelése kicsit több munkát igényel, ami ebben a külön fejezetben kényelmesebben elfér.

Ha a Matomo (Piwik) webanalitikai rendszer telepítésekor beállítottuk a geolokációt, és a mostani főverzió frissítése után is gond nélkül működik, akkor ezzel nincs további teendőnk, át is ugorhatjuk ezt a részt.

Azonban nálam voltak problémák a szerveremen a Matomo frissítése után, amik abból adódtak, hogy már nagyon régen telepítettem a GeoIP 2 működéséhez szükséges összetevőket, amik idő közben elavultak. Ebben a részben tehát szeretnék bemutatni egy saját, életszerű problémát, ami talán lehet hogy egyedi, de lehet, hogy másoknál is előfordul a Matomo frissítése után, így segítséget nyújthat az itt leírásra kerülő megoldás.

A hibajelenség

A Matomo webanalitikai rendszer 4.0.x főverziójára történő frissítés után megállt a weboldalak mérése. Belépve az admin főoldalára fent, középen egy piros panelen egy hibaüzenet fogadott:

Matomo - Admin - Hibaüzenet

Ezután körbe néztem a többi menüben is, majd a Geolokáció menübe lépve dobott egy ilyen hiba oldalt:

Matomo - GeoIP - végzetes hiba - MaxmindDB reader hiba - getWithPrefixLen() metódus nem létezik

A hibaüzenet pontosan tehát:

A fatal error occurred
The following error just broke Matomo (v4.0.5):

Call to undefined method MaxMind\Db\Reader::getWithPrefixLen()
in /opt/matomo/vendor/geoip2/geoip2/src/Database/Reader.php line 232         

Ami annyit tesz, hogy az új Matomo 4.0.5 megpróbálta meghívni a maxminddb php bővítményének (GeoIP 2) egy getWithPrefixLen() nevű metódusát, ami nem létezik.

A képernyő alsó részén ajánlott még alternatív hibaelhárítást is, hogy például kapcsoljuk ki a harmadik féltől származó plugin-eket, és fel is sorolta őket, hogy melyek azok. Persze már ránézésre is látszott, hogy nem ezek okozták a gondot, hanem a GeoIP rész, ezért ezen a vonalon kellett továbbhaladni.

Átmeneti megoldás

Gyorsan kellett valamit tenni, hogy az oldalak mérése működjön, ezért visszaléptem az előző oldalra, ahol még volt menü, és a bal oldalon beléptem a bővítmények menübe, és átmenetileg kikapcsoltam a Geoip2(core) bővítményét:

Matomo - Geoip2 bővítmény átmeneti kikapcsolása

Ha a geolokáció körül van a probléma, akkor elsőre ez a logikus lépés. Kikapcsolás után helyre is állt a rendszer, minden működött, kivéve persze a városszintű geolokációt. Így, hogy már nincs hiba, és az oldalak mérése is ment tovább, már volt idő alaposabban körbejárni a problémát és megtalálni rá a megoldást.

Végleges megoldás

A maxminddb php bővítmény részletei a phpinfoban:

phpinfo - Régi maxminddb adatok

Itt a maxminddb php bővítmény verziója 1.4.1, és a libmaxminddb függvénykönyvtár verziója pedig 1.3.2. Összevetve az aktuális verziókkal: a maxminddb php bővítmény aktuális verziója 1.8.0 (2020. október 1-jei kiadás) és a libmaxminddb függvénykönyvtár mostani verziója pedig 1.4.3 (2020. augusztus 6-ai kiadás). Tehát eljárt felettük az idő.

Mivel ezeket a kiegészítőket a Matomo webanalitikai rendszer telepítése után külön kézzel fordítottuk le forrásból, ezért nem frissültek maguktól, újra végre kell hajtani a fordítást és telepítést.

Itt most ugyanazt végezzük el, mint korábban a Matomo telepítése után, csak a frissebb verziókkal: feltelepítjük először a libmaxminddb C függvénykönyvtárat, majd utána pedig a maxminddb php extension-t.

Libmaxminddb C függvénykönyvtár újratelepítése

Ha korábban nem állítottuk be a geolokációt, viszont most úgy döntünk hogy beállítjuk, akkor először telepítsük fel a fordításhoz szükséges segédeszközöket tartalmazó csomagokat. Lépjünk be root-ként, és futtassuk az alábbi parancsot:

apt-get -y install gcc build-essential

Ha viszont korábban már használtuk a MaxMind geoip2 php bővítményét, akkor ezek a csomagok már telepítve vannak.

Keressük meg a GitHub oldalán a libmaxminddb C függvénykönyvár legfrissebb változatát az alábbi linken:

https://github.com/maxmind/libmaxminddb/releases/latest

Másoljuk ki a libmaxminddb-x.y.z.tar.gz link címét, majd töltsük le a /tmp könyvtárunkba:

cd /tmp
wget https://github.com/maxmind/libmaxminddb/releases/download/1.4.3/libmaxminddb-1.4.3.tar.gz

Természetesen ha van ennél frissebb változat, akkor azt használjuk!

 

 

Csomagoljuk ki a letöltött archív fájlt a tar paranccsal, és utána lépjünk be a létrejött könyvtárba:

tar -xvzf libmaxminddb-1.4.3.tar.gz
cd libmaxminddb-1.4.3

Ezután fordítsuk le a forráskódot, és ellenőrizzük, hogy minden jól ment-e:

./configure
make
make check

Ha nem volt hiba, akkor ilyen kimenetet kapunk:

A libmaxminddb 1.4.3 C függvénytár lefordítása és ellenőrzése

Végül telepítsük a lefordított csomagot, majd futtassuk az ldconfig parancsot a cache újraépítéséhez (root-ként futtassuk):

make install
ldconfig

A libmaxminddb 1.4.3 C függvénytár telepítése

Ezzel a libmaxminddb C függvénykönyvtár fordításával és telepítésével elkészültünk.

Törölhetjük a /tmp könyvtárból a szükségtelen dolgokat:

cd /tmp
rm -rf libmaxminddb-1.4.3*

MaxMind-DB-Reader-php PHP bővítmény újratelepítése

PHP bővítmények telepítéséhez szükség lesz a phpize parancsra, ami a PHP fejlesztői csomagokban található. PHP fejlesztői csomag beszerezhető bármelyik PHP verzióhoz, most arra lesz szükségünk, amelyikkel futtatjuk a Matomo (Piwik) webanalitikai rendszerünket.

Megfelelő phpize verzió beszerzése

Töltsük le a megfelelő PHP verziónk development csomagját. Ebben a példában a 7.4-esre lesz szükség, ami az alábbi parancs futtatásával települ:

apt-get -y install php7.4-dev
Annak idején feltelepítettük már a korábbi PHP verziónkhoz is a development csomagot, de ha a most a Matomo főverzió frissítésekor újabb PHP-t kellett feltelepítenünk, akkor az ehhez tartozó development csomagban lévő phpize parancsra lesz szükségünk, mert mindegyik php verzióhoz saját phpize parancs tartozik, ami az adott PHP rendszer számára készíti elő a bővítményeket. Mindig az utoljára feltelepített PHP rendszer és annak development csomagban lévő phpize parancs kerül beállításra az alternatives rendszerbe, így tehát a phpize parancs fizikai helye az előző parancs hatására erre módosul:

phpize -> /usr/bin/phpize -> /etc/alternatives/phpize -> /usr/bin/phpize7.4

A korábbi phpize verziók továbbra is megtalálhatók a /usr/bin könyvtárban. Azonban ha több PHP rendszer van telepítve a szerverünkön, akkor a phpize parancs link az utolsóként telepített változatra mutat. Ezért célszerű direkt a megfelelő verziójú phpize parancsot használnunk, hogy a megfelelő php rendszerünkhöz tudjunk beállítani bővítményeket. Bár itt most a 7.4-es az új alapértelmezés, az egyértelműség kedvéért a phpize7.4 -et fogom használni. Persze mindenki használja a saját PHP verziójához tartozót.
PHP bővítmény telepítése

Lépjünk a /tmp könyvtárba és töltsük le a MaxMind-DB-Reader-php PHP bővítmény zip változatát a GitHub oldaláról:

cd /tmp
wget https://github.com/maxmind/MaxMind-DB-Reader-php/archive/master.zip

Csomagoljuk ki, és lépjünk be a létrejött könyvtár alatti ext/ alkönyvtárba:

unzip master.zip
cd MaxMind-DB-Reader-php-master/ext

Itt futtassuk a megfelelő verziójú phpize parancsot (root-ként):

phpize7.4

A parancs kimenete a PHP verziónk build-jától függően:

Configuring for:
PHP Api Version:         20190902
Zend Module Api No:      20190902
Zend Extension Api No:   320190902

Ezután konfiguráljuk, fordítsuk le a forrást, majd telepítsük (szintén root-ként):

./configure
make
make install

A MaxMind DB php PHP bővítmény fordítása és telepítése

Ezután nyissuk meg a megfelelő php.ini fájlt szerkesztésre.

 

 

PHP-FPM

Ha PHP-FPM-el futtatjuk a Matomo rendszert, akkor:

nano /etc/php/7.4/fpm/php.ini
Itt még érdemes megjegyezni, hogy a php.ini beállításai az összes FPM pool-ra érvényesek. Tehát ha például egyéb weboldalakat is futtatnunk ugyanezzel a PHP verzióval, de más FPM pool-okban, amik nem használják a MaxMind geoip adatbázisát, akkor célszerű, ha csak a Matomo pool-jában állítjuk be a bővítményt, így a többi weboldal futtatása során nem töltődik be feleslegesen ez a PHP bővítmény.
Ezt az alábbi módon tehetjük meg a php.ini helyett a Matomo FPM konfigurációjában:
nano /etc/php/7.4/fpm/pool.d/matomo.conf

Majd adjuk a többi PHP változó beállításai után az alábbi sort:

php_admin_value[extension] = maxminddb.so

Tehát ilyenkor csak a Matomo pool-jában kerül betöltésre ez a php modul, és nem töltődik be feleslegesen a többi weboldal futtatása esetén. Ezzel még ha minimális szinten is, de megtakaríthatunk némi erőforrást a szerveren.

Apache modul

Ha pedig Apache modulként futtatjuk, akkor:

nano /etc/php/7.4/apache2/php.ini

Természetesen itt is a saját PHP verziónkat használjuk ha ettől eltérőt telepítettünk (például 7.2 vagy 7.3).

Majd a php.ini végére tegyük be az alábbi sort:

extension=maxminddb.so

Mentsük le, majd indítsuk újra a megfelelő szolgáltatást.

PHP-FPM

PHP-FPM esetén:

systemctl restart php7.4-fpm.service
Apache modul

Alapértelmezett PHP esetén pedig az Apache-ot:

systemctl restart apache2.service
PHP bővítmény ellenőrzése

Ellenőrizhetjük a bővítményt a Matomo könyvtárában elhelyezett szokásos phpinfo.php fájl elhelyezésével, és böngészőben futtatásával:

nano /opt/matomo/phpinfo.php
<?php
    phpinfo();
?>
https://www.wordpress.vm/matomo/phpinfo.php

phpinfo - Új maxminddb adatok

 

Végül szedjük le a felesleges dolgokat:

cd /tmp
rm -rf MaxMind-DB-Reader-php-master/
rm master.zip

 

A virtuális gép után elvégeztem ugyanezt a szerveremen is, így most már jöhet a – korábban hibát eredményező – Geoip2 bővítmény visszakapcsolása.

 

Geoip2 bővítmény visszakapcsolása

Lépjünk be a Matomo admin felületén a Bővítmények menübe, majd kapcsoljuk vissza a Geoip2 bővítményt:

Matomo - Geoip2 bővítmény bekapcsolása

Majd lépjünk be a "Geolocation" menübe, és válasszuk ki a "DBIP / GeoIP 2 (Php)" opciót, és mentsük le az űrlapot.

Ezzel készen is van a geolokációs rész is.

 

Szerver letöltése

A Debian 9 (Stretch) tökéletes szerverre időközben már sok minden felkerült, így megérett az újabb szerver verzió (1.1) feltöltése. A szerver jelenlegi állapota elérhető a letöltések között: Tökéletes szerver letöltése: Debian 9 (Stretch) v1.1

 

 

Konklúzió

A Matomo frissítéséhez nem mindig kell ennyi mindent elvégezni, csak ha nagyon régi a telepítés, és egyszerre több dolog is elavul a szerveren, mint például ezen a Debian9 tökéletes szerveren, amin most fel is frissítettem mindent, ha már újra előszedtem. Valamint nálam a MaxMind dolgai kerültek már régen fel, ezért nálam emiatt kellett újratelepíteni a szükseges hozzávalókat. Azonban akik nálam később rakták fel a Matomo webanalitikai rendszert, azoknál jó eséllyel már újabb összetevők kerültek fel, így nem kellett ennyi mindent állítgatni most a főverzió frissítésekor.

 

 

Lapozó

Ez a leírás több oldalból áll: