diff --git a/deploy/stc/README-STC.md b/deploy/stc/README-STC.md index 5b3c154e..4c576c94 100644 --- a/deploy/stc/README-STC.md +++ b/deploy/stc/README-STC.md @@ -45,7 +45,7 @@ Nightly cron on the VPS (`/etc/cron.d/tailchat-backup`) dumps MongoDB and tars t MinIO volume into `/root/backups/tailchat/`, keeping 14 days. Restore: stop the stack, `mongorestore` the dump into the `mongo` container, untar the -MinIO volume back into `tailchat-server_storage`, start the stack. +MinIO volume back into `tailchat_storage`, start the stack. ## Ports exposed publicly diff --git a/deploy/stc/backup.sh b/deploy/stc/backup.sh new file mode 100644 index 00000000..c9c77fa8 --- /dev/null +++ b/deploy/stc/backup.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# Nightly Tailchat backup: mongodump + MinIO volume tar, 14-day rotation. +# Installed at /opt/tailchat/backup.sh, run by /etc/cron.d/tailchat-backup. +set -eu + +TS=$(date +%Y%m%d) +DEST="/root/backups/tailchat/$TS" +mkdir -p "$DEST" + +cd /opt/tailchat +docker compose exec -T mongo mongodump --archive --gzip --db tailchat > "$DEST/mongo-tailchat.archive.gz" +docker run --rm -v tailchat_storage:/data:ro -v "$DEST":/backup alpine \ + tar czf /backup/minio-storage.tar.gz -C /data . + +# rotate: drop day-dirs older than 14 days +find /root/backups/tailchat -maxdepth 1 -mindepth 1 -type d -mtime +14 -exec rm -rf {} + + +echo "$(date -Is) backup ok: $(du -sh "$DEST" | cut -f1)"