Files
nuc/docs/backup-strategy.md
Alejandro Gutiérrez 390eda1595 Initial commit - NUC server configuration and docs
- CLAUDE.md: Server instructions and service reference
- docs/: Persistent documentation (architecture, guides)
- .artifacts/: Session-generated notes
- playwriter-browser/: Remote browser container config

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 20:49:20 +00:00

3.9 KiB

NUC Backup Strategy

Date: 2026-02-01 17:30 Context: 3-layer backup strategy for NUC disaster recovery


Layer 1: Daily Automated Backup (Kopia → MinIO)

What: All Docker volumes + Coolify configs Where: NUC MinIO (local) + optionally offsite Recovery time: ~15 min

Configure Kopia

# Connect to Kopia container
ssh nuc "docker exec -it kopia /bin/sh"

# Add Docker volumes path
kopia policy set /var/lib/docker/volumes --add-include "*.sql" --add-include "*.db"
kopia snapshot create /var/lib/docker/volumes

# Add Coolify data
kopia snapshot create /data/coolify

# Set daily schedule
kopia policy set --global --snapshot-interval 24h

Critical paths to backup

Path Contents
/data/coolify/ Coolify configs, SSH keys, DB
/var/lib/docker/volumes/ All service data
/opt/homepage/config/ Homepage dashboard config

Manual backup command

ssh nuc "docker exec kopia kopia snapshot create /var/lib/docker/volumes /data/coolify"

Verify backups

ssh nuc "docker exec kopia kopia snapshot list --all"

Layer 2: Clonezilla Full Disk Image

What: Complete disk clone (OS + everything) Where: External USB drive Recovery time: ~30 min When: Monthly or before hardware changes

Create image

  1. Boot NUC from Clonezilla USB
  2. Select: device-imagesavedisk
  3. Choose external USB as destination
  4. Select NUC internal disk as source
  5. Use options: -z1p (parallel compression), -fsck-src-part (check filesystem)
nuc-full-YYYY-MM-DD.img

Storage requirements

NUC disk used Compressed image
50GB ~20GB
100GB ~40GB
250GB ~80GB

Layer 3: Coolify Services Export

What: List of all services + configs for manual rebuild Where: This repo + offsite Recovery time: 1-2 hours (fresh install)

Export current services

# Get all services with their configs
ssh nuc "docker exec coolify php artisan tinker --execute=\"
use App\Models\Service;
Service::all()->map(fn(\\\$s) => [
    'name' => \\\$s->name,
    'uuid' => \\\$s->uuid,
    'type' => \\\$s->service_type,
    'compose' => \\\$s->docker_compose_raw
])->toJson(JSON_PRETTY_PRINT);
\""

Current NUC Services (as of 2026-02-01)

Service Port Coolify UUID
Homepage 3000 eo0g84scsss4osk0skk040ck
Coolify 8000 (system)
Gitea 3030 ho0cwgcwos88cwc48g84c0g8
Outline 3080 pccg80wks4c084008owokkkg
n8n 5678 uk0o04o0g84s4sc80kkoooc0
Vaultwarden 8222 h40w0ss4kgs0c8cgc0sc8k48
Ntfy 8333 xgkkg8gkgg048g8gkc8ck4os
MinIO 9000/9001 dg4wkgg8skcssww0040sgk80
Authentik 9090 e8owcw0s4wcswc4w4css0sws
FileBrowser 8085 o4swwwsowwg88coo0ws4cg48
CloudBeaver 8087 joo4g4k0w08k8kcosgsgswc0
Uptime Kuma 3001 s4ko04w88k048sw8o4swsoww
Dozzle 9999 vgko8w4kkkc8k0g4sggs4ks8
Tailscale - posgwooww0s0c0okssooc4gw

Databases

Database Port UUID
LiquidGym MySQL 3306 hgwcgs4oswwc8scg080scoo4
LiquidGym Postgres 5433 x4kk8g4k8w4g0cw480w84g4g
Knosia Postgres 5442 ik80skko0008w4000c4w40os

Recovery Priority

If total failure, restore in this order:

  1. Coolify (manages everything else)
  2. Databases (apps depend on them)
  3. Authentication (Authentik, Vaultwarden)
  4. Core services (Gitea, n8n, Outline)
  5. Monitoring (Uptime Kuma, Dozzle)

Offsite Backup (Optional)

For offsite, sync Kopia repository to cloud:

# Sync to Backblaze B2 (example)
kopia repository sync-to b2 --bucket=nuc-backup --key-id=XXX --key=YYY

Or rsync the Clonezilla image to another location.


  • Hard Disk Change Guide: 2026-02-01_17-30_nuc-hard-disk-change.md
  • LiquidGym Migration: 2026-02-01_16-45_liquidgym-mysql-migration.md