Come installare Magento 2.
Il primo passo, prima di installare Magento 2 alla versione attuale (2.4.5) è consultare i requisiti di sistema sulla documentazione ufficiale per capire quali versioni dei software di terze parti sono state testati con la versione di magento che si intende installare.
Scegliere la versione di magento da installare
Nel mio caso, ho scelto l'ultima versione disponibile di magento (nel momento in cui sto scrivendo), la 2.4.5.
Come possiamo notare dai requisiti di sistema è possibile installare Magento su diverse architetture, ma in questo caso utilizzeremo lo stack LAMP con una configurazione minimale.
Creiamo un webserver con le seguenti caratteristiche: | Versione |
---|---|
Ubuntu | 22.04 |
Apache | 2.4 |
MySQL | 8.0 |
PHP | 8.1 |
Postfix | |
Elasticsearch | 7.17 |
Creazione di un server
Come prima cosa, abbiamo bisogno di una macchina dove far girare l'architettura che sosterrà Magento 2, in questo esempio userò DigitalOcean come provider che mi ha permesso di avere una macchina pronta in meno di un minuto.
Ho scelto il sistema operativo Ubuntu 20.04 utilizzando il pacchetto Basic $ 24/mese: include 4 GB di memoria, 2 CPU e 80 GB di spazio di archiviazione.
Creazione User
Dopo esserci loggati nella shell come root è buona pratica creare un "superuser" che possiamo utilizzare al posto dell'utente "root" per svolgere le nostre attività, questo garantisce una maggior sicurezza sia contro gli attacchi bruteforce che contro gli errori accidentali, dato che per avere maggiori privilegi dobbiamo scrivere la keyword sudo davanti.
adduser donato
Assegniamo all'utente i privilegi di superuser aggiungendolo al gruppo "sudo"
usermod -aG sudo donato
Usciamo dalla shell e facciamo login con il nuovo utente
Disabilitare l'utente root per ragioni di sicurezza
Dopo esserci loggati nella shell come superuser (in questo caso con l'utente donato), per ragioni di sicurezza è importante disabilitare l'utente root, per farlo ci basterà lanciare un editor che vada ad aprire il file sshd_config
sudo nano /etc/ssh/sshd_config
Cercare la linea che contiente : "PermitRootLogin yes" e cambiarla in "PermitRootLogin no", salvare il file e chiudere.
Per rendere effettive le modifiche bisogna riavviare il servizio SSH, per farlo basterà lanciare
sudo systemctl reload sshd
In questo modo non sarà possibile fare login con root
Abilitare un firewall di base
Ufw è l'applicazione predefinita in Ubuntu per la configurazione del firewall, ci consente di creare in modo semplice di creare un firewall basato su protocolli IPv4 e IPv6. Per consentire il servizio ssh, lanciare il comando:
sudo ufw allow ssh
Una volta creata la nuova regola, basterà lanciare il firewall digitando:
sudo ufw enable
Aggiornamento dei repository
Per aggiornare la lista dei pacchetti contenuti nei repository
sudo apt update
(confronta l'archivio locale con quelli remoti, aggiornandolo in modo tale che sia allineato con quelli remoti; è l'operazione preliminare da eseguire sempre prima di fare un sudo apt-get upgrade)
Installare Apache e configurarlo per Magento
Per convertire il server in un web server possiamo usare apache o nginx, in questo esempio utilizzeremo Apache.
Una volta aggiornato il repository, per installare apache basterà lanciare
sudo apt install apache2 -y
Apri il file di configurazione Apache (000-default.conf) per consentire i file .htaccess nella directory web, lanciamo quindi l'editor nano con i privilegi di superuser:
sudo nano /etc/apache2/sites-available/000-default.conf
Per abilitare l'override della configurazione in modo che l'htaccess di magento possa sovrascrivere la configurazione di Apache. In pratica senza override l'htaccess di magento non funzionerà.
Quindi per creare questa regola, in fondo al file scriviamo:
<Directory "/var/www/html">
AllowOverride All
</Directory>
Il passo successivo è aprire il file di configurazione di Apache ed impostare il Global ServerName con l'ip del server (solitamente viene indicato il dominio, ma in questo caso non abbiamo un dominio, quindi useremo l'ip del server)
sudo nano /etc/apache2/apache2.conf
In fondo al file scriviamo la regola ServerName con l'indirizzo ip del server:
ServerName 46.101.202.134
Per controllare eventuali errori di sintassi che potremmo aver fatto lanciamo:
sudo apache2ctl configtest
Per abilitare la riscrittura di Apache (questo risolve la maggior parte degli errori 404 post-installazione):
sudo a2enmod rewrite
Per riavviare Apache e rendere effettive le modifiche:
sudo systemctl restart apache2
Per abilitare Apache attraverso il firewall che abbiamo abilitato in precedenza lanciamo
sudo ufw allow 'Apache Full'
Per testare se tutto è andato a buon fine, ci basterà visitare l'indirizzo del sito.
Installare PHP e tutte le dipendenze necessarie per Magento 2.4
Magento richiede l'installazione di PHP e di molte estensioni PHP , possiamo verificare tutte le dipendenze necessarie per Magento 2.4. Per installare PHP e tutte le dipendenze necessarie al funzionamento di magento, lanciamo:
sudo apt install php8.1 libapache2-mod-php8.1 php8.1-mysql php8.1-soap php8.1-bcmath php8.1-xml php8.1-mbstring php8.1-gd php8.1-common php8.1-cli php8.1-curl php8.1-intl php8.1-zip zip unzip -y
Una volta installato PHP e tutte le dipendenze utili, dobbiamo dire al web server di prefeire i file PHP, per farlo ci basterà editare il file dir.conf di Apache e "cambiare posizione" tra l'estensine .html e .php
sudo nano /etc/apache2/mods-enabled/dir.conf
Il passo successivo è settare la Timezone ed aumentare il limite di memoria php nel file di configurazione di Apache php.ini, quindi modifichiamo il file con l'editor lanciando:
sudo nano /etc/php/8.1/apache2/php.ini
- Scorriamo fino a : date.timezone, rimuoviamo il commento e impostiamo date.timezone = Europe/Rome
- Scorriamo fino a : "memory_limit" e sostituituiamo "128M" con il valore esatto. In questo caso, abbiamo un server con 4GB di ram e possiamo impostare come valore massimo memory_limit = 4G
Salviamo il file e riavviamo il servizio apache lanciando:
sudo systemctl restart apache2
Installare MySQL
Per installare MySQL ci basterà lanciare
sudo apt install mysql-server -y
Il prossimo passo sarà mettere in sicurezza MySQL modificando alcune delle opzioni predefinite meno sicure per cose come accessi root remoti e utenti di esempio.
sudo mysql_secure_installation
subito dopo lanciamo
sudo mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'INSERISCI_PASSWORD'"
e rispondiamo alle domande che ci vengono poste:
- Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
- Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
- Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
- Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Installare phpMyAdmin
phpMyAdmin non è obbligatorio, ma rende la vita più semplice quando dobbiamo interagire con il database, questo perchè ci fornisce una pagina web semplificata per l'uso del database, Se invece preferisci usare il CLI puoi non installarlo.
sudo apt install phpmyadmin php8.1-mbstring php8.1-gettext -y
Durante l'installazione ci verranno poste alcune domande, ricordati di selezionare apache2 con la barra spaziatrice, ti verrà chiesto poi di inserire la password per phpmyadmin.
Inserisci poi la pass
sudo systemctl restart apache2
Possiamo ora accedere a phpmyadmin all'indirizzo http://46.101.202.134/phpmyadmin/
e rispondiamo alle domande che ci vengono poste:
- Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
- Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
- Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
- Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Creazione del Database per installare Magento
Come detto in precedenza, phpMyAdmin non è necessario, ma possiamo utilizzarlo per semplificare le operazioni da svolgere con il db, come ad esempio in questo caso, dove abbiamo bisogno di creare un utente e un database da utilizzare per magento.
- Andiamo su http://ipserver/phpmyadmin
- Accediamo con le credenziali di root MySQL
- Facciamo click su Account utenti
- Quindi fare clic su Aggiungi account utente
- Inseriamo un nome utente: lo chiamerò dongento
- Cambiamo il nome dell'host in Locale
- Creiamo una password
- Mettiamo la spunta su "Crea un database con lo stesso nome e concedi tutti i privilegi."
- Clicchiamo su esegui
Abbiamo quindi creato un utente MySQL che ha accesso al solo database di sua proprietà.
Installazione di Postfix per le email
Postfix è un applicativo per la gestione del servizio SMTP. In questo caso ci servirà per ricevere via email il 2FA durante l'installazione di magento. Faremo quindi il minimo necessario affinché funzioni.
Per installare postfix digitiamo quindi:
sudo apt install mailutils -y
Apriamo il file di configurazione di postfix
sudo nano /etc/postfix/main.cf
Rimpiazziamo:
inet_interfaces = all
con:
inet_interfaces = loopback-only
Riavviamo il servizio postfix
sudo systemctl restart postfix
Installare Elasticsearch
A partire da Magento 2.4.0 è richiesto come motore di ricerca Elasticsearch oppure Opensearch come motore di ricerca del catalogo.
Elasticsearch necessita dello Java Development Kit per funzionare, quindi iniziamo installandolo:
sudo apt install openjdk-8-jdk -y
Scarichiamo Elasticsearch 7.6.0 lanciando:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-amd64.deb && wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-amd64.deb.sha512
Controlliamo l'integrità dei file scaricati (in modo da capire se sono compromessi) eseguendo il comando:
shasum -a 512 -c elasticsearch-7.6.0-amd64.deb.sha512
Se il risultato è OK, riceveremo un messaggio simile :
elasticsearch-7.6.0-amd64.deb: OK
La configurazione finale consiste nell'aggiungere il file scaricato al gestore di pacchetti del sistema operativo, per farlo lanciamo:
sudo dpkg -i elasticsearch-7.6.0-amd64.deb
Autorun Elasticsearch
Ora che abbiamo installato elasticsearch, è importante che esso venga eseguito automaticamente ogni volta che il server viene riavviato.
Il Primo passo è ricaricare la configurazione del gestore systemd lanciando:
sudo /bin/systemctl daemon-reload
Aggiungere Elasticsearch alla lista dei servizi che si avviano all'avvio del sistema
sudo /bin/systemctl enable elasticsearch.service
Lanciamo elasticsearch
sudo systemctl start elasticsearch
Testiamo se è andato a buon fine, eseguendo:
curl -X GET 'http://localhost:9200'
Configura Elasticsearch
Iniziamo aprendo il file di configurazione di Elasticsearch lanciamo quindi:
sudo nano /etc/elasticsearch/elasticsearch.yml
- Togliamo il commento da cluster.name e indichiamo un nome descrittivo, ad esempio: Magento Cluster
- Togliamo il commento da node.name e indichiamo un nome descrittivo, ad esempio: Magento Node
- Togliamo il commento da network.host e indichiamo come ip: localhost
Salviamo e riavviamo elasticsearch, lanciando
sudo systemctl restart elasticsearch
Se tutto è andato bene, possiamo scoprirlo lanciando
curl -X GET 'http://localhost:9200'
Crea un user per Magento
Come abbiamo visto, in precedenza per motivi di sicurezza abbiamo disabilitato l'utente root, creato un utente con i privilegi di superuser ed ora per limitare ancora di più le possibili problematiche legate alla sicurezza creiamo un altro utente che non ha tali privilegi, questo sarà l'utente che useremo per Magento, per i trasferimenti FTP etc...
Provvediamo quindi a creare l'utente (lo chiameremo ad esempio dogento) digitando
sudo adduser dogento
Inseriamo l'utente all'interno del gruppo www-data (Il gruppo Apache predefinito in Ubuntu è www-data), quindi digitiamo
sudo usermod -g www-data dogento
Aggiornare i permessi della cartella
Apache durante l'installazione ha creato automaticamente una directory web per archiviare i file /var/www/html , ma è stato creato con l'utente predefinito noto come www-data (o anche root). Il nostro scopo è assegnare all'utente dogento (utente normale) la proprietà della cartella , in modo che possa modificare i file ed operare in modo corretto.
Per aggiornare la proprietà della cartella e il gruppo in modo che coincidano con il nostro nuovo utente web, basterà digitare:
sudo chown -R dogento:www-data /var/www/html/
Installare composer
Composer è gestore di pacchetti che ci consente di accedere e scaricare file compressi da vari repository. Non solo possiamo accedere e scaricare Magento, ma molti sviluppatori di terze parti consigliano di installare le loro estensioni in questo modo, invece di scaricare tradizionalmente un file zip e caricarlo tramite FTP.
Per installare composer ci basterà lanciare
sudo curl -sS https://getcomposer.org/installer | php
spostiamo composer nella cartella giusta:
sudo mv composer.phar /usr/local/bin/composer
Scaricare Magento 2.4.5 tramite composer
Dopo aver scaricato composer, possiamo scaricare magento nella versione desiderata, in questo caso la 2.4.5
Dirigiamoci quindi nella web directory del nostro server:
cd /var/www/html
Switchiamo dal superuser (donato) all'utente dogento che abbiamo creato poco fà:
su dogento
Affinché Composer funzioni, deve essere eseguito da una directory vuota, altrimenti genererà un errore. Tuttavia, la directory web in cui ci troviamo ora non è vuota poiché quando abbiamo installato Apache, ha creato un file (index.hml) che ora deve essere rimosso. Quindi rimuoviamo il file
rm index.html
Il prossimo passo è dire a composer di installare l'ultima versione di Magento (in questo momento è la 2.4.5). Durante l'installazione, ci verrà chiesto un l'username (public Key) e password (private key) reperibili sul sito ufficiale e se vogliamo salvare le credenziali.
Lanciamo quindi l'installazione di Magento 2.4.5 tramite composer digitanto:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition=2.4.5 .
N.B. prestiamo attenzione al punto finale, poichè indica che l'installazione di magento deve essere scaricata all'interno di QUESTA cartella.
Una volta avviato, il processo può richiedere da 5 a 10 minuti.
Settare i permessi corretti prima dell'installazione
Per assicurarci che Magento possa accedere a tutti i file e le cartelle necessarie, impostiamo i permessi giusti per file e cartelle digitando questi 4 comandi :
find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + && find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + && chown -R :www-data . && chmod u+x bin/magento
Installazione di mangeto tramite CLI
Possiamo installare magento via linea di comando, settando tutti i parametri che ci interessano, troviamo la lista sulla documentazione ufficiale. Nel nostro caso setteremo tutti i parametri necessari e qualcuno non strettamente necessario:
bin/magento setup:install \
--base-url=http://46.101.202.134 \
--db-host=localhost \
--db-name=dongento \
--db-user=dongento \
--db-password='MaroCumJeBellStaPassword' \
--admin-firstname=Donato \
--admin-lastname=Pirolo \
--admin-email=donatopirolo@gmail.com \
--admin-user=donuser \
--admin-password=MaroCumJeBellStaPassword \
--language=it_IT \
--currency=EUR \
--timezone=Europe/Rome \
--use-rewrites=1
Alla fine dell'installazione, verrà mostrato l'url del backend generato automaticamente
Aggiornare memory_limit
Per impostazione predefinita, Magento utilizza 756MB di RAM disponibile del server web. Questo di solito rallenta Magento e può generare alcuni errori. Per incrementare la memoria disponibile apriamo il file .htaccess e sostituiamo in corrispondenza di php_value memory_limit 756MB con 2G
Quindi apriamo un editor e modifichiamo il file:
nano pub/.htaccess
Installare i Cron Tasks
Il passo successivo è impostare i cron, cioè delle attività pianificate che devono essere eseguite in background, essi aiutano con attività come indicizzazione, backup, aggiornamenti e così via.
Per installare i cron, ci basterà lanciare
bin/magento cron:install
Quanto tempo occorre per installare Magento?
La risposta è Dipende dall'uso, dai servizi da installare / configurare, dalla sicurezza e dalle performance da ottenere.
Un'installazione non complessa su un unico server e per un ambiente di sviluppo (come nell'esempio sopra) occorrono circa 45minuti.