Backup serwera VPS Rclone

Backup serwera VPS Rclone

28 sierpnia 2021 0 przez gielo

Jednym z najczęściej wybieranych narzędzi do backupów pod linuksem jest Rsync. Jest to dobre i sprawdzone narzędzie do backupowania danych ale trzeba mieć jeszcze gdzie te dane składować. Składowanie danych backupu na dysku twardym serwera vps nie jest zbyt rozsądne, jako że w przypadku awarii serwera lub dysku twardego najprawdopodobniej stracisz wszystkie dane.

Jako posiadacz niewielkiego serwera vps, czy to pod stronę firmową, czy prywatnego bloga, niewielkiego sklepu, pocztę itp. nie będziesz chciał pewnie wydawać większej ilości pieniędzy na specjalnie do tego celu przeznaczone serwery ale zapewne będziesz chciał, aby twoje dane były bezpieczne, aby można było szybko przywrócić działające usługi w przypadku awarii oraz, aby ten proces jakoś zautomatyzować.

Rozwój internetu sprawił, że wiele firm oferuje nam spore ilości miejsca na serwerze w tzw. chmurze i to zupełnie za darmo. Tylko jak taki dysk podpiąć do naszego serwera, aby backupy ważnych dla nas danych mogły się wykonywać?

Z pomocą przychodzi nam Rclone, który jest w stanie sprostać temu zadaniu. Na chwilę obecną jest on w stanie wykonywać takie backupy do ponad 40 różnych lokalizacji a są to:

1Fichier
Alibaba Cloud (Aliyun) Object Storage System (OSS)
Amazon Drive (See note)
Amazon S3
Backblaze B2
Box
Ceph
Citrix ShareFile
C14
DigitalOcean Spaces
Dreamhost
Dropbox
Enterprise File Fabric
FTP
Google Cloud Storage
Google Drive
Google Photos
HDFS
HTTP
Hubic
Jottacloud
IBM COS S3
Koofr
Mail.ru Cloud
Memset Memstore
Mega
Memory
Microsoft Azure Blob Storage
Microsoft OneDrive
Minio
Nextcloud
OVH
OpenDrive
OpenStack Swift
Oracle Cloud Storage
ownCloud
pCloud
premiumize.me
put.io
QingStor
Rackspace Cloud Files
rsync.net
Scaleway
Seafile
SeaweedFS
SFTP
StackPath
SugarSync
Tardigrade
Tencent Cloud Object Storage (COS)
Uptobox
Wasabi
WebDAV
Yandex Disk
Zoho WorkDrive
The local filesystem

Ja proponuje skorzystać z GoogleDrive, który oferuje nam aż 15GB miejsca w darmowej taryfie i to na podstawie niego przedstawię cały proces konfiguracji.

Instalacja Rclone

Rclone nie będzie pewnie zainstalowany w twoim systemie, więc aby to zrobić wykonaj poniższe polecenia.

$ sudo apt install curl

a następnie

$ curl https://rclone.org/install.sh | sudo bash

następnie musisz przeprowadzić proces konfiguracji rclone i dodać tzw. „remotes”. Jest to instancja jaka będzie potem wykorzystywana do połączeń z kontem twojego GoogleDrive. Wydaj więc polecenie

$ rclone config

następnie postępuj zgodnie z poniższą instrukcją

Jest to nazwa twojego remote
U mnie GoogleDrive ma nr 15, u ciebie może być inny. Przejrzyj listę i wpisz odpowiedni nr dla GoogleDrive
Wciśnij po prostu Enter
tutaj także Enter
wciśnij Enter
wciśnij Enter
Skopiuj cały link po https:// w swojej konsoli i wklej w przeglądarkę internetową. Postępuj zgodnie z informacjami, a na końcu skopiuj z przeglądarki podany kod weryfikacyjny i wklej w konsolę i naciśnij Enter jak w powyższym przykładzie

następnym krokiem będzie połączenie się z dyskiem google, utworzenie katalogu na dysku vps, spakowanie danych do backupu, wysłanie ich na dysk google, usunięcie utworzonego katalogu na dysku vps. Do o tego celu proponuję wykorzystać poniższe skrypty. Co warto backupować? Pliki i bazę danych stron internetowych, wiadomości poczty email, pliki konfiguracyjne oraz logi. Jeśli potrzebujesz backupować także inne dane, stwórz do tego celu własny skrypt na podstawie poniższych. Skrypty nazwij kolejno np. backup-strony.sh, backup-bazy.sh, backup-poczty.sh

W celu zautomatyzowania zadań, poniższe skrypty dodaj do crona.

Zrzut plików strony internetowej

#!/usr/bin/env bash
# Katalog dla backupów plików
BACKUP_DIR="/StronaPliki-backup-1"
# Nazwa magazynu Google Drive =remotes- jaką podałeś przy konfiguracji rclone
REMOTE="googledrive"
# Tworzy katalog dla zrzutów na serwerze
mkdir -p "$BACKUP_DIR"
# Programy wykonawcze
    # Informacja o rozpoczęciu pracy
    echo -e "===\nRozpoczynam operacje na katalogu ze stroną."
    # Pakuje wstępnie katalog z plikami strony do jednego pliku
    tar -cf $BACKUP_DIR/twojastrona.tar /var/www/scieżka-do-twojej-strony-internetowej/
    # Kompresuje utworzony plik .tar z elementami strony
    gzip $BACKUP_DIR/twojastrona.tar
    # Wysyła skompresowany plik z elementami backupowanej strony na dysk Google
    /usr/bin/rclone copy --update --verbose --transfers 30 --checkers 8 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 $BACKUP_DIR $REMOTE:$BACKUP_DIR
    # Informacje o zakończeniu pracy backupu
    echo -e "===\nZakończono backup plików strony twojastrona.pl."
# Usunięcie katalogu backupu z serwera VPS
rm -rf /StronaPliki-backup-1

Zrzut bazy danych

#!/usr/bin/env bash
# Katalog dla bazy danych
BACKUP_DIR="/Mysql-backup-1/nazwa-bazy"
# Użytkownik bazy danych
MYSQL_USER="nazwa-użytkownika"
# Ścieżka do Mysql - Nie zmieniać!!!
MYSQL=/usr/bin/mysql
# Hasło do bazy danych
MYSQL_PASSWORD="twoje-hasło"
# Ścieżka do MySQLDump - Nie zmianiać!!!
MYSQLDUMP=/usr/bin/mysqldump
# Nazwa magazynu googledrive, stworzona przy konfiguracji rclone
REMOTE="googledrive"
# Tworzenie katalogu do zrzutu bazy
mkdir -p "$BACKUP_DIR"
# Tworzenie połączenia z bazą danych
databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`
# Program wykonawczy
for db in $databases; do
    # Komunikat rozpoczęcia pracy
    echo -e "===\nRozpoczynam operacje na $db."
    # Zrzut bazy danych do pliku
    $MYSQLDUMP --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db > "$BACKUP_DIR/$db.sql"
    # Komprecja bazy danych
    gzip $BACKUP_DIR/$db.sql
    # Wysłanie bazy danych na dysk Google
    /usr/bin/rclone copy --update --verbose --transfers 30 --checkers 8 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 $BACKUP_DIR $REMOTE:$BACKUP_DIR
    # Informacja o przeprowadzonych operacjach
    echo -e "===\nZakończono backup dla bazy $db. Spakowana baza powinna zaleźć się na dysku Google."
done
# Usuwa katalog backupu z serwera VPS w celu oszczędzaniam miejsca na dysku
rm -rf /Mysql-backup-1

Zrzut poczty/maili

#!/usr/bin/env bash
# Katalog dla backupów maili
BACKUP_DIR="/Mail-backup-1/vmail"
# Nazwa magazynu Google Drive jaką podałeś przy konfiguracji rclone
REMOTE="googledrive"
# Tworzy katalog dla zrzutów na serwerze
mkdir -p "$BACKUP_DIR"
# Programy wykonawcze
    # Informacja o rozpoczęciu pracy
    echo -e "===\nRozpoczynam operacje na katalogu /var/vmail."
    # Pakuje wstępnie katalog z plikami maili do jednego pliku
    tar -cf $BACKUP_DIR/maile.tar /var/vmail/
    # Kompresuje utworzony plik .tar z elementami katalogu maili
    gzip $BACKUP_DIR/maile.tar
    # Wysyła skompresowany plik z elementami backupowu na dysk Google
    /usr/bin/rclone copy --update --verbose --transfers 30 --checkers 8 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 $BACKUP_DIR $REMOTE:$BACKUP_DIR
    # Informacje o zakończeniu pracy backupu
    echo -e "===\nZakończono backup plików maili."
# Usunięcie katalogu backupu z serwera VPS
rm -rf /Mail-backup-1

Wytłuszczonym tekstem zaznaczyłem parametry, które musisz podmienić na własne. Jeżeli z jakiegoś powodu backup się nie wykona, sprawdź poprawność podanych przez ciebie danych ze szczególnym zwróceniem uwagi na dane dostępowe i ścieżki dostępu.

Konfiguracja backupów za pomocą rclone jest dość prosta. Jeżeli chciałbyś posiadać zawsze kopie z np. trzech ostatnich dni, zapisz skrypty pod trzema różnymi nazwami, modyfikując w nich zarazem katalogi backupów, aby miały inne nazwy. Jeśli znasz się na programowaniu możesz np. do katalogów backupów dorzucić daty backupów i usuwać te backupu z dysku google tak, aby zachowane były np. z trzech ostatnich dni, z ostatniego tygodnia itp.