Files
ginnoir bb18e0e338 Mount backup scripts from /config/backup on host.
Portainer CE git stacks cannot bind-mount relative repo paths; sync auxiliary files to the host path documented in README.
2026-06-10 21:28:56 -05:00

77 lines
2.7 KiB
YAML

# backup stack — Kopia snapshots of /config, selected /storage1/labdata paths, and DB dumps.
# Scope: stacks/backup/SCOPE.md + snapshot-paths.txt (excludes RomM art, registry, transient dirs).
#
# Offsite target: Backblaze B2 (S3-compatible). One-time repo setup — see README.md.
# Schedule: backup-scheduler dumps databases ~02:50, Kopia snapshots ~03:00 (policy).
#
# Env convention: stack.env only (no Portainer UI vars). Kopia UI is internal-only
# via Caddy after you add backup.ginnoir.com (optional, README).
services:
kopia:
container_name: kopia
image: kopia/kopia:0.17
hostname: kopia
restart: unless-stopped
networks: [backup, edge]
env_file:
- stack.env
cap_add:
- SYS_ADMIN
security_opt:
- apparmor:unconfined
devices:
- /dev/fuse:/dev/fuse
volumes:
- /config/kopia/config:/app/config
- /config/kopia/cache:/app/cache
- /config/kopia/logs:/app/logs
- /config:/backup/config:ro
- /config/backup/dumps:/backup/dumps:ro
- /storage1/labdata/gitea/repositories:/backup/labdata/gitea/repositories:ro
- /storage1/labdata/gitea/lfs:/backup/labdata/gitea/lfs:ro
- /storage1/labdata/famapp/minio:/backup/labdata/famapp/minio:ro
- /storage1/labdata/resume/minio:/backup/labdata/resume/minio:ro
- /storage1/labdata/plane/minio:/backup/labdata/plane/minio:ro
- /storage1/labdata/romhacks/metadata:/backup/labdata/romhacks/metadata:ro
- /storage1/labdata/romhacks/library:/backup/labdata/romhacks/library:ro
- /storage1/labdata/romm/assets:/backup/labdata/romm/assets:ro
- /config/backup/init-kopia.sh:/init-kopia.sh:ro
- /config/backup/snapshot-paths.txt:/snapshot-paths.txt:ro
ports:
- "51515:51515"
entrypoint: ["/bin/sh", "/init-kopia.sh"]
labels:
- "com.centurylabs.watchtower.enable=false"
backup-scheduler:
container_name: backup_scheduler
image: alpine:3.20
restart: unless-stopped
networks: [backup]
env_file:
- stack.env
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /config/backup/dumps:/dumps
- /config/backup/scripts/backup-dump-databases.sh:/scripts/backup-dump-databases.sh:ro
- /config/backup/scripts/backup-run-snapshots.sh:/scripts/backup-run-snapshots.sh:ro
- /config/backup/snapshot-paths.txt:/snapshot-paths.txt:ro
- /config/backup/crontab:/etc/crontab:ro
entrypoint: ["/bin/sh", "-c"]
command:
- |
apk add --no-cache docker-cli curl tzdata >/dev/null
printenv | grep -E '^(NTFY_|TZ=)' > /etc/backup.env || true
crond -f -l 8 -c /etc
depends_on:
- kopia
networks:
backup:
name: backup
driver: bridge
edge:
name: edge
external: true