27 09 10 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).
Autor wpisu jest blogerem, programistą PHP, administratorem Linux oraz twórcą blogów
RSS Subskrybuj wpisy bloga