soapbox/run.sh
Ole-Morten Duesund 14bb9f97ab Lytt på alle adresser (IPv4 og IPv6) som standard
SOAPBOX_BIND er nå tom som standard = alle adresser, så Caddy på en
annen maskin når appen over Tailscale/MagicDNS uansett om navnet løses
til v4 eller v6. Waitress bandt bare 0.0.0.0 inne i containeren, så
IPv6-tilkoblinger via pasta ble avvist; nå brukes listen="*:8080"
(dual-stack). Verifisert mot maskinens Tailscale-IPv4 og -IPv6.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 15:13:32 +02:00

69 lines
2.7 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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.
#
# Før oppstart tas en backup av datavolumet til SOAPBOX_BACKUP_DIR med
# tidsstempel i navnet; de SOAPBOX_BACKUP_KEEP nyeste beholdes (standard 5).
# Sett SOAPBOX_BACKUP_KEEP=0 for å skru av backup.
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)
envval() { grep -E "^$1=" "$ENV_FILE" | head -n1 | cut -d= -f2- || true; }
BIND="$(envval SOAPBOX_BIND)" # tom = alle adresser (v4+v6)
PORT="$(envval SOAPBOX_PORT)"; PORT="${PORT:-8080}"
VOLUME="$(envval SOAPBOX_VOLUME)"; VOLUME="${VOLUME:-soapbox-data}"
MEMORY="$(envval SOAPBOX_MEMORY)"; MEMORY="${MEMORY:-512m}"
BACKUP_DIR="$(envval SOAPBOX_BACKUP_DIR)"; BACKUP_DIR="${BACKUP_DIR:-./backups}"
BACKUP_KEEP="$(envval SOAPBOX_BACKUP_KEEP)"; BACKUP_KEEP="${BACKUP_KEEP:-5}"
IMAGE="${1:-localhost/soapbox:latest}"
backup() {
local stamp file
stamp="$(date -u +%Y%m%d-%H%M%S)"
file="$BACKUP_DIR/soapbox-data-$stamp.tar.gz"
mkdir -p "$BACKUP_DIR"
if [[ "$VOLUME" == /* ]]; then
# Bind-mount: pakk katalogen direkte
[[ -d "$VOLUME" ]] || { echo "Ingen data å sikkerhetskopiere ennå ($VOLUME)"; return; }
tar -C "$VOLUME" -czf "$file" .
else
# Navngitt volum: podman eksporterer innholdet som tar
podman volume exists "$VOLUME" || { echo "Ingen data å sikkerhetskopiere ennå ($VOLUME)"; return; }
podman volume export "$VOLUME" | gzip > "$file"
fi
echo "Backup: $file ($(du -h "$file" | cut -f1))"
# Rotasjon: behold de N nyeste (navnene sorterer kronologisk pga. tidsstempelet)
local old
old="$(find "$BACKUP_DIR" -maxdepth 1 -name "soapbox-data-*.tar.gz" | sort | head -n "-$BACKUP_KEEP" || true)"
if [[ -n "$old" ]]; then
echo "$old" | xargs -r rm -f --
echo "Slettet $(echo "$old" | wc -l) gamle backuper (beholder $BACKUP_KEEP)"
fi
}
if [[ "$BACKUP_KEEP" -gt 0 ]]; then
backup
fi
# --restart=always: podman håndterer ikke "unless-stopped" som docker gjør;
# "always" er det som faktisk starter containeren igjen (sammen med
# podman-restart.service eller en systemd-enhet for reboot).
podman run -d --replace --name soapbox \
--restart=always \
--cap-drop=all --security-opt=no-new-privileges \
--memory "$MEMORY" \
-p "${BIND:+${BIND}:}${PORT}:8080" \
-v "${VOLUME}:/data:Z" \
--env-file "$ENV_FILE" \
"$IMAGE"
echo "soapbox lytter på ${BIND:-alle adresser}:${PORT} (data i ${VOLUME})"
echo "Logger: podman logs -f soapbox"