English version
Read this post in english: click here
Questa guida è per un singolo nodo frontend e non è ottimizzata. La configurazione è per Production
e Staging
ma al momento utilizziamo solo staging.
Il progetto è una implementazione pratica di Magento Pipeline Guidelines: https://devdocs.magento.com/guides/v2.2/config-guide/deployment/pipeline/
Versione Magento: >= 2.2.x
Segui questo progetto per avere un esempio: https://gitlab.com/gm-public/magento2-sample-deploy/pipelines
REQUISITI
- account gitlab
- progetto magento con un setup locale funzionante (devi avere un config.php nel tuo repository)
- accesso ssh al server di deploy
- conosci Deployer PHP e come funziona https://deployer.org/
Creare una chiave ssh di deploy per accedere al tuo server
ssh-keygen -t rsa -b 4096 -N '' -f my_ssh_key
Creare un ssh-keyscan del server
ssh-keyscan -t rsa magento.staging > server_keyscan.txt
Aggiungere la chiave pubblica di deploy al server
ssh-copy-id -i my_ssh_key.pub [email protected]
Creare la cartella del progetto nel server
ssh [email protected]
mkdir /home/admin/magento
mkdir /home/admin/magento/bucket
Aggiungere a Gitlab le variabili per la Pipeline
Vai su Settings > CI/CD > Variables
e aggiungi queste variabili:
Per l'ambiente Stage
STAGE_HOST
-> ip o dominio della macchina web (es. magento.staging
)
STAGE_HOST_DEPLOY_PATH
-> percorso assoluto dove posizioni il codice sorgente (es. /home/admin/magento
)
STAGE_SSH_KEYSCAN
-> output del file server_keyscan.txt
STAGE_SSH_PRIVATE_KEY
-> output del file my_ssh_key
STAGE_USER
-> utente ssh che accede al server (nel nostro esempio admin
)
Aggiungere i file al progetto per creare la Gitlab Pipeline
Usa questo progetto per aggiungere Gitlab Pipeline: https://github.com/gmdotnet/magento2-pipeline-deploy
Vai su Settings > CI/CD > General pipelines settings
e aggiungi pipelines/gitlab/.gitlab-ci.yml
sotto Custom CI config path
IMPORTANTE!!!
In questo caso la pipeline si avvia solo sul branch develop. In ogni caso abbiamo bisogno che il file .gitlab-ci.yml sia sul branch di default (master) altrimenti la pipeline non partirà. Inoltre, il primo deploy/release andrà in errore perchè non abbiamo nessun setup completato sul server
Crea/compila il file Magento env.php sul server
Una volta che il primo deploy (con errori) è concluso abbiamo questa situazione:
/home/admin/magento
/home/admin/magento/bucket
/home/admin/magento/current
/home/admin/magento/pipelines
/home/admin/magento/releases
/home/admin/magento/shared
modifica /home/admin/magento/shared/htdocs/app/etc/env.php
per completare il setup di Magento.
Prova a rifare il deploy. Questa volta avrai la pipeline completata.
Enjoy!
Miglioramenti
- creare un sistema per server multinodo
- gestire in un modo più sicuro le chiavi ssh