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.
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.
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:
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.
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.
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.
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:
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? ;).
Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…
Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…
Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…
W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…
Dziś tematyka audio, a nawet audiofilska. Uznany wzmacniacz słuchawkowy Lehmann Black Cube Linear o dość…
Tradycyjnie w styczniu, publikuję podsumowanie minionego roku na stronie grylewicz.pl. Poniżej trochę liczb, lista najpopularniejszych…