#!/usr/bin/env bash set -euo pipefail TS="$(date +%Y%m%d_%H%M%S)" BK="/root/aza-app/backups/woocommerce_period_sync_env_deploy_${TS}" mkdir -p "${BK}" cp -a /root/aza-app/data/stripe_webhook.sqlite "${BK}/" cp -a /root/aza-app/admin_routes.py "${BK}/" test -f /root/aza-app/aza_wc_period_sync.py && cp -a /root/aza-app/aza_wc_period_sync.py "${BK}/" || true cp -a /root/aza-app/deploy/.env "${BK}/.env.backup" { echo "Rollback (als root auf diesem Server):" echo "" echo "cd /root/aza-app/deploy" echo "docker compose stop aza-api" echo "" echo "cp \"${BK}/stripe_webhook.sqlite\" /root/aza-app/data/stripe_webhook.sqlite" echo "cp \"${BK}/admin_routes.py\" /root/aza-app/admin_routes.py" if test -f "${BK}/aza_wc_period_sync.py"; then echo "cp \"${BK}/aza_wc_period_sync.py\" /root/aza-app/aza_wc_period_sync.py" fi echo "cp \"${BK}/.env.backup\" /root/aza-app/deploy/.env" echo "" echo "docker compose build --no-cache aza-api" echo "docker compose up -d --force-recreate aza-api" } > "${BK}/README_RESTORE.txt" python3 << 'PY' from pathlib import Path patch_path = Path("/tmp/aza_woo_patch.env") text = patch_path.read_text(encoding="utf-8") vars_to_set = {} for line in text.splitlines(): line = line.strip() if not line or line.startswith("#") or "=" not in line: continue k, v = line.split("=", 1) vars_to_set[k.strip()] = v.strip() env_path = Path("/root/aza-app/deploy/.env") lines = env_path.read_text(encoding="utf-8").splitlines() if env_path.exists() else [] keys = set(vars_to_set) new_lines = [] seen = set() for line in lines: t = line.strip() if t and not t.startswith("#") and "=" in t: k = t.split("=", 1)[0].strip() if k in keys: new_lines.append("%s=%s" % (k, vars_to_set[k])) seen.add(k) continue new_lines.append(line) for k in sorted(keys - seen): new_lines.append("%s=%s" % (k, vars_to_set[k])) env_path.write_text("\n".join(new_lines) + "\n", encoding="utf-8") patch_path.unlink() PY chmod 600 /root/aza-app/deploy/.env echo "BACKUP_PATH=${BK}"