Migrare l'e-commerce Magento CE 1.7.x a Magento CE 2.x

In questo articolo si vuole descrivere una possibile "migrazione" di una versione dell'e-commerce Magento da Magento CE (Community Edition) 1.7.0.2 a Magento CE 2.x in un ambiente di test e sviluppo. Le istruzioni sono volutamente sintetiche e non vogliono essere esaustive di tutte le casistiche possibili che vanno valutate caso per caso, in base alle estensioni intallate, alle modifiche custom e al tema installato. Vanno bene per gli appassionati, developer e/o studenti.

Immaginiamo di avere in un ambiente virtuale con Oracle Virtualbox una installazione di Debian o di Ubuntu, in cui si puo' accedere con il privilegio di amministratore root.

Per leggere correttamente questo articolo dovete conoscere come prerequisiti:

  • come funziona la console di Linux
  • come funziona un web server
  • come funziona un database mysql o simili

Per prima cosa aggiorniamo Linux Debian come root lanciando i comandi
 

Cloniamo Magento 1.7

root@debian:/home/YourUsename# apt-get update
root@debian:/home/YourUsename# apt-get upgrade

In questo modo abbiamo aggiornato il nostro Sistema Operativo Linux.

Poi leggendo i prerequisiti di Magento 2.x, seguiamo queste istruzioni per il nostro ambiente virtuale.

root@debian:/home/YourUsername# apache2 -v
Server version: Apache/2.4.10 (Debian)
Server built:   Nov 28 2015 14:05:48

Dunque Apache2 è già installato.

Dopo aver verificato con #php -v che Php non risulta installato si provvede alla sua installazione

# apt-get install php5 php5-common php5-mcrypt php5-curl php5-cli php5-mysql php5-gd php5-intl php5-xsl

A questo punto è installato anche il Php. Non si installa il pacchetto bc-math perché non lo riconosce Debian 8 e non occorre alla versione CE ma solo alla Enterprise.

# php -v
PHP 5.6.22-0+deb8u1 (cli) (built: Jun  9 2016 07:14:06) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

Ora dobbiamo verificare MySql.

Non risulta installato. Siccome su Debian suggerisce l'installazione alternativa noi procediamo con MariaDB

# apt-get -y install mariadb-server mariadb-client

e abbiamo così installato anche il database. Rendiamo più sicura la nostra installazione, ancorché in un ambiente di prova virtuale

#mysql_secure_installation

Quindi la proviamo

# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.0.25-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> 

e vediamo che ci colleghiamo.

Creiamo il database per Magento

MariaDB [(none)]> create database magento;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> GRANT ALL ON magento.* TO magento@localhost IDENTIFIED BY 'magento';
Query OK, 0 rows affected (0.00 sec)

e gli diamo i privilegi. In questa fase di prova la password del db magento coincide con magento (!). In un caso reale la password dovrà essere sicura.

Entriamo nel nuovo database, dopo essere usciti da root del database

MariaDB [(none)]> exit
Bye
root@debian:/home/fausto# mysql -u magento -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 51
Server version: 10.0.25-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

Con phpMyAdmin facciamo un backup di Magento 1.7 e con FTP Filezilla facciamo un backup del sito se ospitato in remoto.

Per prima cosa dobbiamo rendere funzionante una copia del database e del sito nella macchina virtuale su Magento 1.7.

Per fare questo dobbiamo verificare se phpMyAdmin è installato o no nella macchina virtuale Linux Debian.

Installiamo

#apt-get install mcrypt 
#systemctl restart apache2

e riavviamo il server Apache.

Poi installiamo e configuriamo phpMyAdmin

#apt-get install phpmyadmin

vi verranno chieste delle password.

A questo punto è accessibile all'indirizzo:

http://debian.nome_utente-mio/phpmyadmin/

dovreste mettere come nome utente magento e come password quella che avete scelto.

Dobbiamo creare sulla macchina Linux Debian la stessa struttura di file che era presente su Magento 1.7.1 e la mettiamo in /var/www/html. Con utente root creiamo una sottocartella magento come segue

#cd /var/www/html
#mkdir magento
#chmod 777 magento
#exit

In questa cartella /var/www/html/magento metteremo una copia dei file presi tramite ftp dalla versione di Magento che si trova in remoto.

 

Se si prova subito l'istanza di magento andrà in errore perché non si è modificato il file

/var/www/html/magento/app/etc/locale.xml.

Se lo si modifica e si prova Magento viene ricreato il database.

Non è quello che si vuole. Pertanto con il database di nome magento vuoto, si importa il file .sql che si è esportato dalla versione 1.7.x esistente, alla quale prima si sono svuotati i contenuti delle tabelle

  • log_url
  • log_url_info
  • log_visitor
  • log_visitor_info
  • log_visitor_online

per le quali è inutile conservarne i dati.

Prima di effettuare l'importazione con pluma si puo' sostituire tutte le stringhe con http://www.nomeserver.com/magento/ con le stringhe http://debian.mionome.mio/magento/.

A questo punto un clone di Magento è funzionante nella versione 1.7.x nell'ambiente virtuale di Linux Debian.

Questa prima parte è anche utile per eventuali spostamenti da un server remoto ad una copia locale.


Installazione Magento 2.x

Il passo successivo è installare in un'altra cartella l'ultima versione di Magento 2.x

A questo punto seguendo le istruzioni del sito: https://getcomposer.org/download/ installiamo composer sulla nostra macchina virtuale. Dopo aver verificato che composer sia stato installato possiamo scaricare Magento 2.x dal repository con il comando

$php composer.phar create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/Magento2

si devono inserire delle chiavi sicure ottenute dal sito magento.com. La chiave pubblica è l'username, quella privata è la password. Se la directory Magento2 esiste ed è vuota inizia lo scaricamento.

La cartella /var/www/html/Magento2 viene creata automaticamente. Conviene fare questo con l'utente di Debian che lancia apache e che appartiene al gruppo www-data.

A questo punto occorre creare la struttura e le tabelle di Magento nel database ed installare Magento.

php magento setup:install --base-url=http://debian.nome_utente-mio/Magento2 --db-host=localhost --db-name=magentodb --db-user=u_magento --db-password=pass34 --admin-firstname=Magento --admin-lastname=User --admin-email=user@example.com --admin-user=admin --admin-password=ad4 --language=it_IT --currency=EUR --timezone=Europe/Rome --use-rewrites=1

Lo scaricamento dura circa 20 minuti. Dopodiché si puo' lanciare da terminale root:

#cd Magento2
#find var vendor pub/static pub/media app/etc -type f -exec chmod g+w {} \;
#find var vendor pub/static pub/media app/etc -type d -exec chmod g+w {} \;
#chown -R magento202:www-data /var/www/html/Magento2
#chmod u+x bin/magento

A questo punto si puo', con un web broswer sulla macchina virtuale, far partire la wizard per il setup di Magento 2.x

con l'indirizzo http://debian.mionome.mio/Magento2/setup e cliccare sul pulsante "Agree and Setup Magento".

Poi si fa' click su "Start Readiness Check".

Questo fa sì che vengano controllati i permessi di scrittura delle cartelle e le proprietà del Php.

Ci si accorge che per l'utente che è il proprietario delle cartelle di Magento deve essere nello stesso gruppo di Apache.

Dunque con l'utente amministratore si lancia il comando

#usermod -g www-data mionome.

Occorre lanciare il comando per scaricare la parte "statica", ossia pagine html, css, js.

$./bin/magento --ansi setup:static-content:deploy
$./bin/magento --ansi setup:static-content:deploy it_IT

Almeno nella prima fase non conviene utilizzare url_rewrite.

 

Migrazione

A questo punto, dopo aver installato Magento 2 ed averlo reso funzionante, si puo' migrare la copia di Magento 1.7.x dentro Magento2, con il Data Migration Tool.

Bisogna copiare tutto il contenuto di

/var/www/html/Magento/media

in

/var/www/html/Magento2/pub/media

Poi bisogna installare la corretta versione di Data Migration Tool

$php ../composer.phar config repositories.magento composer https://repo.magento.com

$php ../composer.phar require magento/data-migration-tool:2.0.7

/var/www/html/Magento2/vendor/magento/data-migration-tool/etc/ce-to-ce/1.7.0.2$ cp config.xml.dist config.xml

dopo averlo copiato occorre editarlo come scritto nella guida ufficiale a cui si rimanda.

La migrazione è composta da tre parti:

  1. Migrazione dei settings
  2. Migrazione dei dati
  3. Eventuale migrazione incrementale dei cambiamenti

Poi eventualmente si deve migrare il tema, e far partire il cron job su Magento 2 e metterlo online dopo averlo testato

Per il punto 1.

/var/www/html/Magento2/vendor/magento/data-migration-tool/etc/ce-to-ce$ cp settings.xml.dist settings.xml

Ecco il comando per migrare i settings

$magento migrate:settings ./vendor/magento/data-migration-tool/etc/ce-to-ce/1.7.0.2/config.xml

Per il punto 2.

$magento migrate:data ./vendor/magento/data-migration-tool/etc/ce-to-ce/1.7.0.2/config.xml

A questo punto, se non si riscontrano ulteriori problemi la migrazione è avvenuta.

Occorre reindicizzare il sito eppoi rifare il flush della cache.

magentoUserOwner@debian:/var/www/html/<root magento>/bin$ php magento indexer:reindex

Design Config Grid index has been rebuilt successfully in 00:00:02
Customer Grid index has been rebuilt successfully in 00:00:02
Category Products index has been rebuilt successfully in 00:00:01
Product Categories index has been rebuilt successfully in 00:00:00
Product Price index has been rebuilt successfully in 00:00:04
Product EAV index has been rebuilt successfully in 00:00:00
Stock index has been rebuilt successfully in 00:00:00
Catalog Rule Product index has been rebuilt successfully in 00:00:03
Catalog Product Rule index has been rebuilt successfully in 00:00:00
Catalog Search index has been rebuilt successfully in 00:00:05
magentoUserOwner@debian:/var/www/html/<root magento>/bin$ php magento indexer:status

Design Config Grid:                                Ready
Customer Grid:                                     Ready
Category Products:                                 Ready
Product Categories:                                Ready
Product Price:                                     Ready
Product EAV:                                       Ready
Stock:                                             Ready
Catalog Rule Product:                              Ready
Catalog Product Rule:                              Ready
Catalog Search:                                    Ready

 

Fate buone prove!

DISCLAIMERS
Si è messo questo articolo al solo scopo didattico ed illustrativo. 
Si sconsiglia di usarlo per casi veri ed in produzione 
ma si può usarlo, adattandolo, per ambienti di sviluppo e di test.
Per i casi concreti va studiata ed analizzata una soluzione ad hoc.