Compare commits
2 Commits
7b383dd982
...
0c4cc815be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c4cc815be | ||
|
|
58475d9cba |
@@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
# nuzlocke-tracker-48ds
|
# nuzlocke-tracker-48ds
|
||||||
title: Database backup strategy
|
title: Database backup strategy
|
||||||
status: todo
|
status: completed
|
||||||
type: task
|
type: task
|
||||||
|
priority: normal
|
||||||
created_at: 2026-02-09T15:30:55Z
|
created_at: 2026-02-09T15:30:55Z
|
||||||
updated_at: 2026-02-09T15:30:55Z
|
updated_at: 2026-02-10T10:55:15Z
|
||||||
parent: nuzlocke-tracker-ahza
|
parent: nuzlocke-tracker-ahza
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -54,5 +54,5 @@ Define and implement a deployment strategy for running the nuzlocke-tracker in p
|
|||||||
- [x] **Configure Nginx Proxy Manager** — add proxy host entries for Gitea and the nuzlocke-tracker frontend/API on the appropriate ports
|
- [x] **Configure Nginx Proxy Manager** — add proxy host entries for Gitea and the nuzlocke-tracker frontend/API on the appropriate ports
|
||||||
- [x] **Environment & secrets management** — deploy script auto-generates `.env` with `POSTGRES_PASSWORD` on Unraid if missing; file lives at `/mnt/user/appdata/nuzlocke-tracker/.env`
|
- [x] **Environment & secrets management** — deploy script auto-generates `.env` with `POSTGRES_PASSWORD` on Unraid if missing; file lives at `/mnt/user/appdata/nuzlocke-tracker/.env`
|
||||||
- [ ] **Implement Gitea Actions CI/CD pipeline** — set up Gitea Actions runner on Unraid, create CI workflow (lint/test on `develop`) and deploy workflow (build/push/deploy on `main`); uses GitHub Actions-compatible syntax for portability
|
- [ ] **Implement Gitea Actions CI/CD pipeline** — set up Gitea Actions runner on Unraid, create CI workflow (lint/test on `develop`) and deploy workflow (build/push/deploy on `main`); uses GitHub Actions-compatible syntax for portability
|
||||||
- [ ] **Database backup strategy** — set up a simple scheduled backup for the PostgreSQL data (e.g., cron + `pg_dump` script on Unraid)
|
- [x] **Database backup strategy** — set up a simple scheduled backup for the PostgreSQL data (e.g., cron + `pg_dump` script on Unraid)
|
||||||
- [ ] **Document the deployment workflow** — README or docs covering how to deploy, redeploy, rollback, and manage the production instance
|
- [ ] **Document the deployment workflow** — README or docs covering how to deploy, redeploy, rollback, and manage the production instance
|
||||||
33
backup.sh
Executable file
33
backup.sh
Executable file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# ── Configuration ──────────────────────────────────────────────
|
||||||
|
DEPLOY_DIR="/mnt/user/appdata/nuzlocke-tracker"
|
||||||
|
BACKUP_DIR="${DEPLOY_DIR}/backups"
|
||||||
|
RETENTION_DAYS=7
|
||||||
|
DB_SERVICE="db"
|
||||||
|
DB_NAME="nuzlocke"
|
||||||
|
DB_USER="postgres"
|
||||||
|
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||||
|
BACKUP_FILE="${BACKUP_DIR}/nuzlocke-${TIMESTAMP}.sql.gz"
|
||||||
|
|
||||||
|
# ── Create backup directory ───────────────────────────────────
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
|
||||||
|
# ── Dump database ─────────────────────────────────────────────
|
||||||
|
cd "$DEPLOY_DIR"
|
||||||
|
docker compose exec -T "$DB_SERVICE" pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "$BACKUP_FILE"
|
||||||
|
|
||||||
|
echo "Backup created: ${BACKUP_FILE}"
|
||||||
|
|
||||||
|
# ── Rotate old backups ────────────────────────────────────────
|
||||||
|
find "$BACKUP_DIR" -name "nuzlocke-*.sql.gz" -mtime +${RETENTION_DAYS} -delete
|
||||||
|
|
||||||
|
REMAINING=$(find "$BACKUP_DIR" -name "nuzlocke-*.sql.gz" | wc -l)
|
||||||
|
echo "Backups retained: ${REMAINING}"
|
||||||
|
|
||||||
|
# ── Restore procedure ────────────────────────────────────────
|
||||||
|
# To restore from a backup:
|
||||||
|
# cd /mnt/user/appdata/nuzlocke-tracker
|
||||||
|
# gunzip -c backups/nuzlocke-YYYYMMDD-HHMMSS.sql.gz | \
|
||||||
|
# docker compose exec -T db psql -U postgres nuzlocke
|
||||||
@@ -55,10 +55,13 @@ done
|
|||||||
info "All images built and pushed."
|
info "All images built and pushed."
|
||||||
|
|
||||||
# ── Sync compose file to Unraid ──────────────────────────────────
|
# ── Sync compose file to Unraid ──────────────────────────────────
|
||||||
info "Copying docker-compose.prod.yml to Unraid..."
|
info "Copying docker-compose.prod.yml and backup.sh to Unraid..."
|
||||||
scp docker-compose.prod.yml "${UNRAID_SSH}:${UNRAID_DEPLOY_DIR}/docker-compose.yml" \
|
scp docker-compose.prod.yml "${UNRAID_SSH}:${UNRAID_DEPLOY_DIR}/docker-compose.yml" \
|
||||||
|| error "Failed to copy compose file to Unraid."
|
|| error "Failed to copy compose file to Unraid."
|
||||||
info "Compose file synced."
|
scp backup.sh "${UNRAID_SSH}:${UNRAID_DEPLOY_DIR}/backup.sh" \
|
||||||
|
|| error "Failed to copy backup script to Unraid."
|
||||||
|
ssh "${UNRAID_SSH}" "chmod +x '${UNRAID_DEPLOY_DIR}/backup.sh'"
|
||||||
|
info "Compose file and backup script synced."
|
||||||
|
|
||||||
# ── Ensure .env with Postgres password exists ────────────────────
|
# ── Ensure .env with Postgres password exists ────────────────────
|
||||||
info "Checking for .env on Unraid..."
|
info "Checking for .env on Unraid..."
|
||||||
|
|||||||
Reference in New Issue
Block a user