Caddy-config: reverse proxy for alle Synops-domener (oppgave 1.4)
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 <noreply@anthropic.com>
This commit is contained in:
parent
2b54498d04
commit
f1e9634117
3 changed files with 77 additions and 21 deletions
53
config/caddy/Caddyfile
Normal file
53
config/caddy/Caddyfile
Normal file
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -177,37 +177,37 @@ services:
|
||||||
## 7. Caddy (Caddyfile grunnstruktur)
|
## 7. Caddy (Caddyfile grunnstruktur)
|
||||||
|
|
||||||
```caddyfile
|
```caddyfile
|
||||||
# === SSO (felles for alle domener) ===
|
# === SSO ===
|
||||||
auth.sidelinja.org {
|
auth.sidelinja.org {
|
||||||
reverse_proxy authentik:9000
|
reverse_proxy authentik-server:9000
|
||||||
}
|
}
|
||||||
|
|
||||||
# === Sidelinja (hovedapplikasjon) ===
|
# === Sidelinja (hovedapplikasjon) ===
|
||||||
sidelinja.org {
|
sidelinja.org {
|
||||||
# SvelteKit (frontend + API)
|
# SpacetimeDB (WebSocket) — handle_path stripper prefix
|
||||||
reverse_proxy sveltekit:3000
|
|
||||||
|
|
||||||
# LiveKit (WebSocket upgrade)
|
|
||||||
handle_path /livekit/* {
|
|
||||||
reverse_proxy livekit:7880
|
|
||||||
}
|
|
||||||
|
|
||||||
# SpacetimeDB (WebSocket)
|
|
||||||
handle_path /spacetime/* {
|
handle_path /spacetime/* {
|
||||||
reverse_proxy spacetimedb:3000
|
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)
|
# Podcast media (statiske filer med byte-range support)
|
||||||
handle_path /media/* {
|
handle_path /media/* {
|
||||||
root * /srv/synops/media
|
root * /srv/media
|
||||||
file_server
|
file_server
|
||||||
}
|
}
|
||||||
|
|
||||||
# Podcast access log (kun media-forespørsler)
|
# SvelteKit (frontend + SSR API) — aktiveres i fase 3
|
||||||
log {
|
# reverse_proxy sveltekit:3000
|
||||||
output file /srv/synops/logs/caddy/podcast_access.log
|
}
|
||||||
format json
|
|
||||||
}
|
# === Maskinrommet API ===
|
||||||
|
api.sidelinja.org {
|
||||||
|
# Rust/axum backend — aktiveres i fase 2
|
||||||
|
# reverse_proxy maskinrommet:3001
|
||||||
}
|
}
|
||||||
|
|
||||||
# === Forgejo (Git) ===
|
# === Forgejo (Git) ===
|
||||||
|
|
@ -217,11 +217,15 @@ git.sidelinja.org {
|
||||||
|
|
||||||
# === Vegard.info ===
|
# === Vegard.info ===
|
||||||
vegard.info {
|
vegard.info {
|
||||||
# Konfigureres når innhold er klart
|
respond "vegard.info — under construction" 200
|
||||||
respond "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
|
## 8. PostgreSQL: Initielle databaser
|
||||||
|
|
||||||
Ved første oppstart må det opprettes separate databaser og brukere for Authentik og Forgejo:
|
Ved første oppstart må det opprettes separate databaser og brukere for Authentik og Forgejo:
|
||||||
|
|
|
||||||
3
tasks.md
3
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.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.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`.
|
- [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`.
|
- [x] 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
|
|
||||||
- [ ] 1.5 Authentik: opprett OIDC-provider og applikasjon for Synops. Konfigurer redirect URIs. Ref: `docs/erfaringer/authentik_oppsett.md`.
|
- [ ] 1.5 Authentik: opprett OIDC-provider og applikasjon for Synops. Konfigurer redirect URIs. Ref: `docs/erfaringer/authentik_oppsett.md`.
|
||||||
|
|
||||||
## Fase 2: Maskinrommet — skjelett
|
## Fase 2: Maskinrommet — skjelett
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue