From 73d1e46467e74f17d469fb47a29022e7c75da17c Mon Sep 17 00:00:00 2001 From: Ole-Morten Duesund Date: Wed, 26 Aug 2026 15:04:13 +0200 Subject: [PATCH] Utled SOAPBOX_BASE_PATH fra stien i SOAPBOX_SITE_URL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://domene.no/blog gir automatisk base-path /blog. SOAPBOX_BASE_PATH beholdes kun som overstyring (tom verdi) for proxyer som stripper prefikset. Dokumentasjon og Caddyfile-eksempel oppdatert; README hadde også utdatert slug-eksempel og beskrivelse av SITE_URL. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR --- .env.example | 6 +++--- Caddyfile.example | 4 ++-- README.md | 12 ++++++------ soapbox/config.py | 9 +++++++-- 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/.env.example b/.env.example index 4d651af..80a481b 100644 --- a/.env.example +++ b/.env.example @@ -12,9 +12,9 @@ # Må oppdateres og containeren startes på nytt hvis bloggen flyttes. SOAPBOX_SITE_URL=https://blog.domene.no -# Sub-path bloggen ligger under bak Caddy, f.eks. /blog. Tom = rot. -# Må stemme med stien i SOAPBOX_SITE_URL. -SOAPBOX_BASE_PATH= +# Sub-path utledes automatisk fra SOAPBOX_SITE_URL (…/blog → /blog). +# Sett denne bare hvis proxyen stripper prefikset før appen (da: tom verdi). +#SOAPBOX_BASE_PATH= # Standardtema før noe er valgt i admin. Valget lagres i content/site.toml. # Egne temaer: /data/content/themes// (følger med i git og backup). diff --git a/Caddyfile.example b/Caddyfile.example index ff0474c..40b783b 100644 --- a/Caddyfile.example +++ b/Caddyfile.example @@ -1,10 +1,10 @@ -# Eksempel 1: bloggen på et eget domene (SOAPBOX_BASE_PATH tom) +# Eksempel 1: bloggen på et eget domene (SOAPBOX_SITE_URL=https://blog.domene.no) blog.domene.no { encode zstd gzip reverse_proxy localhost:8080 } -# Eksempel 2: bloggen under en sub-path (SOAPBOX_BASE_PATH=/blog). +# Eksempel 2: bloggen under en sub-path (SOAPBOX_SITE_URL=https://annet-domene.com/blog). # Appen forventer å få hele stien inkl. /blog, så ingen strip_prefix her. annet-domene.com { encode zstd gzip diff --git a/README.md b/README.md index 0406582..6fc2d3d 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ data/ └── secret_key cookie-signering (genereres automatisk) ``` -* **Slug** lages av tittelen (`Grønt er skjønt` → `groent-er-skjoent`). Den følger tittelen så +* **Slug** lages av tittelen (`Grønt er skjønt` → `grønt-er-skjønt`). Den følger tittelen så lenge innlegget er utkast, og fryses ved publisering så lenker aldri brekker. * **Alle interne lenker er relative.** Malene regner ut `../` ut fra sidens dybde, og absolutte lenker du skriver i Markdown (`/annet-innlegg/`) skrives om. Derfor fungerer samme `public/` @@ -47,8 +47,8 @@ hovedbrukeren bør settes. | Variabel | Standard | Beskrivelse | |---|---|---| | `SOAPBOX_DATA_DIR` | `./data` (`/data` i container) | Alt persistent | -| `SOAPBOX_BASE_PATH` | `` | `/blog` hvis bloggen ligger under en sub-path | -| `SOAPBOX_SITE_URL` | `http://localhost:8080` | Absolutt URL til rot, brukes **bare** i `feed.xml` | +| `SOAPBOX_BASE_PATH` | stien i `SOAPBOX_SITE_URL` | Overstyring, kun hvis proxyen stripper prefikset | +| `SOAPBOX_SITE_URL` | `http://localhost:8080` | Absolutt URL til rot inkl. sub-path; brukes i Open Graph, feed, sitemap og til å utlede base-path | | `SOAPBOX_THEME` | `green` | Mappe under `soapbox/themes/` | | `SOAPBOX_MAX_IMAGE_PX` | `2000` | Lengste side på opplastede bilder | | `SOAPBOX_SECRET_KEY` | autogenerert | Overstyr hvis du vil ha nøkkelen utenfor volumet | @@ -71,7 +71,7 @@ Ny versjon: `git pull && ./build.sh && ./run.sh`. Data ligger i podman-volumet ` nyeste (standard 5). Gjenopprett med `podman volume import soapbox-data `. Caddy er ren reverse proxy, se `Caddyfile.example`. Ved sub-path skal Caddy **ikke** strippe -prefikset – appen monteres selv under `SOAPBOX_BASE_PATH`. +prefikset – appen monteres selv under stien fra `SOAPBOX_SITE_URL`. ## Flytte bloggen (nytt domene og/eller sub-path) @@ -92,8 +92,8 @@ podman volume export soapbox-data | ssh ny-server 'podman volume import soapbox- git clone gammel-server:/sti/til/data/content ./data/content ``` -Deretter, uansett metode: sett `SOAPBOX_SITE_URL` og eventuelt `SOAPBOX_BASE_PATH` til de nye -verdiene og start. Siden bygges på nytt ved oppstart. +Deretter, uansett metode: sett `SOAPBOX_SITE_URL` til den nye adressen (sub-path utledes +derfra) og start. Siden bygges på nytt ved oppstart. ## Tema diff --git a/soapbox/config.py b/soapbox/config.py index 449c992..9c5c03d 100644 --- a/soapbox/config.py +++ b/soapbox/config.py @@ -13,6 +13,7 @@ import secrets import tomllib from dataclasses import dataclass, field from pathlib import Path +from urllib.parse import urlsplit @dataclass @@ -100,8 +101,12 @@ def load_config(env: dict[str, str] | None = None) -> Config: key_file.write_text(secret) key_file.chmod(0o600) - base_path = _normalize_base_path(env.get("SOAPBOX_BASE_PATH", "")) - site_url = env.get("SOAPBOX_SITE_URL", "http://localhost:8080" + base_path).rstrip("/") + # Base-path utledes fra stien i SOAPBOX_SITE_URL (https://x.no/blog → /blog). + # SOAPBOX_BASE_PATH er kun en overstyring for oppsett der proxyen stripper + # prefikset før forespørselen når appen. + site_url = env.get("SOAPBOX_SITE_URL", "http://localhost:8080").rstrip("/") + explicit = env.get("SOAPBOX_BASE_PATH") + base_path = _normalize_base_path(explicit if explicit is not None else urlsplit(site_url).path) cfg = Config( data_dir=data_dir,