Контролен списък за създаване и публикуване на уеб приложения

За да създадете собствено уеб приложение в наше време, не е достатъчно да можете да го разработите. Важен аспект е настройването на инструменти за внедряване на приложението, мониторинг, както и управление и администриране на средата, в която то работи. Тъй като ерата на ръчното внедряване избледнява в забрава, дори за малки проекти, инструментите за автоматизация могат да донесат осезаеми ползи. Когато внедряваме „на ръка“, често можем да забравим да преместим нещо, да вземем предвид този или онзи нюанс, да изпълним забравен тест, този списък може да бъде продължен доста дълго време.

Тази статия може да помогне на онези, които тепърва учат основите на създаването на уеб приложения и искат да разберат малко за основните термини и конвенции.

Така че изграждането на приложения все още може да бъде разделено на 2 части: всичко, което е свързано с кода на приложението, и всичко, което е свързано със средата, в която се изпълнява този код. Кодът на приложението от своя страна също е разделен на сървърен код (този, който се изпълнява на сървъра, често: бизнес логика, оторизация, съхранение на данни и т.н.) и клиентски код (този, който се изпълнява на машината на потребителя: често интерфейса и свързаната с него логика).

Да започнем от сряда.

Основата за работата на всеки код, система или софтуер е операционната система, така че по-долу ще разгледаме най-популярните системи на хостинг пазара и ще им дадем кратко описание:

Windows Server - същия Windows, но във вариант на сървър. Някои функции, налични в клиентската (обикновена) версия на Windows, не присъстват тук, например някои услуги за събиране на статистика и подобен софтуер, но има набор от помощни програми за администриране на мрежата, основен софтуер за разполагане на сървъри (web, ftp, ...). Като цяло Windows Server изглежда като обикновен Windows, шарлатани като обикновен Windows, но струва 2 пъти повече от обикновения си аналог. Въпреки това, като се има предвид, че най-вероятно ще разположите приложението на специален/виртуален сървър, крайната цена за вас, въпреки че може да се увеличи, не е критична. Тъй като платформата Windows заема преобладаващо място на потребителския пазар на ОС, нейното сървърно издание ще бъде най-познатото за повечето потребители.

Unix- подобна система. Традиционната работа в тези системи не изисква наличието на познат графичен интерфейс, предлагайки на потребителя само конзола като контролен елемент. За неопитен потребител работата в този формат може да бъде трудна, точно каква е цената на излизане от текстов редактор, който е доста популярен в данните Vim, въпрос, свързан с това, вече е получил повече от 6 милиона гледания за 1.8 години. Основните дистрибуции (издания) на това семейство са: Debian - популярна дистрибуция, пакетните версии в нея са фокусирани главно върху LTS (Дългосрочна поддръжка – поддръжка за дълго време), което се изразява в доста висока надеждност и стабилност на системата и пакетите; Ubuntu – съдържа дистрибуции на всички пакети в най-новите им версии, което може да повлияе на стабилността, но ви позволява да използвате функционалността, която идва с новите версии; Red Hat Enterprise Linux – ОС, позициониран за търговска употреба, е платен, но включва поддръжка от доставчици на софтуер, някои собствени пакети и пакети с драйвери; CentOS - отворен код вариант на Red Hat Enterprise Linux, характеризиращ се с липсата на собствени пакети и поддръжка.

За тези, които тепърва започват да овладяват тази област, моята препоръка ще бъдат системи Windows ServerИли Ubuntu. Ако разгледаме Windows, тогава това е преди всичко познаването на системата, Ubuntu – повече толерантност към актуализации и от своя страна, например, по-малко проблеми при стартиране на проекти за технологии, които изискват нови версии.

И така, след като взехме решение за операционната система, нека преминем към набор от инструменти, които ви позволяват да разположите (инсталирате), актуализирате и наблюдавате състоянието на приложението или неговите части на сървъра.

Следващото важно решение ще бъде разположението на вашето приложение и сървъра за него. В момента най-често срещаните са 3 начина:

  • Хостингът (поддържането) на сървър сами е най-бюджетният вариант, но ще трябва да поръчате статичен IP от вашия доставчик, така че вашият ресурс да не променя адреса си с течение на времето.
  • Наемете специален сървър (VDS) – и го администрирайте независимо и мащабирайте натоварванията
  • Платете (често ви дават възможност да изпробвате безплатно функционалността на платформата) за абонамент за облачен хостинг, където моделът на плащане за използваните ресурси е доста разпространен. Най-известните представители на тази посока: Amazon AWS (те дават безплатна година за използване на услугите, но с месечен лимит), Google Cloud (те дават $300 на акаунта, който може да се изразходва през годината за облачни хостинг услуги) , Yandex.Cloud (те дават 4000 рубли . за 2 месеца), Microsoft Azure (дайте безплатен достъп до популярни услуги за една година, + 12 500 рубли за всякакви услуги за един месец). По този начин можете да опитате някой от тези доставчици, без да похарчите нито стотинка, но да получите приблизително мнение за качеството и нивото на предоставяната услуга.

В зависимост от избрания път, единственото нещо, което ще се промени в бъдеще, е кой до голяма степен отговаря за тази или онази област на администрацията. Ако хоствате себе си, тогава трябва да разберете, че всички прекъсвания на електричеството, интернет, самия сървър, софтуерът, разположен върху него - всичко това лежи изцяло на вашите плещи. За обучение и тестване обаче това е повече от достатъчно.

Ако нямате допълнителна машина, която може да играе ролята на сървър, тогава ще искате да използвате втория или третия начин. Вторият случай е идентичен с първия, с изключение на това, че прехвърляте отговорността за наличността на сървъра и неговата мощ на плещите на хостера. Администрирането на сървъра и софтуера все още е под ваш контрол.

И накрая, опцията за наемане на капацитет от облачни доставчици. Тук можете да настроите автоматизиран контрол на почти всичко, без да навлизате в твърде много технически подробности. Освен това, вместо една машина, можете да имате няколко паралелно работещи екземпляра, които могат например да отговарят за различни части на приложението, като същевременно не се различават много по цена от притежаването на специален сървър. Освен това има инструменти за оркестрация, контейнеризация, автоматично внедряване, непрекъсната интеграция и много повече! Ще разгледаме някои от тези неща по-долу.

Като цяло сървърната инфраструктура изглежда така: имаме така наречения „оркестратор“ („оркестрация“ е процесът на управление на няколко сървърни инстанции), който управлява промените в околната среда на сървърна инстанция, контейнер за виртуализация (по избор, но доста често използван), който ви позволява да разделите приложението на изолирани логически слоеве и софтуер за непрекъсната интеграция – позволяващ актуализации на хоствания код чрез „скриптове“.

И така, оркестрацията ви позволява да виждате състоянието на сървърите, да пускате или връщате актуализации на сървърната среда и т.н. Първоначално е малко вероятно този аспект да ви засегне, тъй като за да организирате каквото и да е, имате нужда от няколко сървъра (можете да имате един, но защо е необходимо?), А за да имате няколко сървъра, имате нужда от тях. Сред инструментите в тази посока най-популярен е Kubernetes, разработен от Google.

Следващата стъпка е виртуализацията на ниво ОС. В днешно време широко разпространена е концепцията за „докеризация“, която идва от инструмента докер, който осигурява функционалността на контейнери, изолирани един от друг, но стартирани в контекста на една операционна система. Какво означава това: във всеки от тези контейнери можете да стартирате приложение или дори набор от приложения, които ще вярват, че са единствените в цялата ОС, без дори да подозират за съществуването на някой друг на тази машина. Тази функция е много полезна за стартиране на идентични приложения с различни версии или просто конфликтни приложения, както и за разделяне на части от приложение на слоеве. Този слой може по-късно да бъде записан в изображение, което може да се използва, например, за разгръщане на приложение. Тоест, като инсталирате този образ и разположите съдържащите се в него контейнери, вие получавате готова среда за стартиране на вашето приложение! В първите стъпки можете да използвате този инструмент както за информационни цели, така и за да получите много реални ползи, като разделите логиката на приложението на различни слоеве. Но тук си струва да се каже, че не всеки се нуждае от докеризация и не винаги. Докеризацията е оправдана в случаите, когато приложението е „фрагментирано“, разделено на малки части, всяка от които отговаря за собствената си задача, така наречената „архитектура на микросервизи“.

Освен това, в допълнение към осигуряването на среда, трябва да осигурим компетентно внедряване на приложението, което включва всички видове трансформации на код, инсталиране на свързани с приложението библиотеки и пакети, провеждане на тестове, известия за тези операции и т.н. Тук трябва да обърнем внимание на такава концепция като „Непрекъсната интеграция“ (CI – непрекъсната интеграция). Основните инструменти в тази област в момента са Jenkins (CI софтуер, написан на Java може да изглежда малко сложен в началото), Травис CI (написано на Ruby, субективно, малко по-просто Дженкинс, но все още са необходими известни познания в областта на конфигурацията на внедряване), Gitlab CI (написано на Руби и давай).

И така, след като говорихме за средата, в която ще работи вашето приложение, е време най-накрая да разгледаме какви инструменти ни предлага съвременният свят за създаване на тези приложения.

Да започнем с основите: бекенда (backend) – сървърна част. Изборът на език, набор от основни функции и предварително дефинирана структура (рамка) тук се определя главно от личните предпочитания, но въпреки това си струва да се спомене за разглеждане (мнението на автора за езиците е доста субективно, макар и с претенция към безпристрастно описание):

  • Python е доста приятелски настроен език за неопитен потребител, прощава някои грешки, но може да бъде и доста строг към разработчика, така че да не направи нищо лошо. Вече доста зрял и смислен език, който се появи през 1991 г.
  • Go - език от Google, също е доста приятелски настроен и удобен, доста лесно е да се компилира и да се получи изпълним файл на всяка платформа. Може да е просто и приятно, а може и да е сложно и сериозно. Свеж и млад, се появи сравнително наскоро, през 2009 г.
  • Rust е малко по-стар от предишния си колега, издаден през 2006 г., но все още е доста млад в сравнение с връстниците си. Насочен към по-опитни разработчици, въпреки че все още се опитва да реши много задачи от ниско ниво за програмиста.
  • Java е ветеран в комерсиалното развитие, въведен през 1995 г. и е един от най-често използваните езици в разработката на корпоративни приложения днес. Със своите основни концепции и тежка настройка, времето за изпълнение може да стане доста предизвикателно за начинаещ.
  • ASP.net е платформа за разработка на приложения, издадена от Microsoft. За писане на функционалност се използва основно езикът C# (произнася се C Sharp), появил се през 2000 г. Сложността му е сравнима с нивото между Java и Rust.
  • PHP, първоначално използван за предварителна обработка на HTML, в момента, въпреки че държи абсолютното лидерство на езиковия пазар, има тенденция към намаляване на употребата. Той има нисък праг за влизане и лекота на писане на код, но в същото време, когато се разработват доста големи приложения, функционалността на езика може да не е достатъчна.

Е, последната част от нашето приложение - най-осезаемата за потребителя - Входния (frontend) – е лицето на вашето приложение; именно с тази част потребителят взаимодейства директно.

Без да навлизаме в подробности, съвременният интерфейс стои на три стълба, рамки (и не толкова), за създаване на потребителски интерфейси. Съответно трите най-популярни са:

  • ReactJS не е рамка, а библиотека. Всъщност рамката се различава от гордото си заглавие само по липсата на някои функции „извън кутията“ и необходимостта да ги инсталирате ръчно. По този начин има няколко варианта на „подготовката“ на тази библиотека, образувайки уникални рамки. Може да е малко трудно за начинаещ, поради някои основни принципи и доста агресивна настройка на средата за изграждане. Въпреки това, за бърз старт можете да използвате пакета „create-react-app“.
  • VueJS е рамка за изграждане на потребителски интерфейси. От тази троица той с право носи титлата на най-удобната за потребителя рамка; за разработка във Vue бариерата за навлизане е по-ниска от тази на другите споменати братя. Освен това той е най-младият сред тях.
  • Angular се счита за най-сложната от тези рамки, единствената, която изисква написан на пишеща машина (добавка за език Javascript). Често се използва за изграждане на големи корпоративни приложения.

Обобщавайки написаното по-горе, можем да заключим, че сега внедряването на приложение е коренно различно от начина, по който този процес протичаше преди. Никой обаче не ви спира да извършите „разгръщането“ по старомодния начин. Но струва ли си малкото спестено време в началото на огромния брой грешки, на които един разработчик, избрал този път, ще трябва да стъпи? Вярвам, че отговорът е не. Прекарвайки малко повече време, за да се запознаете с тези инструменти (и не се нуждаете от повече от това, защото трябва да разберете дали имате нужда от тях в текущия си проект или не), можете да го изиграете, като значително намалите, напр. , случаи на призрачни грешки в зависимост от средата и които се появяват само на производствения сървър, нощен анализ на това какво е довело до срива на сървъра и защо той не стартира и много повече.

Източник: www.habr.com

Добавяне на нов коментар