Deployment
sitegen can be deployed as a container, on Kubernetes, or as a static site on GitHub Pages.
Docker
docker run --rm \
-v ./content:/content:ro \
-p 8080:8080 \
ghcr.io/qrkourier/sitegen:latest \
serve -src /content -out /docs -addr :8080
Docker Compose
docker compose up
Docker Compose loads .env automatically for optional TLS and OpenZiti credentials.
Several Compose override files are available:
| Override | Use case |
|---|---|
compose.dev.yaml |
Local build from source |
compose.watchtower.yaml |
Published image with auto-update |
compose.zrok.yaml |
Public share via zrok overlay |
compose.local.yaml |
OpenZiti overlay, no TCP |
zrok
Serve via a zrok public share — no VPS or port forwarding needed:
docker compose -f compose.yaml -f compose.zrok.yaml up
Set ZROK2_ENABLE_TOKEN in .env. The container auto-enables the zrok environment on first start and prints the public URL.
Kubernetes
Kustomize-ready manifests are provided:
kubectl create configmap sitegen-content \
--from-file=content/ -n sitegen
kubectl apply -k deploy/kubernetes/
GitHub Pages
The repository includes a GitHub Actions workflow that builds the site and deploys to Pages on every push to main.
Optional TLS
Set three environment variables to enable automatic ACME TLS:
| Variable | Purpose |
|---|---|
DNS_SAN |
Domain name for the certificate |
CLOUDFLARE_API_KEY |
Cloudflare API token (DNS edit) |
TLS_PRIVKEY |
Base64-encoded PEM private key |
The certificate is cached in cert.pem and renewed automatically when within 30 days of expiry.