Files
EZ-Homelab/docker-compose/sablier
kelin 5df66a3923 Refine .env.example files across all stacks
- Streamline variable organization and formatting
- Reduce redundant comments and improve clarity
- Maintain all required variables for each stack
2026-02-10 20:23:52 -05:00
..

Sablier Stack

This stack deploys Sablier, a service that provides lazy loading (on-demand startup) for Docker containers.

Overview

Sablier monitors Docker containers and can automatically start them when they receive traffic through Traefik, then stop them after a period of inactivity. This is useful for:

  • Reducing resource usage on servers with limited RAM/CPU
  • Managing seasonal or infrequently-used services
  • Extending the capacity of small servers (like Raspberry Pi)

Multi-Server Architecture

Each server in your homelab should have its own Sablier instance:

  • Core Server: Manages lazy loading for core services
  • Remote Servers: Each runs Sablier to control local containers

Sablier only connects to the local Docker socket (/var/run/docker.sock) on its own server.

Features

  • Web Dashboard: Access at https://sablier.yourdomain.duckdns.org
  • Protected by Authelia: SSO authentication required
  • Local Control: Only manages containers on the same server
  • Traefik Integration: Uses Traefik middlewares for automatic container startup

Usage

Enable Lazy Loading on a Container

Add these labels to any service in your docker-compose files:

services:
  myservice:
    image: myapp:latest
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myservice.rule=Host(`myservice.yourdomain.duckdns.org`)"
      - "traefik.http.routers.myservice.entrypoints=websecure"
      - "traefik.http.routers.myservice.tls=true"
      - "traefik.http.routers.myservice.middlewares=sablier-myservice@docker"
      
      # Sablier middleware configuration
      - "traefik.http.middlewares.sablier-myservice.plugin.sablier.names=myservice"
      - "traefik.http.middlewares.sablier-myservice.plugin.sablier.sablierUrl=http://sablier:10000"
      - "traefik.http.middlewares.sablier-myservice.plugin.sablier.sessionDuration=5m"

Configuration Options

  • names: Container name(s) to manage (comma-separated for multiple)
  • sablierUrl: URL of the Sablier service (use http://sablier:10000 for local)
  • sessionDuration: How long to keep the container running after last request (e.g., 5m, 1h)

Deployment

This stack is automatically deployed:

  • On the core server after core infrastructure deployment
  • On remote servers during remote server setup

Manual deployment:

cd /opt/stacks/sablier
docker compose up -d

Resources

  • CPU: ~10-20 MB RAM per instance
  • Storage: Minimal (~50 MB)
  • Network: Internal Docker network only

Documentation