Aktualizacja Wordpresa z rsync i diff

.

Istnieje co najmniej kilka metod aktualizacji Wordpresa. każda z nich ma swoje wady i zalety. Osobiście uważam, że jednym z lepszych sposób na uaktualnienie wersji systemu jest użycie narzędi rsync i diff. W niniejszym wpisie przedstawiam jak można tego dokonać w kilka prostych krokach.

Zanim przejdę do meritum przedstawię krótko rsync i diff. Oba narzędzia można znaleźć na systemach opartych o jądro Linux, ale nie tylko.

Rsync to bardzo wszechstronne narzędzie do kopiowania plików. Program potrafi kopiować jak zwykły cp, ale również z użyciem bezpiecznego połącznia między hostami za pośrednictwem SSH. Co więcej, narzędzie to posiada opcję kompresji kopiowanych danych i znakomity algorytm umożliwiający kopiowanie wyłącznie plików, które są nowsze od innych ich wersji. Prawdziwie potężne narzędzie.

Diff to program, który jak sama nazwa może sugerować, służy on do porównywania tekstu linijka po linijce.

Po tym wstępie możemy przejść do aktualizacji Wordpresa. Zakładam, że prodkcyjna wersja aplikacji opartej o Wordpresa wraz ze wszystkimi jego plikami źródłowymi jest w katalogu /home/user/www/twoja-domena.local/public_html/ na lokalnym serwerze i ma on do niej dostęp.

Kolejnym krokiem jest ściągnięcie aktualnej wersji Wordpresa z wordpress.org i rozpakowanie jej do katalogu /tmp w wyniku czego otrzymamy katalog wordpress/.

Przechodzimy do katalogu /tmp/ i sprawdzamy jak będzie wyglądać aktualizacja plików przy pomocy programu rsync:


 rsync -avv wordpress/ /home/user/www/twoja-domena.local/public_html/ --dry-run

Opcja –dry-run, jak nazwa wskazuje, powoduje, że rsync tylko symuluje kopiowanie plików. Opcja vv umożliwia zobaczenie szczegółów wykonywanej operacji. Można w ten sposób sprawdzić między innymi, które pliki będą aktualizowane, a które pominięte w wyniku przeprowadzonej operacji. Choćby z ciekawości warto się przyjrzeć temu co wyświetli sie w konsoli.

Czas na prawdziwe działenie. Powtarzamy poprzednią komendę z tą różnicą, że już bez opcji –dry-run


rsync -avv wordpress/ /home/user/www/twoja-domena.local/public_html/

Voila, wszystkie pliki Wordpresa w katalogu /home/user/www/twoja-domena.pl/public_html/ zostały pięknie zaktualizowane.

Czas zająć się plikiem wp-config.php, który znajduje się w katalogu /home/user/www/twoja-domena.local/public_html/.
Wchodzimy tam i porównujemy go z wp-config-sample.php, który pojawił się tam w wyniku aktualizacji.
Do porównania służy komenda diff.

diff wp-config.php wp-config-sample.php

W wyniku działania tego programu otrzymujemy ładny wydruk różnic między oboma plikami. Może on wyglądać jak następuje:


19c19
< define('DB_NAME', 'wp_local');
---
> define('DB_NAME', 'database_name_here');
22c22
< define('DB_USER', 'uzytkownik_bazy_danych');
---
> define('DB_USER', 'username_here');
25c25
< define('DB_PASSWORD', 'haslo_uzytkownika_bazy_danych');
---
> define('DB_PASSWORD', 'password_here');
45,52c45,52
< define('AUTH_KEY',         '(&N#W.ZDtWT` KcW|U5HoJ$ff59OTHo!R4{*?).B}NZ+M_}nmJB~xhn[%_Qiy*Zr');
< define('SECURE_AUTH_KEY',  '|9FE/~R*YDxw.h<U](]t+}Rhtteerjq-ndXYfZ|th4yGtz{H[usd@|(h%_l/lGaR');
< define('LOGGED_IN_KEY',    '%~xIE+zB0yZfsf,(Y.88s[U^^_c?uTlh[ (@AWu9[6+/YYF3&`$Z+[Ol{Md0Ve|7');
< define('NONCE_KEY',        '^.g;>{JJIo 6-b[u?30,-$QGb2+-2(,ccj;!lXXnF2Mege~}dA(R27i;ib++5]*D');
< define('AUTH_SALT',        'L.8%$5v$Kl=^Yc^,&XXNjw}3&Cq;316KIXw-qF9J:;Zh*On/]dPS*E(@Y//M`}|/');
< define('SECURE_AUTH_SALT', 'A9+&FV_mioct9qq6+-RyP!*[HZee@MbO+_:v*6%0Ga#y9ng`:UUIihfI/i%NBPJ^');
< define('LOGGED_IN_SALT',   '6M>lG`c:%8|rI>(9-c{uGYUu*W<XsW;e-e;fpNi0cpS+-W>i-~=h3/<s St#/c2U');
< define('NONCE_SALT',       'n4$Hn>Ct/~Mwk,2Hn)nze|PLoekv_bI;i3$o8)2Zo5xk+kRKLk_Kn*|6Wj^f,JgL');
---
> define('AUTH_KEY',         'put your unique phrase here');
> define('SECURE_AUTH_KEY',  'put your unique phrase here');
> define('LOGGED_IN_KEY',    'put your unique phrase here');
> define('NONCE_KEY',        'put your unique phrase here');
> define('AUTH_SALT',        'put your unique phrase here');
> define('SECURE_AUTH_SALT', 'put your unique phrase here');
> define('LOGGED_IN_SALT',   'put your unique phrase here');
> define('NONCE_SALT',       'put your unique phrase here');
81c81
< define('WP_DEBUG', true);
---
> define('WP_DEBUG', false);
91,92d90
<
<

Diff wyświetla różnice między plikami linijka po linijce. W tym przykładzie wszystkie linijki, które zaczynają się od < oznaczają mniej więcej tyle co "wrzuć tą linijką do pliku wp-config.php". Linie oznaczone znaczkiem < oznaczają "Usuń tą linijkę z pliku wp-config.php". Oczywiście powyższy przykład nie wykrył niczego nadzwyczajnego w obu plikach konfiguracyjnych. Normalnym jest, że informacje dla bazy danych i niektóre definicje zmiennych różnią się między nową i produkcyjna wersją pliku wp-config.php.

Po co więc cała ta zabawa z diff? A no po to aby sprawdzić czy przypadkiem w nowej wersji Wordpresa nie pojawiły się jakieś nowe stałe, które zostały dodane w tym pliku. Gdyby tak było, należy je dodać ręcznie do wp-config.php.

Skoro pliki mamy już załatwione, czas sprawdzić czy zaszły jakieś zmiany w bazie danych Wordpresa. Na lokalnym serwerze robimy jej kopię:


mysqldump twoja_nazwa_bazy_danych > /bezpieczne/miejsce/twoja_nazwa_bazy_danych.sql

Czas na skorzystanie z usług serwera i przeglądarki.
W polu jej adresu wpisujemy:

http://twoja-domena.pl/wp-admin/

Po zalogowaniu się do panelu administracyjnego, w przypadku gdy zaszły zmiany w bazie danych, zostanie wyświetlona strona z pytaniem o aktualizację jej tabel, wystarczy zatwierdzić aby została ona zrobiona.

Pozostaje potestować aplikację na lokalnym serwerze do momentu gdy jesteśmy pewni, że wszystko działa jak należy.
Kolejnym krokiem jest stworzenie katalogu oznaczonego kolejna wersją naszej aplikacji i wrzucić tam zawartość /home/user/www/twoja-domena.local/public_html/:


mkdir /home/user/versions/twoja-domena.local/1.1/
rsync -a /home/user/www/twoja-domena.local/public_html /home/user/versions/twoja-domena.local/1.1/

Jeżeli w pliku wp-config.php nowej wersji Wordpresa nie zaszły żadne zmiany, można go wykasować, w innym wypadku plik ten należy uaktualnić tak aby zawierał informacje identyczne jak jego jego odpowiednik na zdalnym serwerze.

Po przekopiowaniu plików na produkcyjny serwer konieczne jest zalogowanie się do panelu adinistracyjnego i powtórzenie kroków prowadzących do aktualizacji bazy danych.

To tyle.
Przedstawione czynności mogą wydawać się nieco skomplikowanymi. Jednakże, według mnie, dają dużo większą pewność co do jakości aktualizacji aplikacji opartej na Wordpresie niż automatyczna aktualizacja czy ręczna manipulacja plikami opisana w kodeksie systemu. Praktycznie cały proces można zautomatyzować. Pozosaje jedynie przetestować na lokalnym serwerze czy nowa wersja nie powoduje w jakiś sposób dziwnego zachowania naszej aplikacji.

Wpis jest dość skrótową, aczkolwiek funkcjonalną wersją aktualizacji Wordpresa. Jeżeli nie rozumiesz któregoś z kroków, zapraszam do komentowaniai zadawania pytań.


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>