24 lines
1.2 KiB
Bash
Executable File
24 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# retoor <retoor@molodetz.nl>
|
|
set -euo pipefail
|
|
SRC="${1:-/var/lib/molodetz}"
|
|
DEST=/var/lib/molodetz-staging
|
|
WORK="$(mktemp -d)"
|
|
trap 'sudo -n rm -rf "$WORK"' EXIT
|
|
test -f "$SRC/molodetz.db" || { echo "no database at $SRC/molodetz.db"; exit 1; }
|
|
test -d "$DEST" || { echo "no staging data dir at $DEST"; exit 1; }
|
|
sudo -n python3 -c "import sqlite3; s = sqlite3.connect('$SRC/molodetz.db'); d = sqlite3.connect('$WORK/molodetz.db'); s.backup(d); s.close(); d.close()"
|
|
for sub in uploads keys seo_reports; do
|
|
if [ -d "$SRC/$sub" ]; then sudo -n cp -a "$SRC/$sub" "$WORK/"; fi
|
|
done
|
|
CHECK="$(sudo -n python3 -c "import sqlite3; c = sqlite3.connect('file:$WORK/molodetz.db?mode=ro', uri=True); print(c.execute('pragma integrity_check').fetchone()[0])")"
|
|
test "$CHECK" = "ok" || { echo "snapshot integrity check failed: $CHECK"; exit 1; }
|
|
cd "$(dirname "$0")/.."
|
|
docker compose stop web
|
|
sudo -n rm -rf "$DEST/molodetz.db-wal" "$DEST/molodetz.db-shm" "$DEST/molodetz.db" "$DEST/uploads" "$DEST/keys" "$DEST/seo_reports"
|
|
sudo -n cp -a "$WORK/." "$DEST/"
|
|
docker compose up -d web
|
|
for i in $(seq 1 60); do curl -fs http://127.0.0.1:19847/health >/dev/null && break; sleep 1; done
|
|
curl -fs http://127.0.0.1:19847/health
|
|
echo "staging refreshed from $SRC"
|