CDN Cache & Preload dla Craft CMS: Varnish, Cloudflare i automatyczne rozgrzewanie cache

CDN Cache & Preload to plugin dla Craft CMS 3, 4 i 5, który łączy publikację treści z czyszczeniem oraz ponownym rozgrzewaniem cache. Rozszerzenie obsługuje środowiska korzystające z Varnisha, Cloudflare i kolejki zadań Craft CMS.

Stack: Craft CMS, PHP, Twig, Varnish Cache, Cloudflare, Composer, Craft Job Queue, GitHub

Problem

Cache pozwala ograniczyć liczbę żądań trafiających do PHP, bazy danych i systemu CMS. Pojawia się jednak drugi problem: po zmianie treści trzeba usunąć nieaktualną odpowiedź, a następnie ponownie pobrać najważniejsze adresy URL.

Przy ręcznej obsłudze łatwo pominąć część podstron, pozostawić nieaktualną wersję w jednej z warstw albo wyczyścić cały cache mimo zmiany dotyczącej tylko wybranych adresów.

W środowisku korzystającym jednocześnie z Varnisha i Cloudflare proces musi uwzględniać obie warstwy. Samo wyczyszczenie cache na serwerze nie wystarczy, jeżeli wcześniejsza odpowiedź nadal znajduje się na brzegu sieci Cloudflare.

Moja rola

Zaprojektowałem i stworzyłem plugin CDN Cache & Preload dla Craft CMS. Odpowiadałem za integrację ze zdarzeniami CMS-a, komunikację z Varnishem i Cloudflare, obsługę sitemap, mechanizm kolejki oraz konfigurację wykluczeń.

Przygotowałem również instalację przez Composer, konfigurację pluginu, dokumentację oraz publiczne wydania w Craft Plugin Store i na GitHubie.

Jak działa plugin

Po zmianie treści rozszerzenie może uruchomić uporządkowany proces odświeżania cache:

  • ponownie pobiera wybrane strony, aby cache nie pozostał pusty do czasu wejścia pierwszego użytkownika.
  • wykrywa zdarzenie związane z publikacją lub zmianą treści,
  • ustala, które warstwy cache powinny zostać wyczyszczone,
  • wysyła odpowiednie żądania do Varnisha lub Cloudflare,
  • pobiera adresy przeznaczone do rozgrzania,
  • przekazuje cięższe operacje do Craft Job Queue,

Czyszczenie Varnish Cache i Cloudflare

Plugin może wysyłać żądania czyszczące do Varnisha oraz korzystać z API Cloudflare. Pozwala to odświeżyć cache po zmianie treści bez ręcznego logowania się do kilku oddzielnych paneli.

Zakres czyszczenia zależy od konfiguracji. W środowisku produkcyjnym należy unikać bezwarunkowego usuwania całego cache po każdej drobnej zmianie, jeżeli możliwe jest wskazanie węższego zestawu adresów.

Rozgrzewanie adresów z sitemap.xml

Po wyczyszczeniu cache pierwsze wejście na stronę zwykle trafia do aplikacji i dopiero tworzy nową odpowiedź. Przy większym serwisie oznacza to, że użytkownicy mogą kolejno rozgrzewać podstrony własnymi wizytami.

CDN Cache & Preload może pobrać adresy z pliku sitemap.xml i przekazać je do procesu preloadu. Dzięki temu najważniejsze strony są ponownie pobierane po zmianie treści.

Rozwiązanie nie zakłada, że każdy adres z mapy musi być zawsze rozgrzewany. Przy większej liczbie podstron zakres preloadu powinien uwzględniać obciążenie serwera, limity usług zewnętrznych i częstotliwość publikacji.

Craft Job Queue

Czyszczenie i pobieranie wielu adresów nie powinno blokować zapisania wpisu w panelu administracyjnym. Dlatego cięższe operacje mogą być przekazywane do kolejki zadań Craft CMS.

Panel redakcyjny może zakończyć zapis treści, a kolejne żądania są wykonywane asynchronicznie. Stan operacji można następnie sprawdzić w kolejce oraz logach aplikacji.

Wykluczenia i reguły REGEX

Nie każdy adres powinien być czyszczony lub automatycznie pobierany. Dotyczy to między innymi stron zależnych od sesji, parametrów zapytania, panelu użytkownika albo podstron generowanych dynamicznie.

Plugin pozwala pomijać wybrane adresy na podstawie reguł REGEX. Konfiguracja wykluczeń powinna być sprawdzona na danych z konkretnego serwisu, ponieważ zbyt szeroka reguła może wyłączyć z preloadu istotną część strony.

Operacje niestandardowe i opóźnione

Rozszerzenie pozwala również przygotować operacje dla wskazanych adresów i uruchamiać je z opóźnieniem. Jest to przydatne wtedy, gdy treść zależy od późniejszego przetwarzania, generowania dodatkowych zasobów albo aktualizacji wykonywanej przez inne zadanie.

Gdzie plugin się sprawdza

Rozszerzenie jest przeznaczone dla stron Craft CMS, które korzystają z jednej lub kilku zewnętrznych warstw cache i wymagają przewidywalnego odświeżania treści po publikacji zmian.

  • serwisy działające za Varnish Cache,
  • strony korzystające z Cloudflare,
  • projekty z dużą liczbą adresów w sitemapie,
  • serwisy, w których cache powinien być rozgrzewany po wdrożeniu lub publikacji,
  • środowiska wykorzystujące Craft Job Queue do zadań asynchronicznych,
  • projekty wymagające własnych wykluczeń i reguł czyszczenia.

Instalacja przez Composer

Plugin można zainstalować w projekcie Craft CMS za pomocą Composera:

composer require cooltronicpl/varnishcache

Po instalacji trzeba skonfigurować wykorzystywane warstwy cache, dane dostępowe do usług zewnętrznych oraz zasady preloadu i wykluczeń.

Testy i weryfikacja

Po wdrożeniu warto sprawdzić osobno każdy etap procesu:

  • czy zapis treści uruchamia oczekiwane zdarzenie,
  • czy Varnish usuwa wcześniejszą odpowiedź,
  • czy odpowiedni adres jest czyszczony również w Cloudflare,
  • czy sitemap.xml jest poprawnie odczytywana,
  • czy zadania trafiają do Craft Job Queue,
  • czy wykluczone adresy nie są pobierane,
  • czy błędna odpowiedź jednego adresu nie zatrzymuje całego procesu,
  • czy kolejka nie generuje powtarzających się zadań dla tych samych URL-i.

Stan cache można dodatkowo sprawdzić na podstawie nagłówków HTTP oraz logów Varnisha, Cloudflare i Craft CMS. Dokładne nazwy nagłówków zależą od konfiguracji środowiska.

Ograniczenia

Plugin nie zastępuje poprawnej konfiguracji Varnisha, Cloudflare ani serwera WWW. Jeżeli warstwa cache nie obsługuje żądań czyszczących albo reguły VCL są nieprawidłowe, samo zainstalowanie rozszerzenia nie rozwiąże problemu.

Preload dużej liczby adresów może zwiększyć obciążenie backendu. Liczbę jednoczesnych zadań, zakres sitemap i częstotliwość uruchamiania należy dopasować do zasobów serwera.

W przypadku stron zależnych od cookies, sesji lub danych użytkownika trzeba również upewnić się, że dynamiczne odpowiedzi nie są przechowywane w publicznym cache.

Status projektu

Projekt open source jest dostępny dla Craft CMS 3, 4 i 5. Aktualny status utrzymania, obsługiwane wersje oraz informacje o zmianach są publikowane w repozytorium i Craft Plugin Store.

Dostępność

Kod projektu oraz dokumentacja są dostępne publicznie:

🔗 Craft Plugin Store | GitHub

Wtyczka w oficjalnym Craft Plugin Store

Podgląd wtyczki jest zablokowany do czasu włączenia treści zewnętrznych.

Galeria

Cache i preload w Craft CMS

Jeżeli strona korzysta z Varnisha, Cloudflare albo kilku warstw cache jednocześnie, opisz obecną konfigurację, sposób publikacji treści i problem z odświeżaniem stron.

Porozmawiajmy o cache w Craft CMS

Zwykle odpowiadam w ciągu 24 godzin
magnifiercrosschevron-left