Kopiowanie plików Wordpresa z rsync

.

Rsync to znakomite narzędzie do kopiowania wszelkiego rodzaju plików, także tych wchodzących w skład aplikacji Wordpresa. Niniejszy wpis ma na celu pokazać jak kopiować pliki bloga opartego na tym system zarządzania treścią z i na produkcyjny serwer z wykorzystaniem rsync.

Rsync korzysta z SSH, który jest protokołem komunikacyjnym standardowo wykorzystywanym do zabezpieczenia komunkacji między hostami w sieciach TCP/IP. Większość standardowych kont WWW nie posiada dostępu do SSH, aczkolwiek nie jest to regułą. Jeżeli znajdziemy już konto z rzeczonym dostępem to warto je przetestować i wykupić. Inną ewentualnąścią, szczególnie w przypadku blogów o dużym natężeniu ruchu, jest własny VPS czy nawet cały serwer. Tu już nie może być żadnego usrpawiedliwienia dla nie korzystania z narzędzi opartych o protokół SSH. Zyskujemy bezpieczeństwo, niezawodność i bardzo wysoki stopień konfigurowalności.

Protokół SSH opiera bezpieczeństwo transmisji o kryptografię asymetryczną i dwa klucze tj. prywatny i publiczny. Klucze te służą do zaszyfrowania połączenia. Jak sama nazwa wskazuje, klucz publiczny można upublicznić. Klucz prywatny powninen być strzeżony tak dobrze jak to tylko możliwe.

Stworzenie obu kluczy nie nastręcza niemal żadnych trudności i zajmuje ledwie kilka chwil. Na systemach unixowych i dystrybucjach opartych o jądro Linux wykorzystuje się do tego celu konsolową komendę ssh-keygen.

Proces może wyglądać jak przedstawiono poniżej.

Tworzenie kluczy i konfiguracja klienta ssh

Pierwszym z kilku kroków jest stworzenie prywatnego klucza, który będziemy przechowywać na lokalnym komputerze.


ssh-keygen -t rsa

W wyniku uruchomienia progamu ssh-keygen, zostaniemy zapytani o miejsce zapisu klucza. Domyślnie będzie to katalog /home/uzytkownik/.ssh/id_rsa.
Następnie zostaniemy poproszeni o frazę zabezpieczającą, która służy do jego zakodowania.

Frazę, o której mowa, można pominąć wciskają enter na klawiaturze. Jeżeli prywatny klucz ma być maksymalnie bezpieczny, to nie należy jednak tego robić.

Przy okazji tworzenie prywatnego klucza, zostanie utworzony i zapisany w pliku id_rsa.pub tego samego katalogu również klucz publiczny. Klucz ten należy skopiować do pliku .ssh/authorized_keys na zdalnym serwerze co można wykonac przy pomocy programy scp.


scp ~/.ssh/id_dsa.pub uzytkoniwki@zdalny_serwer.example:.ssh/authorized_keys

Następnie należy zadbać aby publiczny klucz i cały katalog .ssh na zdalnym serwerze miały określone odpowiednie prawa dostępu (wyłącznie właściciel ma prawa zapisu ).


chmod go-w . .ssh .ssh/authorized_keys

W tym momencie, jeżeli zechcemy się zalogować na zdalny serwer, zostaniemy zapytani o frazę zabezpieczającą zamiast standardowego hasła (o ile oczywiście nie pomineliśmy jej podczas tworzenia pary kluczy ).

Pozostaje skonfigurować dostęp przez ssh.
Można to zrobić poprzez stworzenie pliku ~/.ssh/config na lokalnym komputerze.

Załóżmy, że nazwa hosta, na którym mamy konto to : super-fast-host.com, a użytkownik pod którym tam figurujemy to: sample-user

Zawartość pliku ~/.ssh/config może w takiej sytuacji wyglądać jak następuje:


Host sfh
  HostName super-fast-host.com
  User sample-user

Pierwsza linijka mówi o tym, w jaki sposób będziemy się odwoływać do zdalnego hosta podczas kopiowania plików z rsync czy logowaia z za pośrednictwem klienta ssh.
Druga zawiera nazwę zdalnego hosta, trzecia natomiast określa nazwę użytkownika na zdalnym serwerze.

Czas zacząć korzystać z dobrodziejstw jakie daje protokół SSH i narzędzia dla niego napisane.

Kopiowanie plików na serwer z rsync

Załóżmy, że mamy katalog /home/user/versions/1.0/public_html/, w którym znajdują się wszystkie pliki Wordpresa.

Aby je przkopiować na zdalny serwer, należy użyć rsync w sposób jak następuje:


rsync -av /home/user/versions/1.0/public_html/ sfh:public_html/

Powyższa komenda spowoduje przkopiowanie wszystkich plików z katalogu /home/user/versions/1.0/public_html/ do katalogu ~/public_html/ zdalnego serwera.

Uwaga, jeżeli pominiemy ostatni ukośnik w nazwie katalogu /home/user/versions/1.0/public_html/, przekopiowany zostanie cały katalog public_html/ a nie tylko jego pliki. Radzę na to uważać.

Normalnie Rsync pracuje w ciszy. Informacji o tym, które pliki są kopiowane, nie są wyświetlane w konsoli. Opcja v pozwala podejrzeć działania programu (można ją zdublować, lub nawet dodać trzecie v aby otrzymać jeszcze bardziej szczegółowy obraz pracy narzędzia).

Jeżeli chcemy jedynie zasymulować kopiowanie, możemy użyć opcji –dry-run.


rsync -av /home/user/versions/1.0/public_html/ sfh:public_html/ --dry-run

Jeżeli chcemy wyłączyć z kompiowania plik wp-config.php pliki, możemy dodać opcję –exclude z jego nazwą:


rsync -av /home/user/versions/1.0/public_html/ sfh:public_html/ --dry-run --exclude /home/user/versions/1.0/public_html/wp-config.php

Kopiowanie plików z serwera

Załóżmy, że chcemy przekopiować plik w drugą stronę, czyli ze zdalnego serwera na lokalny. Nic prostszego.


rsync -av sfh:public_html /home/user/backups/

Powyższa komenda przekopiuje wszystkie pliki i katalogi z public_html/ włącznie do /home/user/backups/.

Rsync błyszczy przy aktualizacjach. Progam nie kopiuje wszystkiego jak leci, ale pliki, które są nowsze od tych na serwerze.

Rsync jest też świetnym narzędziem do przenoszenia kopii bezpieczeństwa bazy danych między hostami.

Z linii poleceń kopię bezpieczeństwa można zrobić korzystając z ssh i mysqldump.


ssh sfh
mysqldump -uUzytkownikBazyDanych -p nazwa_bazy_danych > ~/baza_danych.sql

Po wylogowaniu się z konta na zdalnym serwerze, wystarczy uruchmic komendę:


rsync -a us:baza_danych.sql ~/db_backups/ --remove-source-files

Rsync jest bardzo efektywny w kopiowaniu miedzy hostami, narzędzie nie kopiuje zbędnych plików, umożliwia ich spakowanie, jest tak szybkie na ile pozwala łącze, a przy tym całkowicie konfigurowalne.

Więcej informacji o rsync można znaleźć w jego podręczniku (man rsync).


Twój komentarz





Niektóre tagi XHTML są dozwolone
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>