Pentru a crea o aplicație web în zilele noastre, nu este suficient să știi să o dezvolți. Un aspect important este configurarea instrumentelor de desfășurare a aplicației, monitorizarea, precum și gestionarea și administrarea mediului în care aceasta funcționează. Era desfășurării manuale dispare, chiar și pentru proiecte mici, instrumentele de automatizare pot aduce beneficii semnificative. Atunci când desfășurăm manual, adesea putem uita să transferăm ceva, să luăm în considerare un detaliu sau să lansăm un test uitat, lista poate continua destul de mult.
Această articol poate ajuta pe cei care abia încep să învețe bazele creării de aplicații web și doresc să înțeleagă puțin mai bine termenii și convențiile de bază.
Așadar, construcția aplicațiilor poate fi împărțită, totuși, în două părți: tot ce ține de codul aplicației și tot ce ține de mediul în care acest cod rulează. Codul aplicației se împarte la rândul său în cod de server (care rulează pe server, adesea: logica de afaceri, autorizarea, stocarea datelor etc.) și cod client (care rulează pe mașina utilizatorului: adesea interfața și logica asociată acesteia).
Să începem, cred, cu mediul.
Baza pentru funcționarea oricărui cod, sistem sau software este sistemul de operare, prin urmare, mai jos vom analiza cele mai populare sisteme disponibile pe piața de găzduire și le vom oferi o scurtă caracteristică:
Windows Server – este Windows-ul, dar în varianta server. Unele funcționalități disponibile în versiunea client (obișnuită) a Windows nu sunt prezente aici, de exemplu, anumite servicii de colectare a statisticilor și software similar, dar există un set de utilitare pentru administrarea rețelei, software de bază pentru desfășurare. servere (web, ftp, …). În general, Windows Server arată ca un Windows obișnuit, se comportă ca un Windows obișnuit, însă costă de două ori mai mult decât fratele său obișnuit. Totuși, având în vedere că desfășurarea aplicației va fi, probabil, pe un server dedicat/virtual, costul final pentru tine poate crește, dar nu critic. Deoarece platforma Windows ocupă o pondere covârșitoare pe piața sistemelor de operare pentru utilizatori, ediția sa server va fi cea mai familiară pentru majoritatea utilizatorilor.
Unix-similar system. Traditional operation in these systems does not provide a familiar graphical interface, offering the user only a console as a control element. For inexperienced users, working in this format can be challenging, especially when it comes to exit from a rather popular text editor. Vim, the question related to this has gained more than 1.8 million views over 6 years. The main distributions of this family are: Debian - a popular distribution, package versions in it are mainly oriented towards LTS (Long Term Support – long-term support), which translates into considerable reliability and stability of the system and packages; Ubuntu – contains distributions of all packages in their latest versions, which may affect stability but allows access to functionalities provided with new versions; Red Hat Enterprise Linux – OS, positioned for commercial use, is paid, however, it includes support from software vendors, some proprietary packages, and driver packages; CentOS – open-source variation of Red Hat Enterprise Linux, distinguished by the absence of proprietary packages and support.
For those who are just beginning to delve into this field, my recommendations would be systems Windows Server, sau Ubuntu. When considering Windows, the first aspect is the familiarity of the system, Ubuntu – greater tolerance for updates, and, for instance, fewer problems when launching projects using technologies that require newer versions.
So, having determined the OS, let's move on to the set of tools that allow deploying (installing), updating, and monitoring the state of applications or their parts on the server.
The next important decision will be - the placement of your application and the server for it. Currently, the three most common options are:
- Hosting (keeping) the server yourself - the most budget-friendly option, but you will need to order a static IP from your provider so that your resource does not change its address over time.
- Renting a Dedicated Server (VDS) – and independently managing its administration and load scaling.
- Plătiți (adesea se oferă o probă gratuită a funcționalității platformei) un abonament pe un hosting cloud, unde modelul de plată pe resurse utilizate este destul de comun. Cele mai proeminente exemple în acest domeniu sunt: Amazon AWS (oferă un an gratuit de utilizare a serviciilor, cu un plafon lunar), Google Cloud (oferă 300$ pe cont, care pot fi cheltuiți pe parcursul unui an pentru servicii cloud de găzduire), Yandex.Cloud (oferă 4000 ruble pentru 2 luni), Microsoft Azure (oferă acces gratuit la servicii populare timp de un an, plus 12.500 ruble pentru orice servicii timp de o lună). Astfel, puteți testa oricare dintre acești furnizori fără a cheltui niciun ban, dar veți obține o idee generală despre calitatea și nivelul serviciilor oferite.
În funcție de calea aleasă, va varia doar faptul pe cine, în principal, revine responsabilitatea pentru un anumit domeniu de administrare. Dacă găzduiți singur, trebuie să înțelegeți că orice întrerupere a energiei electrice, internetului, serverului sau software-ului instalat – toate acestea recade pe umerii dumneavoastră. Totuși, pentru învățare și testare, acest lucru este mai mult decât suficient.
Dacă nu aveți o mașină suplimentară capabilă să joace rolul de server, atunci s-ar putea să doriți să optați pentru a doua sau a treia cale. Cazul al doilea este asemănător cu primul, cu excepția faptului că preluați responsabilitatea pentru disponibilitatea serverului și puterea acestuia pe umerii host-ului. Administrarea serverului și software-ului rămâne sub controlul dumneavoastră.
Și, în cele din urmă, opțiunea de a închiria capacitățile furnizorilor de cloud. Aici puteți configura gestionarea automatizată a aproape oricărui lucru, fără a vă implica prea mult în nuanțele tehnice. În plus, în loc de o singură mașină, puteți avea mai multe instanțe (exemplare) rulate în paralel, care pot, de exemplu, răspunde pentru diferite părți ale aplicației, fără a se diferenția foarte mult în cost de a deține un server dedicat. În plus, există instrumente de orchestrare, containerizare, desfășurare automată, integrare continuă și multe altele! Unele dintre aceste lucruri le vom analiza mai jos.
În general, infrastructura serverului arată astfel: avem un așa-numit „ orchestrator ” ( „ orchestrare ” - procesul de gestionare a mai multor instanțe de servere), care administrează modificările mediului pe instanța serverului, un container de virtualizare (opțional, dar destul de frecvent utilizat), care permite împărțirea aplicației în straturi logice izolate, și software pentru Integrarea Continuă - care permite actualizarea codului găzduit prin intermediul „scripturilor”.
Așadar, orchestrarea vă permite să vizualizați stările serverelor, să efectuați „aplicarea” sau „reversarea” actualizărilor mediului serverului etc. La început, acest aspect nu vă va afecta prea mult, deoarece pentru a orchestra ceva este necesar să aveți mai multe servere (se poate și cu unul, dar de ce ar fi nevoie?), iar pentru a avea mai multe servere este necesară o cerere pentru ele. Din instrumentele din acest domeniu, Kubernetes, dezvoltat, este cel mai cunoscut. Google.
Următoarea etapă este virtualizarea la nivel de sistem de operare. Acum, conceptul de „dockerizare” a câștigat o mare popularitate, care provine dintr-un instrument. Docker, oferind funcționalitatea containerelor izolate unul de celălalt, dar care rulează în contextul unei singure sisteme de operare. Ce înseamnă asta: în fiecare dintre aceste containere se poate rula o aplicație sau chiar un set de aplicații care vor crede că sunt singurele din întreaga OS, fără a bănui de existența altora pe această mașină. Această funcționalitate este foarte utilă atât pentru a rula aplicații identice pe versiuni diferite, cât și pentru aplicații care intră în conflict, dar și pentru a împărți bucățile unei aplicații în straturi. Această imprimare a stratelor poate fi apoi salvată într-o imagine, care poate fi utilizată, de exemplu, pentru a desfășura aplicația. Asta înseamnă că, instalând această imagine și desfășurând containerele pe care le conține, obțineți un mediu pregătit pentru a lansa aplicația dumneavoastră! La început, puteți folosi acest instrument atât în scopuri informative, cât și pentru a obține un beneficiu real, dispersând logica aplicației în diferite straturi. Dar, trebuie să menționez că dockerizarea nu este necesară pentru toată lumea și nu în toate cazurile. Dockerizarea este justificată în situațiile în care aplicația este „fragmentată”, împărțită în părți mici, fiecare responsabilă pentru propria sarcină, așa-numita „arhitectură de microservicii”.
În plus, pe lângă asigurarea mediului, trebuie să ne asigurăm și de un desfășurare corectă a aplicației, care include toate transformările de cod, instalarea bibliotecilor și pachetelor asociate aplicației, rularea testelor, notificările despre aceste operațiuni și așa mai departe. Aici trebuie să ne concentrăm asupra unui concept numit „Integrare Continuă” (CI – Continuous Integration). Principalele instrumente din acest domeniu în prezent sunt Jenkins (software pentru CI, scris în Java, care poate părea puțin complicat la început), Travis CI (scris în Ruby, subiectiv, ceva mai simplu decât Jenkins, totuși, necesită totuși anumite cunoștințe în domeniul configurării desfășurării), Gitlab CI (scris în Ruby și Go).
Deci, după ce am discutat despre mediu în care aplicația dumneavoastră va lucra, a venit timpul să aruncăm o privire asupra instrumentelor pe care ni le oferă lumea modernă pentru a crea aceste aplicații.
Să începem cu baza: Backend (backend) – partea de server. Alegerea limbii, setul de funcții de bază și structura predefinită (framework) sunt în principal determinate de preferințele personale, dar este totuși de menționat pentru considerare (opinie personală despre limbaje este destul de subiectivă, deși cu o tentativă de descriere obiectivă):
- Python – un limbaj suficient de prietenos pentru utilizatorii neexperimentați, iartă anumite greșeli, dar poate fi destul de strict cu dezvoltatorul, astfel încât să nu comită erori grave. Este un limbaj de programare destul de matur, apărut în 1991.
- Go – limbaj dezvoltat de compania Google, de asemenea destul de prietenos și convenabil, este relativ ușor de compilat și obținut un fișier executabil pe orice platformă. Poate fi simplu și plăcut, dar și complex și serios. Este nou, a apărut relativ recent, în 2009.
- Rust – cu puțin mai vechi decât colegul său anterior, lansat în 2006, încă destul de tânăr în comparație cu frații săi. Este orientat către dezvoltatori mai experimentați, deși încă își propune să rezolve multe probleme de nivel scăzut pentru programator.
- Java – un veteran al dezvoltării comerciale, apărut în 1995, este unul dintre cele mai utilizate limbaje în dezvoltarea aplicațiilor enterprise în prezent. Cu conceptele sale de bază și configurarea complexă a mediului de execuție, poate deveni suficient de complicat pentru un începător.
- ASP.net – o platformă pentru dezvoltarea aplicațiilor, lansată de compania Microsoft. Pentru a scrie funcționalitatea, se folosește în principal limbajul C# (pronunțat C si Sharp), care a apărut în 2000. Din punct de vedere al complexității, este comparabil cu un nivel între Java și Rust.
- PHP – folosit inițial pentru preprocesarea HTML, în prezent, chiar dacă își menține absolut leadershipul pe piața limbajelor, se observă o tendință de scădere a utilizării. Se caracterizează printr-un prag de intrare scăzut, ușurința în scrierea codului, dar, în același timp, în dezvoltarea aplicațiilor mai mari, funcționalitatea limbajului poate să nu fie suficientă.
Și, în final, partea noastră de aplicație – cea mai tangibilă pentru utilizator – Frontend (frontend) – este fața aplicației dumneavoastră, aceasta este partea cu care utilizatorul interacționează direct.
Fără a intra în detalii, frontendul modern se bazează pe trei piloni, frameworkuri (și nu foarte multe) pentru crearea interfețelor utilizator. Prin urmare, cele trei cele mai populare sunt:
- ReactJS – nu este un framework, ci o bibliotecă. De fapt, singura diferență față de titlul mândru de framework este lipsa unor funcții „din cutie” și necesitatea de a le instala manual. Astfel, există mai multe variante de „preparare” a acestei biblioteci, formând frameworkuri distincte. Pentru un începător poate fi puțin complicat, din cauza unor principii de bază, și a configurației agresive a mediului de construire. Cu toate acestea, pentru un început rapid, se poate folosi pachetul „create-react-app”.
- VueJS – este un framework pentru construirea interfețelor utilizator. Dintre această triască, își revendică pe bună dreptate titlul de cel mai prietenos framework pentru utilizator; pragul de intrare pentru dezvoltarea în Vue este mai mic decât la ceilalți colegi menționați. În plus, dintre ele, este cel mai tânăr.
- Angular – este considerat cel mai complex dintre frameworkurile menționate, singurul care necesită existența TypeScript (un suprastructură pe limbajul Javascript). Este adesea folosit pentru construirea de aplicații corporative mari.
Rezumând cele scrise mai sus, concluzionăm că desfășurarea unei aplicații se diferențiază radical de modul în care acest proces a avut loc în trecut. Totuși, nimeni nu interzice desfășurarea „pe vechi”. Dar merită oare timpul economisit la început, pentru un număr mare de capcane de care se va lovi dezvoltatorul care a ales acest drum? Consider că răspunsul este „nu”. Investind puțin mai mult timp în familiarizarea cu aceste instrumente (iar mai mult nu este necesar, deoarece trebuie să înțelegeți dacă aveți nevoie de ele în proiectul curent sau nu), veți putea recupereze acest timp, reducând semnificativ, de exemplu, cazurile de erori fantomă, care depind de mediu și se manifestă doar pe serverul de producție, analizele nocturne pentru a înțelege ce a dus la prăbușirea serverului și de ce nu pornește, și multe altele.
Sursa: habr.com
