soapbox/run.sh
Ole-Morten Duesund 4d9b6f9d90 run.sh: automatisk backup med rotasjon, og --restart=always
Før hver oppstart eksporteres datavolumet til
SOAPBOX_BACKUP_DIR/soapbox-data-<UTC-tidsstempel>.tar.gz; de
SOAPBOX_BACKUP_KEEP nyeste beholdes (standard 5, 0 = av). Bind-mounts
pakkes med tar, navngitte volum med podman volume export.

--restart unless-stopped byttet til --restart=always i run.sh og
compose.yaml: podman håndterer ikke unless-stopped som docker.

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

68 lines
2.6 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; }
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 "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"