#!/usr/bin/env bash # ========================================================================== # Create a restorable backup: a database dump + the uploaded files, in the # format the entrypoint's restore-on-deploy understands. # # Run it INSIDE the running container, e.g.: # docker compose exec flarum backup.sh # writes to /restore (mounted) # docker compose exec flarum backup.sh /tmp/out # or a directory you choose # # Produces: /database.sql.gz and /storage.tar.gz # To restore: place those two files in ./restore on a FRESH deploy (empty data # volume) and `docker compose up` — they're imported instead of a fresh install. # ========================================================================== set -eu OUT="${1:-/restore}" mkdir -p "$OUT" echo "[+] Dumping database '${DB_NAME}'..." mysqldump --no-tablespaces --single-transaction \ -h"${DB_HOST}" -u"${DB_USER}" -p"${DB_PASS}" "${DB_NAME}" \ | gzip > "$OUT/database.sql.gz" echo "[+] Archiving uploaded files (storage + public/assets)..." tar -czf "$OUT/storage.tar.gz" -C /var/www/html storage public/assets echo "[+] Backup complete:" ls -lh "$OUT/database.sql.gz" "$OUT/storage.tar.gz" echo "[+] Restore: put both files in ./restore on a fresh deploy, then 'docker compose up -d'."