diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..c75afd2 --- /dev/null +++ b/.env.example @@ -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 diff --git a/.gitignore b/.gitignore index 61d0727..110b8ce 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ data/ dist/ .playwright-mcp/ *.png +.env diff --git a/README.md b/README.md index 4c93888..ab0c18b 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,9 @@ Tester: `uv run pytest`. Lint: `uv run ruff check . && uv run ruff format .` ## 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 | |---|---|---| | `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 ```sh -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)" \ - -t soapbox . -podman compose up -d # se compose.yaml +cp .env.example .env # sett SOAPBOX_SITE_URL og hovedbruker +./build.sh # bygger localhost/soapbox:latest med build-metadata +./run.sh # podman run --replace med .env, port 127.0.0.1:8080 +# eller: podman compose up -d ``` +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 prefikset – appen monteres selv under `SOAPBOX_BASE_PATH`. diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..0195c14 --- /dev/null +++ b/build.sh @@ -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" diff --git a/compose.yaml b/compose.yaml index c41af7d..8784b20 100644 --- a/compose.yaml +++ b/compose.yaml @@ -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: soapbox: image: localhost/soapbox:latest container_name: soapbox restart: unless-stopped ports: - - "127.0.0.1:8080:8080" + - "127.0.0.1:${SOAPBOX_PORT:-8080}:8080" volumes: - - soapbox-data:/data - environment: - SOAPBOX_SITE_URL: https://blog.domene.no - 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å + - ${SOAPBOX_VOLUME:-soapbox-data}:/data:Z + env_file: + - .env volumes: soapbox-data: diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..74e6d00 --- /dev/null +++ b/run.sh @@ -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"