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:
docker compose up -dThen add an app:
holden app add whoami --repo https://github.com/you/whoamiWhere your whoami repo has a holden.yml:
services: web: image: traefik/whoami domain: whoami.example.com port: 80Push, 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.