electric-horses-infra/stacks/forgejo/backup.sh
Benjamin Weinlich 8ba375caaa feat(stacks/forgejo): add self-hosted Git stack
First stack mirrored 1:1 from /opt/ai-apps/forgejo/ on the server.
Includes docker-compose.yml (forgejo + postgres 16), .env.example
template (NO real secrets), backup.sh (nightly pg_dump + tar), plus
Agent.md and README.md.

Known gotchas documented in Agent.md:
- Volume mount on /data not /var/lib/gitea
- SSH port 2222 in container (system sshd occupies 22)
- OIDC config lives in DB table login_source, not app.ini

Refs OP#1119
2026-04-11 22:19:25 +02:00

29 lines
848 B
Bash
Executable file

#!/bin/bash
# Forgejo Backup — nightly cron
# Runs pg_dump + tar of /data, retention 14 days.
# Schedule: 0 3 * * * /opt/ai-apps/forgejo/backup.sh >> /opt/ai-apps/forgejo/backup.log 2>&1
set -euo pipefail
TS=$(date +%Y%m%d-%H%M%S)
DEST=/opt/backups/forgejo
mkdir -p "$DEST"
echo "[$(date -Iseconds)] backup start"
# Postgres dump
docker exec forgejo-db pg_dump -U forgejo forgejo | gzip > "$DEST/forgejo-db-$TS.sql.gz"
echo " db dump: $(ls -lh $DEST/forgejo-db-$TS.sql.gz | awk '{print $5}')"
# Data volume tar
docker run --rm \
-v forgejo_forgejo-data:/data:ro \
-v "$DEST":/backup \
alpine \
tar -czf "/backup/forgejo-data-$TS.tar.gz" -C /data .
echo " data tar: $(ls -lh $DEST/forgejo-data-$TS.tar.gz | awk '{print $5}')"
# Retention: 14 days
find "$DEST" -type f -mtime +14 -delete
echo "[$(date -Iseconds)] backup complete"