Orodha hakiki ya kuunda na kuchapisha programu za wavuti

Ili kuunda programu yako ya wavuti katika wakati wetu, haitoshi kuweza kuiendeleza. Kipengele muhimu ni kusanidi zana za kupeleka maombi, ufuatiliaji, pamoja na kusimamia na kusimamia mazingira ambamo inafanyia kazi. Kadiri enzi ya uwekaji wa mikono inavyofifia, hata kwa miradi midogo, zana za otomatiki zinaweza kuleta manufaa yanayoonekana. Wakati wa kupeleka "kwa mkono", mara nyingi tunaweza kusahau kusonga kitu, kuzingatia hili au nuance hiyo, kukimbia mtihani uliosahau, orodha hii inaweza kuendelea kwa muda mrefu kabisa.

Makala haya yanaweza kuwasaidia wale ambao wanajifunza misingi ya kuunda programu za wavuti na wanataka kuelewa kidogo kuhusu sheria na masharti ya msingi.

Kwa hivyo, maombi ya ujenzi bado yanaweza kugawanywa katika sehemu 2: kila kitu kinachohusiana na msimbo wa maombi, na kila kitu kinachohusiana na mazingira ambayo kanuni hii inatekelezwa. Nambari ya maombi, kwa upande wake, imegawanywa katika nambari ya seva (ile inayoendesha kwenye seva, mara nyingi: mantiki ya biashara, idhini, uhifadhi wa data, nk), na nambari ya mteja (ile inayoendesha kwenye mashine ya mtumiaji: mara nyingi. interface, na mantiki inayohusiana nayo).

Tuanze na Jumatano.

Msingi wa utendakazi wa msimbo wowote, mfumo, au programu ni Mfumo wa Uendeshaji, kwa hivyo hapa chini tutaangalia mifumo maarufu zaidi kwenye soko la mwenyeji na kuwapa maelezo mafupi:

Windows Server - Windows sawa, lakini katika tofauti ya seva. Utendaji fulani unaopatikana katika toleo la mteja (la kawaida) la Windows haipo hapa, kwa mfano, huduma zingine za kukusanya takwimu na programu zinazofanana, lakini kuna seti ya huduma za usimamizi wa mtandao, programu ya msingi ya kupeleka seva (wavuti, ftp, nk). ...). Kwa ujumla, Windows Server inaonekana kama Windows ya kawaida, quacks kama Windows ya kawaida, hata hivyo, inagharimu mara 2 zaidi kuliko mwenzake wa kawaida. Hata hivyo, ikizingatiwa kwamba kuna uwezekano mkubwa wa kupeleka programu kwenye seva iliyojitolea/halisi, gharama ya mwisho kwako, ingawa inaweza kuongezeka, sio muhimu. Kwa kuwa jukwaa la Windows linachukua nafasi kubwa katika soko la mfumo wa uendeshaji wa watumiaji, toleo lake la seva litakuwa linalojulikana zaidi kwa watumiaji wengi.

Unix- mfumo unaofanana. Kazi ya kitamaduni katika mifumo hii haihitaji uwepo wa kiolesura cha kielelezo kinachojulikana, kinachompa mtumiaji kiweko pekee kama kipengele cha kudhibiti. Kwa mtumiaji asiye na uzoefu, kufanya kazi katika muundo huu inaweza kuwa ngumu, ni gharama gani ya kutoka kwa hariri ya maandishi ambayo ni maarufu sana katika data. Vim, swali linalohusiana na hili tayari limepokea maoni zaidi ya milioni 6 katika miaka 1.8. Ugawaji (matoleo) kuu ya familia hii ni: Debian - usambazaji maarufu, matoleo ya kifurushi ndani yake yanalenga zaidi LTS (Msaada wa Muda mrefu - msaada kwa muda mrefu), ambayo imeonyeshwa kwa kuegemea juu na utulivu wa mfumo na vifurushi; Ubuntu - ina usambazaji wa vifurushi vyote katika matoleo yao ya hivi karibuni, ambayo yanaweza kuathiri utulivu, lakini inakuwezesha kutumia utendaji unaokuja na matoleo mapya; Red Hat Enterprise Linux - OS, iliyowekwa kwa matumizi ya kibiashara, hulipwa, hata hivyo, inajumuisha usaidizi kutoka kwa wachuuzi wa programu, baadhi ya vifurushi vya wamiliki na vifurushi vya madereva; CentOS - chanzo wazi tofauti ya Red Hat Enterprise Linux, yenye sifa ya kutokuwepo kwa vifurushi vya umiliki na usaidizi.

Kwa wale ambao wanaanza kufahamu eneo hili, pendekezo langu litakuwa mifumo Windows ServerAu Ubuntu. Ikiwa tunazingatia Windows, basi hii ni ujuzi wa mfumo, Ubuntu - uvumilivu zaidi kwa sasisho, na kwa upande wake, kwa mfano, matatizo machache wakati wa kuzindua miradi kwenye teknolojia zinazohitaji matoleo mapya.

Kwa hiyo, baada ya kuamua juu ya OS, hebu tuendelee kwenye seti ya zana zinazokuwezesha kupeleka (kufunga), sasisha na kufuatilia hali ya programu au sehemu zake kwenye seva.

Uamuzi muhimu unaofuata utakuwa uwekaji wa programu yako na seva yake. Kwa sasa, zinazojulikana zaidi ni njia 3:

  • Kukaribisha (kuweka) seva peke yako ndio chaguo la bajeti zaidi, lakini utalazimika kuagiza IP tuli kutoka kwa mtoaji wako ili rasilimali yako isibadilishe anwani yake kwa wakati.
  • Kodisha Seva Iliyojitolea (VDS) - na uisimamie kwa uhuru na upakue mizigo
  • Lipa (mara nyingi hukupa fursa ya kujaribu utendakazi wa jukwaa bila malipo) kwa ajili ya kujiandikisha kwenye upangishaji wa mtandao fulani, ambapo muundo wa malipo wa rasilimali zinazotumiwa ni wa kawaida. Wawakilishi mashuhuri zaidi wa mwelekeo huu: Amazon AWS (wanatoa mwaka wa bure wa kutumia huduma, lakini kwa kikomo cha kila mwezi), Google Cloud (wanatoa $ 300 kwa akaunti, ambayo inaweza kutumika wakati wa mwaka kwenye huduma za mwenyeji wa wingu) , Yandex.Cloud (wanatoa rubles 4000 . kwa miezi 2), Microsoft Azure (kutoa upatikanaji wa bure kwa huduma maarufu kwa mwaka, + rubles 12 kwa huduma yoyote kwa mwezi mmoja). Kwa hivyo, unaweza kujaribu yoyote ya watoa huduma hawa bila kutumia senti, lakini kupata maoni ya takriban kuhusu ubora na kiwango cha huduma iliyotolewa.

Kulingana na njia iliyochaguliwa, jambo pekee litakalobadilika katika siku zijazo ni nani anayehusika sana na hii au eneo hilo la usimamizi. Ikiwa unajikaribisha mwenyewe, basi lazima uelewe kwamba usumbufu wowote katika umeme, mtandao, seva yenyewe, programu iliyotumiwa juu yake - yote haya yapo kwenye mabega yako. Walakini, kwa mafunzo na upimaji, hii ni zaidi ya kutosha.

Ikiwa huna mashine ya ziada ambayo inaweza kucheza nafasi ya seva, basi utataka kutumia njia ya pili au ya tatu. Kesi ya pili ni sawa na ya kwanza, isipokuwa kwamba unahamisha jukumu la upatikanaji wa seva na nguvu zake kwa mabega ya mwenyeji. Usimamizi wa seva na programu bado uko chini ya udhibiti wako.

Na hatimaye, chaguo la kukodisha uwezo wa watoa huduma za wingu. Hapa unaweza kuweka udhibiti wa kiotomatiki wa karibu kila kitu bila kuingia katika maelezo mengi ya kiufundi. Kwa kuongeza, badala ya mashine moja, unaweza kuwa na matukio kadhaa ya sambamba ya kukimbia, ambayo inaweza, kwa mfano, kuwajibika kwa sehemu tofauti za programu, wakati sio tofauti sana kwa gharama kutoka kwa kumiliki seva iliyojitolea. Na pia, kuna zana za upangaji, uwekaji vyombo, upelekaji wa kiotomatiki, ujumuishaji unaoendelea na mengi zaidi! Tutaangalia baadhi ya mambo haya hapa chini.

Kwa ujumla, miundombinu ya seva inaonekana kama hii: tunayo kinachojulikana kama "orchestrator" ("orchestration" ni mchakato wa kusimamia matukio kadhaa ya seva), ambayo inasimamia mabadiliko ya mazingira kwenye mfano wa seva, chombo cha virtualization (hiari, lakini kabisa. hutumika mara nyingi), ambayo hukuruhusu kugawanya programu katika safu za kimantiki zilizotengwa, na programu ya Ujumuishaji Unaoendeleaβ€”kuruhusu masasisho ya msimbo uliopangishwa kupitia "hati."

Kwa hivyo, orchestration inakuwezesha kuona hali ya seva, kusambaza au kurejesha sasisho kwa mazingira ya seva, na kadhalika. Mara ya kwanza, kipengele hiki hakiwezekani kukuathiri, kwa kuwa ili kupanga chochote, unahitaji seva kadhaa (unaweza kuwa na moja, lakini kwa nini hii ni muhimu?), Na ili kuwa na seva kadhaa, unahitaji. Miongoni mwa zana katika mwelekeo huu, moja maarufu zaidi ni Kubernetes, iliyoandaliwa na google.

Hatua inayofuata ni virtualization katika ngazi ya OS. Siku hizi, dhana ya "dockerization" imeenea, ambayo inatoka kwa chombo Docker, ambayo hutoa utendaji wa vyombo vilivyotengwa kutoka kwa kila mmoja, lakini ilizinduliwa katika mazingira ya mfumo mmoja wa uendeshaji. Hii inamaanisha nini: katika kila moja ya vyombo hivi unaweza kuendesha programu, au hata seti ya maombi, ambayo itaamini kuwa wao pekee katika OS nzima, bila hata kushuku kuwepo kwa mtu mwingine kwenye mashine hii. Kitendaji hiki ni muhimu sana kwa kuzindua programu zinazofanana za matoleo tofauti, au programu tumizi zinazokinzana, na pia kwa kugawa vipande vya programu katika tabaka. Safu hii ya safu inaweza baadaye kuandikwa kwenye picha, ambayo inaweza kutumika, kwa mfano, kupeleka programu. Hiyo ni, kwa kusakinisha picha hii na kupeleka vyombo vilivyomo, unapata mazingira tayari ya kuendesha programu yako! Katika hatua za kwanza, unaweza kutumia zana hii kwa madhumuni ya habari na kupata faida halisi kwa kugawa mantiki ya programu katika tabaka tofauti. Lakini inafaa kusema hapa kwamba sio kila mtu anahitaji dockerization, na sio kila wakati. Dockerization ni haki katika kesi ambapo maombi "imegawanywa", imegawanywa katika sehemu ndogo, kila mmoja anajibika kwa kazi yake mwenyewe, kinachojulikana kama "usanifu wa huduma ndogo".

Kwa kuongeza, pamoja na kutoa mazingira, tunahitaji kuhakikisha kupelekwa kwa uwezo wa maombi, ambayo ni pamoja na kila aina ya mabadiliko ya kanuni, usakinishaji wa maktaba na vifurushi vinavyohusiana na programu, majaribio ya kuendesha, arifa kuhusu shughuli hizi, na kadhalika. Hapa tunahitaji kulipa kipaumbele kwa dhana kama "Ushirikiano unaoendelea" (CI - Ushirikiano unaoendelea) Zana kuu katika eneo hili kwa sasa ni Jenkins (programu ya CI iliyoandikwa katika Java inaweza kuonekana kuwa ngumu kidogo mwanzoni), Travis C.I. (imeandikwa katika Ruby, subjective, rahisi zaidi Jenkins, hata hivyo, ujuzi fulani katika uwanja wa usanidi wa kupeleka bado unahitajika), Gitlab CI (imeandikwa Ruby na Nenda).

Kwa hivyo, baada ya kuzungumza juu ya mazingira ambayo maombi yako yatafanya kazi, ni wakati wa kuangalia ni zana gani ulimwengu wa kisasa unatupa kwa kuunda programu hizi.

Wacha tuanze na misingi: Backend (backend) - sehemu ya seva. Chaguo la lugha, seti ya kazi za kimsingi na muundo uliofafanuliwa (mfumo) hapa imedhamiriwa haswa na matakwa ya kibinafsi, lakini, hata hivyo, inafaa kutaja kwa kuzingatia (maoni ya mwandishi juu ya lugha ni ya kibinafsi, ingawa kwa madai. kwa maelezo yasiyo na upendeleo):

  • Python ni lugha ya kirafiki kwa mtumiaji asiye na uzoefu, husamehe makosa kadhaa, lakini pia inaweza kuwa kali sana na msanidi programu ili asifanye chochote kibaya. Tayari ni lugha iliyokomaa na yenye maana, ambayo ilionekana mnamo 1991.
  • Go - lugha kutoka Google, pia ni ya kirafiki na rahisi, ni rahisi sana kukusanya na kupata faili inayoweza kutekelezwa kwenye jukwaa lolote. Inaweza kuwa rahisi na ya kupendeza, au inaweza kuwa ngumu na mbaya. Safi na mchanga, ilionekana hivi karibuni, mnamo 2009.
  • Kutu ni mzee kidogo kuliko mwenzake wa zamani, iliyotolewa mnamo 2006, lakini bado ni mchanga kabisa ikilinganishwa na wenzake. Inalenga watengenezaji wenye uzoefu zaidi, ingawa bado inajaribu kutatua kazi nyingi za kiwango cha chini kwa programu.
  • Java ni mkongwe wa maendeleo ya kibiashara, iliyoanzishwa mwaka wa 1995, na ni mojawapo ya lugha zinazotumiwa sana katika maendeleo ya maombi ya biashara leo. Kwa dhana zake za msingi na usanidi mzito, muda wa kukimbia unaweza kuwa changamoto kwa anayeanza.
  • ASP.net ni jukwaa la ukuzaji programu iliyotolewa na Microsoft. Kuandika utendaji, lugha ya C # (inayotamkwa C Sharp), ambayo ilionekana mnamo 2000, hutumiwa sana. Ugumu wake unalinganishwa na kiwango kati ya Java na Rust.
  • PHP, awali ilitumika kwa uchakataji wa awali wa HTML, kwa sasa, ingawa inashikilia uongozi kamili katika soko la lugha, kuna mwelekeo kuelekea kupungua kwa matumizi. Ina kizingiti cha chini cha kuingia na urahisi wa kuandika msimbo, lakini wakati huo huo, wakati wa kuendeleza matumizi makubwa ya haki, utendaji wa lugha hauwezi kutosha.

Kweli, sehemu ya mwisho ya maombi yetu - inayoonekana zaidi kwa mtumiaji - frontend (mbele) - ni uso wa programu yako; ni kwa sehemu hii ambapo mtumiaji huingiliana moja kwa moja.

Bila kuingia katika maelezo, sehemu ya mbele ya kisasa inasimama kwenye nguzo tatu, mifumo (na sio sana), kwa kuunda miingiliano ya watumiaji. Ipasavyo, tatu maarufu zaidi ni:

  • ReactJS sio mfumo, lakini maktaba. Kweli, mfumo hutofautiana na kichwa chake cha kiburi tu kwa kutokuwepo kwa baadhi ya kazi "nje ya boksi" na haja ya kuziweka kwa mikono. Kwa hivyo, kuna tofauti kadhaa za "maandalizi" ya maktaba hii, na kutengeneza mifumo ya kipekee. Inaweza kuwa ngumu kidogo kwa anayeanza, kwa sababu ya kanuni kadhaa za kimsingi, na usanidi mkali wa mazingira ya ujenzi. Hata hivyo, kwa kuanza haraka, unaweza kutumia kifurushi cha "tengeneza-react-app".
  • VueJS ni mfumo wa kujenga miingiliano ya watumiaji. Kati ya utatu huu, inachukua kwa usahihi jina la mfumo unaofaa zaidi kwa watumiaji; kwa maendeleo katika Vue, kizuizi cha kuingia ni cha chini kuliko cha ndugu wengine waliotajwa. Zaidi ya hayo, yeye ndiye mdogo kati yao.
  • Angular inachukuliwa kuwa ngumu zaidi ya mifumo hii, pekee ambayo inahitaji TypeScript (nyongeza kwa lugha ya Javascript). Mara nyingi hutumiwa kuunda programu kubwa za biashara.

Kwa muhtasari wa kile kilichoandikwa hapo juu, tunaweza kuhitimisha kwamba sasa kupeleka maombi ni tofauti sana na jinsi mchakato huu ulivyoendelea hapo awali. Walakini, hakuna mtu anayekuzuia kufanya "kupeleka" kwa njia ya kizamani. Lakini je, muda mfupi uliohifadhiwa mwanzoni una thamani ya idadi kubwa ya makosa ambayo msanidi programu anayechagua njia hii atalazimika kukanyaga? Naamini jibu ni hapana. Kwa kutumia muda kidogo zaidi kujijulisha na zana hizi (na hauitaji zaidi ya hiyo, kwa sababu unahitaji kuelewa ikiwa unazihitaji katika mradi wako wa sasa au la), unaweza kuicheza, ukipunguza kwa kiasi kikubwa, kwa mfano. , matukio ya makosa ya roho kulingana na mazingira na ambayo yanaonekana tu kwenye seva ya uzalishaji, uchambuzi wa usiku wa kile kilichosababisha ajali ya seva na kwa nini haitaanza, na mengi zaidi.

Chanzo: mapenzi.com

Kuongeza maoni