Come distribuire con il deployer

Il flusso di lavoro automatizzato per la distribuzione è un ottimo strumento che ogni team di sviluppo software deve avere. Il processo di rilascio, quando è veloce, sicuro e tollerante ai guasti, può far risparmiare tempo per lo sviluppo di cose grandiose. E la buona notizia che ci sono molti ottimi strumenti per la creazione di un ciclo di rilascio automatico.

In questo articolo, ho intenzione di presentarvi uno strumento di distribuzione chiamato Deployer. Mi piace usarlo perché è scritto in PHP, è facile da configurare e ha molte utili funzionalità per integrare il processo di distribuzione nel flusso di lavoro del tuo team.

Il processo di distribuzione con il deployer

Prima di tutto, vediamo la struttura del processo di distribuzione con Deployer. Consiste di tre parti principali: a distribuire il server per avviare la distribuzione, a server di produzione o di staging per ospitare la tua applicazione e a repository git per memorizzare il codice della tua applicazione.

Quando si avvia un processo di distribuzione, si esegue uno script di distribuzione sul server di distribuzione. Dopo questo, il server di distribuzione si connette al server di produzione con SSH e fa le operazioni di manutenzione dal server di produzione come la clonazione del codice da un repository git, l'aggiornamento delle dipendenze di Composer e altre cose necessarie per avere una versione corretta. 

Affinché tutti siano fidati in questa catena, creeremo e installeremo i certificati SSH sui server e sui repository.

Installa i certificati SSH

Dobbiamo creare una chiave di autenticazione SSH su un server di produzione e condividerla con un repository git. Se non si dispone di chiavi di autenticazione SSH sul server di distribuzione, eseguire ssh-keygen e segui le istruzioni. Keygen creerà una chiave pubblica in un file ~ / .Ssh / id_rsa.pub.

Ora puoi installarlo nell'account del tuo repository. Se non sai come farlo, guarda l'esempio di GitHub dai link correlati nella parte inferiore dell'articolo, o chiedi aiuto al tuo servizio di hosting del repository.

Inoltre, è meglio creare una chiave SSH sul server di distribuzione per ottenere l'affidabilità sul computer di produzione. Utilizzare questi comandi per creare una connessione SSH senza password tra i server di distribuzione e di produzione.

vagrant @ localserver: ~ $ ssh-keygen vagrant @ localserver: ~ $ ssh-copy-id -i ~ / .ssh / id_rsa.pub www-data@my_project.com

Con tutti i certificati installati, siamo pronti per installare Deployer.

Installa il deployer

L'installazione di Deployer è facile come l'installazione di Composer. È necessario scaricare PHP Archive e renderlo un comando globale:

curl -LO https://deployer.org/deployer.phar mv deployer.phar / usr / local / bin / dep chmod + x / usr / local / bin / dep

Controlliamo la versione di Deployer per vedere se tutto è installato correttamente:

vagrant @ localserver: ~ $ dep --version Deployer 6.0.3

Tutto sembra perfetto e siamo pronti a creare il nostro primo script di distribuzione.

Crea il primo script di distribuzione

Per inizializzare il Deployer per il tuo progetto, esegui dep init. Questo eseguirà un'utilità per generare uno script di distribuzione, che chiederà un tipo di progetto e un collegamento al repository e creerà il file deploy.php file nella directory corrente. Diamo un'occhiata a questo file e alle funzioni principali utilizzate in una ricetta. 

Le funzioni impostato e ottenere lavorare con i valori di configurazione e una scorciatoia di un getter può essere utilizzata con a correre comando:

set ('current_path', '~ / my_application'); run ('rm current_path / runtime / *');

Ogni valore di configurazione può essere sovrascritto per ciascun host. Possiamo impostare un percorso di distribuzione e un utente SSH per la nostra applicazione nel nostro script di implementazione:

host ('my_project.com') -> utente ('www-data') -> set ('deploy_path', '~ / application');

Per definire i tuoi compiti, usa il compito funzione e correre per eseguire un comando sul server di produzione:

task ('disk_free', function () $ df = run ('df -h /'); writeln ($ df););

E poi eseguirlo con dep e il nome della funzione come parametro:

vagrant @ localserver: / vagrant / deployer $ dep disk_free ➤ Esecuzione task disk_free Dimensione del filesystem Usato Avail Usa% montato su / dev / md0 7.4G 4.7G 2.4G 67% / ✔ Ok 

Ora puoi guardare attraverso il file di distribuzione e modificare tutti i parametri necessari per la configurazione della tua applicazione.

Distribuire alla produzione

Abbiamo già installato Deployer, installato i certificati SSL sui server di distribuzione e produzione e realizzato lo script di distribuzione, quindi finalmente è giunto il momento di riunirlo e realizzare la prima distribuzione in produzione.

Per distribuire l'applicazione, basta chiamare dep deploy:

Se qualcosa è andato storto, puoi tornare alla versione precedentemente implementata in un solo passaggio:

vagrant @ localserver: ~ $ rollback ✔ Esecuzione del rollback dell'attività

Sembra facile, non è vero??

Ora controlliamo cosa è stato creato sul nostro server di produzione. Grazie a Deployer, possiamo farlo facilmente con i comandi di scelta rapida. Provare dep ssh connettersi a un server direttamente utilizzando la configurazione dallo script di distribuzione o eseguire in remoto un comando tramite il tunnel SSH con dep run. Inoltre, questo comando supporta le variabili che abbiamo impostato nello script.

Diamo un'occhiata al percorso di distribuzione:

vagrant @ localserver: ~ $ dep esegue "tree deploy_path". ├── current -> / home / user / my_project / releases / 3 ├── releases │ ├── 1 │ │ ├── composer.json │ │ ├── config.php -> / home / utente / mio_project / shared / config.php │ │ ├── README.md │ │ ├── runtime -> / home / utente / data / my_project / shared / runtime │ │ ├── vendor │ │ └── ... │ │ └── web │ │ └── index.php │ ├── 2 │ │ ... │ └── 3 │ ... └── condiviso ├── config.php └── runtime 

La cosa principale è la rilasci directory, dove Deployer memorizza le ultime versioni della nostra applicazione. Dopo ogni distribuzione o rollback di successo, si collega attuale alla versione abilitata. Finalmente, abbiamo un condivisa directory, che memorizza file e cartelle dal shared_dirs e shared_files che abbiamo impostato nel file di script.

Alla prima distribuzione, Deployer copierà quei file in una directory condivisa e creerà un collegamento dal rilasci dir al condivisa dir. La volta successiva, aggiungerà semplicemente un collegamento dai file di rilascio ai file e alle cartelle nella directory condivisa. Inoltre, è possibile modificare qualsiasi file in una directory condivisa e Deployer lo manterrà senza modifiche su ciascuna distribuzione, ad esempio, ciò è utile per i file di configurazione.

Inoltre, se hai un composer.json file nella radice del repository, il Deployer chiamerà Composer per creare una directory del fornitore e aggiornare tutte le dipendenze necessarie. Se non si memorizza il file Composer nella directory principale, è possibile creare un'attività personalizzata per aggiornarlo.

E ora è il momento di integrare l'implementazione dell'applicazione nei nostri processi.

Aggiungi un'attività personalizzata

Ogni team ha le proprie configurazioni di implementazione e processi per l'automazione, quindi Deployer dispone di strumenti semplici per estendere la configurazione standard e aggiungere attività personalizzate. Ad esempio, il tuo hosting potrebbe avere la regola per archiviare applicazioni e webroot in luoghi diversi, senza diritti di modificare la configurazione di Apache o Nginx. 

Ma c'è un modo per superare questa regola: usa i link simbolici. Quindi aggiungeremo un compito per questo:

task ('deploy: public_html', function () run ('ln -sf deploy_path / current / web /var/www/my_application.com');); 

E quindi aggiungerlo all'attività di distribuzione principale come parte di un ciclo di rilascio:

task ('deploy', [// ... 'deploy: public_html', // ...]);

Ora esegui di nuovo lo script di distribuzione e verifica se tutto è corretto con dep ssh.

Ricette di terze parti

Il deployer ha molte ricette da integrare con terze parti che possono estendere le funzionalità di base. Possiamo usare Composer per installarli:

il compositore richiede il deployer / ricette --dev 

Mi piace usare la ricetta di notifica Slack. Per abilitarlo, dovremmo andare alla pagina della ricetta Slack, fare clic su Aggiungi a Slack pulsante e selezionare il canale per inviare notifiche. Quindi otterremo il webhook Slack e aggiungeremo questo codice alla distribuzione.

// richiede una richiesta di slack richiede 'recipe / slack.php'; // imposta slack webhook set ('slack_webhook', / * il tuo slack webhook * /); // notifica allentamento dopo il successo della distribuzione dopo ('success', 'slack: notify: success');

Dopo queste modifiche, Deployer invierà un messaggio come questo al canale di distribuzione:


Ora puoi aggiungere la tua squadra al canale in modo che tutti coloro che sono coinvolti possano ricevere una notifica.

Conclusione

In questo tutorial abbiamo installato Deployer e creato uno script di distribuzione che può essere utilizzato per distribuire la nostra applicazione da un repository git a un server di produzione o di gestione temporanea in un solo clic.

Inoltre, può essere integrato nei processi del team, ad esempio un'applicazione può essere distribuita automaticamente dopo che le modifiche nel ramo principale e la notifica possono essere eseguite su un canale Slack in caso di distribuzione riuscita.

Se avete domande, non esitate a fare domande nei commenti all'articolo. 

Ulteriori letture e collegamenti correlati

  • Sito Web del deployer
  • Ricetta fiacca per il deployer
  • Esempio di installazione di una chiave SSH in un account GitHub