Deploy Sablier to your Kubernetes cluster using the official Helm chart for production-ready deployments.
Add the Sablier Helm repository:
```bash
helm repo add sablierapp https://sablierapp.github.io/helm-charts
helm repo update
```
Install Sablier:
```bash
helm install sablier sablierapp/sablier
```
📚 **[Full Documentation](https://github.com/sablierapp/helm-charts/tree/main/charts/sablier)** | 💻 **[Chart Repository](https://github.com/sablierapp/helm-charts)**
---
## Quick Start
> [!NOTE]
> This quick start demonstrates Sablier with the **Docker provider**.
>
> For other providers, see the [Providers](#providers) section.
### 1. Start your container to scale to zero
Run your container with Sablier labels:
```bash
docker run -d --health-cmd "/mimic healthcheck" -p 8080:80 --name mimic \
--label sablier.enable=true \
--label sablier.group=demo \
sablierapp/mimic:v0.3.3 \
-running -running-after=5s \
-healthy=true -healthy-after=5s
```
Here we run [sablierapp/mimic](https://github.com/sablierapp/mimic), a configurable web-server for testing purposes.
> [!CAUTION]
> You should **always** use a healthcheck with your application that needs to be scaled to zero.
>
> Without a healtheck, Sablier cannot distinguish a started container from a container ready to receive incoming requests.
### 2. Stop the Container
Stop the container to simulate a scaled-down state:
```bash
docker stop mimic
```
> [!TIP]
> Sablier can **automatically** stop containers at startup using the `--provider.auto-stop-on-startup` flag, which will stop all containers with `sablier.enable=true` labels.
### 3. Start Sablier
Start the Sablier server with the Docker provider:
```bash
docker run --name sablier \
-p 10000:10000 \
-v /var/run/docker.sock:/var/run/docker.sock \
sablierapp/sablier:1.10.5 \
start --provider.name=docker
```
### 4. Request a Session
Call the Sablier API to start a session for the `demo` group:
```bash
curl -v http://localhost:10000/api/strategies/blocking\?group\=demo\&session_duration\=20s
* Request completely sent off
< HTTP/1.1 200 OK
< X-Sablier-Session-Status: ready
```
Sablier will start the mimic container automatically for 20 seconds..
> [!TIP]
> Check out the [Usage with Reverse Proxies](#usage-with-reverse-proxies) section to integrate Sablier with **Traefik**, **Caddy**, **Nginx**, and more.
### 5. Verify the Container is Running
```bash
docker ps | grep mimic
```
### 6. Wait for Session Expiration
After the session duration (20 seconds in this example), Sablier will automatically stop the container.
```bash
# Wait 20 seconds, then check
docker ps -a | grep mimic
```
The container should be stopped.
---
## Configuration
📚 **[Full Documentation](https://sablierapp.dev/#/configuration)**
There are three ways to configure Sablier:
1. [In a configuration file](#configuration-file)
2. [As environment variables](#environment-variables)
3. [As command-line arguments](#arguments)
Configuration sources are evaluated in the order listed above with later methods overriding earlier ones.
If no value is provided for a given option, a default value is used.
### Configuration File
At startup, Sablier searches for a configuration file named sablier.yml (or sablier.yaml) in:
- `/etc/sablier/`
- `$XDG_CONFIG_HOME/`
- `$HOME/.config/`
- `.` *(the working directory)*
You can override this using the `configFile` argument.
```bash
sablier --configFile=path/to/myconfigfile.yml
```
```yaml
provider:
# Provider to use to manage containers (docker, swarm, kubernetes, podman, proxmox_lxc, systemd, nomad, ecs)
name: docker
# Reject requests for containers/services that don't have the Sablier enable label
reject-unlabeled-requests: false
# Verify that the Sablier enable label is present when an instance expires
verify-enabled-on-expiration: false
docker:
# Strategy to use when stopping containers (stop or pause)
strategy: stop
server:
# The server port to use
port: 10000
# The base path for the API
base-path: /
metrics:
# Enable Prometheus metrics endpoint
enabled: true
storage:
# File path to save the state (default stateless)
file:
sessions:
# The default session duration (default 5m)
default-duration: 5m
# The expiration checking interval.
# Higher duration gives less stress on CPU.
# If you only use sessions of 1h, setting this to 5m is a good trade-off.
expiration-interval: 20s
logging:
level: info
strategy:
dynamic:
# Custom themes folder, will load all .html files recursively.
# A missing folder is not an error, only the built-in themes are served then.
custom-themes-path: /etc/sablier/themes
# Show instances details by default in waiting UI
show-details-by-default: true
# Default theme used for dynamic strategy (default "hacker-terminal")
default-theme: hacker-terminal
# Default refresh frequency in the HTML page for dynamic strategy
default-refresh-frequency: 5s
blocking:
# Default timeout used for blocking strategy (default 1m)
default-timeout: 1m
webhooks:
endpoints:
# Notify an uptime-monitoring service every time an instance starts or stops.
# - url: https://uptime.example.com/api/push/xxxxxxxx
# headers:
# Authorization: "Bearer
Sablier supports Docker Swarm mode for managing services across a cluster of Docker engines.
**Features:**
- Connects to the Docker socket (Manager node)
- Scales services to 0 and back
- Compatible with Docker Stack
📚 **[Full Documentation](https://sablierapp.dev/#/providers/docker_swarm)**
---
### Podman
Sablier works with Podman, the daemonless container engine, providing the same dynamic scaling capabilities as Docker.
**Features:**
- Connects to the Podman socket
- Starts/Stops containers
- Supports rootless containers
📚 **[Full Documentation](https://sablierapp.dev/#/providers/podman)**
---
### Kubernetes
Sablier provides native Kubernetes support for managing deployments, scaling workloads dynamically.
**Features:**
- Connects to the Kubernetes API
- Scales Deployments and StatefulSets to 0 and back
- Supports in-cluster and out-of-cluster configuration
📚 **[Full Documentation](https://sablierapp.dev/#/providers/kubernetes)**
---
### Proxmox LXC
Sablier supports Proxmox VE for managing LXC containers on demand via the Proxmox API.
**Features:**
- Connects to the Proxmox VE API with token authentication
- Starts/Stops LXC containers
- Discovers containers by `sablier` tag
📚 **[Full Documentation](https://sablierapp.dev/#/providers/proxmox_lxc)**
---
### Systemd
Sablier integrates with Apache APISIX through a Proxy-WASM plugin, enabling dynamic scaling for your services.
**Quick Start:**
1. Install the Sablier Proxy-WASM plugin
2. Configure APISIX routes with Sablier plugin settings
3. Define your scaling labels on target services
📚 **[Full Documentation](https://github.com/sablierapp/sablier-proxywasm-plugin)** | 💻 **[Plugin Repository](https://github.com/sablierapp/sablier-proxywasm-plugin)**
---
### Caddy
Sablier provides a native Caddy module for seamless integration with Caddy v2.
**Quick Start:**
1. Build Caddy with the Sablier module using `xcaddy`
2. Add Sablier directives to your Caddyfile
3. Configure dynamic scaling rules
📚 **[Full Documentation](https://github.com/sablierapp/sablier-caddy-plugin)** | 💻 **[Plugin Repository](https://github.com/sablierapp/sablier-caddy-plugin)**
---
### Envoy
Sablier integrates with Envoy Proxy through a Proxy-WASM plugin for high-performance dynamic scaling.
**Quick Start:**
1. Deploy the Sablier Proxy-WASM plugin
2. Configure Envoy HTTP filters
3. Set up scaling labels on your workloads
📚 **[Full Documentation](https://github.com/sablierapp/sablier-proxywasm-plugin)** | 💻 **[Plugin Repository](https://github.com/sablierapp/sablier-proxywasm-plugin)**
---
### Istio
Sablier works with Istio service mesh using the Proxy-WASM plugin for intelligent traffic management.
**Quick Start:**
1. Install the Sablier Proxy-WASM plugin in your Istio mesh
2. Configure EnvoyFilter resources
3. Annotate your services with Sablier labels
📚 **[Full Documentation](https://github.com/sablierapp/sablier-proxywasm-plugin)** | 💻 **[Plugin Repository](https://github.com/sablierapp/sablier-proxywasm-plugin)**
---
### Nginx
Sablier provides a powerful middleware plugin for Traefik, the cloud-native application proxy.
**Quick Start:**
1. Add the Sablier plugin to your Traefik static configuration
2. Create Sablier middleware in your dynamic configuration
3. Apply the middleware to your routes
📚 **[Full Documentation](https://github.com/sablierapp/sablier-traefik-plugin)** | 💻 **[Plugin Repository](https://github.com/sablierapp/sablier-traefik-plugin)**
## Community
Join our Discord server to discuss and get support!
[](https://discord.gg/WXYp59KeK9)
## Support
This project is maintained by a single developer in their free time. If you find Sablier useful, here are some ways you can show your support:
⭐ **Star the repository** - It helps others discover the project and motivates continued development
🤝 **Contribute** - Pull requests are always welcome! Whether it's:
- Bug fixes
- New features
- Documentation improvements
- Test coverage
📚 **Share your usage** - We'd love to see how you're using Sablier! Consider:
- Opening a discussion to share your setup
- Contributing examples of your deployment configurations
- Writing a blog post or tutorial
💬 **Engage with the community** - Ask questions, report issues, or help others in [discussions](https://github.com/sablierapp/sablier/discussions)
Every contribution, no matter how small, makes a difference and is greatly appreciated! 🙏
For detailed support options, see [SUPPORT.md](SUPPORT.md).
## Sponsor
If you find Sablier valuable and want to support its development, please consider sponsoring the project:
💖 **[Sponsor on GitHub](https://github.com/sponsors/acouvreur)** - Your sponsorship helps keep this project maintained and actively developed
Your support helps:
- Keep the project maintained and up-to-date
- Dedicate more time to bug fixes and new features
- Improve documentation and examples
- Support the broader open-source ecosystem
Every contribution, no matter the size, makes a real difference. Thank you for considering! 🙏
### DigitalOcean
This project is supported by:
### LocalStackThe AWS ECS provider is tested against LocalStack, supported by the LocalStack for Open Source program: