# resticprofile config for irv-ml1. # # **Bare metal, remote site.** Not protected by any Proxmox vzdump — this # is the sole backup for this host. Reachable only via WireGuard # (10.100.79.3 is the WG tunnel IP). Backups target rest-server-nh3 at # 10.100.50.50 because that's the closest endpoint through the WG tunnel; # cross-site to ana-docker would double-hop the WAN. # # Notable exclusions: # - /storetank/* — ~1.8 TB of model weights (ComfyUI checkpoints, HF hub, # llama.cpp GGUFs, etc.). All regenerable from upstream. Do NOT add. # - /worktank/* — *selectively* included. Docker stacks on this host now # place user state under /worktank// (comfyui, parakeet, # cosyvoice). Sources are explicit per-subtree; bulk/scratch/run # dirs stay out. Rule of thumb: precious human-generated data in, # downloadable weights + regenerable outputs + disposable runtime # out. # - Native AI toolchain under /opt/{ComfyUI,sillytavern,stablediffusion, # llama.cpp,kokoro,...} — git clones / pip envs, regenerable from # source. Only /opt/docker is backed up (compose files + configs, # once Docker is installed following the fleet convention). # # No DB dumps needed — this host's workloads don't store relational data. version: "1" global: priority: low ionice: true ionice-class: 2 ionice-level: 7 min-memory: 100 default: env-file: /etc/restic/restic.env # RESTIC_REPOSITORY=rest:http://user:pw@10.100.50.50:8000/irv-ml1/ env: RESTIC_PASSWORD_FILE: /etc/restic/password initialize: false # repo created manually by `restic init` lock: /var/lock/restic-irv-ml1.lock backup: verbose: 1 run-after: - date +%s > /var/lib/restic/last-success source: - /opt/docker # compose files + bind-mount configs - /etc # host config — systemd, chrony, apparmor, ssh, wg - /root # root's ad-hoc scripts, shell history, ssh keys - /home/lkraven # primary admin home dir — dotfiles, dev scripts, small configs - /var/lib/docker/volumes # named volumes from dockerized stacks # Selective /worktank inclusions (the rest of /worktank stays out): - /worktank/comfyui/basedir/user # ComfyUI workflows + settings - /worktank/comfyui/basedir/custom_nodes # hand-installed ComfyUI extensions - /worktank/comfyui/basedir/input # user-uploaded source images for workflows - /worktank/cosyvoice/voices # cloned speaker profiles — reproducing them needs the original reference audio # Deliberately NOT in source (see "What's not backed up" in README): # /home/llmuser # ~380 GB of model weights / training outputs # # (contents belong on /storetank; regenerable from HF) # /home/sduser # Stable Diffusion user state (~2.6 GB); scope-check # # before adding — likely regenerable # /worktank/comfyui/basedir/{models,output,temp} # bulk + regenerable # /worktank/comfyui/run # ~8 GB disposable venv # /worktank/parakeet/models # HF cache, regenerable # /worktank/cosyvoice/{input,output} # scratch exclude: # Explicit protection: even if source is ever changed to /home, skip # llmuser entirely — the only reason it's 380 GB is AI artifacts that # belong on /storetank or HF hub, not in a config-backup repo. - /home/llmuser - /home/sduser # Defense-in-depth: even if `source` is ever broadened to /worktank # wholesale, these must never enter the repo. - /worktank/comfyui/basedir/models - /worktank/comfyui/basedir/output - /worktank/comfyui/basedir/temp - /worktank/comfyui/run - /worktank/parakeet/models - /worktank/cosyvoice/input - /worktank/cosyvoice/output # Docker internals we never want in a backup - /var/lib/docker/volumes/backingFsBlockDev - /var/lib/docker/volumes/metadata.db # Ephemeral / regenerable junk - /opt/docker/compose/*/logs - "**/*.log" - "**/*.log.*" - "**/*.pid" # User-cache / toolchain noise under home dirs (saves ~5.8 GB on /home/lkraven alone) - /home/*/.cache - /home/*/.npm - /home/*/.local/share/Trash - /home/*/.cargo/registry - /home/*/.cargo/git - /home/*/.rustup - /home/*/huggingface - /home/*/.cache/huggingface - /home/*/conda - /home/*/anaconda3 - /home/*/miniconda3 - /home/*/.conda - /home/*/micromamba # Common Python virtualenv noise - "**/__pycache__" - "**/.venv" - "**/venv" - "**/env" - "**/.pytest_cache" # Root's noise - /root/.cache - /root/.local/share/Trash - /root/.npm - /root/.python_history tag: - host:irv-ml1 - site:irv - fleet:pfi schedule: "*-*-* 01:00:00" schedule-permission: system schedule-log: /var/log/restic-backup.log forget: keep-daily: 7 keep-weekly: 4 keep-monthly: 12 keep-yearly: 3 # NOTE: no `prune: true` — rest-server runs with --append-only. # See README.md "Prune ceremony". tag: - host:irv-ml1 # Schedule removed at deploy: forget against --append-only rest-server # always fails (delete ops blocked). Run manually during the prune # ceremony when --append-only is temporarily off. check: read-data-subset: 10% schedule: "Sun *-*-* 05:00:00" schedule-permission: system schedule-log: /var/log/restic-check.log