W życiu każdego użytkownika WordPressa jest taki moment gdy należy zmigrować ze starego na nowy serwer. Mnie to spotkało, tym razem miałem drobne zlecenie: przenieść katalog z wordpressem z jednego na drugi serwer, skonfigurować, przetestować i przepiąć domenę. Sporo pracy, ale mając do dyspozycji SSH na zdalnym serwerze, możemy zrobić dużo więcej bez pomocy z zewnątrz jak choćby helpdesku hostingodawcy. Trudne? Bynajmniej.
SFTP bezpieczne!
O tym, że protokół ftp jest zbyt dziurawy, podatny na ataki z zewnątrz, nie muszę pisać. Dlatego cieszy mnie, że coraz więcej firm zajmujących się hostingiem / vps, daje dostęp do shella i umożliwia korzystanie z protokołu sftp. Przy czym należy podkreślić, że środowisko shellowe w ofertach poza VPS będzie zawsze w sporym stopniu ograniczone.
Dump ze starej do nowej bazy danych
Logujemy się via ssh do starego serwera i poprzez łączenie z mysql robimy export bazy danych, następnie przerzucamy na drugi serwer i ładujemy zawartość do nowej bazy danych (którą wczesniej rzecz jasna utworzyliśmy)
$ mysqldump -u username -p DATA-BASE-NAME > dump.sql $ scp dump.sql [email protected]_nr_2:/sciezka/do/katalogu/docelowego $ mysql -u username1 -p DATA-BASE-NAME < dump.sql
Jeśli nazwa użytkownika i hasło jest różne, należy zmiany te wprowadzić w wp-config:
define('DB_USER', ‘username1’); define(‘DB_PASSWORD’, ‘password1’);
Więcej informacji tradycyjnie na Codex WP
Przeniesienie z jednego do drugiego serwera
Katalog z wordpressem możemy przenieść na dwa sposoby: spakować do archiwum bądź przesłać wszystko w locie.
Należy połączyc się via ssh z serwerem nr 1, pakujemy do ZIPa:
$ zip -r wordpress.zip /wordpress
Następnie za pomocą polecenia scp przesyłamy katalog do drugiego serwera:
$ scp /wordpress [email protected]_nr_2:/sciezka/do/katalogu/docelowego
Analogicznie można przesłać ZIPa:
$ scp wordpress.zip [email protected]_nr_2:/sciezka/do/katalogu/docelowego
Wówczas na drugim serwerze należy przy użyciu polecenia rozpakować poleceniem unzip:
$ unzip wordpress.zip
Z uwagi na różnorodne konfiguracje środowisk shellowych na serwerach, warto pamiętać, że można skorzystać z dostępnej pomocy:
$ scp --help $ man scp
Skoro pliki zostały przeniesione (i rozpakowane), należy zadbać o odpowiednie uprawnienia dla plików:
- pliki: 644
- foldery: 755
Więcej informacji znajdziecie na tej stronie Codex WP.
Problemy z uprawnieniami
Może sie zdarzyć, że przy instalacji / aktualizacji pluginów WordPress poprosi o wpisanie danych FTP. Przy pojedynczych pluginach, problemu raczej nie będzie, za to gorzej z aktualizacjami samego WordPressa. Wówczas występują problemy z dostępem do tymczasowych katalogów, ba nawet nie można w locie edytować plików z poziomu edytora wordpressowego. Dlaczego tak się dzieje, wytłumaczył MatiPL:
WordPress podczas sprawdzania możliwości aktualizacji analizuje prawa dostępu do poszczególnych plików w ramach systemu blogowego. Jeśli serwer WWW ma odpowiednie prawa zapisu (niestety nie wystarczy tylko dla wp-content :/) robi aktualizacje automatycznie. W innym wypadku prosi o dane do logowanie.
Rozwiązanie jest bardzo proste i rozwiązujemy jednym poleceniem:
chmod a+w -R /wordpress
Zamiast FTP, SFTP
Jeśli nie mamy ftp’a ( ze względu bezpieczeństwa), możemy skonfigurować WordPressa tak, by korzystał z konta sftp. Edytujemy plik wp_config.php:
define('FS_METHOD', 'direct'); define('FTP_BASE', '/home/user/public_html/wordpress/'); // sciezka do katalogu z wordpressem define('FTP_CONTENT_DIR', '/home/user/public_html/wp-content/wordpress/'); define('FTP_PLUGIN_DIR ', '/home/user/public_html/wordpress/wp-content/plugins/'); #define('FTP_PUBKEY', '/home/user/.ssh/id_rsa.pub'); #define('FTP_PRIKEY', '/home/user/.ssh/id_rsa'); define('FTP_PASS', 'your-password'); define('FTP_USER', 'username'); define('FTP_HOST', 'your-domain.com:22');
Zatrzymamy się przy haśle – możemy wygenerować klucz dla WP, ale też podać hasło do ssh – co wybierzesz, zależy od Ciebie.
Najlepsze rozwiązanie?
Jest też druga metoda, polegająca na instalacji od nowa wordpressa, konfiguracji od nowa i przerzuceniu zawartości za pomocą WP importera. To jest dobre rozwiązanie ale do pewnego stopnia – jeśli mamy stosunkowo małą bazę danych, mało opcji do ustawiania. W przeciwnym razie, mogą być problemy, nawet jeśli zrobisz odpowiednia optymalizację plików czy bazy danych.
Twój wybór.
Powyższą notatkę sporządziłem dla siebie, żeby nie szukać za daleko. Jak widać, nie jest to skomplikowane, ale czasem o prostych rzeczach człowiek najzwyczajniej zapomina. W koncu tak często się nie migruje miedzy serwerami.
Na pewno przyda się nowym klientom, którzy chcą się przenieść do zenbox.pl – maja konkurencyjną ofertę dla wymagających
Źródła:
1. Następnym razem używaj tar do pakowania plików – zachowuje uprawnienia i chmody, czego zip nie czyni;
2. WordPress zawsze będzie prosił o konfigurację konta ftp jeśli ma nieodpowiednio skonfigurowane uprawnienia, lub sam skrypt jest wykonywany z uprawnieniami innego użytkownika. Tutaj jedynym znanym mi rozwiązaniem jest zainstalowanie i skonfigurowanie suPHP lub fastcgi. Osobiście korzystam z suPHP;
3. Jeśli już wypakowałeś zip i chcesz nadać odpowiednie uprawnienia, to:
chown -R user.user katalog/
find -type f -exec chmod 644 {} \; #razem z {} \; – zmienia chmod plików na 644
find -type d -exec chmod 755 {} \; #zmienia chmod folderów
Generalnie skoro już jesteśmy na shellu i mówimy o synchronizacji to polecam rsync. Brak zabaw w osobne pakowanie i samo się wszystko robi,
rsync -avz /stary_host/www/wordpress/ [email protected]:/home/nowy/blog/
Na hostingach baza faktycznie raczej musi być utworzona (bo dostawcy ograniczają nazewnictwo baz danych) ale jak mamy roota to można ją utworzyć z dumpa. Tyle że potem dodajemy usera i prawa do bazy żeby na roocie nie puszczać wordpressa.
Nadawanie praw do zapisu dla wszystkich plików i katalogów nie jest najszczęśliwszym pomysłem, niestety nie pamiętam gdzie widziałem listę plików które muszą mieć takie prawo.