build: add Caddyfile generator
This commit is contained in:
51
generate-caddyfile.sh
Normal file
51
generate-caddyfile.sh
Normal 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
|
||||||
Reference in New Issue
Block a user