143 lines
2.6 KiB
Markdown
143 lines
2.6 KiB
Markdown
|
|
# AdGuardHome Config Backup Script
|
|
|
|
This project provides a Bash script to back up the AdGuardHome configuration file (`AdGuardHome.yaml`) from multiple remote servers via SSH.
|
|
|
|
The script supports:
|
|
|
|
- Backup of multiple servers defined in a `.env` file
|
|
- Timestamped backup files named using the server's hostname
|
|
- Logging of each backup session
|
|
- Optional notifications via [ntfy.sh](https://ntfy.sh/) and Discord
|
|
|
|
---
|
|
|
|
## 📦 Features
|
|
|
|
- SSH key authentication
|
|
- Environment-based configuration
|
|
- Per-host backup with hostname and timestamp
|
|
- Automatic log file generation
|
|
- Optional failure/success notifications
|
|
|
|
---
|
|
|
|
## 🛠️ Requirements
|
|
|
|
- Bash
|
|
- `ssh` and `scp` installed
|
|
- A valid SSH private key
|
|
- Optional: `curl` (for notifications)
|
|
|
|
---
|
|
|
|
## 🧾 Setup
|
|
|
|
### 1. Clone the repository
|
|
|
|
```bash
|
|
git clone https://github.com/youruser/adguard-backup-script.git
|
|
cd adguard-backup-script
|
|
```
|
|
|
|
### 2. Configure the `.env` file
|
|
|
|
Copy and edit the sample `.env` file:
|
|
|
|
```env
|
|
# SSH Settings
|
|
HA_SSH_KEY="$HOME/.ssh/id_rsa"
|
|
HA_SSH_USER="youruser"
|
|
|
|
# Backup destination (local path)
|
|
BACKUP_DEST="/your/backup/directory"
|
|
|
|
# Remote config path (optional override)
|
|
REMOTE_FILE="/opt/AdGuardHome/AdGuardHome.yaml"
|
|
|
|
# List of remote servers (space-separated)
|
|
SERVER_LIST="server1.example.com server2.example.com 192.168.1.100"
|
|
|
|
# Notification options (optional)
|
|
NTFY_ENABLED=true
|
|
NTFY_SERVER="https://ntfy.yourdomain.com"
|
|
NTFY_TOPIC="adguard-backups"
|
|
|
|
DISCORD_ENABLED=true
|
|
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/..."
|
|
```
|
|
|
|
### 3. Make the script executable
|
|
|
|
```bash
|
|
chmod +x backup_adguard.sh
|
|
```
|
|
|
|
### 4. Run the backup
|
|
|
|
```bash
|
|
./backup_adguard.sh
|
|
```
|
|
|
|
---
|
|
|
|
## 🗂️ Backup Output
|
|
|
|
- Files saved to: `$BACKUP_DEST`
|
|
- Naming convention: `AdGuardHome.yaml-<hostname>-<timestamp>`
|
|
- Example: `AdGuardHome.yaml-server1-2025-06-23_14-45-01`
|
|
|
|
---
|
|
|
|
## 🔔 Notifications (Optional)
|
|
|
|
### ntfy
|
|
- Configure `NTFY_ENABLED=true`, `NTFY_SERVER`, and `NTFY_TOPIC` in your `.env`.
|
|
|
|
### Discord
|
|
- Set `DISCORD_ENABLED=true` and supply your `DISCORD_WEBHOOK_URL`.
|
|
|
|
---
|
|
|
|
## 🧪 Sanity Checks
|
|
|
|
The script will validate:
|
|
- SSH key path
|
|
- SSH user
|
|
- Backup destination
|
|
- Server list
|
|
- Notification credentials (if enabled)
|
|
|
|
---
|
|
|
|
## 📜 Log Files
|
|
|
|
Each run generates a log file:
|
|
- Location: `$BACKUP_DEST`
|
|
- Format: `backup-<timestamp>.log`
|
|
|
|
Example:
|
|
```
|
|
backup-2025-06-23_14-45-01.log
|
|
```
|
|
|
|
---
|
|
|
|
## 💡 Tips
|
|
|
|
- Use cron to automate the script (e.g., daily backups).
|
|
- Ensure your SSH key is authorized on all target servers.
|
|
- Monitor logs or enable notifications for unattended runs.
|
|
|
|
---
|
|
|
|
## 📄 License
|
|
|
|
MIT License
|
|
|
|
---
|
|
|
|
## 🤝 Contributing
|
|
|
|
Feel free to fork, submit PRs, or suggest improvements!
|