Task 60 — Postgres backups: - deploy/backups/: backup.sh (pg_dump -Fc nightly), retain.sh (14/8/6 tiers), restore.sh, entrypoint.sh, crontab - famapp-backup Alpine service + backups volume added to deploy/compose.yaml - Restore procedure in deploy/backups/README.md Task 61 — Rate limiting on share links: - src/lib/rate-limit.ts: Edge-compatible sliding-window counter (50/min, LRU eviction) with consume(), isRateLimited(), recordFailure() exports - middleware.ts: enforces 429 with Retry-After: 60 for /s/[token] (IP + token prefix) - /s/[token]/page.tsx: tracks only failed resolveShareToken calls via recordFailure() Task 62 — Structured logging: - pino + pino-pretty installed; serverExternalPackages added to next.config.ts - src/lib/logger.ts: JSON in production, pretty in dev, level from LOG_LEVEL env - middleware.ts: structured JSON request log (method, path, status, ms, authenticated) - _core/push.ts, notify.ts, reminders.ts: console.error/log → logger.error/info Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
27 lines
948 B
Bash
27 lines
948 B
Bash
#!/bin/sh
|
|
# Restore a pg_dump (-Fc format) to a target Postgres database.
|
|
# The target DB must already exist and be empty (or you accept overwriting data).
|
|
#
|
|
# Usage:
|
|
# restore.sh <dump-file> <target-db-url>
|
|
#
|
|
# Example (inside the backup container):
|
|
# /scripts/restore.sh \
|
|
# /backups/famapp/daily/2024-06-01.dump \
|
|
# postgres://famapp:secret@famapp-db:5432/famapp
|
|
#
|
|
# Example (from the host via docker exec):
|
|
# docker exec famapp-backup-1 /scripts/restore.sh \
|
|
# /backups/famapp/daily/2024-06-01.dump \
|
|
# postgres://famapp:secret@famapp-db:5432/famapp_restore
|
|
set -eu
|
|
|
|
DUMP_FILE="${1:?Usage: restore.sh <dump-file> <target-db-url>}"
|
|
TARGET_URL="${2:?Usage: restore.sh <dump-file> <target-db-url>}"
|
|
|
|
[ -f "$DUMP_FILE" ] || { echo "[restore] ERROR: $DUMP_FILE not found"; exit 1; }
|
|
|
|
echo "[restore] $DUMP_FILE → $TARGET_URL"
|
|
pg_restore -d "$TARGET_URL" --no-owner --no-acl --exit-on-error "$DUMP_FILE"
|
|
echo "[restore] done"
|