Checklist para sa paggawa at pag-publish ng mga web application

Upang makalikha ng sarili mong web application sa ating panahon, hindi sapat na mabuo ito. Ang isang mahalagang aspeto ay ang pag-set up ng mga tool para sa pag-deploy ng application, pagsubaybay, pati na rin ang pamamahala at pangangasiwa sa kapaligiran kung saan ito gumagana. Habang ang panahon ng manu-manong pag-deploy ay nawawala sa limot, kahit na para sa maliliit na proyekto, ang mga tool sa pag-automate ay maaaring magdala ng mga nakikitang benepisyo. Kapag nag-deploy ng "sa pamamagitan ng kamay", madalas nating makalimutan na ilipat ang isang bagay, isaalang-alang ito o ang nuance na iyon, magpatakbo ng isang nakalimutang pagsubok, ang listahang ito ay maaaring ipagpatuloy sa mahabang panahon.

Maaaring makatulong ang artikulong ito sa mga nag-aaral pa lang ng mga pangunahing kaalaman sa paggawa ng mga web application at gustong maunawaan nang kaunti ang tungkol sa mga pangunahing tuntunin at kumbensyon.

Kaya, ang pagbuo ng mga application ay maaari pa ring hatiin sa 2 bahagi: lahat ng bagay na nauugnay sa application code, at lahat ng nauugnay sa kapaligiran kung saan ang code na ito ay pinaandar. Ang application code, sa turn, ay nahahati din sa server code (ang tumatakbo sa server, madalas: business logic, authorization, data storage, atbp.), at client code (yung tumatakbo sa machine ng user: madalas ang interface, at nauugnay na lohika dito).

Magsimula tayo sa Miyerkules.

Ang batayan para sa pagpapatakbo ng anumang code, system, o software ay ang Operating System, kaya sa ibaba ay titingnan natin ang pinakasikat na mga system sa hosting market at bibigyan sila ng maikling paglalarawan:

Windows Server - ang parehong Windows, ngunit sa isang pagkakaiba-iba ng server. Ang ilang pag-andar na magagamit sa client (regular) na bersyon ng Windows ay wala dito, halimbawa, ilang mga serbisyo para sa pagkolekta ng mga istatistika at katulad na software, ngunit mayroong isang hanay ng mga utility para sa pangangasiwa ng network, pangunahing software para sa pag-deploy ng mga server (web, ftp, ...). Sa pangkalahatan, ang Windows Server ay mukhang regular na Windows, quacks tulad ng regular na Windows, gayunpaman, ito ay nagkakahalaga ng 2 beses na mas mataas kaysa sa regular na katapat nito. Gayunpaman, dahil malamang na i-deploy mo ang application sa isang nakalaang/virtual na server, ang panghuling gastos para sa iyo, bagama't maaari itong tumaas, ay hindi kritikal. Dahil ang platform ng Windows ay sumasakop sa isang napakalaking lugar sa merkado ng consumer OS, ang edisyon ng server nito ang magiging pinakapamilyar sa karamihan ng mga user.

Unix-katulad na sistema. Ang tradisyunal na gawain sa mga sistemang ito ay hindi nangangailangan ng pagkakaroon ng isang pamilyar na graphical na interface, na nag-aalok lamang sa user ng isang console bilang isang elemento ng kontrol. Para sa isang walang karanasan na user, maaaring maging mahirap ang pagtatrabaho sa format na ito, magkano lang ang halaga ng pag-alis sa isang text editor na medyo sikat sa data kalakasan, ang isang tanong na nauugnay dito ay nakatanggap na ng higit sa 6 milyong view sa loob ng 1.8 na taon. Ang mga pangunahing distribusyon (edisyon) ng pamilyang ito ay: Debian - isang tanyag na pamamahagi, ang mga bersyon ng package dito ay pangunahing nakatuon sa LTS (Pangmatagalang Suporta – suporta sa mahabang panahon), na ipinahayag sa medyo mataas na pagiging maaasahan at katatagan ng system at mga pakete; Ubuntu – naglalaman ng mga distribusyon ng lahat ng mga pakete sa kanilang pinakabagong mga bersyon, na maaaring makaapekto sa katatagan, ngunit nagbibigay-daan sa iyong gamitin ang pag-andar na kasama ng mga bagong bersyon; Red Hat Enterprise Linux – OS, na nakaposisyon para sa komersyal na paggamit, ay binabayaran, gayunpaman, kasama ang suporta mula sa mga vendor ng software, ilang pagmamay-ari na mga pakete at mga pakete ng driver; CentOS - open source isang variation ng Red Hat Enterprise Linux, na nailalarawan sa kawalan ng mga proprietary package at suporta.

Para sa mga nagsisimula pa lamang na makabisado ang lugar na ito, ang aking rekomendasyon ay mga sistema Windows ServerO Ubuntu. Kung isasaalang-alang namin ang Windows, kung gayon ito ay pangunahing pamilyar sa system, Ubuntu – higit na pagpapaubaya sa mga update, at sa turn, halimbawa, mas kaunting mga problema kapag naglulunsad ng mga proyekto sa mga teknolohiya na nangangailangan ng mga bagong bersyon.

Kaya, na nagpasya sa OS, lumipat tayo sa isang hanay ng mga tool na nagbibigay-daan sa iyo upang i-deploy (i-install), i-update at subaybayan ang estado ng application o mga bahagi nito sa server.

Ang susunod na mahalagang desisyon ay ang paglalagay ng iyong aplikasyon at ang server para dito. Sa ngayon, ang pinakakaraniwan ay 3 paraan:

  • Ang pagho-host (pagpapanatili) ng server nang mag-isa ay ang pinaka-friendly na opsyon, ngunit kailangan mong mag-order ng static na IP mula sa iyong provider upang hindi mabago ng iyong mapagkukunan ang address nito sa paglipas ng panahon.
  • Magrenta ng Dedicated Server (VDS) – at independiyenteng pangasiwaan ito at i-scale ang mga load
  • Magbayad (kadalasan ay binibigyan ka nila ng pagkakataong subukan ang functionality ng platform nang libre) para sa isang subscription sa ilang cloud hosting, kung saan ang modelo ng pagbabayad para sa mga mapagkukunang ginamit ay medyo karaniwan. Ang pinakakilalang kinatawan ng direksyong ito: Amazon AWS (nagbibigay sila ng libreng taon ng paggamit ng mga serbisyo, ngunit may buwanang limitasyon), Google Cloud (nagbibigay sila ng $300 sa account, na maaaring gastusin sa loob ng taon sa mga serbisyo sa cloud hosting) , Yandex.Cloud (nagbibigay sila ng 4000 rubles . para sa 2 buwan), Microsoft Azure (magbigay ng libreng pag-access sa mga sikat na serbisyo para sa isang taon, + 12 rubles para sa anumang mga serbisyo para sa isang buwan). Kaya, maaari mong subukan ang alinman sa mga provider na ito nang hindi gumagasta ng isang sentimo, ngunit kumuha ng tinatayang opinyon tungkol sa kalidad at antas ng serbisyong ibinigay.

Depende sa napiling landas, ang tanging bagay na magbabago sa hinaharap ay kung sino ang higit na responsable para dito o sa lugar na iyon ng administrasyon. Kung nagho-host ka sa iyong sarili, dapat mong maunawaan na ang anumang pagkagambala sa kuryente, sa Internet, sa server mismo, sa software na naka-deploy dito - lahat ng ito ay ganap na nakasalalay sa iyong mga balikat. Gayunpaman, para sa pagsasanay at pagsubok, ito ay higit pa sa sapat.

Kung wala kang dagdag na makina na maaaring gumanap sa papel ng isang server, gugustuhin mong gamitin ang pangalawa o pangatlong paraan. Ang pangalawang kaso ay kapareho ng una, maliban na ilipat mo ang responsibilidad para sa pagkakaroon ng server at ang kapangyarihan nito sa mga balikat ng hoster. Ang pangangasiwa ng server at software ay nasa ilalim pa rin ng iyong kontrol.

At sa wakas, ang opsyon ng pagrenta ng kapasidad ng mga cloud provider. Dito maaari kang mag-set up ng automated na kontrol sa halos anumang bagay nang hindi napupunta sa masyadong maraming teknikal na detalye. Bilang karagdagan, sa halip na isang makina, maaari kang magkaroon ng ilang parallel running instance, na maaaring, halimbawa, ay responsable para sa iba't ibang bahagi ng application, habang hindi gaanong nagkakaiba sa gastos mula sa pagmamay-ari ng isang dedikadong server. At gayundin, may mga tool para sa orkestrasyon, containerization, awtomatikong pag-deploy, tuluy-tuloy na pagsasama at marami pang iba! Titingnan natin ang ilan sa mga bagay na ito sa ibaba.

Sa pangkalahatan, ganito ang hitsura ng imprastraktura ng server: mayroon kaming tinatawag na β€œorchestrator” (β€œorchestration” ay ang proseso ng pamamahala ng ilang mga instance ng server), na namamahala sa mga pagbabago sa kapaligiran sa isang server instance, isang virtualization container (opsyonal, ngunit medyo madalas na ginagamit), na nagbibigay-daan sa iyong hatiin ang application sa mga nakahiwalay na lohikal na layer, at Continuous Integration softwareβ€”na nagpapahintulot sa mga update sa naka-host na code sa pamamagitan ng "mga script."

Kaya, binibigyang-daan ka ng orkestrasyon na makita ang katayuan ng mga server, ilunsad o ibalik ang mga update sa kapaligiran ng server, at iba pa. Sa una, ang aspetong ito ay malamang na hindi makakaapekto sa iyo, dahil upang mag-orchestrate ng anuman, kailangan mo ng ilang mga server (maaari kang magkaroon ng isa, ngunit bakit ito kinakailangan?), At upang magkaroon ng ilang mga server, kailangan mo ang mga ito. Kabilang sa mga tool sa direksyong ito, ang pinakasikat ay ang Kubernetes, na binuo ni Google.

Ang susunod na hakbang ay virtualization sa antas ng OS. Sa ngayon, ang konsepto ng "dockerization" ay naging laganap, na nagmula sa tool Manggagawa sa pantalan, na nagbibigay ng functionality ng mga container na nakahiwalay sa isa't isa, ngunit inilunsad sa konteksto ng isang operating system. Ano ang ibig sabihin nito: sa bawat isa sa mga lalagyan na ito maaari kang magpatakbo ng isang application, o kahit isang hanay ng mga application, na maniniwala na sila lamang ang nasa buong OS, nang hindi man lang pinaghihinalaan ang pagkakaroon ng ibang tao sa makinang ito. Ang function na ito ay lubhang kapaki-pakinabang para sa paglulunsad ng magkatulad na mga application ng iba't ibang mga bersyon, o simpleng magkasalungat na mga application, pati na rin para sa paghahati ng mga piraso ng isang application sa mga layer. Ang layer cast na ito ay maaaring isulat sa ibang pagkakataon sa isang imahe, na maaaring magamit, halimbawa, upang mag-deploy ng isang application. Iyon ay, sa pamamagitan ng pag-install ng larawang ito at pag-deploy ng mga lalagyan na nilalaman nito, makakakuha ka ng isang handa na kapaligiran para sa pagpapatakbo ng iyong application! Sa mga unang hakbang, maaari mong gamitin ang tool na ito para sa mga layuning pang-impormasyon at para makakuha ng tunay na mga benepisyo sa pamamagitan ng paghahati sa logic ng application sa iba't ibang mga layer. Ngunit sulit na sabihin dito na hindi lahat ay nangangailangan ng dockerization, at hindi palaging. Ang dockerization ay nabibigyang katwiran sa mga kaso kung saan ang application ay "pira-piraso", nahahati sa maliliit na bahagi, bawat isa ay responsable para sa sarili nitong gawain, ang tinatawag na "microservice architecture".

Bilang karagdagan, bilang karagdagan sa pagbibigay ng kapaligiran, kailangan nating tiyakin ang isang karampatang pag-deploy ng application, na kinabibilangan ng lahat ng uri ng pagbabago ng code, pag-install ng mga library at package na nauugnay sa application, pagpapatakbo ng mga pagsubok, mga abiso tungkol sa mga operasyong ito, at iba pa. Dito kailangan nating bigyang pansin ang isang konsepto tulad ng "Patuloy na Pagsasama" (CI – Patuloy na Pagsasama). Ang mga pangunahing tool sa lugar na ito sa ngayon ay Jenkins (CI software na nakasulat sa Java ay maaaring mukhang medyo kumplikado sa simula), Travis CI (nakasulat sa Ruby, subjective, medyo mas simple Jenkins, gayunpaman, kailangan pa rin ng ilang kaalaman sa larangan ng pagsasaayos ng deployment), Gitlab CI (nakasulat sa Ruby at Go).

Kaya, nang pag-usapan ang tungkol sa kapaligiran kung saan gagana ang iyong aplikasyon, oras na para tingnan kung anong mga tool ang iniaalok sa amin ng modernong mundo para sa paglikha ng mga mismong application na ito.

Magsimula tayo sa mga pangunahing kaalaman: backend (backend) – bahagi ng server. Ang pagpili ng wika, hanay ng mga pangunahing pag-andar at paunang natukoy na istraktura (balangkas) dito ay pangunahing tinutukoy ng mga personal na kagustuhan, ngunit gayunpaman, ito ay nagkakahalaga ng pagbanggit para sa pagsasaalang-alang (ang opinyon ng may-akda tungkol sa mga wika sa isang walang pinapanigan na paglalarawan):

  • Ang Python ay isang medyo friendly na wika para sa isang walang karanasan na gumagamit, pinatatawad nito ang ilang mga pagkakamali, ngunit maaari rin itong maging mahigpit sa developer upang hindi siya makagawa ng anumang masama. Mayroon nang isang medyo mature at makabuluhang wika, na lumitaw noong 1991.
  • Go - isang wika mula sa Google, ay medyo palakaibigan at maginhawa, medyo madali itong i-compile at makakuha ng isang maipapatupad na file sa anumang platform. Maaari itong maging simple at kaaya-aya, o maaari itong maging kumplikado at seryoso. Sariwa at bata, lumitaw kamakailan, noong 2009.
  • Ang Rust ay medyo mas matanda kaysa sa dati nitong kasamahan, na inilabas noong 2006, ngunit medyo bata pa ito kumpara sa mga kapantay nito. Naglalayon sa mas maraming karanasang developer, bagama't sinusubukan pa rin nitong lutasin ang maraming mga gawaing mababa ang antas para sa programmer.
  • Ang Java ay isang beterano ng komersyal na pag-unlad, na ipinakilala noong 1995, at isa sa mga pinakakaraniwang ginagamit na wika sa pagbuo ng application ng enterprise ngayon. Sa mga pangunahing konsepto nito at mabigat na pag-setup, ang runtime ay maaaring maging medyo mahirap para sa isang baguhan.
  • Ang ASP.net ay isang application development platform na inilabas ng Microsoft. Upang magsulat ng functionality, ang C# na wika (binibigkas na C Sharp), na lumitaw noong 2000, ay pangunahing ginagamit. Ang pagiging kumplikado nito ay maihahambing sa antas sa pagitan ng Java at Rust.
  • Ang PHP, na orihinal na ginamit para sa HTML preprocessing, sa kasalukuyan, bagama't hawak nito ang ganap na pamumuno sa market ng wika, mayroong isang trend patungo sa pagbaba ng paggamit. Ito ay may mababang entry threshold at kadalian ng pagsulat ng code, ngunit sa parehong oras, kapag bumubuo ng medyo malalaking application, ang functionality ng wika ay maaaring hindi sapat.

Well, ang huling bahagi ng aming application - ang pinakanasasalat para sa gumagamit - Frontend (frontend) – ang mukha ng iyong aplikasyon; sa bahaging ito direktang nakikipag-ugnayan ang user.

Nang walang mga detalye, ang modernong frontend ay nakatayo sa tatlong mga haligi, mga balangkas (at hindi gaanong), para sa paglikha ng mga interface ng gumagamit. Alinsunod dito, ang tatlong pinakasikat ay:

  • Ang ReactJS ay hindi isang framework, ngunit isang library. Sa totoo lang, ang balangkas ay naiiba mula sa ipinagmamalaki nitong pamagat lamang sa kawalan ng ilang mga pag-andar "sa labas ng kahon" at ang pangangailangan na i-install ang mga ito nang manu-mano. Kaya, mayroong ilang mga pagkakaiba-iba ng "paghahanda" ng aklatang ito, na bumubuo ng mga natatanging balangkas. Maaaring medyo mahirap para sa isang baguhan, dahil sa ilang mga pangunahing prinsipyo, at medyo agresibong pag-setup ng build environment. Gayunpaman, para sa mabilis na pagsisimula, maaari mong gamitin ang package na "create-react-app".
  • Ang VueJS ay isang framework para sa pagbuo ng mga user interface. Sa trinity na ito, nararapat itong kunin ang pamagat ng pinaka-user-friendly na balangkas; para sa pagbuo sa Vue, ang hadlang sa pagpasok ay mas mababa kaysa sa iba pang nabanggit na mga kapatid. Isa pa, siya ang pinakabata sa kanila.
  • Angular ay itinuturing na pinakakumplikado sa mga framework na ito, ang tanging nangangailangan TypeScript (add-on para sa wikang Javascript). Kadalasang ginagamit upang bumuo ng malalaking aplikasyon ng negosyo.

Sa pamamagitan ng pagbubuod sa kung ano ang isinulat sa itaas, maaari nating tapusin na ang pag-deploy ngayon ng isang application ay lubhang naiiba sa kung paano natuloy ang prosesong ito noon. Gayunpaman, walang pumipigil sa iyo na gawin ang "deployment" sa lumang paraan. Ngunit ang kaunting oras ba na natipid sa simula ay nagkakahalaga ng malaking bilang ng mga pagkakamali na kailangang tahakin ng isang developer na pipili ng landas na ito? Naniniwala ako na ang sagot ay hindi. Sa pamamagitan ng paggugol ng kaunting oras na pamilyar sa iyong sarili sa mga tool na ito (at hindi mo na kailangan ng higit pa riyan, dahil kailangan mong maunawaan kung kailangan mo ang mga ito sa iyong kasalukuyang proyekto o hindi), maaari mong i-play ito, na makabuluhang bawasan, halimbawa , mga kaso ng ghost error depende sa kapaligiran at lumalabas lang sa production server, gabi-gabing pagsusuri kung ano ang humantong sa pag-crash ng server at kung bakit hindi ito magsisimula, at marami pang iba.

Pinagmulan: www.habr.com

Magdagdag ng komento