Skrypt do backupów na serwer FTP/SFTP

Zombie
vps
DBanaszewski
DBanaszewski α-tester v3

Skrypt do wykonywania backupów

Według regulaminu usługi serwer VPS, pkt. 6.1.2:

Użytkownik jest zobowiązany wykonywać w sposób regularny kopie danych przechowywanych w Usłudze;

więc przychodzę z odsieczą :slight_smile:

Oto prosty skrypt do wykonywania kopii zapasowych na zewnętrzny hosting z dostępem FTP/SFTP (przykładowo wystarczy w2.lvlup.pro).

Informacja

Jeżeli wykonujesz wszystkie te polecenia na koncie root, przedrostek sudo jest niepotrzebny.

Co trzeba zainstalować?

Dużo skrypt nie wymaga:

sudo apt install tar gzip ftp cron

Konfiguracja

Aby skonfigurować skrypt musimy otworzyć go za pomocą programu np. Notepad++ (w Windows) lub vim (w Linux) Następnie widzimy następujący obraz:

image|603x444

W polu host piszemy adres IP hostingu FTP - przykładowo w2.lvlup.pro W polu username wpisz swoją nazwę użytkownika (subkonto z w2.lvlup.pro będzie posiadało małpę, np. andrzej@mojadomena.pl) W polu password wpisz swoje hasło - najlepiej, aby nie zawierało znaków typu " czy '. W polu path wpisz folder (tylko jeden, niestety), a prawidłowo dokładną ścieżkę np. /home/andrzej/ W polu partition wpisz "adres" partycji dysku W polu maxusage wpisz maksymalny limit zajętości dysku - na pełnym nie zrobimy backup'u 😛

Automatyczne wykonywanie się skryptu

Musimy przenieść skrypt w miejsce dla wszystkich skryptów/aplikacji. Wykonaj to tak:

sudo mv backup.sh /usr/bin/

Następnie musimy nadać uprawnienia do wykonywania skryptu:

sudo chmod +x /usr/bin/backup.sh

Teraz musimy edytować crona przy pomocy:

sudo crontab -e

Teraz musimy wybrać swój ulubiony edytor - wpisujemy jakąś cyferkę. Moim ulubionym edytorem jest vim. Teraz dodajemy zadanie do cron'a:

0 7 * * * sync; bash /usr/bin/backup.sh

Po dodaniu tej linijki, zapisujemy plik. Skrypt będzie wykonywał się codziennie o 7:00 (rano). Możemy to zmienić według własnego

Wygląd mojego przykładu: image|366x24

Zapisujemy i gotowe.

Ręczne wykonywanie skryptu

Jeżeli ktoś potrzebuje zrobić backup raz na tydzień, może to zrobić w cron'ie lub ręcznie. Wtedy wystarczy uruchomić skrypt normalnie.

Metoda krótsza

sudo bash backup.sh

Metoda dłuższa

Musimy nadać uprawnienia do uruchomienia:

sudo chmod +x backup.sh

A następnie uruchamiamy:

sudo ./backup.sh

Download

Skrypt znajduje się w repozytorium. Bezpośredni link: klik

Pozdrawiam :)

Jebanany
Jebanany

Myślę, że warto nawet katalog do tymczasowego pakowania /tmp/backup/ dodać do zmiennych, ale domyślnie wpisać tę ścieżkę.

Pomyśl też o możliwości wyświetlania każdego kroku. W sensie, po każdej operacji echo aktualnie ukończonego zadania.

Może jeszcze sprawdzenie czy jest odpowiednia ilość miejsca na dysku na spakowanie plików?

DBanaszewski
DBanaszewski α-tester v3

Dzięki za pomysły, co do sprawdzania dysku, mam gotowy skrypt, ale muszę go przetestować, czy nie ma w nim błędów. Postaram się na dniach opublikować aktualizację ;)

anon10657637
anon10657637

Wsparcie SSH, zmień trzymanie kodu na jakiś VCS, to co @Jebanany napisał i będzie git 😛

DBanaszewski
DBanaszewski α-tester v3

Co do SSH, to zrobił bym "gałąź" - w sensie dodałbym jakiś argument np. -ssh. Ogólnie mam plan usunąć konfigurację, a dodać argumenty czy coś takiego.

Timo
Timo Moderator forum.lvlup.pro

Connected to w2.lvlup.pro. 220---------- Welcome to Pure-FTPd [privsep] [TLS] ---------- 220-You are user number 8 of 50 allowed. 220-Local time is now 20:06. Server port: 21. 220-This is a private system - No anonymous login 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. 331 User ts3@moja-domena-w-direct-admin.pl OK. Password required 530 Login authentication failed Login failed. Local directory now /tmp/backup local: 2018-01-23_20-06-34.tar.gz remote: 2018-01-23_20-06-34.tar.gz 530 You aren't logged in ftp: bind: Address already in use 221-Goodbye. You uploaded 0 and downloaded 0 kbytes. 221 Logout. Kopia zostala wykonana!

DBanaszewski
DBanaszewski α-tester v3

Hmmm... wygląda na błędny login lub/i hasło - spróbuj się zalogować z innego konta - sprawdź czy nie wdała się gdzieś spacja ;)

Timo
Timo Moderator forum.lvlup.pro

Zapewniam cię, że hasło jest poprawne i login też. Spróbuję na koncie głównym - bez @ w loginie.

Timo
Timo Moderator forum.lvlup.pro

Przy łączeniu przez konto główne poprawnie wrzuciło pliki. Miałem kiedyś taki skrypt, który nie działał przy korzystaniu z @ w loginie - do w2.

DBanaszewski
DBanaszewski α-tester v3

Spróbuj dodać cudzysłów. Przykład: "nazwa@domena.pl" ;)

Nie wiem czy działa, ale warto sprawdzić ;)

Timo
Timo Moderator forum.lvlup.pro

😱 😂 ❤️

Jebanany
Jebanany

Timo:

530 Login authentication failed

FTP nie oszukuje, coś zostało błędnie podane.

Timo
Timo Moderator forum.lvlup.pro

Błąd rozwiązaliśmy:

DBanaszewski:

Spróbuj dodać cudzysłów.

Przykład: "nazwa@domena.pl" 😉 Pewnie coś błędnie czytało. Użyłem cudzysłowie i działa :D

Toranktto
Toranktto

Według mnie warto zmienić shebang na "#!/usr/bin/env bash" z racji tego że na Unixach bash instalowany jest domyślnie w innej lokalizacji (przykładowo w Solarisie '/usr/bin/bash', w NetBSD '/usr/pkg/bin/bash' a we FreeBSD i HP-UX - '/usr/local/bin/bash').

MTGmati
MTGmati

Przyda się. Czekam na opcje z SSH 😉

DoreK
DoreK α-tester v3

Również czekam, być może kupię jakieś konto SFTP w lvlup na backupy ;) Mam też pytanie - w proxmox zauważyłem pewien przycisk do utworzenia kopii. Jak on działa i czy w ogóle działa (nie miałem okazji tego sprawdzić jeszcze)? :P

DBanaszewski
DBanaszewski α-tester v3

Nie, nie działa 😕 (Znaczy się działa, ale nie ma miejsca na tegp typu kopie)

helczyna
helczyna

Z tego co przeczytałem to kopie tworzą się bez limitu. Mój dysk na w2.lvlup.pro na ten przykład jest mały. Warto dodać limit kopii zapasowych i usuwać starsze kopie. Ja z tym nie będę nadążać.

DBanaszewski
DBanaszewski α-tester v3

Nowa aktualizacja!

Dzisiaj wyszła nowa, mała aktualizacja.

Changelog:

  • usunięto zbędne linie kodu
  • dodano mały system sprawdzania zajętości dysku
  • dodano nowe opcje w konfiguracji

Zmienna partycja odpowiada za adres partycji (np. /dev/vda1) - wymagane jest do sprawdzenia zajętości dysku. Adres można uzyskać poprzez wpisanie komendy df. Adres znajduje się w lubryce System plików lub File system (zależy od wybranego języka). Owa partycja musi być zamontowana na / (lubryka zamont. na lub monuted on).

Zmienna maxprocent odpowiada za maksymalną ilość % zajętości dysku. Powyżej danej liczby % zajętości dysku, kopia nie wykona się.

Ogólem dodano propozycję wyświetlania każdego kroku i sprawdzania odpowiedniej ilości miejsca na dysku @Jebanany'ego.

Co do opcji z SSH jest jeszcze w trakcie dopracowywania - będzie opierała się na scp lub na sftp.

Co do propozycji @helczyna - nie ma takiej możliwości - możesz sam na hostingu WWW utworzyć zadanie cron, które będzie usuwało starsze kopie. Obecnie sam po prostu kasuję kopie po 3 dniach.

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

To ja tylko podrzucę przykładową komendę na czyszczenie:

find SCIEŻKA -mtime +ILOŚĆ_DNI -exec rm {} \;
DBanaszewski
DBanaszewski α-tester v3

Nie jest to komenda na czyszczenie poprzez protokół FTP ;) Co do opcji z SSH to mi się akurat przyda ;)

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Ktoś używa jeszcze ftp?

DBanaszewski
DBanaszewski α-tester v3

Ten skrypt ;)

DBanaszewski
DBanaszewski α-tester v3

Nowa aktualizacja!

Przed chwilą wydałem aktualizację :)

Changelog:

  • dodano możliwość wgrywania backup'ów na serwer SSH
  • usunięto zbędny kod

Teraz, aby przesłać kopię na serwer SSH musimy dodać dopiskę -s lub --ssh (przykład: sudo backup.sh -s). Jeżeli chcesz wysłać ową kopię na serwer FTP musimy dodać dopiskę -f lub --ftp (przykład: sudo backup.sh -f).

Jeżeli ma ktoś problemy lub pytania to zapraszam do rozmowy tutaj lub na priv ;)

UWAGA! Skrypt nie działa na systemach innych niż Ubuntu, Debian i inne, debianopochodne (wszystkie systemy, które używają apt.)

Jebanany
Jebanany

Jeśli masz serwer na backupy, to tańsze rozwiązania nie udostępniają protokołu SFTP.

anon10657637
anon10657637

A ten jak zwierzę dalej trzyma na swoim hoście, a nie jak człowiek w jakimś VCS by móc obserwować postęp i zmiany w kodzie.

Toranktto
Toranktto

Nie uważasz że używanie systemu kontroli wersji do jednoplikowego, prostego skryptu to jak wyskakiwanie z karabinem maszynowym do muchy? :P

anon10657637
anon10657637

Nie.

DBanaszewski
DBanaszewski α-tester v3

Skrypt został przeniesiony na Github w celu zapewnienia 99.(9)% dostępności (zawsze może Github wywalić :kappa:) - https://goo.gl/QTTZVA.

Wersja wget:

wget https://goo.gl/QTTZVA -O backup.sh
helczyna
helczyna

Screenshot 2018-02-23 23-35-59|690x112 Github ci wywalić...

DBanaszewski
DBanaszewski α-tester v3
wget https://goo.gl/fgiPKN -O backup.sh

;)

Timo
Timo Moderator forum.lvlup.pro

Zły adres twojej strony na samej górze pliku ;)

Timo
Timo Moderator forum.lvlup.pro

Link nie działa :thinking:

Qmis
Qmis

https://gist.github.com/DBanaszewski/96066b6b869af6a9c4dec90c2cd3bbe3 @DBanaszewski co tu trzeba dokładnie podać partycja="dokladny_adres_partycji (np./dev/vda1)" #tutaj wpisz odpowiedni adres partycji (sprawdzisz to przy pomocy df -h) adres partycji tego serwera co będą robione kopie zapasowe czy adres partycji serwera do kopi

DBanaszewski
DBanaszewski α-tester v3

Qmis:

adres partycji tego serwera co będą robione kopie zapasowe czy adres partycji serwera do kopi

Tutaj musisz wpisać adres danej partycji, z której będą robione kopie zapasowe ;)

DBanaszewski
DBanaszewski α-tester v3

Aktualizacja

Poradnik został zaktualizowany, kod został przeniesiony do mojego repozytorium (link).

DBanaszewski
DBanaszewski α-tester v3

Aktualizacja

Nastąpiły pewne zmiany, kod wylądował w repozytorium, wszystko jest ok, dalej działa 😛

nitromaxpl
nitromaxpl

Tego wlanie szukalem :)

Glupikocz
Glupikocz

(wpis wycofany przez autora, zostanie automatycznie usunięty za 24 godziny, chyba że zostanie oflagowany)

Glupikocz
Glupikocz

Mam pytanie bo do Crontab -e dodałem linijkę 0 5 * * * sync; bash /usr/bin/backup.sh

i skrypt się nie wykonuje o 5 rano każdego dnia ktoś coś?

Dudix
Dudix

czy backup moze byc na jednym serwerze vps?

JanekJaran
JanekJaran

Chcesz robić lokalne kopie zapasowe? To traci sens. Kopie powinny być zdywersyfikowane, najlepiej w różnych hostingach i centrach danych.

Dudix
Dudix

chce robic backup serwera minecraft nie calego vps :)

DBanaszewski
DBanaszewski α-tester v3

No inaczej tego backupu nie zrobisz, bo jeżeli backupowanym folderem będzie / = nieskończona pętla backupowania (będzie pakowało backup, który się będzie cały czas powiększał).

Ten skrypt wykonuje tylko kopię zapasową danego folderu.

Nikox
Nikox

Da się użyć niestandardowego portu FTP?

psycho
psycho

Prawdopodobnie wystarczy lekko przerobić skrypt, aby łączył się do odpowiedniego portu.

Axerr
Axerr

Czy skrypt posiada opcję dodania klucza ssh przy logowaniu?

DBanaszewski
DBanaszewski α-tester v3

Nie, nie ma, ale postaram się dodać taką funkcję wkrótce :slight_smile:

Dudix
Dudix

popraw linki

DBanaszewski
DBanaszewski α-tester v3

Skrypt już jest porzucony. Może by i działał, ale na pewno przestał być przeze mnie wspierany ;)

Link znalazłem, to podrzucam: https://gist.github.com/dbanaszewski06/64ef9b8f100e030d271230d73f47658d

KrEdEnS
KrEdEnS Moderator Freebies

DBanaszewski:

Skrypt już jest porzucony. Może by i działał, ale na pewno przestał być przeze mnie wspierany 😉