Zabezpieczanie danych: Automatyczne kopie zapasowe Raspberry Pi na serwerze Ubiquiti UNAS Pro
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.
- Zaloguj się do konsoli UniFi OS i otwórz aplikację Storage / NAS.
- Utwórz nowy folder współdzielony (np.
Pi_Backups). - Utwórz dedykowanego użytkownika lokalnego (np.
backup_user) z silnym hasłem. - Przypisz 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.
- Zainstaluj niezbędne narzędzia:
sudo apt updateorazsudo apt install cifs-utils. - Utwórz punkt montowania:
sudo mkdir -p /mnt/unas_backup. - Utwórz ukryty plik z poświadczeniami w
/etc/.unas_creds(zawierający:username=...,password=...,domain=WORKGROUP). Zabezpiecz go: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. - Przetestuj 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ć.
- Utwórz plik konfiguracyjny:
nano ~/.my.cnf. - Dodaj:
[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.
- Utwórz plik
~/pi_backup.shi wklej kod:
Bash
#!/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 {} \;
- Ustaw uprawnienia wykonywania:
chmod +x ~/pi_backup.sh.
Krok 5: Automatyzacja za pomocą Crona
Harmonogram uruchamiania skryptu codziennie o 2:00 w nocy.
- Otwórz crontab:
crontab -e. - Dodaj linię:
0 2 * * * /home/pi/pi_backup.sh > /home/pi/backup_log.txt 2>&1.