Hosting Magento 2 – VARNISH

Pomyślmy przez chwilę o sklepie internetowym jak o zwykłym sklepie. Co najczęściej robimy będąc w nim? Otóż najczęściej ( co za niespodzianka) oglądamy produkty. Na każdy zakupiony produkt przypada co najmniej kilka/kilkadziesiąt obejrzanych produktów. Kolejną sprawą, jaką trzeba mieć na uwadze to ilość oglądających osób. W osiedlowym sklepie zwykle mamy ich kiku-kilkanastu . W przypadku bardzo dużego liczba ta może być nawet trzycyfrowa. Natomiast w sklepie internetowym mogą ich być tysiące i nie jest to coś wyjątkowego. Na nasze szczęście wirtualny świat jest dużo pojemniejszy i nikt nie musi deptać sobie po nogach 🙂

Skoro więc zdecydowana większość akcji na naszym sklepie jest powtarzalna i ludzie oglądają te same produkty wiele razy, warto zadbać o cache. W przypadku Magento 2 rodzajów cache mamy wiele. W przypadku stron produktowych i klientów niezalogowanych, przyda się nam cache całych stron. Najlepiej tutaj sprawdza się Varnish, który posiada gotową konfigurację integracji z Magento 2 i można bardzo łatwo ją wygenerować i wyeksportować z panelu M2.

Z punktu widzenia systemowego wygląda to tak:

Aby zainstalować varnisha należy wykonać polecenie:

apt-get install varnish

apt-get install varnish

Domyślnie varnish działa na 2 portach

  • 6081 – port na którym słucha strona. Będziemy chcieli to zmienić na port 80
  • 6082 – port administracyjny. Możemy zostawić go tak jak jestapt-get install varnish

Zacznijmy od tego czemu chcemy zmienić domyślny port. Jak wspomniałem w poprzednim artykule port nasłuchuje na localhost i wpisujemy go w konfiguracje ngnixa w postaci linii :

proxy_pass http://127.0.0.1:80;

Jednak zmiana portu na port 80 (domyślny port HTTP) ma pewne zalety

  • Narzędzia monitoringu lokalnego sprawdzają co jakiś czas stronę (czy to będzie munin czy wewn. narzędzie Magento 2 – sprawdza /pub/health_check.php). Daje nam to lepszy obraz działania strony.
  • Na IP zewn. port 80 daje nam przekierowanie na HTTPS. W przypadku localhost takie przekierowanie nie ma sensu. Możemy przez to ominąć szyfrowanie na samej maszynie
  • Zachowanie jednolitej konfiguracji portów. Tylko porty 80 (HTTP),443 (HTTPS) oraz 8080 (backend) są używane do komunikacji webowej i takie są wg standardów

Niestety w przypadku Varnisha konfiguracja portów jest lekko myląca. Przed powstaniem systemd (obecnego od Debiana 8), sprawa wyglądała prosto i plik konfiguracyjny znajdował się w /etc/default/varnish. Obecnie plik dalej istnieje, ale nie jest brany pod uwagę. Możemy go tam zostawić, usunąć albo zmienić porty w nim, aby uniknąć pomyłki w przyszłości. Zmieniamy więc:

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

na:

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

Właściwy plik konfiguracyjny deamona varnisha znajdziemy w strukturze systemd (polecam zapoznanie się z samym systemd) – /lib/systemd/system/varnish.service

Tutaj musimy zmienić linijkę:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a 127.0.0.1:6081 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

na:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a 127.0.0.1:80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Następnie musimy odświeżyć systemd poleceniem:

systemctl daemon-reload

Jeżeli myślimy o cachowaniu (nie znam odpowiednika tego słowa po polsku) powinniśmy pomyśleć co powinno być w pamięci, a co powinno iść prosto z php-fpm. Jak już wspomniałem na nasze szczęście Magento 2 tutaj robi robotę za nas. W panelu administracyjnym Magento 2 wchodzimy w zakładkę:

@page { margin: 2cm } p { margin-bottom: 0.25cm; line-height: 115% } a:link { so-language: zxx } 
Sklepy→Koniguracja→Zaawansowane→System

W zakładce „Pamięć podręczna strony” wybieramy Varnish i upewniamy się, że mamy tak jak na screenie poniżej;

Następnie możemy wygenerować sobie plik konifuracyjny Varnisha w wersji 5. Warto lekko zmodyfikować ten plik dodając do sekcji backend default linijkę:

 .connect_timeout = 60s;

Domyślnie Varnish ma tą wartość ustawioną na 3,5s (nie występuje to nigdzie w konfiguracji) przez co jeżeli będziemy wykonywać bardziej skomplikowane operacje na backendzie (masowe akcje) napotkamy na błąd 504 – Gateway Timeout

Otrzymanym plikiem zastępujemy plik /etc/varnish/default.vcl, a następnie restartujemy Varnish:

service varnish restart

W tym momencie nasz sklep powinien działać z pomocą Varnisha. Jeżeli chcemy zobaczyć szczegóły działania Varnisha możemy użyć polecenia:

varnishlog

lub:

varnishtop

Jeżeli z jakiegoś powodu musimy wyczyścić cache Varnisha (np. wrzucając plik weryfikacyjny googla) możemy to zrobić albo systemowo:

service varnish restart

Albo użyć czyszczenia cache z panelu administracyjnego Magento 2 bądź w konsoli za pomocą polecenia:

bin/magento cache:flush

Dziękuję, że poświęciłeś swój czas na przeczytanie tego artykułu, jeśli masz jeszcze chwilę, podziel się swoimi wrażeniami i >>zostaw komentarz<< w wątku do tego posta.

Scroll to top