2026-08-26 12:36:12 +02:00
|
|
|
|
#!/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.
|
2026-08-26 14:41:16 +02:00
|
|
|
|
#
|
|
|
|
|
|
# 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.
|
2026-08-26 12:36:12 +02:00
|
|
|
|
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)
|
2026-08-26 14:41:16 +02:00
|
|
|
|
envval() { grep -E "^$1=" "$ENV_FILE" | head -n1 | cut -d= -f2- || true; }
|
2026-08-26 15:13:32 +02:00
|
|
|
|
BIND="$(envval SOAPBOX_BIND)" # tom = alle adresser (v4+v6)
|
2026-08-26 14:41:16 +02:00
|
|
|
|
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}"
|
2026-08-26 12:36:12 +02:00
|
|
|
|
IMAGE="${1:-localhost/soapbox:latest}"
|
|
|
|
|
|
|
2026-08-26 14:41:16 +02:00
|
|
|
|
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).
|
2026-08-26 12:36:12 +02:00
|
|
|
|
podman run -d --replace --name soapbox \
|
2026-08-26 14:41:16 +02:00
|
|
|
|
--restart=always \
|
2026-08-26 14:07:14 +02:00
|
|
|
|
--cap-drop=all --security-opt=no-new-privileges \
|
|
|
|
|
|
--memory "$MEMORY" \
|
2026-08-26 15:13:32 +02:00
|
|
|
|
-p "${BIND:+${BIND}:}${PORT}:8080" \
|
2026-08-26 12:36:12 +02:00
|
|
|
|
-v "${VOLUME}:/data:Z" \
|
|
|
|
|
|
--env-file "$ENV_FILE" \
|
|
|
|
|
|
"$IMAGE"
|
|
|
|
|
|
|
2026-08-26 15:13:32 +02:00
|
|
|
|
echo "soapbox lytter på ${BIND:-alle adresser}:${PORT} (data i ${VOLUME})"
|
2026-08-26 12:36:12 +02:00
|
|
|
|
echo "Logger: podman logs -f soapbox"
|