Kopia zapasowa konta hostingowego na Dropbox

W tym materiale opiszę, jak w szybki sposób można zrobić sobie kopię plików strony www i jej bazy danych na dropbox. Myślę, że taka, praktycznie darmowa forma backupu przyda się właścicielom VPS’ów i kont z dostępem do shella.

Backup na www, jak to działa?

Całość to kilka prostych skryptów, gdzie najważniejszy to Dropbox Uploader wysyłający wskazane pliki do naszego dropboksa. Drugi ma za zadanie wykonać kopię baz danych, działających na silniku mysql/mariadb. Trzeci plik tworzy archiwum z plików strony www. Czwarty skrypt jest cyklicznie uruchamiany przez cron’a i uruchamia w odpowiedniej kolejności trzy wyżej opisane.

Instalacja i konfiguracja skryptu Dropbox-Uploader

Skrypt Dropbox Uploader znajdziesz na Githubie w tym miejscu: https://github.com/andreafabrizi/Dropbox-Uploader. Instalacja sprowadza się praktycznie do skopiowania skryptu, można to zrobić na dwa sposoby:

  1. Za pomocą git, przechodzimy do katalogu w którym chcemy by znalazł się skrypt i klonujemy repozytorium:
git clone https://github.com/andreafabrizi/Dropbox-Uploader.git

2. Ręcznie kopiujemy skrypt:

curl "https://raw.githubusercontent.com/andreafabrizi/Dropbox-Uploader/master/dropbox_uploader.sh" -o dropbox_uploader.sh

Czy zrobimy to 1 czy 2 metodą, na koniec musimy nadać uprawnienia do wykonywania, czyli:

chmod +x dropbox_uploader.sh

Konfiguracja Dropbox Uploadera rozpocznie się automatycznie podczas pierwszego uruchomienia, wpisujemy w terminalu:

./dropbox_uploader.sh

No i mamy dokładną instrukcję, co należy zrobić. W skrócie: trzeba otworzyć dropboksa w przeglądarce i zalogować się do niego, następnie przechodzimy pod adres https://www.dropbox.com/developers/apps, gdzie stworzymy sobie aplikację :):

Jeśli nie masz konta na Dropboksie, załóż je z tego linku >> KONTO DROPBOX <<. Zamiast standardowych 2GB dostaniesz o 500MB więcej, ja również.

Wciskamy [Create app], w następnym oknie wybieramy Dropbox API, a dalej pozwalamy na dostęp do pojedynczego folderu lub do całego dropboksa. Ja ze względów bezpieczeństwa i specyfiki zadań jakie będą wykonywane, wybieram dostęp do pojedynczego katalogu. Ustalam nazwę aplikacji na ‘backup_lemp’ i tu uwaga, nazwa musi być unikatowa:

Po stworzeniu aplikacji, pokaże się okno jak niżej, klikamy tam Generate access token:

i to co otrzymamy kopiujemy do naszego dropbox uploadera:

Nasza konfiguracja została zapisana w folderze, w którym jest skrypt, pod nazwą dropbox_uploader, plik jest ukryty. Na naszym dropboksie pojawił się nowy folder Apps, a w nim folder z nazwą aplikacji, która ma do niego dostęp:

Od teraz możemy używać skryptu do wysyłania, ściągania, usuwania plików i katalogów, o czym niżej, ale najpierw skrypty do tworzenia backupu.

Skrypty do backupu baz danych i plików stron www

Mamy już czym wysyłać backupy, ale nie mamy samych backupów. W internecie można znaleźć mnóstwo mniej lub bardziej rozbudowanych skryptów bo backupowania. Ja na początek zbudowałem sobie dwa proste – do przygotowywania archiwum plików stron internetowych:

#!/bin/bash

# kopia plikow stron www v 0.2

# backup plikow strony grylewicz.pl
tar -zcvf /home/hswg1/backup/files_grylewicz.pl-$(date +%F).tar.gz /var/www/grylewicz.pl/html/

# backup plikow strony enigma2.hswg.pl
tar -zcvf /home/hswg1/backup/files_enigma2-$(date +%F).tar.gz /var/www/enigma2.hswg.pl/html/

# backup plikow strony gigablue.hswg.pl
tar -zcvf /home/hswg1/backup/files_gigablue-$(date +%F).tar.gz /var/www/gigablue.hswg.pl/html/

# backup plikow strony turbodiesel.hswg.pl
tar -zcvf /home/hswg1/backup/files_turbodiesel-$(date +%F).tar.gz /var/www/turbodiesel.hswg.pl/html/

# backup plikow strony ttrss.hswg.pl
tar -zcvf /home/hswg1/backup/files_rss-$(date +%F).tar.gz /var/www/rss.hswg.pl/html/

Do archiwum dodawana jest data. Wynik działania zostanie zapisany w katalogu backup, który jest w moim katalogu domowym. Skrypt zapisałem w pliku pod nazwą files_backup i dodałem uprawnienia do wykonywania (chmod +x files_backup), a uruchomienie wygląda tak:

./files_backup

Drugi skrypt wykonuje kopie baz danych, których silnikiem jest MariaDB (MySQL), wygląda on tak:

#!/bin/bash

# skrypt backupujacy bazy danych mysql/mariadb v 0.2

# backup bazy grylewiczpl
mysqldump --defaults-extra-file=/home/hswg1/.auth.cnf -u  nazwa_usera grylewiczpl > /home/hswg1/backup/db_grylewiczpl-$(date +%F).sql

#backup bazy enigma2
mysqldump --defaults-extra-file=/home/hswg1/.auth.cnf -u  nazwa_usera enigma2 > /home/hswg1/backup/db_enigma2-$(date +%F).sql

#backup bazy gigablue
mysqldump --defaults-extra-file=/home/hswg1/.auth.cnf -u  nazwa_usera gigablue > /home/hswg1/backup/db_gigablue-$(date +%F).sql

#backup bazy turbodiesel
mysqldump --defaults-extra-file=/home/hswg1/.auth.cnf -u  nazwa_usera turbodiesel > /home/hswg1/backup/db_turbodiesel-$(date +%F).sql

#backup bazy tt-rss
mysqldump --defaults-extra-file=/home/hswg1/.auth.cnf -u  nazwa_usera ttrss > /home/hswg1/backup/db_tt-rss-$(date +%F).sql

Kopie wykonuje użytkownik nazwa_usera (część składni -u nazwa_usera). Plik ze zrzutem bazy również ma dodawaną datę. Hasło użytkownika jest zapisane w pliku .auth.cnf, który wygląda tak:

[client]
user = nazwa_usera
password = J@kie5_tRudn3_h@sl0

Skrypt zapisałem pod nazwą sql_backup i nadałem mu prawa do wykonywania (chmod +x sql_backup). Uruchomienie to tradycyjnie:

./sql_backup

Efektem działania tych 2 skryptów są archiwa z plikami oraz kopie baz danych:

I to już jest materiał do wysłania na dropboksa.

Wysyłanie plików na Dropbox za pomocą dropbox uploader

Pełna lista komend, obsługiwanych przez dropbox uploader jest dokładnie opisana na githubie, jeszcze raz link -> https://github.com/andreafabrizi/Dropbox-Uploader

W celu wysłania plików z lokalnej maszyny w chmurę, interesuje nas komenda upload, składnia wygląda tak:

./dropbox_uploader katalog_lokalny/plik_lub_pliki katalog_na_dropboksie

Chcę wysłać zawartość mojego katalogu z kopiami, do folderu głównego aplikacji na dropboksie, więc:

./dropbox_uploader.sh upload backup/*.* /

Efekt działania w terminalu:

I po chwili pliki są na dropboksie:

Jeśli jakieś pliki się powtarzają, to nie zostaną wysłane. Jeśli powtarzają się nazwy, ale zawartość jest różna, to te na dropboksie zostaną nadpisane, chyba że użyjemy parametru -s (skip).

No to ręcznie już wiemy jak to zrobić, to teraz prosta automatyzacja.

Automatyzacja backupu

Najprostszy sposób na automatyzację w linuksie to zastosowanie crona. Trzeba jeszcze jakoś usystematyzować wcześniej pokazane skrypty i nasz cel. Moje założenia:

  1. Wykonuję kopię baz i plików raz w tygodniu i wysyłam do dropboksa,
  2. Lokalnie trzymam pliki nie starsze niż 31 dni.

Punkt 1 widzę jako skrypt, który usunie pliki starsze niż miesiąc, zrobi backup i wyśle go na dropboksa w godzinach małego ruchu na stronie. Skrypt wygląda tak:

#!/bin/bash

# skrypt uploadujacyy bazy danych mysql/mariadb i pliki stron v0.1

# znajdz pliki starsze niz 31 dni i usun je
find /home/hswg1/backup/ -type f -mtime +31 -exec rm -f {} \;

# zrob kopie baz
/home/hswg1/sql_backup

#zrob kopie plikow
/home/hswg1/files_backup

# wyslij pliki na dropbox
/home/hswg1/dropbox_uploader.sh upload /home/hswg1/backup/*.* /

I teraz dodajemy go do crona, Czyli w terminalu wpisujemy crontab -e i dodajemy linijkę:

# W kazdy poniedzialek o 3:45 zacznij wykonywac skrypt

45 3 * * 1 /home/hswg1/upload_backup

Przy takim założeniu i konfiguracji należy pilnować miejsca na dropboksie, bo stamtąd pliki nie są usuwane. To też pewnie da się zautomatyzować (dropbox_uploader ma opcje wylistowania i usuwania plików na dropboksie). Może ktoś z czytelników pokusi się o popełnienie odpowiedniego skryptu? ;).

Możesz również polubić…

Leave a Reply

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.