Portainer CE git stacks cannot bind-mount relative repo paths; sync auxiliary files to the host path documented in README.
77 lines
2.7 KiB
YAML
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
|