Magento 1.9.x, Turpentine Varnish Cache 4.1.*-os verzió, Ubuntu 16.04 LTE verzió

Lassú a Magento webshop, magasak a betöltési idők elhagyják az oldalt a vevők? Mindenképpen cache megoldás bevezetése ajánlott. A jelen leírásban Ubuntu 16.04 LTE környezetben PHP 5.6 változatával bemutatjuk, hogy hogyan és milyen Varnish cache verziót kell telepíteni a Magento 1.9.3 változathoz, ahol a Varnish Cache-t a Turpentine modullal fogjjuk majd munkára, mindezt azért, hogy akár 1s alatt betöltődjön a teljes webáruház.

Akkor fogjunk is bele. A következő lépéseket fogjuk elvégezni.

1. Kiinduló állapot Ubuntu 16.04 LTE változat, ahova PHP 5.6 változata van feltelepítve, mindez megjelenik egy Virtual Host-on, és fut rajta a Magento 1.9.x változata.
2. Megfelelő Varnish cache telepítése Ubuntu 16.04 alá
3. Magento Virtual host beállítása
4. Varnish cache konfiguráció beállítása
5. Magento Turpentine Cache modul konfiguráció
6. Magento Turpentine Varnish Cache modul VCL file alkalmazása
7. Ubuntu 16.04 LTE, Magento 1.9.x Turpentine Varnish Cache modul, HIT fejlécek

1. Feltételezzük, hogy egy Ubuntu Virtual host kialakítása Local gépen senkinek nem okoz gondot, és sikeresen feltelepítette magának már a Magento 1.9.3.x változatát. A mi példánkban mi a Magentot mintaadatokkal együtt telepítettük fel.

2. A Turpentine Magento Varnish Cache modulnál ki van hangsúlyozva, hogy a Varnish Cache 4.0.3-as változata Centos 7 alatt hibásan fut, amikor egyszer-egyszer frissítjük az oldalt akkor eltűnnek bizonyos részei, ezt a próbálkozások közepette én is tapasztaltam, így ennek a változatnak a használatát Ubuntu 16.04- alatt sem ajánlom.
A Turpentine Magento 1.9.x Varnish cache modulhoz ezért, mi kompatibilitási problémák miatt a Varnish Cache 4.1.* változatát telepítjük majd. Ugyan a Magento Turpentine Varnish Cache modul alatt a 4.1.* változat adminisztrációs felülten nincs kihangsúlyozva de manuálisan ez bállítható.

Telepítsük, hát fel Ubuntu 16.04 alá a Varnish Cache 4.1.* változatát, ehhez a következő parancsokat kell lefuttatnunk:

Vagyük fel Ubuntu csomagkezelőbe a https csomagot:

sudo apt-get install apt-transport-https

állítsuk be a Varnish Cache GPG kulcsot:

curl https://repo.varnish-cache.org/ubuntu/GPG-key.txt | sudo apt-key add -

majd állítsuk be a Varnish 4 forrását a csomag listákban:

sudo sh -c 'echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.0" >> /etc/apt/sources.list.d/varnish-cache.list'

Ezután frissítsük be a csomgalistát és telepítsük a Varnish Cache 4.1.* változatát (4.1.4):

sudo apt-get update
sudo apt-get install varnish=4.1.*

Ha ez lefutott akkor localhostunkon bármelyik virtual hostot böngészőben meghívva Error_Connection_Refused vagy 403-as hibát generál a böngészőnk. Ez azért van mert alap esetben a Varnish cache a 6081-es port feletti tartalmat cachelné le, de mivel sem localhostban sem máshol nincs konfigurálva ez a port a virtual hostunk és vele a böngészőnk elszáll vele.

3. A fenti problémák miatt módosítani kell pár Apache beállítást, meg kell adni a Varnish Cachenek, hogy ne 6081-es portot hanem a 80-asat figyelje, ugyanis a weboldalaink nagy részét azon a porton szolgálja ki a virtual hostunk.
Amit csinálni fogunk a Varnish Cache a 80-as porton fogja küldeni a tartalmat. A Virtual hostjaink pedig a 8080-as porton generálják le neki a tartalmat.

Azaz a http://m194.tld:80-as portja a Varnish Cache által letárolt cache-t változat lesz a http://m194.tld:8080-as porton futó oldalról, ez azt is jelenti, hogy a :8080-as porton a weboldalunk Varnish Cache nélkül lesz elérhető.

Ehhez nem kell mást tenni mint az Apache Virtual Hostját módosítani, hogy az a *:8080-as porton szolgáljon ki:

<VirtualHost *:8080><VirtualHost *:8080> ServerAdmin admin@m194.tld DocumentRoot "/hdd/web/m194/" ServerName m194.tld ServerAlias www.m194.tld ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory  "/hdd/web/m194/"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require local </Directory></VirtualHost>

Illetve engedélyezni kell Apache-ban ezt a portot amit pedig a következőképpen lehet elvégezni:

Menjünk el a/etc/apache2/ports.conf fájlba ahol állítsuk be a következőt:

Listen 80

sort, cseréljük le erre:

Listen *:8080

Ha ezekkel a beállításokkal megvagyunk, akkor egy statikus weboldalunk, ami mondjuk nem más mint egy http://static.tld/index.html fájl alapesetben már Varnish cache segítségével kerül megjelenítésre. Fontos tudni, hogy aki először nézi meg az még Varnish cache nélkül nézi meg, második betöltődésre már a Varnish által letárolt változatot fogja megkapni, ezek a beállítások a http://static.tld/index.html virtual host esetében így néz majd ki a virtual host:

Virtual host:

<VirtualHost *:8080><VirtualHost *:8080> DocumentRoot "/hdd/web/static/" ServerName static.tld ServerAlias www.static.tld ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory  "/hdd/web/static/"> Options +Indexes +Includes +FollowSymLinks +MultiViews AllowOverride All Require local </Directory></VirtualHost>

4. De ahhoz, hogy ez működjön a Varnish cache default VCL fájlját is be kell paraméterezni. Ez nem lesz mást mint egy default.vcl fájl, amelyet a /etc/varnish/default.vcl helyen találunk, szerkesszük meg:

sudo gedit /etc/varnish/default.vcl

A backend port a 127.0.0.1 ez tulajdonképpen a localhostunk, és nekünk a 8080-as portot kell, hogy figyelje majd, ugyanis az Apache webszerverünk ezen a porton fog kiszolgálni:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

sub vcl_deliver {
    if (obj.hits > 0) {
		set resp.http.X-Cache = "HIT";
	} else {
		set resp.http.X-Cache = "MISS";
	}
}

Az alapértelmezett konfigurációs fájlon kívül el kell még végeznünk pár beállítást a Varnish cache kiszolgálással kapcsolatban:

Ubuntu 14.x alatt szerkesszük meg ezt a fájlt:

sudo gedit /etc/default/varnish NEM, NO ezt az Ubuntu 16 figyelmen kívül hagyja! Elvileg ezt kellene elvégezni benne vagy vele:

gedit /etc/default/varnish

Amiben ezeket a sorokat kellene elhelyezni:

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Nah a fenti megoldás tökéletesen működött egészen Ubuntu 14.x-ig de aztán megjelent az Ubuntu 16.x-es változat, ahol ez nem érvényesül, nagyon nincs még kiemelve seholsem. Sok helyen ezt látjuk mintaként de felejtsük el, mert Ubuntu 16.04 figyelmen kívül hagyja ezeket a beállításokat, ezért a következő műveleteket kell elvégezni, mivel az Ubuntu 15.x es változatai a Varnish Cache konfiguráció adatait a systemd könyvtárból olvasák ki. Akkor is az alábbi lépéssorozatot kell elvégezni, amennyiben a Varnish Cache telepítés után a böngészőben – ERR_CONNECTION_REFUSED – hibaüzenet jelenik meg. Ehhez létre kell hoznunk nekünk is ezeket a konfigurációt a gépünkön:

sudo cp /lib/systemd/system/varnish.service /etc/systemd/system
sudo gedit /etc/systemd/system/varnish.service 

helyen a következő sorokkal kell feltöltnei a fájlt, itt már Magento specifikus adatok is megadásra kerülnek, ami teljes egészében így fog kinézni:

[Unit]
Description=Varnish Cache, a high-performance HTTP accelerator

[Service]
Type=forking

# Maximum number of open files (for ulimit -n)
LimitNOFILE=131072

# Locked shared memory (for ulimit -l)
# Default log size is 82MB + header
LimitMEMLOCK=82000

# On systemd >= 228 enable this to avoid "fork failed" on reload.
#TasksMax=infinity

# Maximum size of the corefile.
LimitCORE=infinity

#ExecStart=/usr/sbin/varnishd -a :6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
ExecStart=/usr/sbin/varnishd -p cli_buffer=16384 -p feature=+esi_ignore_other_elements -p vcc_allow_inline_c=on -p feature=+esi_disable_xml_check -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
ExecReload=/usr/share/varnish/reload-vcl

[Install]
WantedBy=multi-user.target

Melyek közül kifejezetten a

-p cli_buffer=16384 -p feature=+esi_ignore_other_elements -p vcc_allow_inline_c=on -p feature=+esi_disable_xml_check

rész a Magento miatt szükséges.

Ha mindent megfelelően csináltunk, akkor a beállításokat csak érvényesíteni kell, ezeket pedig systemctl-es parancsokkal végezzük el. Mert a sima szervíz újraindítás nem biztos, hogy elegendő lesz, futtassuk meg konzolból a következő parancsokat:

sudo systemctl daemon-reload
sudo systemctl restart varnish.service
sudo service apache2 restart

5. Most jöhet a Turpentine Magento modul telepítése a webáruházunkhoz, ezt letölthetjük innen: https://www.magentocommerce.com/magento-connect/turpentine-varnish-cache.html amelyet a szokásos modul telepítéssel fel is tehetünk. A telepítés után a modul konfigurációjára kattintva előfordulhat, hogy 404-es oldalt kapunk. Ekkor adminisztrátor felhasználónkkal lépjünk ki majd újra be. A beállításokról itt lehet olvasni. Nekem a következő konfigurációval sikerült elérnem, a cachelt Magento futását.

Ehhez látogassunk a System > Settings > Turpentine > Varnish Options menüpontba.
Itt a következő adatokat adtam meg:

Varnish Options > General Options tab

Apply VCL On Config Change – Enable
Strip whitespace from VCL files – Always
Use VCL fix – Disable
Fix HTTPS redirect – Disable
Enable Debug Info – Enable (fejlesztés esetén nem árthat)
Enable Varnish Command Logging – Disable
Enable Block Logging – Disable
Enable AJAX Flash Messages – Enable
Fix Product List Toolbar – Disable
Enable Site Crawler – Disable
Enable Crawler Debug – Disable

 

Logging tabon:
Use custom log file – Disable

Servers tabon:
Varnish Version – 4.0.x
Server List – 127.0.0.1:6082
Varnish Authentication Key – amelyet az /etc/varnish/secret könyvtárban találunk meg a végére tegyünk egy “\n”-et felsővesszők nélkül (72fb3546-21d1-4aaa-8e3f-00000d200000\n)

Config File Location – {{root_dir}}/var/default.vcl
Custom VCL File – Top – {{root_dir}}/app/code/community/Nexcessnet/Turpentine/misc/custom_include_top.vcl
Custom VCL File – Bottom – {{root_dir}}/app/code/community/Nexcessnet/Turpentine/misc/custom_include.vcl
Custom VCL Template –

 

Majd látogassunk a System > Settings > Turpentine > Caching Options menüpontba.
Itt a következő adatokat adtam meg:

Backend tab:
Load Balancing – No, use only one backend server
Backend Host – 127.0.0.1
Backend Port – 8080
Frontend Timeout – 300
Admin Timeout – 21600
Crawler IP Addresses – 127.0.0.1
Crawler User Agents – ApacheBench/.*,.*Googlebot.*,JoeDog/.*,.*Siege/.*,magespeedtest\.com,Nexcessnet_Turpentine/.*,.*PTST.*

Normalization Options tab
Normalize Encoding – Enable
Normalize User-Agent – Disable
Normalize Host – Disable
Normalize Cookie Regex –
Normalized Cookie Target –

TTLs tab:

Grace Period (seconds) – 15
Default Page TTL (seconds) – 3600
URL-based TTLs –
Static File TTL (seconds) – 28800

URL-based Caching tab:
URL Blacklist – cron\.php
Bypass Varnish if base URL is not found within a store? – Disable

Parameter-based Caching tab:
GET Parameters – __SID,XDEBUG_PROFILE
Ignore GET Parameters – utm_source,utm_medium,utm_campaign,utm_content,utm_term,gclid,cx,ie,cof,siteurl
Transfer unmodified URL to Backend Server – No

Static Caching tab:
Force Static Asset Caching – Disable

Maintenance mode tab:
Enable Maintenance Mode – Disable

Custom HTML content of vcl synth (error) sub –

6. Ha a beállításokkal megvagyunk akkor menjünk el a System > Cache Managment menüpontba, itt az oldal alján megtalálható a Save illetve Apply Varnish Config ami egy .vcl fájlt fog elkészíteni a “Config File Location – {{root_dir}}/var/default.vcl” helyre. Ha mindent helyesen állítottunk be, akkor a mentés (fájlírási jogosultágokra figyeljünk) a Magento specifikus default.vcl fájl elkészül a megadott helyre. A korábban létrehozott /etc/varnish/default.vcl fájlt nevezzük át, csináljunk belőle biztonsági mentést.

sudo cp /etc/varnish/default.vcl /etc/varnish/default.vcl_safe

Ezután a {{root_dir}}/var/default.vcl Magento fájl symlinkeljen a /etc/varnish/default.vcl helyre (ln parancs). Ezzel a megoldással a Magento default.vcl fájlja alapján kerül betöltésre a Varnish Cache a szerveren.

Ezután nincs más dolgunk mint meghívni a következő 3 parancsot:

sudo systemctl daemon-reload
sudo systemctl restart varnish.service
service apache2 restart

Magento adminisztrációs felületén törölni a Cache-t (System > Cache Managment > Clear all Cache)

Ha kitekintünk a frontend oldalra, ahol láthatjuk, hogy az oldalunk másodjára kevesebb mint 1 másodperc alatt villámgyorsan betöltődik és a fejlécek között megjelenik a Varnish Cache HIT száma, amely arra utal, hogy a Varnish Cache megfelelően fut az oldal mögött:

Reklámok

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s