Site Tools


marc:linux:dockerfiles:sablier

This is an old revision of the document!


Vraag aan Lumo:

Ik wil een voorbeeld van een docker-compose.yml bestand voor sablierapp / sablier en bijbehorend configuratiebestand (sablier.yml).

Ik gebruik Nginx NPM als reverse proxy (draaiend vanuit ~/docker/nginx als docker container) en een docker container bentopdf vanuit ~/docker/bentopdf.

Antwoord:

Hier is een voorbeeld van hoe je docker-compose.yml en sablier.yml kunt opzetten voor Sablier (voorheen bekend als sablierapp), geïntegreerd met Nginx Proxy Manager (NPM) en de bentopdf container.

Sablier is een tool die tijdelijke containers (zoals bentopdf) automatisch start wanneer ze worden aangesproken en ze stopt na een periode van inactiviteit om bronnen te besparen.

1. Directory Structuur

Stel eerst je mappenstructuur op zoals gevraagd:

~/docker/
├── nginx/          # Voor Nginx Proxy Manager
├── sablier/        # Voor Sablier zelf
│   ├── docker-compose.yml
│   └── sablier.yml
└── bentopdf/       # Voor de target container (optioneel, als je deze apart wilt beheren)

2. Docker Compose voor Sablier (~/docker/sablier/docker-compose.yml)

Dit bestand draait Sablier. Het heeft toegang nodig tot de Docker socket om containers te kunnen starten/stoppen en moet verbinding kunnen maken met Nginx Proxy Manager.

version: '3.8'

services:
  sablier:
    image: ghcr.io/proxers/sablier:latest
    container_name: sablier
    restart: unless-stopped
    environment:
      - TZ=Europe/Amsterdam
      # Pas dit aan naar het wachtwoord dat je in sablier.yml gebruikt
      - SABLIER_AUTH_PASSWORD=JeVeiligWachtwoord123 
      # Optioneel: Schakel auth uit voor lokaal gebruik (niet aanbevolen voor productie)
      # - SABLIER_AUTH_ENABLED=false
    volumes:
      # Configuratiebestand
      - ./sablier.yml:/config/sablier.yml:ro
      # Docker socket om containers te managen
      - /var/run/docker.sock:/var/run/docker.sock
      # Optioneel: Logs opslaan
      - ./logs:/logs
    networks:
      - proxy-network
    ports:
      - "8080:8080" # Sablier dashboard poort (optioneel, afhankelijk van je setup)

networks:
  proxy-network:
    external: true
    name: nginx-proxy-manager_default # Meestal heet dit zo als je NPM standaard installeert

Let op: Controleer de naam van je externe netwerk. Als je NPM hebt geïnstalleerd via een andere compose file, kan de netwerknaam anders zijn (bijv. nginx_default). Je kunt dit controleren met docker network ls.

3. Configuratiebestand (~/docker/sablier/sablier.yml)

Dit bestand definieert welke containers beheerd moeten worden. Hier configureren we Sablier om de bentopdf container te starten als er een verzoek komt naar een specifieke route.

# Algemene instellingen
auth:
  enabled: true
  password: "JeVeiligWachtwoord123" # Moet overeenkomen met de env var in docker-compose

# Definities van services die beheerd moeten worden
services:
  bentopdf:
    # De naam van de container zoals die in Docker staat (of de service naam in de compose file van bentopdf)
    containerName: bentopdf
    
    # Hoe lang de container actief blijft na het laatste verzoek (in seconden)
    idleTimeout: 300 
    
    # Hoe lang het mag duren om te starten (timeout)
    startupTimeout: 60
    
    # Labels die Sablier zoekt of expliciete triggers
    # We gebruiken hier een route trigger
    routes:
      - path: "/pdf/generate"
        method: "POST"
        # Optioneel: headers of body validatie
        
    # Optioneel: Environment variables die aan de container worden doorgegeven bij start
    # environment:
    #   - SOME_VAR=value

    # Optioneel: Command overrides als je de container anders wilt starten
    # command: ["--custom-flag"]

4. Configuratie voor Nginx Proxy Manager (NPM)

Omdat je NPM gebruikt als reverse proxy, hoef je geen aparte Nginx config bestanden te schrijven. Je doet dit via de NPM GUI.

Stappen in de NPM Dashboard:

1. Ga naar Hosts → Proxy Hosts.

2. Klik op Add Proxy Host.

3. Vul het volgende in:

  • Domain Names: sablier.jouw-domein.nl (of een lokaal domein als je die gebruikt).
  • Scheme: http.
  • Forward Hostname/IP: host.docker.internal (als je NPM en Sablier op dezelfde host draaien maar in verschillende netwerken) OF het IP-adres van de Sablier container.
    • Tip: Als beide containers in hetzelfde netwerk zitten (zie punt 5), gebruik dan de container naam: sablier.
  • Forward Port: 8080.
  • SSL: Kies een certificaat (Let's Encrypt) als je HTTPS wilt.

4. Voeg een tweede Proxy Host toe voor de PDF service:

  • Domain Names: pdf.jouw-domein.nl.
  • Forward Hostname/IP: host.docker.internal (of sablier als je de Sablier API gebruikt om de container te triggeren, maar meestal wil je direct naar de container als hij draait).
  • Belangrijk: Sablier werkt vaak door een request naar een specifieke endpoint te sturen die de container start. Als bentopdf een eigen poort heeft (bijv. 8000), moet NPM dit forwarden.
  • Forward Port: 8000 (of de poort die bentopdf gebruikt).

Hoe Sablier en NPM samenwerken

: Meestal configureer je Sablier zodat het luistert op een specifieke route (bijv. /start/bentopdf). Wanneer een gebruiker naar die route gaat, start Sablier de container. Zodra de container draait, moet het verzoek worden doorgestuurd naar de container zelf.

Een veelgebruikte methode is:

  1. Gebruik Sablier als een “trigger” service.
  2. Of, gebruik Sablier's ingebouwde proxy functionaliteit (afhankelijk van de versie) om het verzoek direct door te sturen zodra de container start.

Als je Sablier gebruikt om de container te starten en NPM om het verkeer te forwarden, moet je in NPM de “Forward Hostname” instellen op de Docker container naam (bentopdf). NPM zal dan proberen de container te bereiken. Als de container stopt, faalt de verbinding. Sablier moet dan ingrijpen.

Alternatieve (en vaak betere) configuratie voor Sablier + NPM

: Laat Sablier de poort van de container “lezen” en zorg dat NPM altijd naar die poort verwijst. Maar omdat de container stopt, is dit lastig zonder een “wake-on-request” mechanisme in NPM zelf.

De meest robuuste setup voor Sablier is vaak:

  • Sablier draait op poort 8080.
  • Je stuurt requests naar sablier.jouw-domein.nl/api/start/bentopdf.
  • Sablier start de container.
  • Vervolgens moet de client (of een script) wachten tot de container klaar is en dan het verzoek sturen naar pdf.jouw-domein.nl (die NPM naar de nu lopende container forwardt).

5. Netwerk Configuratie (Cruciaal)

Zorg dat alle containers in hetzelfde Docker netwerk zitten zodat ze elkaars namen kunnen oplossen.

Voeg dit toe aan je nginx/docker-compose.yml (als je die hebt) of maak een extern netwerk aan:

docker network create proxy-network

En zorg dat in je sablier/docker-compose.yml (zoals hierboven) en je bentopdf compose file (indien apart) het volgende staat:

networks:
  default:
    external: true
    name: proxy-network

6. Voorbeeld bentopdf Docker Compose (Optioneel)

Als je bentopdf nog niet hebt draaien, hier een basis voorbeeld:

# ~/docker/bentopdf/docker-compose.yml
version: '3.8'
services:
  bentopdf:
    image: your-bentopdf-image:latest # Vervang met de juiste image
    container_name: bentopdf
    restart: "no" # Belangrijk: Laat Sablier de restart policy beheren
    networks:
      - proxy-network
    expose:
      - "8000" # Interne poort
    # Geen ports mapping nodig als je alleen via NPM/Sablier benadert

networks:
  proxy-network:
    external: true
    name: proxy-network

Samenvatting van de werking

  1. Gebruiker vraagt pdf.jouw-domein.nl.
  2. NPM probeert bentopdf:8000 te bereiken.
  3. Container is gestopt → Verbinding geweigerd.
  4. Hier is de complexe kant: Standaard Sablier start de container niet automatisch op een mislukte NPM connectie.
    • Oplossing A: Gebruik Sablier als de enige entrypoint. Gebruikers gaan naar sablier.jouw-domein.nl/request, Sablier start de container, wacht tot hij klaar is, en proxyt het verzoek door.
    • Oplossing B: Gebruik een “Healthcheck” of “Watchdog” script in NPM (moeilijk).
    • Oplossing C (Aanbevolen voor Sablier): Configureer Sablier om te luisteren op de specifieke route die de PDF generatie moet starten. De gebruiker doet een POST naar sablier.jouw-domein.nl/start/pdf. Sablier start de container en geeft een “200 OK” terug zodra hij klaar is. Daarna kan de gebruiker (of een script) het daadwerkelijke PDF verzoek doen naar de container.

Voor de meeste gebruikers is Oplossing A (Sablier als reverse proxy zelf) de makkelijkste, maar als je NPM al hebt staan, kun je Sablier ook gebruiken om de container te “wakker te maken” via een webhook of een speciaal endpoint, waarna NPM het verkeer oppikt.

marc/linux/dockerfiles/sablier.1774272907.txt.gz · Last modified: by marcv

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki