From 24dd88b5cfb2a22a41a110d73372319f994da9ec Mon Sep 17 00:00:00 2001 From: dadaloop82 Date: Tue, 10 Mar 2026 12:38:20 +0000 Subject: [PATCH] Add daily automatic database backup to GitHub - Remove data/ from .gitignore (keep WAL/SHM excluded) - Add backup.sh script: commits and pushes DB changes daily - Cron job at 3:00 AM: /var/www/html/dispensa/backup.sh - Include initial database snapshot --- .gitignore | 5 +++-- backup.sh | 18 ++++++++++++++++++ data/dispensa.db | Bin 0 -> 61440 bytes 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100755 backup.sh create mode 100644 data/dispensa.db diff --git a/.gitignore b/.gitignore index c0d34fd..b89c378 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ # Environment variables (secrets) .env -# SQLite database -data/ +# SQLite WAL/SHM temp files +data/*.db-wal +data/*.db-shm # SSL CA cert (local only) ca.crt diff --git a/backup.sh b/backup.sh new file mode 100755 index 0000000..0da5d13 --- /dev/null +++ b/backup.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Daily backup of Dispensa database to GitHub +# Runs via cron: commits and pushes data/dispensa.db + +cd /var/www/html/dispensa || exit 1 + +# Only commit if there are actual changes +if git diff --quiet data/ 2>/dev/null && git diff --cached --quiet data/ 2>/dev/null; then + # Check for untracked files in data/ + if [ -z "$(git ls-files --others --exclude-standard data/)" ]; then + exit 0 # Nothing changed + fi +fi + +DATE=$(date '+%Y-%m-%d %H:%M') +git add data/dispensa.db +git commit -m "📦 Backup database automatico - $DATE" +git push diff --git a/data/dispensa.db b/data/dispensa.db new file mode 100644 index 0000000000000000000000000000000000000000..d4793b8ad982ad492c47f2cd5e593c3c1fa089d2 GIT binary patch literal 61440 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 literal 0 HcmV?d00001