Files
homelab-configs/kopia-nextcloud-backblaze-setup.md
T
jgitta 821f954200 Add Caddy reverse proxy configuration and Kopia backup documentation
- Create INFRASTRUCTURE-COMPLETE.md: Comprehensive infrastructure overview
  * Network architecture and DNS configuration
  * Storage architecture for Nextcloud (1.4TB warm storage via LVM)
  * Kopia backup setup with Backblaze B2 integration
  * Caddy reverse proxy configuration (CT 202)
  * Security configuration and capacity planning

- Add Caddy reverse proxy configurations:
  * caddy-kopia-integration.md: Integration steps for CT 202
  * caddy-kopia-reverse-proxy.md: Complete configuration reference
  * caddy/Caddyfile: Production-ready configuration
  * caddy/docker-compose.yml: Docker deployment spec

- Add Kopia backup documentation:
  * kopia-nextcloud-backblaze-setup.md: Complete Kopia setup guide
  * Backup strategy, retention policies, and restore procedures

- Update related documentation with consolidated references

Status: Infrastructure documented and ready for deployment
2026-04-27 11:46:47 -05:00

8.6 KiB

Kopia Backup Configuration for Nextcloud to Backblaze B2

Date: April 27, 2026
Status: Configured and Running
Backup Destination: Backblaze B2
Backup Server: siklos (192.168.88.27)


📋 Configuration Summary

Kopia Server Details

  • Container: Running on siklos via Docker
  • Location: /srv/docker/kopia/
  • Web UI: http://192.168.88.27:51515
  • Status: Running and configured with B2

Backblaze B2 Backend

  • Bucket: jg-kopia-nextcloud
  • Bucket ID: 42c2db92c477c1fe95df0019
  • Key ID: 00522b2471e5f090000000003
  • Connection: Active and tested
  • Encryption: AES256-GCM-HMAC-SHA256

Backup Sources

Source Location Size Content
Nextcloud Data /data (mounted from /mnt/nextcloud) ~600GB+ User files, appdata, config
Database Backup /data/nextcloud-db-backup.sql ~1.1GB MariaDB database backup
Warm Storage Files /data/lvm-*.img ~630GB LVM backup staging files

🔧 Current Setup

Repository Configuration

Hash Algorithm:         BLAKE2B-256-128
Encryption:             AES256-GCM-HMAC-SHA256
Key Derivation:         scrypt-65536-8-1
Splitter:               DYNAMIC-4M-BUZHASH
Repository Password:    kopia123

Default Retention Policy

Annual snapshots:       3
Monthly snapshots:      24
Weekly snapshots:       4
Daily snapshots:        7
Hourly snapshots:       48
Latest snapshots:       10

Kopia Server Maintenance

  • Quick maintenance: Every 1 hour
  • Full maintenance: Every 24 hours
  • Server runs as: root

🚀 Accessing Kopia

Web UI Access

  1. Open browser: http://192.168.88.27:51515
  2. Default credentials configured in docker-compose.yml
  3. Create snapshots, view backup history, restore files

Command Line (via Docker)

# Access Kopia CLI
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia --help

# Create a snapshot
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot create /data

# List snapshots
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot list /data

# Restore a file
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia restore --target /tmp/restore-dir <snapshot-id>

📊 Backup Strategy

Full Data Backup

  • What: Entire /data directory (Nextcloud files + database backup)
  • Size: ~630GB (initial backup will be largest)
  • Schedule: Manual for now (can be automated)
  • Incremental: Subsequent backups only capture changes

Database Strategy

Two approaches available:

Option A: File-Based (Current)

  • Database backup exported as SQL file: nextcloud-db-backup.sql
  • Included in Kopia snapshots
  • Restore: Import SQL file to recover database

Create a backup policy that runs MySQL dump before snapshotting:

docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia policy set /data \
  --pre-snapshot-command="mysqldump -h 192.168.88.62 -u nextcloud -p<password> nextcloud > /data/nextcloud-db-backup.sql"

🔄 Backup Workflow

Manual Snapshot (Current)

# SSH to siklos
ssh jgitta@siklos

# Create snapshot of all Nextcloud data
cd /srv/docker/kopia
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot create /data

# Monitor progress
docker logs -f kopia

# List snapshots
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot list /data

Automated Snapshots (TODO)

Can be configured using Kopia's policy scheduling:

# Set daily snapshots at 2 AM
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia policy set /data \
  --snapshot-interval=24h --snapshot-time=02:00

💾 Backup Verification

Check Backblaze B2 Bucket

  1. Log into Backblaze B2 account
  2. Navigate to bucket: jg-kopia-nextcloud
  3. Should see files beginning to upload
  4. Monitor transfer progress

Verify Kopia Connection

docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia repository validate-provider

Check Backup Status

docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot list

# Detailed snapshot info
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot show <snapshot-id>

🎯 Capacity Analysis

Nextcloud Backup Size

  • Initial Backup: ~630GB (first snapshot)
  • Incremental: Varies based on changes
  • B2 Storage: Unlimited (you pay per GB/month)
  • Estimated Monthly: $1-2 for incremental changes

Backblaze B2 Costs

  • Upload: $0.60/GB (initial upload)
  • Download: $0.03/GB
  • Storage: $0.006/GB-month
  • First 1GB free per day

🔐 Security

Encryption

  • All backups encrypted with AES256-GCM
  • Keys are hashed using scrypt
  • Repository password protected

Access Control

  • Repository password: kopia123 (change recommended)
  • Server credentials: Configured in docker-compose.yml
  • B2 API Key: Limited scope (read/write to bucket only)

Recommendations

  1. Change repository password:

    docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia repo change-password
    
  2. Update server credentials in docker-compose.yml

  3. Use environment variables instead of hardcoding secrets:

    export KOPIA_PASSWORD='secure-password-here'
    

📞 Restore Procedure

Restore Entire Snapshot

# List available snapshots
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot list /data

# Restore to /tmp/restore-dir
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia restore \
  --target /tmp/restore-dir \
  <snapshot-id>

Restore Specific Files

# Find file in snapshot
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia find <filename>

# Restore specific file
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia restore \
  --target /tmp/restore-file \
  <snapshot-id>/<file-path>

Restore to Nextcloud VM

# SSH to restore location
ssh jgitta@next

# Mount Kopia via SFTP or restore locally
# Then copy restored files back to Nextcloud

📈 Monitoring & Maintenance

Daily Checks

# Container health
docker ps | grep kopia

# Recent logs
docker logs -n 50 --tail=50 -f kopia

# Snapshot listing
docker exec -e KOPIA_PASSWORD='kopia123' kopia kopia snapshot list /data

Monthly Tasks

  • Review backup success rate
  • Check Backblaze B2 storage usage
  • Test restore procedures (at least monthly)
  • Review and update retention policies if needed

Quarterly Tasks

  • Full test restore to alternate location
  • Review backup costs
  • Audit repository integrity: kopia repository validate-provider

🔗 Integration with Existing Setup

Current Backup Architecture

Nextcloud (192.168.88.62)
├─ MariaDB database
├─ /mnt/nextcloud-data (2TB)
└─ Existing tar backup script (to warm storage)

Kopia (siklos - 192.168.88.27)
├─ Backs up entire /data directory
├─ Includes database backups
└─ Uploads to Backblaze B2

Warm Storage (1.4TB)
├─ Temporary backup staging
└─ Used by existing backup script

Benefits of Kopia

  • Deduplication (saves storage space)
  • Incremental backups (faster than full)
  • Point-in-time restore (any snapshot in history)
  • Encryption (security)
  • B2 integration (cost-effective)

🚨 Troubleshooting

Container won't start

cd /srv/docker/kopia
docker-compose logs kopia
docker-compose down && docker-compose up -d

Cannot connect to B2

  • Verify credentials: Bucket ID, Key ID, Application Key
  • Check network connectivity: curl https://api.backblazeb2.com
  • Verify bucket exists in B2 account

Snapshots failing

  • Check disk space: df -h /srv/docker/kopia/
  • Check source accessibility: ls -la /srv/docker/kopia/
  • Review logs: docker logs kopia

Slow backups

  • Normal for initial 600GB+ backup
  • Adjust Parallel uploads policy if needed
  • Consider scheduling during off-peak hours


Setup Checklist

  • Kopia installed and running on siklos
  • Backblaze B2 repository created
  • Repository configured with AES256 encryption
  • Backup source mounted (/mnt/nextcloud → /data)
  • Database backup file present
  • Initial snapshot in progress
  • 📋 Schedule automated snapshots (TODO)
  • 📋 Test restore procedure (TODO)
  • 📋 Update security credentials (TODO)
  • 📋 Configure pre-backup hooks (TODO)

Status: Ready for continuous backup operations
Last Updated: April 27, 2026
Backup Destination: Backblaze B2 (jg-kopia-nextcloud)
Server: siklos at 192.168.88.27:51515