Con questo articolo si vogliono descrivere, sinteticamente, i passi necessari per installare su una macchina virtuale Oracle Virtualbox, un sistema operativo Linux Debian 9, un server Web Apache, un server PHP, un server MySql, su cui poi installare Magento 2.2.x.
Immaginiamo di avere in un ambiente virtuale con Oracle Virtualbox una installazione di Debian 9 in cui si può 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
Una volta installata la Oracle Virtualbox e installata la Debian 9 includendo anche il web server Apache 2,
si verifica che in essa occorre installare il php.
$sudo apt-get install php php-common php-mcrypt php-curl php-cli php-mysql php-gd php-intl php-xsl php-pear libmcrypt-dev mcrypt php-soap
Pertanto si verifica la versione di php installata
$php -v
PHP 7.0.19-1 (cli) (built: May 11 2017 14:04:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.0.19-1, Copyright (c) 1999-2017, by Zend Technologies
A questo punto si può installare MariaDb, la versione "libera" di MySql
$sudo apt-get -y install mariadb-server mariadb-client
L'installazione va resa "sicura"
$sudo mysql_secure_installation
Per comodità si può installare phpmyadmin, per avere un interfaccia grafica, tramite browser per amministrare i database presenti.
$sudo apt-get install phpmyadmin
Ci si accorge che con Debian 9 si può accedere all'utente root del database mysql solo con l'utente root di Debian. Essendo una macchina virtuale di prova, questo è troppo limitativo. Pertanto si esegue
#sudo mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
#exit;
$service mysql restart
Si può verificare l'uso di phomyadmin da questo indirizzo: http://localhost/phpmyadmin/
A questo punto occorre installare Magento 2.2.x.
Per fare questo si installa Composer
dopo essersi posizionati nella cartella /var/www/html che è la document root di Apache.
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
E' possibile creare un progetto di "Composer" per Magento con le seguenti istruzioni:
$php composer.phar create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/Magento2
occorre fare questo con l'utente di Debian che lancia apache e che appartiene al gruppo www-data.
Pertanto è più corretto fare:
$sudo -u www-data php composer.phar create-project --repository-url=https://repo.magento.com/ magento/project-community-edition /var/www/html/Magento2
Lanciato il comando precedente 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. In questo modo l'utente proprietario è www-data che appartiene al gruppo www-data che è quello che lancia Apache web server.
$ ls -l
totale 1832
-rwxr-xr-x 1 magento magento 1852323 nov 27 16:54 composer.phar
-rw-rw-rw- 1 root magento 10701 nov 27 14:03 index.html
drwxr-xr-x 13 www-data www-data 4096 nov 28 17:46 Magento2
drwxr-xr-x 2 magento magento 4096 nov 27 16:32 Test
$ cd Magento2
$ ls -l
totale 1048
drwxr-xr-x 4 www-data www-data 4096 nov 28 17:46 app
-rw-r--r-- 1 www-data www-data 138 nov 28 17:46 auth.json.sample
drwxr-xr-x 2 www-data www-data 4096 nov 28 17:46 bin
-rw-r--r-- 1 www-data www-data 528505 nov 28 17:46 CHANGELOG.md
-rw-rw-rw- 1 www-data www-data 1921 nov 2 13:30 composer.json
-rw-r--r-- 1 www-data www-data 414865 nov 28 17:46 composer.lock
-rw-r--r-- 1 www-data www-data 3671 nov 28 17:46 CONTRIBUTING.md
-rw-r--r-- 1 www-data www-data 647 nov 28 17:46 COPYING.txt
drwxr-xr-x 5 www-data www-data 4096 nov 28 17:46 dev
drwxr-xr-x 3 www-data www-data 4096 nov 28 17:49 generated
-rw-r--r-- 1 www-data www-data 57 nov 28 17:46 grunt-config.json.sample
-rw-r--r-- 1 www-data www-data 2994 nov 28 17:46 Gruntfile.js.sample
-rw-r--r-- 1 www-data www-data 1370 nov 28 17:46 index.php
-rw-r--r-- 1 www-data www-data 691 nov 28 17:46 ISSUE_TEMPLATE.md
drwxr-xr-x 4 www-data www-data 4096 nov 28 17:46 lib
-rw-r--r-- 1 www-data www-data 10376 nov 28 17:46 LICENSE_AFL.txt
-rw-r--r-- 1 www-data www-data 10364 nov 28 17:46 LICENSE.txt
-rw-r--r-- 1 www-data www-data 5518 nov 28 17:46 nginx.conf.sample
-rw-r--r-- 1 www-data www-data 1415 nov 28 17:46 package.json.sample
-rw-r--r-- 1 www-data www-data 804 nov 28 17:46 php.ini.sample
drwxr-xr-x 2 www-data www-data 4096 nov 28 17:46 phpserver
drwxr-xr-x 6 www-data www-data 4096 nov 28 17:46 pub
-rw-r--r-- 1 www-data www-data 804 nov 28 17:46 PULL_REQUEST_TEMPLATE.md
drwxr-xr-x 7 www-data www-data 4096 nov 28 17:46 setup
drwxr-xr-x 7 www-data www-data 4096 nov 28 17:37 update
drwxr-xr-x 5 www-data www-data 4096 nov 28 17:49 var
drwxr-xr-x 39 www-data www-data 4096 nov 28 17:46 vendor
Questo è un fatto positivo.
Occorre creare un utente ed un database, dove verrà installato Magento2.x
CREATE USER 'magento_u'@'%' IDENTIFIED VIA mysql_native_password USING '***';GRANT USAGE ON *.* TO 'magento_u'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;GRANT ALL PRIVILEGES ON `magento2`.* TO 'magento_u'@'%';
Si installa Magento
$sudo -u www-data ./bin/magento setup:install --base-url=http://localhost/Magento2/ \
--db-host=localhost --db-name=magento2 --db-user=magento_u --db-password=pass34 \
--admin-firstname=MagentoFirst --admin-lastname=MagentoLast --admin-email=user@example.com \
--admin-user=admin --admin-password=admin1234 --language=en_US \
--currency=USD --timezone=America/Chicago --use-rewrites=0
che permette di creare il database e la struttura base delle tabelle. Non si vuole usare, per il momento la funzionalità URL_REWRITE.
Il processo va a buon fine. Viene correttamente installato il database.
Caches clearing:
Cache cleared successfully
[Progress: 438 / 441]
Disabling Maintenance Mode:
[Progress: 439 / 441]
Post installation file permissions check...
For security, remove write permissions from these directories: '/var/www/html/Magento2/app/etc'
[Progress: 440 / 441]
Write installation date...
[Progress: 441 / 441]
[SUCCESS]: Magento installation complete.
[SUCCESS]: Magento Admin URI: /admin_369rqf
Nothing to import.
Si può lanciare il back end
http://localhost/Magento2/index.php/admin_369rqf/
Manca la parte "statica"
$ sudo -u www-data ./bin/magento --ansi setup:static-content:deploy -f
Deploy using quick strategy
frontend/Magento/blank/en_US 2088/2088 ============================ 100% % 23 secs
adminhtml/Magento/backend/en_US 2046/2046 ============================ 100% % 15 secs
frontend/Magento/luma/en_US 2103/2103 ============================ 100% % 12 secs
Execution time: 82.21534705162
Se a questo punto il contenuto delle immagini, dei javascript e dei css non viene scaricato ricopiare il contenuto di /pub/static in /pub/static/version1511895272 dove il numero cambia di volta in volta.
Se si vuole passare in "produzione" ricordarsi di questo:
http://devdocs.magento.com/guides/v2.2/config-guide/cli/config-cli-subcommands-mode.html
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.