TĂ€napĂ€eva veebirakenduse loomine ei piisa enam vaid arendamisest. Oluline aspekt on rakenduse juurutamise, jĂ€lgimise ning keskkonna haldamise ja administratsiooni seadistamine. KĂ€sitsi juurutamise ajastu on unustusse minekul, isegi vĂ€ikeste projektide puhul vĂ”ivad automatiseerimise tööriistad tuua mĂ€rgatavat kasu. KĂ€sitsi juurutamisel unustame sageli midagi edastada, arvestada mĂ”ne nĂŒansi vĂ”i kĂ€ivitada unustatud testi; see nimekiri vĂ”ib olla ĂŒsna pikk.
See artikkel vÔib aidata neid, kes alles Ôpivad veebirakenduste loomise aluseid ja soovivad paremini mÔista pÔhitingimusi ja konventsioone.
Seega saab rakenduste loomise jagada siiski kaheks osaks: see, mis on seotud rakenduskoodiga, ja see, mis on seotud keskkonnaga, kus see kood töötab. Rakenduskood jaguneb omakorda serveripoolseks (see, mis töötab serveris, sageli: Àrilogika, autoriseerimine, andmete salvestamine jne) ja kliendipoolseks (see, mis töötab kasutaja arvutis: sageli liides ja sellega seotud loogika).
Alustame siiski keskkonnast.
Iga koodi, sĂŒsteemi vĂ”i tarkvara aluseks on operatsioonisĂŒsteem, seega vaatame allpool kĂ”ige populaarsemaid sĂŒsteeme, mis on saadaval hostimisteenuste turul, ja anname neile lĂŒhikese kirjelduse:
Windows Server â sama Windows, kuid serveriversioonis. MĂ”ned funktsioonid, mis on saadaval tava (tavalisel) Windowsi versioonil, ei ole siin saadaval, nĂ€iteks mĂ”ned statistika kogumise teenused ja sellised rakendused, kuid asemele on olemas hulk vĂ”rguhalduse utiliite, pĂ”hivahendid juurutamiseks (web, ftp jne). Ăldiselt nĂ€eb Windows Server vĂ€lja nagu tavaline Windows, nĂ€itab sama kĂ€itusviisi, kuid maksab kaks korda rohkem kui selle tavaline vend. Kuid arvestades, et rakenduse juurutamine toimub tĂ”enĂ€oliselt pĂŒhendatud/virtuaalses serveris, vĂ”ib teie lĂ”plik kulu kĂŒll tĂ”usta, kuid mitte kriitiliselt. Kuna Windowsi platvorm hĂ”ivab suure osa kasutajakontrollide turust, on selle serveriversioon enamikule kasutajatele kĂ”ige tuttavam. serverid (web, ftp, âŠ). Ăldiselt nĂ€eb Windows Server vĂ€lja nagu tavaline Windows, toimib nagu tavaline Windows, kuid maksab kaks korda rohkem kui tema tavapĂ€rane versioon. Arvestades, et rakenduse kĂ€itamine toimub tĂ”enĂ€oliselt pĂŒhendatud/virtuaalses serveris, vĂ”ib lĂ”pphind kĂŒll tĂ”usta, kuid mitte kriitiliselt. Kuna Windowsi platvorm omab turul domineerivat positsiooni kasutajate operatsioonisĂŒsteemide seas, on selle serveriversioon enamikule kasutajatest kĂ”ige tuttavam.
Unix-sarnane sĂŒsteem. Traditsiooniline töö nende sĂŒsteemide juures ei eelda tuttava graafilise liidese olemasolu, pakkudes kasutajale juhtimise elemendina vaid konsooli. Kogenematule kasutajale vĂ”ib selline vormis töötamine olla keeruline, nagu on ainult vĂ€lja minek piisavalt populaarsest tekstiredaktoris. Vim, kĂŒsimus, mis sellega seotud, on 6 aastaga kogunud juba ĂŒle 1,8 miljoni vaatamise. Peamised distributsioonid (redaktsioonid) sellest perekonnast on: Debian - populaarne distributsioon, mille versioonid on suunatud peamiselt LTS (Long Term Support â pikaajaline tugi), mis vĂ€ljendub piisavalt suure usaldusvÀÀrsuse ja stabiilsuse sĂŒsteemi ja pakettide puhul; Ubuntu â sisaldab kĂ”iki pakette nende viimastes versioonides, mis vĂ”ib mĂ”jutada stabiilsust, kuid vĂ”imaldab kasutada funktsioone, mis on varustatud uute versioonidega; Red Hat Enterprise Linux - operatsioonisĂŒsteem, mis on positsioneeritud kommertskasutuseks, on tasuline, kuid sisaldab tarkvaratootjate toetust, mĂ”ned omandiĂ”igused ja draiveripaketid; CentOS - avatud lĂ€htekoodiga variatsioon Red Hat Enterprise Linuxist, erineb omandiĂ”iguste ja toe puudumise poolest.
Nende jaoks, kes alles hakkavad seda valdkonda valdama, on minu soovitus sĂŒsteemid Windows Server, vĂ”i Ubuntu. Kui vaadata Windowsi, siis on see eelkĂ”ige sĂŒsteemi tuttavus, Ubuntu â suurem tolerantsus vĂ€rskenduste suhtes, ja seetĂ”ttu vĂ€hem probleeme, nĂ€iteks projektide kĂ€ivitamisel tehnoloogiate osas, mis nĂ”uavad uusi versioone.
Nii et, olles mÀÀratlenud operatsioonisĂŒsteemi, liigume tööriistade komplekti poole, mis vĂ”imaldavad rakenduse vĂ”i selle osade paigaldamist, uuendamist ja jĂ€lgimist serveris.
JÀrgmine oluline otsus on - teie rakenduse ja selle jaoks serveri paigutamine. Praegu on kolm kÔige levinumat teed:
- HÔlbustada (hoida) serverit endal, iseseisvalt - kÔige odavam variant, kuid peate tellima pakkuja juures staatilise IP, et teie ressurss ei muudaks oma aadressi aja jooksul.
- Rentida Dedicated Server (VDS) â ja tegeleda iseseisvalt selle haldamise ja koormuse skaleerimisega.
- Maksa (tihti antakse tasuta proovi platvormi funktsionaalsusele) tellimus mĂ”nel pilve hostimisteenusel, kus on ĂŒsna laialt levinud makse mudel kasutatud ressursside eest. KĂ”ige silmapaistvamad esindajad sellel alal: Amazon AWS (pakuvad tasuta aastat teenuste kasutamist, kuid kuumahu limiidiga), Google Cloud (annavad 300 dollarit arvele, mida saab aastas kasutada pilveteenuste jaoks, hostimist), Yandex. ĐблаĐșĐŸ (annavad 4000 rubla kaheks kuuks), Microsoft Azure (pakuvad tasuta juurdepÀÀsu populaarsetele teenustele aastaks, pluss 12 500 rubla mistahes teenuste jaoks ĂŒhe kuu jooksul). Seega saate proovida mĂ”nda neist pakkujatest, kulutamata sentigi, kuid saades umbkaudse arvamuse teenuste kvaliteedi ja taseme kohta.
SĂ”ltuvalt valitud teest muutub edaspidi vaid see fakt, kellel peamiselt lasub vastutus ĂŒhe vĂ”i teise haldusvaldkonna eest. Kui hostite ise, siis peate mĂ”istma, et kĂ”ik elektri, interneti, serveri, sellel kĂ€ivitatud tarkvara katkestused â kĂ”ik see langeb tĂ€ielikult teie Ă”lgadele. Kuid Ă”ppimiseks ja testimiseks on seda enam kui piisavalt.
Kui teil aga ei ole ĂŒleliigset masinat, mis saaks mĂ€ngida serveri rolli, siis soovite kasutada teist vĂ”i kolmandat teed. Teine juhtum on esimesega identne, erandiga, et te ĂŒlekandate vastutuse serveri kĂ€ttesaadavuse ja selle vĂ”imsuse eest hostimisele. Serveri ja tarkvara haldamine jÀÀb endiselt teie kontrolli all.
Ja lĂ”puks, variant pilve pakkujate vĂ”imsuste rentimisel. Siin saate seadistada peaaegu iga asi automatiseeritud juhtimise, sĂŒgavatesse tehnilistesse nĂŒanssidesse laskumata. Lisaks sellele, ĂŒhe masina asemel vĂ”ite omada mitu paralleelselt töötavat instantsi (eksemplari), mis vĂ”ivad nĂ€iteks vastutada rakenduse erinevate osade eest, samas ei erine nende hind eraldiseisva serveri omamisest palju. Ja seal on ka orkestreerimise, konteineriseerimise, automaatse juurutamise, pideva integreerimise ja paljude teiste tööriistade vĂ”imalused! MĂ”ned neist asjadest kĂ€sitleme allpool.
Ăldiselt on serveri infrastruktuur jĂ€rgmine: meil on nii kutsutud "orkestrator" ("orkestreerimine" â protsess, mis haldab mitmeid serveri instantsse), mis juhib keskkonna muudatusi serveri instantsis, ning virtualiseerimise konteiner (valikuline, kuid tihti kasutatav), mis vĂ”imaldab rakendust jagada isoleeritud loogilisteks kihtideks, ja pideva integreerimise tarkvara â mis vĂ”imaldab paigaldatud koodi uuendamist "skriptide" kaudu.
Seega vĂ”imaldab orkestreerimine teil nĂ€ha serverite staatust, teostada keskkonna uuenduste "rakendamist" vĂ”i "tagasipöördumist" ning nii edasi. Alguses ei pruugi see aspekt teid puudutada, kuna midagi orkestreerimiseks on vajalik mitu serverit (ĂŒks vĂ”ib ka olla, kuid milleks see vajalik on?), ja et oleks mitu serverit, on vajalik nende vajadus. Selle valdkonna tööriistadest on kĂ”ige tuntum Kubernetes, mis on vĂ€lja töötatud. Google.
JĂ€rgmine samm on virtualiseerimine operatsioonisĂŒsteemi tasandil. Praegu on laialt levinud mĂ”isted "dokkerimine" â mis on tulnud tööriistast. Docker, mis pakub eraldiseisvaid konteinerite funktsioone, mis töötavad ĂŒhe operatsioonisĂŒsteemi kontekstis. Mis see tĂ€hendab: igas sellises konteineris saab kĂ€ivitada rakenduse vĂ”i isegi rakenduste kogumi, mis arvavad, et nad on ainsad kogu OP-s, isegi teadmata, et teised on sellel masinal olemas. See funktsioon on vĂ€ga kasulik, et kĂ€ivitada erinevate versioonidega samu rakendusi vĂ”i lihtsalt konfliktis olevaid rakendusi, samuti rakenduse osade kihtideks jaotamiseks. See kihtide koopia saab hiljem salvestada pildiks, mida saab kasutada nĂ€iteks rakenduse juurutamiseks. Seega, kui installite selle pildi ja avate seejĂ€rel konteinerid, mille ta sisaldab, saate valmis keskkonna oma rakenduse kĂ€ivitamiseks! Esimestel etappidel saate seda tööriista kasutada nii tutvumiseks kui ka reaalsete eeliste saavutamiseks, jagades rakenduse loogikat erinevatesse kihtidesse. Kuid siin tuleb öelda, et konteineriseerimine pole kaugeltki kĂ”igile vajalik ja mitte alati. Konteineriseerimine on pĂ”hjendatud juhtudel, kui rakendus on âfragmenteeritudâ, jagatud vĂ€ikesteks osadeks, millest igaĂŒhel on oma ĂŒlesanne, nn âmikroteenuste arhitektuurâ.
Lisaks keskkonna tagamisele peame tagama ka rakenduse Ă”ige juurutamise, mis hĂ”lmab erinevaid koodimoodustusi, rakendusega seotud teekide ja pakettide installimist, testide lĂ€biviimist, teavitusi nende toimingute kohta jne. Siin peame tĂ€helepanu pöörama mĂ”istele âJĂ€tkuv Integreerimineâ (CI â JĂ€tkuv Integreerimine). Praegu on peamised tööriistad selle vallas Jenkins (CI jaoks mĂ”eldud Java-s kirjutatud tarkvara, mis vĂ”ib alguses tunduda keeruline), Travis CI (kirjutatud Ruby's, subjektiivselt, veidi lihtsam Jenkins'ist, kuid siiski vajab see endiselt teatud teadmisi juurutamise seadistamise alal), Gitlab CI (kirjutatud Rubys ja Go's).
Nii et pÀrast keskkonna arutamist, kus teie rakendus tööle hakkab, on lÔpuks aeg vaadata, milliseid tööriistu pakub meile tÀnapÀevane maailm nende rakenduste loomiseks.
Alustame pĂ”hialustest: Backend (backend) â serveripool. Keelte, pĂ”hifunktsioonide komplekti ja ettenĂ€htud struktuuri (raamistik) valik sĂ”ltub peamiselt isiklikest eelistustest, kuid siiski tasub mainida arutlemiseks (autori arvamus keelte kohta on piisavalt subjektiivne, kuigi pretendeerib erapooletule kirjeldusele):
- Python â piisavalt sĂ”bralik keelekasutajatele, kes on algajad, andestab mĂ”ned vead, kuid vĂ”ib ka olla piisavalt range, et arendaja ei teeks halbu asju. Juba piisavalt kĂŒps ja lĂ€bimĂ”eldud programmeerimiskeel, mis ilmus 1991. aastal.
- Go â Google'i keel, samuti piisavalt sĂ”bralik ja mugav, on lihtne kompileerida ja saada tĂ€idetav fail igal platvormil. VĂ”ib olla lihtne ja meeldiv, kuid ka keeruline ja tĂ”sine. Uus ja noor, ilmus suhteliselt hiljuti, 2009. aastal.
- Rust â veidi vanem kui eelmine kolleeg, ilmus 2006. aastal ja on endiselt noor oma kaaslaste seas. Suunatud kogenumatele arendajatele, kuigi pĂŒĂŒab siiski lahendada paljusid madalama taseme ĂŒlesandeid programmeerija eest.
- Java â kommertsarenduse veteran, mis ilmus 1995. aastal, on hetkel ĂŒks kĂ”ige sagedamini kasutatavaid keeli ettevĂ”tte rakenduste arendamisel. Selle pĂ”hikontseptsioonide ja raskesti seadistatud töökeskkonna tĂ”ttu vĂ”ib see algajale olla piisavalt keeruline.
- ASP.net â rakenduste arendamise platvorm, mille on vĂ€lja töötanud Microsoft. Funktsionaalsuse kirjutamiseks kasutatakse peamiselt C# keelt (hÀÀldatakse C si Sharp), mis ilmus 2000. aastal. Oma keerukuse poolest on see vĂ”rreldav Java ja Rusti vahel.
- PHP â algselt kasutatud HTML-i eelprotsessimiseks, on hetkel kuigi palju kasutatud, kuid on nĂ€htav kalduvus langusele. Erineb madalast sisenemise kĂŒnnist, koodi lihtsast kirjutamisest, kuid samas, suurte rakenduste arendamisel vĂ”ib selle keele funktsionaalsus osutuda ebapiisavaks.
Ja meie rakenduse lĂ”pposa â kasutajale kĂ”ige kĂ€egakatsutavam â Frontend (frontend) â on Teie rakenduse nĂ€gu, just selle osaga kasutaja otse suhtleb.
Kaevamata detailidesse, tÀnapÀeva front-end pÔhineb kolmel sambal ja raamistikul (ning vÀhemal mÀÀral), et luua kasutajaliideseid. Seega on kolm kÔige populaarsemat:
- ReactJS â ei ole raamistik, vaid teek. Tegelikult eristab seda uhkest raamistikust ainult teatud funktsioonide "karbist" puudumine ja vajadus neid kĂ€sitsi installida. Seega on olemas mitu varianti, kuidas seda teeki "valmistada", luues omalaadseid raamistikke. Algajale vĂ”ib see olla keeruline mĂ”nede pĂ”himĂ”tete ja suhteliselt agressiivse koostamisvĂ”ime seadistuste tĂ”ttu. Siiski, kiireks alustamiseks vĂ”ib kasutada paketti "create-react-app".
- VueJS â raamistik kasutajaliideste loomiseks. Sellest kolmikust vĂ”tab ta Ă”igusega tiitli kĂ”ige kasutajasĂ”bralikumate raamistike seas, arendades Vue'ga, on sisenemisbarjÀÀr madalam kui teistel mainitud kolleegidel. Lisaks on ta nendest kĂ”ige noorem.
- Angular â peetakse kĂ”ige keerulisemaks antud raamistike seas, ainus, mis nĂ”uab olemasolu TypeScript (JavaScripti keele ĂŒlesehitus). Sageli kasutatakse suuri ettevĂ”tte rakenduste arendamiseks.
KokkuvĂ”ttes vĂ”ib jĂ€reldada, et rakenduse kĂ€ivitamine erineb kardinaalselt sellest, kuidas see protsess varem toimus. Siiski ei takista miski vanaviisi "deploomise" tegemist. Kuid kas see sÀÀstetud aeg tasub Ă€ra arendajale nĂ€htavaid hulgaliselt komistuskive, kui ta valib selle tee? Ma arvan, et vastus on "ei". Kulutades natuke rohkem aega nende tööriistadega tutvumisele (ja rohkem ei olegi vaja, kuna peate lihtsalt aru saama, kas need on teie praeguses projektis vajalikud vĂ”i mitte), suudate seda aega kompenseerida, vĂ€hendades nĂ€iteks nĂ€kyvaid vigu, mis sĂ”ltuvad keskkonnast ja ilmneda vaid produktsiooniserveris, öiseid arutelusid selle ĂŒle, mis pĂ”hjustas serveri krahhi ja miks see ei kĂ€ivitu, jne.
Allikas: habr.com
