Astro 7 mit Tailwind 4 und Node-Adapter. Alle Seiten werden vorgerendert, der Node-Server ist dabei, damit spaeter einzelne Routen (Booking-Formular) ohne Umbau am Deployment dynamisch werden koennen. Inhalt: - Fullscreen-Hero mit freigestelltem Render, animierten Lasern und Genre-Laufband; Typografie als HTML statt eingebranntem Bildtext - About-Sektion mit Genre-Karten und Eckdaten - Impressum und Datenschutzerklaerung - Zentrale Inhaltsdatei src/data/site.ts Technik: - Selbst gehostete Schriften, keine Cookies, kein Tracking, keine externen Requests - Docker Multi-Stage (238 MB) hinter Caddy mit automatischem HTTPS, Security-Headern und IP-maskierten Logs - scripts/cutout.mjs stellt den Render ueber eine Sobel-Kantenkarte frei und entfernt eingeschlossene Hintergrundflaechen Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
58 lines
1.7 KiB
Caddyfile
58 lines
1.7 KiB
Caddyfile
{
|
|
# Mailadresse fuer Let's Encrypt (Ablaufwarnungen). Ueberschreibbar per .env
|
|
email {$ACME_EMAIL:business.djnizz@gmail.com}
|
|
}
|
|
|
|
# --- Weiterleitung www -> Apex ----------------------------------------------
|
|
# Setzt einen DNS-A-Record fuer www.djnizz.at voraus. Wenn es den nicht gibt,
|
|
# diesen Block auskommentieren, sonst versucht Caddy dauerhaft erfolglos ein
|
|
# Zertifikat dafuer zu holen.
|
|
www.{$DOMAIN:djnizz.at} {
|
|
redir https://{$DOMAIN:djnizz.at}{uri} permanent
|
|
}
|
|
|
|
# --- Hauptseite -------------------------------------------------------------
|
|
{$DOMAIN:djnizz.at} {
|
|
encode zstd gzip
|
|
|
|
header {
|
|
Strict-Transport-Security "max-age=31536000; includeSubDomains"
|
|
X-Content-Type-Options "nosniff"
|
|
X-Frame-Options "SAMEORIGIN"
|
|
Referrer-Policy "strict-origin-when-cross-origin"
|
|
Permissions-Policy "geolocation=(), microphone=(), camera=(), payment=()"
|
|
Cross-Origin-Opener-Policy "same-origin"
|
|
-Server
|
|
}
|
|
|
|
# Astro haengt einen Content-Hash an alle Assets unter /_astro/ -
|
|
# die duerfen daher unbegrenzt gecacht werden.
|
|
# ">" ersetzt den Header, statt einen zweiten danebenzustellen -
|
|
# der Node-Adapter setzt fuer gehashte Assets bereits ein Cache-Control.
|
|
@immutable path /_astro/*
|
|
header @immutable >Cache-Control "public, max-age=31536000, immutable"
|
|
|
|
reverse_proxy web:4321
|
|
|
|
log {
|
|
output file /var/log/caddy/access.log {
|
|
roll_size 10MiB
|
|
roll_keep 4
|
|
roll_keep_for 336h
|
|
}
|
|
# Client-IPs werden gekuerzt und Cookies/Auth-Header nicht mitgeloggt.
|
|
# Muss zur Datenschutzerklaerung passen.
|
|
format filter {
|
|
wrap json
|
|
fields {
|
|
request>remote_ip ip_mask {
|
|
ipv4 24
|
|
ipv6 32
|
|
}
|
|
request>headers>Cookie delete
|
|
request>headers>Authorization delete
|
|
}
|
|
}
|
|
}
|
|
}
|