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: "[email protected]" # (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: [email protected]
π 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.vsh
Create 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.target
project/ βββ vbackup.vsh # Main backup script βββ backups.yaml # Configuration file βββ README.adoc # This documentation