build: add Caddyfile generator

This commit is contained in:
m
2026-03-29 11:56:57 +00:00
parent 870e0c4502
commit 7163137f64

51
generate-caddyfile.sh Normal file
View File

@@ -0,0 +1,51 @@
#!/bin/bash
# Generate Caddyfile from sites/*/site.yaml
# Reads domain and aliases from each site config, outputs Caddyfile to stdout
set -euo pipefail
SITES_DIR="${1:-sites}"
# Global options - disable automatic HTTPS (Traefik handles TLS)
cat <<'HEADER'
{
auto_https off
}
HEADER
for site_dir in "$SITES_DIR"/*/; do
[ -f "$site_dir/site.yaml" ] || continue
domain=$(basename "$site_dir")
# Read aliases from site.yaml
aliases=""
if command -v yq &>/dev/null; then
aliases=$(yq -r '.aliases // [] | .[]' "$site_dir/site.yaml" 2>/dev/null || true)
fi
# Build host list
hosts="$domain"
if [ -n "$aliases" ]; then
for alias in $aliases; do
hosts="$hosts, $alias"
done
fi
cat <<EOF
:80 {
@${domain//[.-]/_} host ${hosts}
handle @${domain//[.-]/_} {
root * /srv/${domain}
file_server
}
}
EOF
done
# Append catch-all at the end
cat <<'FOOTER'
:80 {
respond "Not Found" 444
}
FOOTER