Legg til build.sh, run.sh og .env.example

build.sh bygger imaget med build-dato og git-revisjon, run.sh starter
containeren idempotent (podman run --replace) med innstillinger fra .env.
compose.yaml leser nå samme .env. Alle variabler har standardverdier;
.env.example dokumenterer dem.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
This commit is contained in:
Ole-Morten Duesund 2026-08-26 12:36:12 +02:00
commit 5f6fc252a7
6 changed files with 89 additions and 15 deletions

30
.env.example Normal file
View file

@ -0,0 +1,30 @@
# Kopier til .env og juster. Alle verdier har fornuftige standarder;
# du trenger strengt tatt bare SOAPBOX_SITE_URL og hovedbrukeren.
# .env leses av run.sh (podman --env-file) og compose.yaml.
# Absolutt URL til bloggens rot. Brukes bare i feed.xml og for Secure-cookie
# (https → Secure). Ta med sub-path hvis du har en.
SOAPBOX_SITE_URL=https://blog.domene.no
# Sub-path bloggen ligger under bak Caddy, f.eks. /blog. Tom = rot.
SOAPBOX_BASE_PATH=
# Tema: mappe under soapbox/themes/
SOAPBOX_THEME=green
# Lengste side på opplastede bilder (px). EXIF fjernes alltid.
SOAPBOX_MAX_IMAGE_PX=2000
# Hovedbruker opprettes ved første start, ignoreres når en eier finnes.
# Bytt passord i admin etterpå og fjern gjerne linjene her.
SOAPBOX_OWNER_USER=olemd
SOAPBOX_OWNER_PASSWORD=bytt-meg-naa
# Valgfritt: overstyr cookie-nøkkelen. Standard: autogenerert i /data/secret_key.
#SOAPBOX_SECRET_KEY=
# --- Bare for run.sh / compose (ikke lest av appen) ---
# Lokal port Caddy proxyer til. Bindes kun til 127.0.0.1.
SOAPBOX_PORT=8080
# Podman-volum (navn) eller katalog (absolutt sti) for /data
SOAPBOX_VOLUME=soapbox-data

1
.gitignore vendored
View file

@ -7,3 +7,4 @@ data/
dist/ dist/
.playwright-mcp/ .playwright-mcp/
*.png *.png
.env

View file

@ -40,6 +40,9 @@ Tester: `uv run pytest`. Lint: `uv run ruff check . && uv run ruff format .`
## Konfigurasjon (miljøvariabler) ## Konfigurasjon (miljøvariabler)
Se `.env.example` for en kommentert mal. Alt har standardverdier; kun `SOAPBOX_SITE_URL` og
hovedbrukeren bør settes.
| Variabel | Standard | Beskrivelse | | Variabel | Standard | Beskrivelse |
|---|---|---| |---|---|---|
| `SOAPBOX_DATA_DIR` | `./data` (`/data` i container) | Alt persistent | | `SOAPBOX_DATA_DIR` | `./data` (`/data` i container) | Alt persistent |
@ -53,13 +56,15 @@ Tester: `uv run pytest`. Lint: `uv run ruff check . && uv run ruff format .`
## Container og Caddy ## Container og Caddy
```sh ```sh
BUILDAH_FORMAT=docker podman build \ cp .env.example .env # sett SOAPBOX_SITE_URL og hovedbruker
--build-arg BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ ./build.sh # bygger localhost/soapbox:latest med build-metadata
--build-arg GIT_REVISION="$(git describe --always --dirty)" \ ./run.sh # podman run --replace med .env, port 127.0.0.1:8080
-t soapbox . # eller: podman compose up -d
podman compose up -d # se compose.yaml
``` ```
Ny versjon: `git pull && ./build.sh && ./run.sh`. Data ligger i podman-volumet `soapbox-data`
(`podman volume inspect soapbox-data` viser stien).
Caddy er ren reverse proxy, se `Caddyfile.example`. Ved sub-path skal Caddy **ikke** strippe 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 `SOAPBOX_BASE_PATH`.

14
build.sh Executable file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bash
# Bygger container-imaget localhost/soapbox:latest med build-metadata
# (tidsstempel og git-revisjon, med -dirty hvis arbeidstreet har endringer).
set -euo pipefail
cd "$(dirname "$0")"
TAG="${1:-localhost/soapbox:latest}"
BUILDAH_FORMAT=docker podman build \
--build-arg BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
--build-arg GIT_REVISION="$(git describe --always --dirty 2>/dev/null || echo unknown)" \
-t "$TAG" .
echo "Bygde $TAG"

View file

@ -1,19 +1,15 @@
# podman-compose up -d (eller: podman compose up -d) # Alternativ til run.sh: podman compose up -d
# Leser innstillinger fra .env (kopier .env.example).
services: services:
soapbox: soapbox:
image: localhost/soapbox:latest image: localhost/soapbox:latest
container_name: soapbox container_name: soapbox
restart: unless-stopped restart: unless-stopped
ports: ports:
- "127.0.0.1:8080:8080" - "127.0.0.1:${SOAPBOX_PORT:-8080}:8080"
volumes: volumes:
- soapbox-data:/data - ${SOAPBOX_VOLUME:-soapbox-data}:/data:Z
environment: env_file:
SOAPBOX_SITE_URL: https://blog.domene.no - .env
SOAPBOX_BASE_PATH: ""
SOAPBOX_THEME: green
# Settes kun første gang; ignoreres når en hovedbruker finnes.
SOAPBOX_OWNER_USER: olemd
SOAPBOX_OWNER_PASSWORD: bytt-meg-nå
volumes: volumes:
soapbox-data: soapbox-data:

28
run.sh Executable file
View file

@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Starter (eller erstatter) soapbox-containeren med innstillinger fra .env.
# Idempotent: kjør på nytt etter build.sh for å rulle ut nytt image.
set -euo pipefail
cd "$(dirname "$0")"
ENV_FILE="${ENV_FILE:-.env}"
if [[ ! -f "$ENV_FILE" ]]; then
echo "Fant ikke $ENV_FILE kopier .env.example til .env og juster." >&2
exit 1
fi
# Verdier som bare gjelder for podman-kjøringen (ikke appen)
PORT="$(grep -E '^SOAPBOX_PORT=' "$ENV_FILE" | cut -d= -f2- || true)"
VOLUME="$(grep -E '^SOAPBOX_VOLUME=' "$ENV_FILE" | cut -d= -f2- || true)"
PORT="${PORT:-8080}"
VOLUME="${VOLUME:-soapbox-data}"
IMAGE="${1:-localhost/soapbox:latest}"
podman run -d --replace --name soapbox \
--restart unless-stopped \
-p "127.0.0.1:${PORT}:8080" \
-v "${VOLUME}:/data:Z" \
--env-file "$ENV_FILE" \
"$IMAGE"
echo "soapbox kjører på http://127.0.0.1:${PORT}/ (data i ${VOLUME})"
echo "Logger: podman logs -f soapbox"