Cum optimizezi mediul de dezvoltare pentru proiectele Magento
Magento este una dintre cele mai populare platforme din lume ce permite crearea de magazine online performante, stabile și oferă scalabilitatea și flexibilitatea de care o companie eCommerce are nevoie. Potrivit datelor furnizate de Magento, este folosită de peste 250000 de site-uri la nivel global și este platforma pe care noi la Innobyte o utilizăm pentru majoritatea proiectelor de comerț online.
Articol semnat de Alin Alexandru, CTO Innobyte
În activitatea noastră de zi cu zi, căutăm în permanență să ne îmbunătățim procesele pentru a asigura o desfășurare cât mai bună și eficientă în cadrul proiectelor pe care le dezvoltăm. Mai jos voi descrie, pe scurt, motivele pentru care am ales Warden ca soluție pentru setarea noilor proiecte și cum a decurs migrarea proiectelor pe noua soluție.
Prezentarea acestei soluții a fost făcută Live în cadrul evenimentului Meet Magento România 2021 și poate fi urmărită integral .
Totul a plecat de rezultatele obținute în urma unei analize interne. În urma feedback-ului primit din partea colegilor programatori care lucrau la proiecte Magento, a reieșit că performanța vechiului setup al proiectelor nu era la nivelul dorit de către aceștia și nu mai corespundea cu nevoile actuale. Astfel, am început să căutăm soluții pentru a îmbunătăți acest lucru.
În urmă cu 5 ani am ales sa folosim Vagrant si Ansible pentru a configura mediul de development. Am observat, însă, că acest proces nu mai este la fel de eficient în prezent. Dura mult să începem un nou proiect deoarece porneam de la o mașină virtuala cu Ubuntu pe care trebuia să instalăm pachetele necesare. Acest proces dura poate și 2 ore.
Principala problema de performanță a mediului de development era Xdebug care încetinea foarte mult loading-urile Magento. În plus, în unele cazuri, front-end developerii preferau să facă push la cod de CSS și să execute procesele de deploy; acestea durau mai puțin decât să facă refresh la pagina locală.
În afară de timp, o provocare majoră era limitarea de resurse, mai exact RAM-ul necesar pentru mașinile virtuale. Cum în ultimele versiuni Magento folosim diverse tehnologii precum Elastic Search, Redis, Varnish, Rabbit MQ, etc ajungeam să folosim până la 8 GB de RAM per mașină virtuală, iar dacă se întâmpla să lucrezi la două proiecte în paralel, trebuia să schimbi laptopul pentru că râmâneai fără memorie RAM.
Noua soluție trebuia să îndeplinească următoarele condiții:
- Să fie rapidă și să îmbunătățim performanța, astfel să ne permită să dezactivăm Xdebug și să îl folosim doar cand avem nevoie;
- Să asigure securitatea mediului de development – nu ne doream ca detaliile proiectelor la care lucrăm pentru clienții noștri să ajungă la cine nu trebuie;
- Să asigure pornirea cu ușurință a unui nou proiect, într-un timp mai scurt (înainte dura undeva la 4-6 ore pornirea unui nou proiect);
- Să permită pornirea mai multor proiecte pe laptop – trebuia să putem rula mai multe proiecte Magento în paralel pe laptop, fără a fi nevoiți să așteptăm diferite taskuri să se finalizeze, înainte de a începe altul;
- Să fie compatibilă cu orice sistem de operare și să ruleze fără probleme atât pe Linux, cât și în Windows și MacOS, întrucât noi nu le impunem colegilor să folosească un anumit sistem de operare;
- Să permită migrarea rapidă a proiectelor existente, deci să fie compatibilă cu structura proiectelor existente, astfel încât task-urile în derulare să nu fie afectate;
- Să ne permită să rezolvăm performanța și pentru alte platforme, precum Symfony, pe care o folosim pentru anumite proiecte;
- Să fie o soluție documentată și, nu în ultimul rând, de tip open source, care să aibă și o comunitate în spate, să fie activă;
- În zona de nice to have, ne doream să putem să extindem cerințele, să ne permită să scriem noi anumite scripturi, pe care să le distribuim ușor colegilor, pentru a ne ușura activitatea de zi cu zi.
Am analizat, așadar, mai multe soluții printre care Dockergento, Meanbee și M Academy, însă am ales Warden pentru că bifa toate cerințele de mai sus și, în plus, este și foarte ușor de instalat.
Printre cele mai importante caracteristici ale Warden menționez următoarele: Traefik care permite rutarea traficului, Portainer pentru a vizualiza rapid informații despre ce rulează în Docker, Dnsmasq ce face ca toate domeniile .test să fie rezolvate pe localhost, conectarea facilă la baza de date printr-un SSH tunnel, suport pentru Magento 1, Magento 2 și configurații personalizate ale mediului de proiect pe macOS și Linux, și alte caracteristici interesante.
Instalarea Warden
Pentru noi, procesul de migrare s-a desfășurat destul de ușor și a fost o soluție apreciată atât de colegii back-end developeri, cat si front-end developeri.
Pentru a ne ușura activitatea, noi am creat un git repository în care avem comenzi de warden pe care le folosim global. Le instalam global pe laptopurile developerilor, dar putem să adăugăm comenzi specifice unui anumit proiect. Acum, cand pornim un proiect de la zero, avand setări comune pe toate mediile de dev, nu trebuie să repetăm procesul de fiecare dată. Dacă înainte dura ore bune să setăm un nou proiect, acum am redus timpul la 5-10 minute și lucrurile se derulează foarte ușor.
În documentația Warden puteți să găsiți mai multe detalii despre această soluție și despre modul de instalare https://docs.warden.dev/index.html.
Despre Autor
Alin Alexandru este CTO la Innobyte, companie românească de software development în eCommerce. Pasionat de performanță, Black Friday și infrastructure profiling, Alin caută mereu cele mai bune soluții pentru a eficientiza proiectele la care lucrează el și colegii lui.
Urmărește-ne și pe Google NEWS