Z końcem roku wygasa moje ostatnie konto hostingowe, czyli hosting współdzielony. Zostaną mi tylko konta opłacane bezpośrednio przez niektórych klientów (coś o tym będzie niebawem). Wprawdzie z takim zamiarem nosiłem się od dawna, to cały czas utrzymywałem 2 ostatnie konta tego typu, na których trzymałem “spokojniejsze strony”. Pierwsze konto pożegnałem we wrześniu, za kilka dni pożegnam ostatnie. Nie będę ukrywał, że w podjęciu decyzji pomogła mi firma hostingowa (o tym też będzie niebawem). Niezależnie od powodów, całkowita rezygnacja z hostingu współdzielonego oznacza, że musiała rozwinąć się moja flota serwerów VPS…

Rsync i SSH, czyli VPS2VPS

W pewnym momencie, dzięki procedurom i automatyzacji niektórych czynności konfiguracja kolejnego serwera staje się rutyną, to jednak są pewne zadania, które trzeba wykonać, i które zajmują czas, który w innym przypadku można by przeznaczyć na inne zadania (lub rozrywki ;-)). Stąd w tym gorącym okresie (Święta Bożego Narodzenia + pożegnanie hostingów) postanowiłem maksymalnie zautomatyzować całą operację.

Jeśli dostawca usług pozawala, to najprościej wykonać to za pomocą przygotowanego wcześniej obrazu systemu, dzięki czemu cała operacja nie dość, że jest szybka i wygodna, to raczej na pewno nie spotkają nas w jej trakcie jakieś nieprzewidziane przygody. Tak zazwyczaj robię np. w przypadku serwerów w DigitalOcean.

Tym razem jednak takiej opcji nie mam, bo wprawdzie “ten konkretny dostawca usługi” ogólnie posiada coś takiego, ale tylko w najwyższych planach, z których nie skorzystałem – tym razem postanowiłem rozdzielić strony na kilka mniejszych maszyn, choćby po to by móc je wzajemnie synchronizować. Dlatego postanowiłem skorzystać z programu Rsync, za pomocą którego bezpiecznie (z wykorzystaniem SSH) przeniosłem wszystkie dane między maszynami.

Wykluczeni i wykluczone

Zanim zaczniemy kopiowanie musimy określić katalogi, które wykluczymy z tej operacji, bo nawet w sytuacji takiej jak moja, czyli kopiowanie w obrębie maszyn o identycznej konfiguracji programowo-sprzętowej u tego samego dostawcy inaczej wystąpią problemy.

W moim przypadku standardowa lista wykluczonych katalogów dla VPSa na Debianie wygląda tak:

/boot
/dev
/media
/mnt
/proc
/run
/sys
/tmp

Do tego kilka plików:

/initrd.img
/vmlinuz
/etc/fstab
/etc/network/interfaces
/etc/hostname
/etc/hosts

Do tego zazwyczaj dochodzą jakieś pojedyncze katalogi związane np. z kopiami zapasowymi (BackUp), ale to już każdy z Was musi określić je samodzielnie.

Kopiowanie, czyli synchronizacja

Następnym krokiem jest synchronizacja plików za pomocą programu Rsync (powinien być zainstalowany na obu maszynach), z wykorzystaniem bezpiecznego połączenie przez SSH.

Z racji tego, że pliki będę kopiował na świeżutki serwer zdalny, to mogę skorzystać z takiego polecenia:

sudo rsync -aHlxvz --numeric-ids --progress --delete --exclude=/boot/* --exclude=/dev/* --exclude=/media/* --exclude=/mnt/* --exclude=/opt/* --exclude=/proc/* --exclude=/run/* --exclude=/sys/* --exclude=/tmp/* --exclude=/initrd.img --exclude=/vmlinuz --exclude=/etc/fstab --exclude=/etc/network/interfaces --exclude=/etc/hostname --exclude=/etc/hosts /* -e ssh root@Adres_IP_docelowego_serwera:/

W przypadku, gdyby serwer docelowy był już po wstępnej konfiguracji, i np. usługa SSH działa na innym porcie niż domyślny (zalecam), to polecenie trzeba lekko zmodyfikować, dodając numer portu:

sudo rsync -aHlxvz --numeric-ids --progress --delete --exclude=/boot/* --exclude=/dev/* --exclude=/media/* --exclude=/mnt/* --exclude=/opt/* --exclude=/proc/* --exclude=/run/* --exclude=/sys/* --exclude=/tmp/* --exclude=/initrd.img --exclude=/vmlinuz --exclude=/etc/fstab --exclude=/etc/network/interfaces --exclude=/etc/hostname --exclude=/etc/hosts /* -e "ssh -p PORT" root@Adres_IP_docelowego_serwera:/

Gdy oprócz zmiany domyślnego portu dla połączenia SSH do docelowego serwera łączymy się dodatkowo z wykorzystaniem pliku certyfikatu (również zalecam), do polecenia należy dodać kolejny parametr:

sudo rsync -aHlxvz --numeric-ids --progress --delete --exclude=/boot/* --exclude=/dev/* --exclude=/media/* --exclude=/mnt/* --exclude=/opt/* --exclude=/proc/* --exclude=/run/* --exclude=/sys/* --exclude=/tmp/* --exclude=/initrd.img --exclude=/vmlinuz --exclude=/etc/fstab --exclude=/etc/network/interfaces --exclude=/etc/hostname --exclude=/etc/hosts /* -e "ssh -p PORT -i /ścieżka/do/klucza/prywatnego" root@Adres_IP_docelowego_serwera:/

Po tej operacji drugi serwer powinien pod względem konfiguracji odpowiadać serwerowi źródłowemu, z którego kopiowaliśmy pliki. Oczywiście w wielu przypadkach nie obejdzie się bez kilku ręcznych korekt, ale to już zależy od konfiguracji serwera (serwerów).

Indywidualne zabezpieczenia

Ze względów bezpieczeństwa zalecam by na “sklonowanych maszynach” dokonać zmiany haseł dla poszczególnych użytkowników, oraz – jeśli korzystacie – wygenerować nowe klucze (certyfikaty) SSH, oraz tokeny dla uwierzytelnienia dwuskładnikowego (2FA).

Reszta ustawień – tak jak napisałem w jednym z poprzednich akapitów – zależy od Waszej indywidualnej konfiguracji źródłowej.

(!) Zgłoś błąd na stronie | Lub postaw nam kawę :-)
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk