A robust, secure backup solution written in V language that creates encrypted, signed, and compressed backups with real-time notifications.
🔐 |
GPG Encryption & Signing - All backups are encrypted and digitally signed |
📦 |
High Compression - Uses |
📱 |
Real-time Notifications - Sends status updates via ntfy.sh |
⚡ |
Fast & Efficient - Written in V for optimal performance |
🛡️ |
Security First - Handles sensitive directories with proper permissions |
📊 |
Detailed Reporting - Comprehensive backup statistics and status |
🎯 |
YAML Configuration - Easy-to-manage configuration file |
The script uses a YAML configuration file (backups.yaml) with the following structure:
configs:
gpg_email: "your-email@example.com" # (1)
dest_dir: "/path/to/backup/directory" # (2)
ntfy:
topic: "your-backup-topic" # (3)
url: "https://ntfy.sh" # (4)
backups:
- title: "DUMMY" # (5)
path: "/tmp"
- title: "SSH Keys" # (6)
path: "/home/user/.ssh"
- title: "GPG Keys"
path: "/home/user/.gnupg"
- title: "Application Config"
path: "/home/user/.config/myapp"-
Email associated with your GPG key
-
Directory where encrypted backups will be stored
-
ntfy.sh topic for notifications
-
ntfy.sh server URL
-
Dummy entry - do not remove, used for array initialization
-
Actual backup entries with title and path
The script uses ntfy.sh for real-time notifications
=== 🔒 BACKUP SCRIPT COM GPG ===
✅ Chave GPG encontrada
🚀 Iniciando backups criptografados...
📦 Processando: SSH Keys
📂 Origem: /home/user/.ssh
💾 Arquivo temporário: /home/user/vBackups/ssh_keys_2025-07-07_18-57-04.tar.gz
🔐 Usando sudo para diretório sensível
✅ Backup criado: 2.3 KB
🔐 Criptografando e assinando com GPG...
✅ Arquivo criptografado: ssh_keys_2025-07-07_18-57-04.tar.gz.gpg
🗑️ Removendo arquivo não criptografado...
🔒 Backup final: ssh_keys_2025-07-07_18-57-04.tar.gz.gpg (3.1 KB)
=== 📊 RESUMO FINAL ===
✅ Backups bem-sucedidos: 3/3
📦 Tamanho total dos backups: 15.7 MB
🔒 Todos os backups foram criptografados e assinados
📧 Chave GPG usada: your-email@example.com
🎉 Todos os backups foram concluídos com sucesso!
📱 Enviando notificação...graph TD
A[Start] --> B[Check Dependencies]
B --> C[Load YAML Config]
C --> D[Verify GPG Key]
D --> E[Create Destination Directory]
E --> F[Process Each Backup Item]
F --> G[Create Compressed Archive]
G --> H[Encrypt & Sign with GPG]
H --> I[Remove Unencrypted File]
I --> J[Update Statistics]
J --> K{More Items?}
K -->|Yes| F
K -->|No| L[Send Notification]
L --> M[End]
Backup files follow this naming pattern:
{slugified_title}_{timestamp}.tar.gz.gpg
Example: ssh_keys_2025-07-07_18-57-04.tar.gz.gpg
-
Encryption: All backups are encrypted using GPG with your public key
-
Digital Signing: Files are signed with your private key for authenticity
-
Secure Permissions: Sensitive directories (
.ssh,.gnupg) are handled withsudo -
Cleanup: Unencrypted temporary files are automatically removed
The script uses pigz for parallel compression. You can modify the compression command in the source code:
// Current: tar -I pigz -cf
// Alternative: tar -czf (standard gzip)
// Alternative: tar -I "xz -T0" -cf (xz compression)Add to your crontab for automated backups:
# Daily backup at 2 AM
0 2 * * * /path/to/vbackup.vsh
# Weekly backup on Sundays at 3 AM
0 3 * * 0 /path/to/vbackup.vshCreate a systemd service and timer for more advanced scheduling:
[Unit]
Description=V-Backup Service
After=network.target
[Service]
Type=oneshot
User=your-username
WorkingDirectory=/path/to/script
ExecStart=/path/to/vbackup.vsh[Unit]
Description=Run V-Backup daily
Requires=backup.service
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.targetproject/ ├── vbackup.vsh # Main backup script ├── backups.yaml # Configuration file └── README.adoc # This documentation