Jak automatyzować kopie zapasowe Raspberry Pi na UniFi NAS
Spis treści
Utrzymywanie usług self-hosted, automatyki domowej lub aplikacji webowych na Raspberry Pi wiąże się z jednym kluczowym wyzwaniem: podatnością kart microSD. Są one narażone na uszkodzenia, szczególnie przy intensywnych cyklach odczytu i zapisu baz danych. Aby zbudować naprawdę odporną architekturę, dane nie mogą znajdować się wyłącznie na samym urządzeniu Pi. Należy przenosić je na redundatne rozwiązanie klasy korporacyjnej. Poniżej przedstawiono proces konfiguracji w pełni zautomatyzowanej, codziennej kopii zapasowej z Raspberry Pi bezpośrednio na serwer Ubiquiti UNAS Pro, obejmujący zrzut baz danych (mysqldump) oraz kompresję plików.
Krok 1: Przygotowanie serwera UNAS Pro
Serwer musi być gotowy na przyjęcie danych.
- Zalogować się do konsoli UniFi OS i otworzyć aplikację Storage / NAS.
- Utworzyć nowy folder współdzielony (np.
Pi_Backups). - Utworzyć dedykowanego użytkownika lokalnego (np.
backup_user) z silnym hasłem. - Przypisać temu użytkownikowi uprawnienia odczytu i zapisu (Read/Write) do folderu
Pi_Backups. - Upewnij się, że protokół SMB (Server Message Block) jest włączony dla tego udziału.
Krok 2: Montowanie zasobu UNAS Pro w Raspberry Pi
Raspberry Pi powinno traktować zasób sieciowy jak lokalny dysk fizyczny, co osiąga się za pomocą cifs-utils.
- Połącz się przez SSH z Raspberry Pi.
- Zainstalować niezbędne narzędzia:
sudo apt updateorazsudo apt install cifs-utils. - Utworzyć punkt montowania:
sudo mkdir -p /mnt/unas_backup. - Utworzyć ukryty plik z poświadczeniami w
/etc/.unas_creds(zawierający:username=...,password=...,domain=WORKGROUP). Zabezpieczyć go poleceniem:sudo chmod 600 /etc/.unas_creds. - Edytuj plik
/etc/fstab, dodając linię://192.168.1.XXX/Pi_Backups /mnt/unas_backup cifs credentials=/etc/.unas_creds,uid=1000,gid=1000,iocharset=utf8 0 0. - Przetestować montowanie:
sudo mount -a.
Krok 3: Zabezpieczenie poświadczeń MySQL
Aby umożliwić skryptowi wykonanie mysqldump bez wpisywania hasła, należy je bezpiecznie zapisać.
- Utworzyć plik konfiguracyjny:
nano ~/.my.cnf. - Dodać:
[client],user=root,password=YourDatabasePassword. - Zabezpiecz plik:
chmod 600 ~/.my.cnf.
Krok 4: Skrypt kopii zapasowej
Skrypt wykonuje zrzut bazy, kompresję folderów i usuwanie starych archiwów.
- Utworzyć plik
~/pi_backup.shi wkleić kod:
#!/bin/bash
BACKUP_DATE=$(date +"%Y-%m-%d")
NAS_MOUNT="/mnt/unas_backup"
DEST_DIR="$NAS_MOUNT/$BACKUP_DATE"
TARGET_FOLDERS="/var/www/html /etc/nginx /home/pi/docker-data"
if ! mountpoint -q $NAS_MOUNT; then exit 1; fi
mkdir -p "$DEST_DIR"
mysqldump --all-databases | gzip > "$DEST_DIR/db_backup_$BACKUP_DATE.sql.gz"
tar -czf "$DEST_DIR/files_backup_$BACKUP_DATE.tar.gz" $TARGET_FOLDERS
find "$NAS_MOUNT" -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -rf {} \;
- Ustawić uprawnienia wykonywania:
chmod +x ~/pi_backup.sh.
Krok 5: Automatyzacja za pomocą Crona
Harmonogram uruchamiania skryptu codziennie o 2:00 w nocy.
- Otworzyć crontab:
crontab -e. - Dodać linię:
0 2 * * * $HOME/pi_backup.sh > $HOME/backup_log.txt 2>&1.
Rezultatem jest zautomatyzowany plan odtwarzania po awarii: co noc bazy danych są eksportowane, pliki konfiguracyjne oraz katalogi aplikacji kompresowane i przesyłane przez sieć na serwer Ubiquiti UNAS Pro, a archiwa starsze niż dwa tygodnie są automatycznie usuwane.