synops/config/caddy/Caddyfile
vegard 1dd48317af Oppdater docs og config for native maskinrommet + Claude-agent
- CLAUDE.md: ny driftsmodell-seksjon, maskinrommet native, Claude-agent
- docs/infra/claude_agent.md: arkitektur, sikkerhet, drift, oppsett
- config/caddy/Caddyfile: synk fra server (host.docker.internal)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 19:24:23 +00:00

79 lines
2.4 KiB
Caddyfile

# Synops — Caddyfile
#
# Eneste tjeneste med eksponerte porter (80/443).
# Alt annet rutes internt via Docker-nettverket sidelinja-net.
# Auto-TLS via Let's Encrypt for alle domener.
# === Felles favicon-snippet ===
(favicon) {
handle /favicon.ico {
root * /srv/static
file_server
}
handle /apple-touch-icon.png {
root * /srv/static
file_server
}
handle /icon-*.png {
root * /srv/static
file_server
}
}
# === SSO ===
auth.sidelinja.org {
reverse_proxy authentik-server:9000
}
# === Sidelinja (hovedapplikasjon) ===
sidelinja.org {
import favicon
# SpacetimeDB (WebSocket)
handle_path /spacetime/* {
reverse_proxy spacetimedb:3000
}
# Podcast media (statiske filer med byte-range support)
handle_path /media/* {
root * /srv/media
file_server {
browse
}
}
# SvelteKit (frontend + SSR API)
# Aktiveres når SvelteKit-containeren er klar (fase 3)
# reverse_proxy sveltekit:3000
header Content-Type text/html
respond `<!DOCTYPE html><html><head><meta charset="utf-8"><title>sidelinja.org</title><link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="icon" href="/icon-192.png" type="image/png" sizes="192x192"><link rel="apple-touch-icon" href="/apple-touch-icon.png"></head><body><p>sidelinja.org underveis!</p></body></html>` 200
}
# === Maskinrommet API ===
api.sidelinja.org {
reverse_proxy host.docker.internal:3100
}
# === Forgejo (Git) ===
git.sidelinja.org {
reverse_proxy forgejo:3000
}
# === Synops (plattformdomene) ===
# Subdomener (api.synops.no, auth.synops.no osv.) legges til individuelt
# etter behov — HTTP-challenge fungerer per subdomain uten DNS-plugin.
synops.no {
import favicon
header Content-Type text/html
respond `<!DOCTYPE html><html><head><meta charset="utf-8"><title>synops.no</title><link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="icon" href="/icon-192.png" type="image/png" sizes="192x192"><link rel="apple-touch-icon" href="/apple-touch-icon.png"></head><body><p>synops.no underveis!</p></body></html>` 200
}
# === Vegard.info ===
vegard.info {
import favicon
header Content-Type text/html
respond `<!DOCTYPE html><html><head><meta charset="utf-8"><title>vegard.info</title><link rel="icon" href="/favicon.ico" sizes="32x32"><link rel="icon" href="/icon-192.png" type="image/png" sizes="192x192"><link rel="apple-touch-icon" href="/apple-touch-icon.png"></head><body><p>vegard.info underveis!</p></body></html>` 200
}