Imaginary
Je eigen service voor het wijzigen van de grootte en conversie van afbeeldingen instellingen met Imaginary
Met Imaginary kun je eenvoudig images resizen. Je kunt bijvoorbeeld images in WebP uitserveren naar browsers die dit ondersteunen of je kunt deze resizen met een verandering in de query parameter. Kijk voor een volledige lijst met api-endpoints op [https://github.com/h2non/imaginary ]
Wanneer je Imaginary in productie gebruikt, zul je snel merken dat er geen caching is geïmplementeerd in de service. Dus elk verzoek resulteert in een nieuwe formaataanpassing / conversie van de afbeelding, wat resulteert in een zeer hoge belasting en trage afbeelding response. Om dit op te lossen hebben we een Docker image gebakken dat Imaginary met Varnish combineert.
Installatie
We zullen hiervoor gebruik maken van de Hipex CLI docker commands om de docker container te runnen. Wij verwachten dat je bekend ben met het gebruiken van de docker basics.
Stap 1
Maak je docker configuratie file aan in ~/domains/example.com/imaginary/docker-compose.yml
.
version: "3.2"
services:
imaginary:
image: registry.hipex.cloud/tools/imaginary:v1.2.1
restart: "always"
environment:
VARNISH_CACHE_SIZE: "5g"
# Workaround for issue https://github.com/h2non/imaginary/issues/198
MALLOC_ARENA_MAX: "2"
ports:
- "19000:9000" # Varnish port
# - "19001:9001" Optional direct imaginary port without caching
De docker container kan worden gestart met docker:compose:up
.
cd ~/domains/example.com/imaginary/
hipex docker:compose:up --detach
Stap 2
We adviseren je om een nieuwe domein pointer aan te maken, deze noem je bijvoorbeeld cdn.example.com
zodat je al het verkeer redirect naar je imaginary service.
Na het aanmaken van de pointer kun je de nginx proxy configuratie aanmaken in
~/domains/example.com/var/etc/cdn.example.com-443/proxy.nginx.conf
location ~* ^\/.* {
proxy_pass http://127.0.0.1:19000;
# Default proxy settings
proxy_connect_timeout 6000;
proxy_send_timeout 6000;
proxy_read_timeout 6000;
send_timeout 6000;
proxy_set_header Host $host;
}
Configuratie
Voor configuraties worden omgevingsvariabelen gebruikt. Deze zijn opgesteld in docker-compose.yml
.
VARNISH_CACHE_SIZE
Maximum cache groote, standaard tot 25gVARNISH_ENABLE_EXPORTER
Schakelt prometheus exporter in op poort9131
, standaard uit.IMAGINARY_ARGUMENTS
Zet extra imaginary waarden bijvoorbeeld-allowed-origins https://*.example.com
.IMAGINARY_CONCURRENCY
Stel imaginary concurrency in, staat standaard op 20. .IMAGINARY_TTL
Stel imaginary cache TTL parameter in, standaard 31556926.
De imaginary opstart commando ziet er alsvolgt uit:
imaginary \
-p 9001 \
-enable-url-source \
-concurrency ${IMAGINARY_CONCURRENCY} \
-http-cache-ttl ${IMAGINARY_TTL} \
"${IMAGINARY_ARGUMENTS}"
Purging cache
Je kunt alle cache-objecten opschonen door de docker-container opnieuw te starten of met curl een HTTP purge request uit te voeren:
curl -XPURGE https://cdn.example.com/convert?url=https%3A%2F%2Fwww.example.com%2Fsome-image.png&type=auto