#!/usr/bin/env bash # پشتیبان‌گیری روزانه — دیتابیس PostgreSQL (همه محتوای سایت) و تصاویر MinIO. # # اجرا: bash scripts/backup.sh # زمان‌بندی: cron (لینوکس) یا Task Scheduler (ویندوز)، مثلا هر شب ساعت ۳: # 0 3 * * * cd /path/to/aramesh-backend && bash scripts/backup.sh >> backups/backup.log 2>&1 # # نگهداری: فایل‌های قدیمی‌تر از RETENTION_DAYS (پیش‌فرض ۱۴) حذف می‌شوند. set -euo pipefail cd "$(dirname "$0")/.." RETENTION_DAYS="${RETENTION_DAYS:-14}" STAMP="$(date +%Y%m%d-%H%M%S)" mkdir -p backups # متغیرهای .env (برای MINIO_ROOT_*) در دسترس قرار می‌گیرند if [ -f .env ]; then set -a # shellcheck disable=SC1091 . ./.env set +a fi echo "[backup] $STAMP" # ۱) دیتابیس — همه متن‌ها، مقاله‌ها و تنظیمات سایت DB_FILE="backups/db-${STAMP}.sql.gz" docker compose exec -T db pg_dump -U aramesh arameshplaza | gzip > "$DB_FILE" echo "[backup] db: $DB_FILE ($(du -h "$DB_FILE" | cut -f1))" # ۲) تصاویر MinIO — باکت aramesh-media docker compose run --rm -v "$(pwd)/backups:/backups" --entrypoint sh mc -c " mc alias set local http://minio:9000 \"\$MINIO_ROOT_USER\" \"\$MINIO_ROOT_PASSWORD\" >/dev/null && mc mirror --overwrite local/aramesh-media /backups/images-${STAMP} " echo "[backup] images: backups/images-${STAMP}" # ۳) پاک‌سازی نسخه‌های قدیمی‌تر find backups -name 'db-*.sql.gz' -mtime "+${RETENTION_DAYS}" -delete find backups -maxdepth 1 -type d -name 'images-*' -mtime "+${RETENTION_DAYS}" -exec rm -rf {} + echo "[backup] پاک‌سازی نسخه‌های قدیمی‌تر از ${RETENTION_DAYS} روز انجام شد" echo "[backup] ✔ تمام شد"