Add: Nextcloud Backblaze B2 backup solution - automated daily backups

- Complete backup script for native Nextcloud (MySQL + files)
- Systemd service and timer for daily automated backups at 2 AM
- Backblaze B2 integration with secure credential storage
- Incremental backup support with 30-day retention
- zstd compression for 40-70% storage reduction
- Comprehensive documentation and deployment guides
- Successfully tested with first backup: 203MB DB + 1.3GB files
- Cost-optimized: ~/bin/bash.01-0.02/month for 1.5GB data

Deployment Details:
- Installed B2 CLI via pipx
- Created backup directories at /opt/nextcloud-backup/
- Configured systemd timer for daily execution at 2 AM
- First backup verified in B2 bucket: jg-nextcloud
- Automated scheduling enabled and tested

Documentation includes:
- Deployment report with complete setup details
- Quick start guide for future deployments
- Comprehensive technical reference
- Troubleshooting procedures
- File manifest and index
This commit is contained in:
2026-04-25 18:00:07 -05:00
commit 2625cf36d2
14 changed files with 3090 additions and 0 deletions
+40
View File
@@ -0,0 +1,40 @@
[Unit]
Description=Nextcloud to Backblaze B2 Backup
Documentation=https://backblaze.com/b2/docs/
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/opt/nextcloud-backup
# Environment variables - set these before deploying
EnvironmentFile=-/opt/nextcloud-backup/.env
# Load B2 credentials from secure location
EnvironmentFile=-/etc/nextcloud-backup/b2-credentials.env
# The actual backup script
ExecStart=/opt/nextcloud-backup/nextcloud-backup-to-backblaze.sh incremental
# Logging
StandardOutput=journal
StandardError=journal
SyslogIdentifier=nextcloud-backup
# Restart on failure with exponential backoff
Restart=on-failure
RestartSec=300
# Security hardening
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/opt/nextcloud-backup /srv/docker/nextcloud
# Resource limits
CPUQuota=80%
MemoryMax=4G
TasksMax=256