From f1e9634117482f49ee8cdd252131ae11adadd084 Mon Sep 17 00:00:00 2001 From: vegard Date: Tue, 17 Mar 2026 12:11:22 +0100 Subject: [PATCH] Caddy-config: reverse proxy for alle Synops-domener (oppgave 1.4) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Oppretter Caddyfile med: - auth.sidelinja.org → Authentik SSO - sidelinja.org → SpacetimeDB (/spacetime/*), media (/media/*), SvelteKit (placeholder) - api.sidelinja.org → maskinrommet (placeholder, 503 til fase 2) - git.sidelinja.org → Forgejo - vegard.info → placeholder Auto-TLS via Let's Encrypt. Tjenester som ikke er deployet ennå bruker respond-placeholders — kommentert reverse_proxy aktiveres når containerne er klare. Verifisert på server: alle domener svarer med korrekt status. Co-Authored-By: Claude Opus 4.6 --- config/caddy/Caddyfile | 53 ++++++++++++++++++++++++++++++++++++++++ docs/setup/produksjon.md | 42 +++++++++++++++++-------------- tasks.md | 3 +-- 3 files changed, 77 insertions(+), 21 deletions(-) create mode 100644 config/caddy/Caddyfile diff --git a/config/caddy/Caddyfile b/config/caddy/Caddyfile new file mode 100644 index 0000000..7128171 --- /dev/null +++ b/config/caddy/Caddyfile @@ -0,0 +1,53 @@ +# 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. + +# === SSO === +auth.sidelinja.org { + reverse_proxy authentik-server:9000 +} + +# === Sidelinja (hovedapplikasjon) === +sidelinja.org { + # 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 + + # Placeholder til SvelteKit er deployet + respond "sidelinja.org — Synops v2 under utvikling" 200 +} + +# === Maskinrommet API === +api.sidelinja.org { + # Rust/axum backend (fase 2) + # Aktiveres når maskinrommet-containeren er klar + # reverse_proxy maskinrommet:3001 + + # Placeholder til maskinrommet er deployet + respond "api.sidelinja.org — ikke tilgjengelig ennå" 503 +} + +# === Forgejo (Git) === +git.sidelinja.org { + reverse_proxy forgejo:3000 +} + +# === Vegard.info === +vegard.info { + respond "vegard.info — under construction" 200 +} diff --git a/docs/setup/produksjon.md b/docs/setup/produksjon.md index 97713f1..ec7246a 100644 --- a/docs/setup/produksjon.md +++ b/docs/setup/produksjon.md @@ -177,37 +177,37 @@ services: ## 7. Caddy (Caddyfile grunnstruktur) ```caddyfile -# === SSO (felles for alle domener) === +# === SSO === auth.sidelinja.org { - reverse_proxy authentik:9000 + reverse_proxy authentik-server:9000 } # === Sidelinja (hovedapplikasjon) === sidelinja.org { - # SvelteKit (frontend + API) - reverse_proxy sveltekit:3000 - - # LiveKit (WebSocket upgrade) - handle_path /livekit/* { - reverse_proxy livekit:7880 - } - - # SpacetimeDB (WebSocket) + # SpacetimeDB (WebSocket) — handle_path stripper prefix handle_path /spacetime/* { reverse_proxy spacetimedb:3000 } + # LiveKit (WebSocket upgrade) — aktiveres i fase 11 + # handle_path /livekit/* { + # reverse_proxy livekit:7880 + # } + # Podcast media (statiske filer med byte-range support) handle_path /media/* { - root * /srv/synops/media + root * /srv/media file_server } - # Podcast access log (kun media-forespørsler) - log { - output file /srv/synops/logs/caddy/podcast_access.log - format json - } + # SvelteKit (frontend + SSR API) — aktiveres i fase 3 + # reverse_proxy sveltekit:3000 +} + +# === Maskinrommet API === +api.sidelinja.org { + # Rust/axum backend — aktiveres i fase 2 + # reverse_proxy maskinrommet:3001 } # === Forgejo (Git) === @@ -217,11 +217,15 @@ git.sidelinja.org { # === Vegard.info === vegard.info { - # Konfigureres når innhold er klart - respond "Under construction" 200 + respond "vegard.info — under construction" 200 } ``` +**Merk:** Tjenester som ikke er deployet ennå er kommentert ut. Faktisk Caddyfile +ligger i `config/caddy/Caddyfile` i repoet og synkes til `/srv/synops/config/caddy/Caddyfile` +på serveren. Caddy bruker placeholders (`respond`) for tjenester som ikke er klare. +Mediefiler i Caddy-containeren er montert som `/srv/synops/media:/srv/media:ro`. + ## 8. PostgreSQL: Initielle databaser Ved første oppstart må det opprettes separate databaser og brukere for Authentik og Forgejo: diff --git a/tasks.md b/tasks.md index 85c967a..2cde831 100644 --- a/tasks.md +++ b/tasks.md @@ -46,8 +46,7 @@ Uavhengige faser kan fortsatt plukkes. - [x] 1.1 PostgreSQL schema: opprett database `synops`, enums (`visibility`, `access_level`), tabeller (`nodes`, `edges`, `node_access`, `auth_identities`) med indekser. Kjør på server via SSH. Ref: `docs/primitiver/nodes.md`, `docs/primitiver/edges.md`, `docs/retninger/bruker_ikke_workspace.md`. - [x] 1.2 Seed-data: opprett Vegards brukernode (`node_kind='person'`, `title='Vegard'`) og `auth_identities`-rad. Opprett Sidelinja samlings-node og `owner`-edge fra Vegard. - [x] 1.3 SpacetimeDB modul: opprett Rust-modul med `nodes` og `edges`-tabeller som speiler PG-skjema. Grunnleggende reducers for CRUD. Deploy til server. Ref: `docs/retninger/datalaget.md`, `docs/erfaringer/spacetimedb_integrasjon.md`. -- [~] 1.4 Caddy-config: reverse proxy for maskinrommet (api.sidelinja.org), SpacetimeDB, og SvelteKit. Auto-TLS. Ref: `docs/setup/produksjon.md`. - > Påbegynt: 2026-03-17T12:06 +- [x] 1.4 Caddy-config: reverse proxy for maskinrommet (api.sidelinja.org), SpacetimeDB, og SvelteKit. Auto-TLS. Ref: `docs/setup/produksjon.md`. - [ ] 1.5 Authentik: opprett OIDC-provider og applikasjon for Synops. Konfigurer redirect URIs. Ref: `docs/erfaringer/authentik_oppsett.md`. ## Fase 2: Maskinrommet — skjelett