PrestaShop è un'ottima soluzione CMS per moltissime tipologie di e-commerce. Abbiamo già visto la procedura di installazione di PrestaShop e come configurare il memory limit di PHP in caso di hosting.

Oggi vedremo come affrontare, in modo pratico, l'eventuale migrazione di un'istanza di PrestaShop da una macchina ad un'altra. Si tratta di uno scenario abbastanza frequente, che potrebbe presentarsi per motivi diversi

  1. Cambiamo host provider (tipicamente perché migriamo il dominio)
  2. Dobbiamo copiare un'istanza remota in locale, o viceversa
  3. Vogliamo aggiornare PrestaShop in remoto, e vogliamo prima provare in locale la procedura di aggiornamento

Tutti questi casi si possono ricondurre al secondo scenario: se siamo in grado di migrare PrestaShop da remoto a locale, e viceversa, siamo potenzialmente capaci di effettuare qualsiasi migrazione. Per questo motivo consideriamo, come esercizio e tutorial, il caso di migrazione da remoto a locale.

Copia locale

Assumiamo di avere un'installazione di PrestaShop già attiva in remoto. Per portarle in locale, la prima cosa da fare è effettuare un export del database. A parte rare eccezioni, PrestaShop utilizza MySQL, per cui phpMyAdmin si presta perfettamente allo scopo. Colleghiamoci al database utilizzando phpMyAdmin tramite l'indirizzo o lo strumento fornito dal nostro provider (ad esempio Plesk o cPanel). Dall'interfaccia di phpMyAdmin scegliamo la tab Esporta: nel riquadro Esporta selezioniamo il database di PrestaShop, controlliamo di avere selezionato le check-box SQL (formato di esportazione) e Salva con nome (in basso), scegliamo un nome per il file di export e clicchiamo su Esegui.

Volendo, è possibile spuntare una voce di compressione, come ad esempio zip o gzip, a seconda del volume d'affare della nostra attività. Se l'attività è modesta, o in piedi da pochi mesi, probabilmente l'export del database sarà molto leggero e possiamo scaricarlo senza compressione. In caso contrario vale la pena scegliere un formato di compressione.

Il secondo passo è collegarsi al sito con un client FTP (quello che usiamo di solito), verificare di avere impostato l'interfaccia del client per visualizzare i files nascosti, e portare in locale l'intera copia del sito. La durata di questo processo dipende dalla dimensione del nostro catalogo: se abbiamo qualche centinaio di prodotti, con relative immagini, il download del sito potrebbe richiedere parecchie ore. Se temiamo di non poter lasciare acceso il PC, o abbiamo problemi di tempo, è buona norma iniziare a scaricare il sito al mattino, come attività in background.

Configurazione locale

Dopo aver portato in locale il file di export del database e la copia dell'intero sito (files e directories), dobbiamo riprodurre l'ambiente locale adeguato. Questo è il passaggio più laborioso e delicato, ma non spaventiamoci: seguire la procedura qui sotto è semplice e non richiede alcuna competenza specifica. L'unico svantaggio, se non siamo dei sistemisti esperti, è che potremmo non essere in grado di risolvere eventuali problemi o difficoltà. Ma vale la pena provare comunque, per almeno tre motivi: non rischiamo di perdere nulla, sbagliando si impara e la probabilità di successo sono elevate.

  1. Creiamo un database vuoto sul nostro MySQL locale, ad esempio tramite phpMyAdmin, usando tutte le ipotesi di default
  2. Importiamo nel database appena creato il file di export scaricato dal sito remoto, sempre con tutte le opzioni di default
  3. Creiamo sul database locale un utente dedicato al nostro database. Per semplicità possiamo creare l'utente usando lo stesso login e password del database remoto. Subito dopo, inoltre, è una buona idea testare la connessione (con l'utente appena creato) usando un client SQL
  4. Copiamo (o spostiamo) l'intero sito (tutti i files e le cartelle) nella htdocs o www dell'Apache locale. Questo ovviamente dipende da come e dove abbiamo installato Apache. Se possibile evitiamo di copiare nella root di Apache, ma copiamo il sito in una directory dedicata (ad esempio ilmiosito)
  5. Modifichiamo il file settings.inc.php locale per inserire in nuovi dati. I parametri da cambiare dovrebbero essere __PS_BASE_URI__ (il percorso rispetto la DocumentRoot di Apache, ad esempio ilmiosito) e _DB_SERVER_ (l'host del dabase, probabilmente localhost): tutti gli altri parametri dovrebbero restare invariati
  6. Facciamo una copia del file .htaccess originale, chiamandolo ad esempio htaccess.original: questo è necessario se lavoriamo su Windows, perché Windows non permette di creare file senza nome (come .htaccess), per cui siamo costretti a modificare quello originale
  7. Apriamo il file .htaccess con un editor qualsiasi (Notepad, Notepad++, VIM o quello che ci piace) e cancelliamo il suo contenuto, dopodiché salviamo. Come accennato al punto precedente, questo è uno modi più semplici di creare un file .htaccess vuoto su Windows: ecco perché al punto 6 abbiamo fatto una copia di backup dell'originale
  8. Avviamo il web server locale (Apache) e il database locale (MySQL): se usiamo un pacchetto AMP probabilmente possiamo compiere quest'operazione con un click
  9. Colleghiamoci al backend, usando lo stesso indirizzo remoto, modificato ad hoc in locale. Ad esempio, se in remoto usiamo

http://www.ilmiosito.com/my_admin/

in locale probabilmente useremo

http://localhost/ilmiosito/my_admin/

  1. Nell'interfaccia del backend andiamo in UtilitàGeneratori e clicchiamo sul pulsante (o scritta) Genera file .htaccess

In conclusione, i files modificati in locale, rispetto l'installazione remota, dovrebbero essere solamente il file .htaccess e settings.inc.php: ricordiamocelo al momento di riportare il sito in remoto, o altrove, per evitare di perdere o sovrascrivere i due files dell'installazione originale.