Go to file

Traefik Ondemand Plugin

Traefik middleware to start containers on demand.

Github Actions Go Report Go Version Latest Release

Features

  • Support for Docker containers
  • Support for Docker swarm mode, scale services
  • Support for Kubernetes Deployments and Statefulsets
  • Start your container/service on the first request
  • Automatic scale to zero after configured timeout upon last request the service received
  • Dynamic loading page (cloudflare or grafana cloud style)
  • Customize dynamic and loading pages

Demo

Usage

Plugin configuration

Strategies

Dynamic Strategy

Serve an HTML page that self reload.

testData:
  serviceUrl: http://ondemand:10000
  name: TRAEFIK_HACKATHON_whoami
  timeout: 1m
  waitUi: true

Blocking Strategy

Responds as soon as the service is up with a maximum waiting time of blockingDelay

Custom loading/error pages

The loadingpage and errorpage keys in the plugin configuration can be used to override the default loading and error pages.

The value should be a path where a template that can be parsed by Go's html/template package can be found in the Traefik container.

An example of both a loading page and an error page template can be found in the pkg/pages/ directory in loading.html and error.html respectively.

The plugin will default to the built-in loading and error pages if these fields are omitted.

You must include <meta http-equiv="refresh" content="5" /> inside your html page to get auto refresh.

Example Configuration

testData:
  serviceUrl: http://ondemand:10000
  name: TRAEFIK_HACKATHON_whoami
  timeout: 1m
  waitUi: false
  blockingDelay: 1m
  loadingpage: /opt/on-demand/loading.html
  errorpage: /opt/on-demand/error.html
Parameter Type Example Description
serviceUrl string http://ondemand:10000 The docker container name, or the swarm service name
name string TRAEFIK_HACKATHON_whoami The container/service to be stopped (docker ps docker service ls)
timeout time.Duration 1m30s The duration after which the container/service will be scaled down to 0
waitUi bool true Serves a self-refreshing html page when the service is scaled down to 0
blockingDelay time.Duration 1m30s When waitUi is false, wait for the service to be scaled up before blockingDelay
loadingpage string /opt/on-demand/loading.html The path in the traefik container for the loading page template
errorpage string /opt/on-demand/error.html The path in the traefik container for the error page template

Traefik-Ondemand-Service

The traefik-ondemand-service must be used to bypass Yaegi limitations.

Yaegi is the interpreter used by Traefik to load plugin and run them at runtime.

The docker library that interacts with the docker deamon uses unsafe which must be specified when instanciating Yaegi. Traefik doesn't, and probably never will by default.

Examples

Development

export TRAEFIK_PILOT_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx docker stack deploy -c docker-compose.yml TRAEFIK_HACKATHON

Authors

Alexis Couvreur (left) Alexandre Hiltcher (middle) Matthias Schneider (right)

Alexandre, Alexis and Matthias

Description
Start your containers on demand, shut them down automatically when there's no activity. Docker, Docker Swarm Mode and Kubernetes compatible.
Readme AGPL-3.0 60 MiB
Languages
Go 89.4%
HTML 9.9%
Makefile 0.6%
Dockerfile 0.1%