/
Pack Hosting Panel

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 25g
  • VARNISH_ENABLE_EXPORTER Schakelt prometheus exporter in op poort 9131, 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