Veb-ilovalarni yaratish va nashr etish uchun nazorat ro'yxati

Bizning zamonamizda o'z veb-ilovangizni yaratish uchun uni ishlab chiqishning o'zi etarli emas. Muhim jihat - ilovalarni joylashtirish, monitoring qilish, shuningdek, u ishlaydigan muhitni boshqarish va boshqarish uchun vositalarni o'rnatish. Qo'lda joylashtirish davri unutilib qolar ekan, hatto kichik loyihalar uchun ham avtomatlashtirish vositalari sezilarli foyda keltirishi mumkin. "Qo'l bilan" joylashtirishda biz ko'pincha biror narsani ko'chirishni unutishimiz mumkin, u yoki bu nuanceni hisobga olamiz, unutilgan testni o'tkazamiz, bu ro'yxatni uzoq vaqt davom ettirish mumkin.

Ushbu maqola veb-ilovalarni yaratish asoslarini endigina o'rganayotgan va asosiy shartlar va konventsiyalar haqida ozgina tushunishni istaganlarga yordam berishi mumkin.

Shunday qilib, ilovalarni qurish hali ham 2 qismga bo'linishi mumkin: dastur kodi bilan bog'liq bo'lgan hamma narsa va ushbu kod bajariladigan muhitga tegishli hamma narsa. Ilova kodi, o'z navbatida, server kodi (serverda ishlaydigan, ko'pincha: biznes mantig'i, avtorizatsiya, ma'lumotlarni saqlash va boshqalar) va mijoz kodi (foydalanuvchi mashinasida ishlaydigan: ko'pincha) ga bo'linadi. interfeysi va u bilan bog'liq mantiq).

Chorshanbadan boshlaylik.

Har qanday kod, tizim yoki dasturiy ta'minotning ishlashi uchun asos Operatsion tizimdir, shuning uchun quyida biz hosting bozoridagi eng mashhur tizimlarni ko'rib chiqamiz va ularga qisqacha tavsif beramiz:

Windows Server - bir xil Windows, lekin server o'zgarishida. Windows-ning mijoz (odatiy) versiyasida mavjud bo'lgan ba'zi funksiyalar bu erda mavjud emas, masalan, statistik ma'lumotlarni yig'ish uchun ba'zi xizmatlar va shunga o'xshash dasturiy ta'minot, lekin tarmoqni boshqarish uchun yordamchi dasturlar to'plami, serverlarni joylashtirish uchun asosiy dasturiy ta'minot (web, ftp, ...). Umuman olganda, Windows Server oddiy Windows-ga o'xshaydi, oddiy Windows-ga o'xshaydi, ammo uning narxi odatdagidan 2 baravar qimmat. Biroq, siz dasturni ajratilgan/virtual serverda joylashtirishingiz mumkinligini hisobga olsak, siz uchun yakuniy xarajat, garchi u oshishi mumkin bo'lsa ham, muhim emas. Windows platformasi iste'molchi OS bozorida katta o'rin egallaganligi sababli, uning server nashri ko'pchilik foydalanuvchilar uchun eng tanish bo'ladi.

Unix- shunga o'xshash tizim. Ushbu tizimlardagi an'anaviy ish foydalanuvchiga boshqaruv elementi sifatida faqat konsolni taklif qiladigan tanish grafik interfeysning mavjudligini talab qilmaydi. Tajribasiz foydalanuvchi uchun ushbu formatda ishlash qiyin bo'lishi mumkin, ma'lumotlarda juda mashhur bo'lgan matn muharriridan chiqishning narxi qancha. Vim, bu bilan bog'liq savol allaqachon 6 yil ichida 1.8 milliondan ko'proq ko'rilgan. Ushbu oilaning asosiy distributivlari (nashrlari) quyidagilardir: Debian - mashhur tarqatish, undagi paketli versiyalar asosan LTS ga qaratilgan (Uzoq muddatli qo'llab-quvvatlash – uzoq vaqt davomida qo'llab-quvvatlash), bu tizim va paketlarning etarlicha yuqori ishonchliligi va barqarorligida ifodalanadi; Ubuntu - barqarorlikka ta'sir qilishi mumkin bo'lgan eng so'nggi versiyalarida barcha paketlarning distributivlarini o'z ichiga oladi, lekin yangi versiyalar bilan birga keladigan funksiyalardan foydalanishga imkon beradi; Red Hat Enterprise Linux – OT, tijorat maqsadlarida foydalanish uchun joylashtirilgan, to'lanadi, ammo dasturiy ta'minot sotuvchilari, ba'zi xususiy paketlar va drayver paketlari tomonidan qo'llab-quvvatlanadi; CentOS - ochiq manba Red Hat Enterprise Linux-ning o'zgarishi, xususiy paketlar va qo'llab-quvvatlashning yo'qligi bilan tavsiflanadi.

Ushbu sohani endigina o'zlashtira boshlaganlar uchun mening tavsiyam tizimlar bo'ladi Windows Server, yoki Ubuntu. Agar biz Windows-ni ko'rib chiqsak, bu birinchi navbatda tizimning tanishligi, Ubuntu - yangilanishlarga nisbatan ko'proq bardoshlik va o'z navbatida, masalan, yangi versiyalarni talab qiladigan texnologiyalar bo'yicha loyihalarni ishga tushirishda kamroq muammolar.

Shunday qilib, OS haqida qaror qabul qilib, keling, dastur yoki uning qismlarini serverda joylashtirish (o'rnatish), yangilash va holatini kuzatish imkonini beruvchi vositalar to'plamiga o'tamiz.

Keyingi muhim qaror sizning ilovangiz va uning serverini joylashtirish bo'ladi. Hozirgi vaqtda eng keng tarqalgan 3 usul:

  • Serverni mustaqil ravishda joylashtirish (saqlash) eng byudjet variantidir, ammo resursingiz vaqt o'tishi bilan manzilini o'zgartirmasligi uchun provayderingizdan statik IP buyurtma qilishingiz kerak bo'ladi.
  • Ajratilgan serverni (VDS) ijaraga oling va uni mustaqil ravishda boshqaring va yuklarni masshtablang
  • Ba'zi bulutli xostinglarga obuna bo'lish uchun to'lang (ko'pincha ular sizga platformaning funksiyalarini bepul sinab ko'rish imkoniyatini beradi), bu erda foydalanilgan resurslar uchun to'lov modeli juda keng tarqalgan. Ushbu yo'nalishning eng ko'zga ko'ringan vakillari: Amazon AWS (ular xizmatlardan foydalanish uchun bir yil beradi, lekin oylik cheklov bilan), Google Cloud (ular yil davomida bulutli hosting xizmatlariga sarflanishi mumkin bo'lgan hisob uchun 300 dollar beradi) , Yandex.Cloud (ular 4000 oy davomida 2 rubl berishadi), Microsoft Azure (bir yil davomida mashhur xizmatlarga bepul kirish, bir oy davomida har qanday xizmatlar uchun + 12 500 rubl). Shunday qilib, siz ushbu provayderlardan birini bir tiyin sarflamasdan sinab ko'rishingiz mumkin, lekin taqdim etilayotgan xizmat sifati va darajasi haqida taxminiy fikrga ega bo'lishingiz mumkin.

Tanlangan yo'lga qarab, kelajakda o'zgaradigan yagona narsa - bu ma'muriyatning u yoki bu sohasi uchun kim mas'uldir. Agar siz o'zingizni mezbonlik qilsangiz, elektr energiyasi, Internet, serverning o'zi, unda joylashtirilgan dasturiy ta'minotdagi har qanday uzilishlar - bularning barchasi sizning elkangizda ekanligini tushunishingiz kerak. Biroq, ta'lim va sinov uchun bu etarli.

Agar sizda server rolini o'ynashi mumkin bo'lgan qo'shimcha mashinangiz bo'lmasa, ikkinchi yoki uchinchi yo'ldan foydalanishni xohlaysiz. Ikkinchi holat birinchisiga o'xshaydi, bundan mustasno, siz serverning mavjudligi va uning kuchi uchun javobgarlikni hosterning yelkasiga o'tasiz. Server va dasturiy ta'minot ma'muriyati hali ham sizning nazoratingiz ostida.

Va nihoyat, bulutli provayderlarning imkoniyatlarini ijaraga olish imkoniyati. Bu yerda siz juda ko'p texnik tafsilotlarga kirmasdan deyarli hamma narsaning avtomatlashtirilgan boshqaruvini o'rnatishingiz mumkin. Bunga qo'shimcha ravishda, bitta mashina o'rniga sizda bir nechta parallel ishlaydigan misollar bo'lishi mumkin, ular, masalan, dasturning turli qismlari uchun javobgar bo'lishi mumkin, shu bilan birga maxsus serverga egalik qilishdan unchalik farq qilmaydi. Shuningdek, orkestratsiya, konteynerlashtirish, avtomatik joylashtirish, uzluksiz integratsiya va boshqalar uchun vositalar mavjud! Biz quyida bularning ba'zilarini ko'rib chiqamiz.

Umuman olganda, server infratuzilmasi quyidagicha ko'rinadi: bizda "orkestrator" ("orkestratsiya" - bu bir nechta server nusxalarini boshqarish jarayoni) mavjud bo'lib, u server misolidagi atrof-muhit o'zgarishlarini boshqaradi, virtualizatsiya konteyneri (ixtiyoriy, ammo to'liq). tez-tez ishlatiladi), bu sizga ilovani ajratilgan mantiqiy qatlamlarga bo'lish imkonini beradi va doimiy integratsiya dasturi - "skriptlar" orqali joylashtirilgan kodni yangilash imkonini beradi.

Shunday qilib, orkestratsiya sizga serverlar holatini ko'rish, server muhitiga yangilanishlarni chiqarish yoki qaytarish va hokazolarni amalga oshirish imkonini beradi. Dastlab, bu jihat sizga ta'sir qilishi dargumon, chunki biror narsani tartibga solish uchun sizga bir nechta serverlar kerak (sizda bitta bo'lishi mumkin, lekin bu nima uchun kerak?) va bir nechta serverlarga ega bo'lish uchun sizga kerak. Ushbu yo'nalishdagi vositalardan eng mashhuri Kubernetes tomonidan ishlab chiqilgan Google.

Keyingi qadam OS darajasida virtualizatsiya. Hozirgi vaqtda "dokerizatsiya" tushunchasi keng tarqaldi, bu vositadan kelib chiqadi Docker, bu bir-biridan ajratilgan, ammo bitta operatsion tizim kontekstida ishga tushirilgan konteynerlarning funksionalligini ta'minlaydi. Bu nimani anglatadi: ushbu konteynerlarning har birida siz ushbu mashinada boshqa birovning mavjudligiga shubha qilmasdan ham, ular butun OTda yagona ekanligiga ishonadigan dasturni yoki hatto ilovalar to'plamini ishga tushirishingiz mumkin. Bu funksiya turli versiyalardagi bir xil ilovalarni yoki oddiygina qarama-qarshi ilovalarni ishga tushirish, shuningdek, ilova qismlarini qatlamlarga bo'lish uchun juda foydali. Ushbu qatlamni keyinchalik tasvirga yozish mumkin, undan, masalan, ilovani joylashtirish uchun foydalanish mumkin. Ya'ni, ushbu rasmni o'rnatish va undagi konteynerlarni joylashtirish orqali siz ilovangizni ishga tushirish uchun tayyor muhitga ega bo'lasiz! Birinchi qadamlarda siz ushbu vositadan ma'lumot olish uchun ham, dastur mantig'ini turli qatlamlarga bo'lish orqali juda haqiqiy foyda olish uchun ham foydalanishingiz mumkin. Ammo shuni aytish kerakki, hamma ham dokerizatsiyaga muhtoj emas va har doim ham emas. Dokerizatsiya ilova "parchalangan", kichik qismlarga bo'lingan, har biri "mikroservis arxitekturasi" deb ataladigan o'z vazifasi uchun javobgar bo'lgan hollarda oqlanadi.

Bundan tashqari, atrof-muhitni ta'minlashdan tashqari, biz barcha turdagi kod o'zgarishlarini, ilovalar bilan bog'liq kutubxonalar va paketlarni o'rnatishni, ishlaydigan testlarni, ushbu operatsiyalar haqida bildirishnomalarni va hokazolarni o'z ichiga olgan dasturning malakali joylashtirilishini ta'minlashimiz kerak. Bu erda biz "Uzluksiz integratsiya" kabi tushunchaga e'tibor qaratishimiz kerak (CI - Uzluksiz integratsiya). Hozirgi vaqtda ushbu sohadagi asosiy vositalar Jenkins (Java-da yozilgan CI dasturi boshida biroz murakkab ko'rinishi mumkin), Travis C.I. (Ruby tilida yozilgan, sub'ektiv, biroz soddaroq JenkinsBiroq, joylashtirish konfiguratsiyasi sohasida ba'zi bilimlar hali ham talab qilinadi), Gitlab CI (yozilgan Ruby va Go).

Shunday qilib, sizning ilovangiz ishlaydigan muhit haqida gapirgandan so'ng, nihoyat zamonaviy dunyo ushbu ilovalarni yaratish uchun bizga qanday vositalarni taklif qilishini ko'rib chiqish vaqti keldi.

Keling, asoslardan boshlaylik: Orqa tomon (backend) - server qismi. Bu erda tilni tanlash, asosiy funktsiyalar to'plami va oldindan belgilangan tuzilma (ramka) asosan shaxsiy imtiyozlar bilan belgilanadi, ammo shunga qaramay, e'tiborga olish kerak (muallifning tillar haqidagi fikri juda subyektivdir, garchi da'vo bilan bo'lsa ham). xolis tavsif uchun):

  • Python tajribasiz foydalanuvchi uchun juda do'stona til bo'lib, u ba'zi xatolarni kechiradi, lekin u yomon ish qilmasligi uchun ishlab chiquvchiga nisbatan qattiqqo'l bo'lishi mumkin. 1991 yilda paydo bo'lgan allaqachon etuk va mazmunli til.
  • Go - Google tili, shuningdek, juda qulay va qulay, uni kompilyatsiya qilish va har qanday platformada bajariladigan faylni olish juda oson. Bu oddiy va yoqimli bo'lishi mumkin yoki murakkab va jiddiy bo'lishi mumkin. Yangi va yosh, nisbatan yaqinda, 2009 yilda paydo bo'lgan.
  • Rust 2006 yilda chiqarilgan avvalgi hamkasbidan bir oz kattaroq, ammo tengdoshlari bilan solishtirganda hali ancha yosh. Ko'proq tajribali ishlab chiquvchilarga qaratilgan, garchi u hali ham dasturchi uchun past darajadagi ko'plab vazifalarni hal qilishga harakat qilsa.
  • Java 1995 yilda taqdim etilgan tijorat taraqqiyotining faxriysi bo'lib, bugungi kunda korporativ ilovalarni ishlab chiqishda eng ko'p qo'llaniladigan tillardan biridir. Asosiy tushunchalari va og'ir sozlamalari bilan ish vaqti yangi boshlanuvchilar uchun juda qiyin bo'lishi mumkin.
  • ASP.net - Microsoft tomonidan chiqarilgan ilovalar ishlab chiqish platformasi. Funktsionallikni yozish uchun asosan 2000 yilda paydo bo'lgan C# tili (C Sharp talaffuzi) ishlatiladi. Uning murakkabligi Java va Rust o'rtasidagi darajaga teng.
  • Dastlab HTMLni oldindan qayta ishlash uchun ishlatilgan PHP, hozirda til bozorida mutlaq yetakchilik qilsa-da, foydalanishning qisqarish tendentsiyasi kuzatilmoqda. U past kirish chegarasiga va kod yozish qulayligiga ega, ammo shu bilan birga, juda katta ilovalarni ishlab chiqishda tilning funksionalligi etarli bo'lmasligi mumkin.

Xo'sh, bizning dasturimizning yakuniy qismi - foydalanuvchi uchun eng aniq - frontend (frontend) - bu ilovangizning yuzi; foydalanuvchi aynan shu qism bilan bevosita o'zaro aloqada bo'ladi.

Tafsilotlarga kirmasdan, zamonaviy frontend foydalanuvchi interfeyslarini yaratish uchun uchta ustun, ramkalar (va unchalik emas) ustida turadi. Shunga ko'ra, eng mashhur uchtasi:

  • ReactJS bu ramka emas, balki kutubxona. Aslida, ramka o'zining mag'rur nomidan faqat "qutidan tashqarida" ba'zi funktsiyalarning yo'qligi va ularni qo'lda o'rnatish zarurati bilan farq qiladi. Shunday qilib, ushbu kutubxonani "tayyorlash" ning bir nechta o'zgarishlari mavjud bo'lib, ular noyob ramkalarni tashkil qiladi. Yangi boshlanuvchilar uchun bu biroz qiyin bo'lishi mumkin, chunki ba'zi asosiy tamoyillar va qurilish muhitini juda agressiv sozlash. Biroq, tezkor boshlash uchun siz "create-react-app" paketidan foydalanishingiz mumkin.
  • VueJS foydalanuvchi interfeyslarini yaratish uchun asosdir. Ushbu uchlikdan u haqli ravishda foydalanuvchi uchun eng qulay ramka nomini oladi; Vue-da rivojlanish uchun kirish uchun to'siq boshqa eslatib o'tilgan birodarlarnikidan pastroq. Bundan tashqari, u ular orasida eng yoshi.
  • Angular bu ramkalarning eng murakkabi hisoblanadi, faqat bittasi talab qilinadi TypeScript (Javascript tili uchun qo'shimcha). Ko'pincha yirik korporativ ilovalarni yaratish uchun foydalaniladi.

Yuqorida yozilganlarni umumlashtirib, shuni xulosa qilishimiz mumkinki, endi dasturni joylashtirish bu jarayon avvalgisidan tubdan farq qiladi. Biroq, hech kim sizni eski uslubda "joylashtirish" ni amalga oshirishga to'sqinlik qilmaydi. Ammo boshida tejalgan oz vaqt, bu yo'lni tanlagan ishlab chiquvchi qadam tashlashi kerak bo'lgan juda ko'p xatolarga arziydimi? Men javob yo'q deb ishonaman. Ushbu vositalar bilan tanishish uchun bir oz ko'proq vaqt sarflab (va sizga ko'proq kerak emas, chunki siz ularga hozirgi loyihangizda kerakmi yoki yo'qligini tushunishingiz kerak), masalan, uni sezilarli darajada qisqartirishingiz mumkin. , muhitga bog'liq bo'lgan va faqat ishlab chiqarish serverida paydo bo'ladigan xayoliy xatolar holatlari, serverning ishdan chiqishiga nima sabab bo'lganligi va nima uchun u ishga tushmasligining tungi tahlili va boshqalar.

Manba: www.habr.com

a Izoh qo'shish