Przenosznie sklepu PrestaShop 1.7 lub jego skopiowanie (czy sklonowanie) w celu postawienia wersji testowej/eksperymentalnej może sprawiać trudności. Postanowiłem zrobić tutorial przenoszenia skryptu PrestaShop w najtrudniejszym i najbardziej złożonym scenariuszu, czyli zmieniamy zarówno serwer i domenę. Jak przenieść PrestaShop na inny serwer? Odpowiedź w tym ilustrowanym przewodniku.
Zmiana domeny PrestaShop
Jeżeli zmieniamy tylko domenę to sprawa jest bardzo prosta. Najpierw przechodzimy do ustawień: Preferences >> SEO & URLs >> Set shop URL (lub po polsku: Preferencje >> Ruch >> Ustaw URL sklepu) i zmieniamy wartość na konkretną domenę.

Z taką sytuacją mamy miejsce kiedy rozwijamy sklep przed rejestracją domeny a deweloperski serwer w pewnym momencie staje się środowiskiem produkcyjnym.
Teraz musimy spowodować aby nowa domena wskazywała na lokalizację, na którą wskazywała stara domena. możemy to zrobić poprzez:
- edycję pola A
- podłączenie domeny w panelu do zarządzania serwerem (opcja Multidomeny lub Multistrony),
- edycja wpisów VirtualHost jeżeli na serwer wskazuje kilka domen i mamy do czynienia z jakimś VPS lub serwerem dedykowanym).
Zmiana serwera PrestaShop 1.7
Migracja PrestaShop na nowy serwer to znacznie ciekawsze zadanie. Na potrzeby tego tutorialu zainstaluję PrestaShop w najnowszej wersji 1.7 aby niczego nie przeoczyć. Dodam jakieś produkty aby mieć pewność, że wszystko zostało poprawnie przeniesione. Do celów przeniesienia, nie będę zmieniał żadnych opcji aby symulować sytuację, że oryginalna instalacja jest aktywna w trakcie całego procesu a my dysponujemy jedynie plikami i zrzutem bazy danych.
Krok 0: Tryb przerwy technicznej
Włączenie trybu konserwacji/przerwy technicznej może być przydatne jeżeli chcemy mieć idealną zgodność plików z bazą danych.

Wykonywanie kopii plików i bazy danych może spowolnić serwer i spowodować niepotrzebne problemy – to kolejny argument by włączyć przerwę techniczną ale nie jest to jakiś konieczny wymóg. Pamiętaj by po wszystkim wyłączyć przerwę techniczną.
Krok 1: Kopiowanie plików PrestaShop
Najpierw kopiujemy pliki do nowej lokalizacji. Nie kopiuj plików pojedynczo poprzez FTP. Aby zaoszczędzić sporo czasu zaloguj się na SSH lub stwórz sobie prosty plik PHP, który skompresuje cały folder ze sklepem do jednego pliku ZIP. Przenieś ten plik a potem go rozpakuj na docelowym serwerze.
Jeżeli kopiujesz pliki ze swojego lokalnego XAMPP to wystarczy użyć jakieś dowolnej aplikacji typu WinRar i zwyczajnie spakować pliki do archiwum ZIP.
Kompresja folderu do pliku ZIP na serwerze po SSH wykonujemy prostą komendą:
zip -r prestashop.zip *
Oczywiście z założeniem, że znajdujemy się wewnątrz tego folderu np. htdocs lub public_html. Na serwerze, na który przenosimy sklep wystarczy wywołać komendę
unzip prestashop.zip
Jezeli komendy zip i unzip nie działają (Command not found), trzeba zainstalować pakiet zip:
sudo apt-get install zip
Jeżeli nie masz dostępu do SSH, w ostateczności możesz stworzyć plik unzip.php z taką zawartością:
<?php system ("unzip prestashop.zip");
To spowoduje wypakowanie wszystkich plików. Upewnij się czy po rozpakowaniu plików i folderów – mają one dobrze przypisane uprawnienia, jeżeli nie wiesz jakie nadać to nadaj 777. To i tak nie ma znaczenia pod katem bezpieczeństwa, grunt aby PrestaShop mogła zapisywać pliki w niektórych folderach.
Jeżeli z jakiegoś powodu nie mamy dostępu do SSH lub nie potrafimy się zalogować, możemy stworzyć własny skrypt do archiwizowania plików na serwerze PHP.
Krok 2: Eksport bazy danych MySQL
W tym celu możemy skorzystać z konsoli lub phpMyAdmin. Aby przewodnik był przydatny dla większości odbiorców posłużę się aplikacją phpMyAdmin:

Po kliknięciu „Wykonaj” powinien nam się pobrać plik SQL. W przypadku obszernych baz można użyć opcji zaawansowanych i wybrać kompresję zip lub gzip.
Jeżeli nie masz phpMyAdmin lub nie chce ci się go włączać, możesz użyć komendy SSH (zakładamy, ze nazwa bazy danych to prestashop a użytkownik to root):
mysqldump -p -u root prestashop > presta.sql
Krok 3: Import bazy danych MySQL na nowym serwerze
Na nowym serwerze uruchamiamy phpMyAdmin i importujemy wyeksportowany plik z zawartością oryginalnej bazy danych pamiętając, że najpierw musimy wybrać istniejącą lub stworzyć nową bazę danych.
Jeżeli w tym kroku też chcemy wykorzystać SSH, to możemy skopiować plik presta.sql na nowy serwer i wywołać:
mysql -p -u root prestashop < presta.sql
W przypadku złożonych systemów (a takim niewątpliwie jest dowolna wersja PrestaShop), powinniśmy zadbać o idealną zgodność wersji MySQL bazy do której importujemy plik z bazą, z której ją wyeksportowano. Czytaj więcej jak radzić sobie z częstymi problemami w przypadku tego typu prac związanych z bazami danych w osobnym wpisie: najczęstsze problemy z bazami danych MySQL i ich proste rozwiązania.
Krok 4: Edycja pliku parameters.php
Plik parameters przechowuje podstawową konfigurację w tym dane uwierzytelniające do bazy danych. Ścieżka: app/config/parameters.php
Edytujemy stare dane dostępowe na nowe. Należy zmienić:
- adres serwera MySQL (często pozostaje localhost jeżeli baza danych jest zainstalowana lokalnie),
- nazwę użytkownika MySQL,
- hasło do MySQL,
- nazwę bazy danych.

Jeżeli adres do bazy danych to w obu przypadkach „localhost” a nazwy baz danych były identyczne zazwyczaj trzeba będzie podmienić tylko hasło. Oczywiście, jeżeli ktoś przy instalacji ustawił inny prefix lub baza wymaga podania portu to należy to tutaj także wprowadzić.
Krok 5: Edycja adresu sklepu PrestaShop w bazie danych
Przed eksportem nie zmienialiśmy domeny w ustawieniach PrestaShop, dlatego trzeba zmienić w bazie danych adres sklepu. Przechodzimy do tabeli ps_configuration i szukamy pól: PS_SHOP_DOMAIN i PS_SHOP_DOMAIN_SSL:

Jak można się domyślić, zmieniamy oryginalną domenę na nową.
To samo robimy w tabeli ps_shop_url, zmieniamy wartość w kolumnach domain i domain_ssl
Kiedy wejdziemy na sklep zobaczymy błąd 500:

W pliku var/logs/***.exception.log pojawią nam się szczegóły:
Link to database cannot be established: SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: NO) at line 127 in file classes/db/DbPDO.php
Lub (using password: YES) jeżeli oryginalny serwer logował się do MySQL za pomocą hasła. Błąd wygląda tak jakby dane w pliku parameters.php nie zostały zaktualizowane! To wina pamięci podręcznej a wyjaśnienie jest w następnym punkcie.
Krok 6: Usunięcie pamięci podręcznej
To bardzo istotny krok, PrestaShop zapisuje zawartość pliku parameters.php w kilku osobnych lokalizacjach. Jedną z nich jest plik /app/cache/prod/appProdProjectContainer.php
Aby wyeliminować wszelkie problemy należy całkowicie usunąć zawartość folderów app/cache oraz var/cache zostawiając pliki index.php, które są tam dla bezpieczeństwa.
Krok 7: Wyczyszczenie plików cookies w przeglądarce
To częsta pułapka, w którą wpadają początkujący administratorzy! Kiedy już wszystko jest zrobione okazuje się, że sklep w jakiś magiczny sposób przekierowuje na starą domenę. To wina pamięci podręcznej przeglądarki, która płata nam takie figle jeżeli nie wytrzymaliśmy i weszliśmy na nowy adres przed dokonaniem wszelkich zmian. Usuwamy pliki tymczasowe lub korzystamy z nowego okna Incognito.
Krok 8: Odbudowa .htaccess
Kiedy wejdziemy na Front-Office zauważymy, że zdjęcia nie wyświetlają się a wszelkie podstrony zgłaszają błąd 404. Na sam koniec należy usunąć plik .htaccess i przejść do panelu administracyjnego. Jeżeli przyjazne adresy były aktywowane na oryginalnym sklepie, wyłączamy je a następnie włączamy na nowo.

Dzięki temu zdjęcia będą się wyświetlać i strony nie będą zgłaszać błędu 404.
Możliwe problemy
Jeżeli sklep nie działa problemem są moduły których zabezpieczenia antypirackie uniemożliwiają działanie na innej domenie. Aby wyeliminować ten przypadek można usunąć moduły, które potencjalnie sprawiają problem na czas przenoszenia.
Zalecenia końcowe
Jeżeli jest to testowy egzemplarz sklepu, pilnuj aby nie został on przypadkowo indeksowany przez wyszukiwarkę. Byłaby to katastrofa pod kątem SEO. Sprawdź także inne potencjalne niespodzianki zmiany serwera lub domeny w przewodniku dotyczącym migracji stron i sklepów. Jeżeli modyfikacje nad którymi pracujesz, mają na celu przyspieszyć działanie sklepu Prestashop sprawdź mój szczegółowy poradnik jak przyspieszyć PrestaShop.
Podsumowanie
Przenoszenie sklepu PrestaShop może przysporzyć kłopotu jeżeli spodziewamy się przeniesienia plików, bazy danych i edycji danych dostępowych do bazy danych w jednym miejscu. Postępowanie według tych wskazówek daje 100% pewności, że sprawny sklep PrestaShop zostanie bez problemu przeniesiony do nowej lokalizacji.
Odpowiedz lub skomentuj