Skip to content

Quick Start

Copy this docker-compose.yml to your server:

services:
traefik:
image: traefik:v3
restart: unless-stopped
command:
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.docker.network=traefik
- --entrypoints.web.address=:80
- --entrypoints.web.http.redirections.entrypoint.to=websecure
- --entrypoints.websecure.address=:443
- --certificatesresolvers.letsencrypt.acme.httpchallenge=true
- --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web
- --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- traefik-certs:/letsencrypt
networks:
- traefik
holden:
image: benjick/holden:latest
container_name: holden
restart: unless-stopped
labels:
- "holden.orchestrator=true"
ports:
- "127.0.0.1:6021:6021"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /appdata:/appdata # Must be equal and also match HOLDEN_BASE_DATA_DIR
- ./data:/data
environment:
HOLDEN_BASE_DATA_DIR: /appdata
HOLDEN_TRAEFIK_NETWORK: traefik
HOLDEN_PUBLIC_DOMAIN: holden.example.com
HOLDEN_WEBHOOK_SECRET: change-me-to-something-random
# GITHUB_USERNAME: your-username
# GITHUB_PAT: ghp_xxxx
networks:
- traefik
networks:
traefik:
name: traefik
volumes:
traefik-certs:

Start it:

Terminal window
docker compose up -d

Then add an app:

Terminal window
holden app add whoami --repo https://github.com/you/whoami

Where your whoami repo has a holden.yml:

services:
web:
image: traefik/whoami
domain: whoami.example.com
port: 80

Push, wait for Holden to pick it up, visit https://whoami.example.com.


For private repos and GHCR images, see Creating a GitHub PAT. For detailed setup, see Getting Started.