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>
This commit is contained in:
162
docs/backup-strategy.md
Normal file
162
docs/backup-strategy.md
Normal file
@@ -0,0 +1,162 @@
|
||||
# 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
|
||||
```bash
|
||||
ssh nuc "docker exec kopia kopia snapshot create /var/lib/docker/volumes /data/coolify"
|
||||
```
|
||||
|
||||
### Verify backups
|
||||
|
||||
```bash
|
||||
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-image` → `savedisk`
|
||||
3. Choose external USB as destination
|
||||
4. Select NUC internal disk as source
|
||||
5. Use options: `-z1p` (parallel compression), `-fsck-src-part` (check filesystem)
|
||||
|
||||
### Recommended naming
|
||||
|
||||
```
|
||||
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
|
||||
|
||||
```bash
|
||||
# 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:
|
||||
|
||||
```bash
|
||||
# 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.
|
||||
|
||||
---
|
||||
|
||||
## Related
|
||||
|
||||
- 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`
|
||||
Reference in New Issue
Block a user