Files
hnefatafl/deploy/Caddyfile.tmpl
T
Eric WagonerandClaude Opus 5.5 010f99aa9c Hnefatafl moves to the shared hall host
The new kit setup, its own Caddy site file and access log, and the
host's address everywhere. The old droplet forwards to hall until the
A record moves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jm2auWk6RP71CjaAb4FMoG
2026-09-25 16:56:33 -04:00

43 lines
1.1 KiB
Cheetah

__HOST__ {
root * /opt/hnefatafl/build
encode gzip zstd
header {
Strict-Transport-Security "max-age=31536000"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
Referrer-Policy "no-referrer"
}
log {
output file /var/lib/caddy/hnefatafl-access.log {
roll_size 10MiB
roll_keep 30
}
}
# The game server answers the API and the websocket; a deploy restarts it for
# a few seconds, and the proxy holds requests that land in that gap.
@game path /api/* /ws
handle @game {
reverse_proxy localhost:8789 {
lb_try_duration 30s
lb_try_interval 250ms
}
}
# Everything else is the static site. SvelteKit writes each route as
# <route>.html, so /rules is tried as /rules.html before falling back to the
# app shell, which serves the rooms. Hashed assets under _app/immutable are
# cached for a year; every other response is revalidated so a deploy shows
# up on the next load.
handle {
@immutable path /_app/immutable/*
header @immutable Cache-Control "public, max-age=31536000, immutable"
@mutable not path /_app/immutable/*
header @mutable Cache-Control "no-cache"
try_files {path} {path}.html /index.html
file_server
}
}