Instalarea automată a aplicației
Cuprins
Introducere
Acest exercițiu are ca scop crearea unui flux de lucru automat pentru instalarea automată a aplicației dezvoltate în cadrul proiectului de curs. Fluxul de lucru se va declanșa de fiecare dată când ramura principală a depozitului de cod pentru proiect va fi actualizată și va actualiza aplicația instalată pe un calculator (mașină virtuală) la distanță. Această practică este cunoscută în ingineria software drept continuous deployment
, care este următorul pas al procesului numit continuous delivery
.
Vom implementa acest exercițiu pe parcursul a două laboratoare. În primul laborator vom crea și configura mașina virtuală pe care să instalăm aplicația și vom crea un fișier Makefile
pentru a automatiza procesul de actualizare. În laboratorul al doilea vom configura un flux de lucru care să declanșeze automat actualizarea aplicației.
Configurarea mașinii virtuale
Crearea unei perechi de chei pentru autentificare
Instalarea aplicației se va face printr-o conexiune ssh
la mașina-destinație. Pentru a automatiza instalarea vom avea nevoie de o pereche de chei de autentificare, care poate fi creată rulând următoarea comandă
ssh-keygen -t rsa -f /var/tmp/app_key -N ''
unde:
-t
specifică tipul cheii —RSA
în cazul de față,-f
specifică numele fișierului care va conține cheia privată; cheia publică va avea același nume plus extensia.pub
,-N
specifică parola de acces la cheie; în cazul de față îi semnalăm programului că nu avem nevoie de parolă de acces.
Atenție: Pentru a rula comanda de mai sus pe sistemul de operare Windows, trebuie să activați Windows Subsystem for Linux
, sau să instalați aplicația git
. După ce ați instalat una dintre aplicațiile de mai sus, executați comanda ssh-keygen
în consola aplicației respective.
Crearea unei mașini virtuale
În cadrul acestui exercițiu vom instala aplicația pe o mașină virtuală creată în mediul Azure. Prin urmare, pașii din această secțiune se referă strict la această platformă. Dacă preferați o altă platformă pentru crearea unei mașini virtuale, consultați documentația platformei respective pentru crearea unei mașini virtuale.
- Accesați https://portal.azure.com și autentificați-vă folosind numele de utilizator și parola pe care le-ați introdus la crearea contului; dacă nu aveți cont — creați un cont nou.
- În caseta de căutare din partea de sus a paginii introduceți
Resource groups
și selectați intrarea cu același nume din grupulServices
al rezultatelor căutării. Aplicația vă va prezenta pagina pentru gestiunea grupelor de resurse. - Pe pagina de gestiune a grupelor de resurse apăsați butonul
Create
care va încărca pagina de creare a unui grup de resurse nou. În pagina de creare introduceți un nume sugestiv pentru grupul de resurse (de exemplu: tehnologii-web), apăsați butonulReview + create
, apoi apăsați butonulCreate
. Aplicația va deschide pagina care afișează toate grupurile de resurse. În această pagină, dați click pe grupul de resurse proaspăt creat. Această acțiune va deschide pagina pentru gestiunea grupului de resurse selectat. - În pagina de gestiune a grupului de resurse dați click pe butonul
Create resources
— aplicația va deschide pagina de selecție a resurselor disponibile. - Pe pagina de selecție a resurselor disponibile identificați caseta de căutare și introduceți
Debian 12
, apoi apăsațiEnter
. - Din rezultatele căutării selectați
Debian 12 "Bookworm"
— aplicația va încărca pagina mașinii virtuale. În această pagină dați click pe butonulCreate
pentru a accesa pagina de configurare a mașinii virtuale. - În pagina de configurare a mașinii virtuale:
- Selectați grupul de resurse creat anterior pentru caseta
Resource group
- Dați un nume sugestiv mașinii virtuale în caseta
Virtual machine name
(de exemplu: vm-debian). - Selectați SSH la secțiunea
Authentication type
. - În caseta
Username
introduceți un nume pentru contul de utilizator folosit pentru instalarea aplicației. Pentru acest exercițiu vom folosi valoarea implicită azureuser. - La secțiunea
SSH public key source
selectați Use existing public key. - Deschideți într-un editor text cheia publică pe care ați creat-o în secțiunea anterioară (fișierul cu extensia
.pub
) și copiați conținutul fișierului în caseta de la secțiuneaSSH public key
. - Selectați Allow selected ports la secțiunea
Public inbound ports
. - La secțiunea
Select inbound ports
bifați intrările pentru porturile SSH, HTTP și HTTPS. - Dați click pe butonul
Review + create
, apoi pe butonulCreate
și așteptați până ce primiți notificarea că mașina a fost creată.
- Selectați grupul de resurse creat anterior pentru caseta
- După ce primiți notificarea, dați click pe butonul
Go to resource
pentru a naviga pe pagina de administrare a mașinii virtuale. - Opțional: Pe pagina de administrare a mașinii virtuale, la secțiunea
Essentials
va apărea intrareaDNS name: Not configured
; dați click peNot configured
și în pagina următoare introduceți un nume sugestiv în casetaDNS name label
(de exemplu: app-tw). Acest nume vă va permite să accesați aplicația pe baza unui nume de domeniu în loc de adrea IP. În cazul de față numele de domeniu va fi app-tw.westeurope.cloudapp.azure.com. Dacă nu doriți să configurați un nume de domeniu, vă puteți conecta la mașina virtuală folosind adresa IP.
După ce ați creat mașina virtuală verificați că vă puteți conecta la aceasta rulând următoarea comandă (înlocuiți /var/tmp/app_key
și azureuser@app-tw.westeurope.cloudapp.azure.com
cu valorile specifice pentru mașina virtuală creată de voi):
ssh -i /var/tmp/app_key azureuser@app-tw.westeurope.cloudapp.azure.com
Pregătirea mediului de execuție pe mașina virtuală
Instalarea automată a unei aplicații PHP
presupune execuția a minim doi pași:
- Descărcarea celei mai recente versiuni a codului-sursă
- Executarea unui script pentru actualizare.
Deoarece scopul acestui exercițiu este exemplificarea unui proces de actualizare, descărcarea celei mai recente versiuni a codului-sursă se va face folosind comanda git pull
, iar execuția aplicației se va face prin intermediul aplicației podman
folosită la laboratoarele anterioare.
Însă, chiar și acest minim de pași necesită configurarea mașinii virtuale. Pentru a configura mașina virtuală trebuie să vă conectați la ea rulând următoarea comandă (înlocuiți /var/tmp/app_key
și azureuser@app-tw.westeurope.cloudapp.azure.com
cu valorile specifice pentru mașina virtuală creată de voi):
ssh -i /var/tmp/app_key azureuser@app-tw.westeurope.cloudapp.azure.com
După ce v-ați conectat la mașina virtuală:
- Actualizați sistemul de operare rulând comanda
sudo apt update -y
. - Instalați aplicațiile necesare rulând comanda
sudo apt install -y git make podman
. - Descărcați depozitul de cod al aplicației voastre folosind comanda (înlocuiți url cu adresa depozitului vostru de cod)
git clone <url>
.
La sfârșit, deconectați-vă de la mașina virtuală executând comanda logout
sau apăsând simultan tastele Ctrl
și d
.
Crearea unui fișier Makefile
pentru automatizarea actualizării
Pe calculatorul personal, navigați în directorul care reprezintă rădăcina depozitului de cod al aplicației voastre. În acest director, creați un fișier numit Makefile
(fără extensie).
Fișierul Makefile
conține „rețete” pentru automatizarea proceselor necesare compilării și asamblării aplicațiilor — pentru mai multe detalii consultați documentația. În cazul nostru, acest fișier ne va facilita procesul de actualizare permițându-ne să executăm prin invocarea unei singure comenzi o secvență de comenzi.
Astfel, pentru a automatiza actualizarea aplicației:
Deschideți fișierul
Makefile
într-un editor text și introduceți următorul conținut:APP_CONTAINER = app-tw APP_PATH = $(shell pwd) .PHONY: update update: if [ "$(shell podman ps -q -f name=$(APP_CONTAINER))" ]; then \ podman stop $(APP_CONTAINER); \ podman rm $(APP_CONTAINER); \ fi podman run -d -p 80:80 --name $(APP_CONTAINER) -v $(APP_PATH):/var/www/html php:8.2-apache;
Conținutul de mai sus creează o „rețetă” nouă numită
update
care:- verifică dacă există un container numit
app-tw
(valoare stocată în variabilaAPP_CONTAINER
) și dacă un astfel de container exstă atunci:- oprește containerul —
podman stop $(APP_CONTAINER);
- șterge containerul —
podman rm $(APP_CONTAINER);
- oprește containerul —
- creează și rulează un container nou bazat pe imaginea
php:8.2-apache
cu parametrii discutați în exercițiul anterior.
- verifică dacă există un container numit
- Adăugați fișierul
Makefile
la depozitul de cod folosind comandagit add Makefile && git commit -m "Added Makefile"
, apoi trimiteți modificările pe server folosind comandagit push origin
. - Conectați-vă la mașina virtuală creată anterior.
- După ce v-ați conectat la mașină, navigați în directorul care conține depozitul de cod al aplicației voastre și rulați comanda
git pull
. Această comandă va descărca și fișierulMakefile
proaspăt-adăugat. - După actualizaea codului-sursă, rulați comanda
make update
. Această comandă va executa „rețeta” numităupdate
pe care am definit-o în fișierulMakefile
. La rândul ei, această „rețetă” va executa pe rând toate comenzile care o alcătuiesc, actualizând astfel aplicația la cea mai nouă versiune.
După executarea pașilor de mai sus, deschideți navigatorul Web și introduceți URL-ul/adresa IP a mașinii virtuale — app-tw.westeurope.cloudapp.azure.com în cazul acestui exemplu; navigatorul ar trebui să afișeze pagina de start a aplicației.
De acum încolo, actualizarea aplicației presupune executarea, în ordine, a pașilor 3—5 definiți mai sus.