Deploy Magento2 con Gitlab pipelines e Deployer PHP
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

Migliora il progetto

Mandami un feedback

Scrivimi oppure apri una issue su github

GitHub
Commenti offerti da Disqus