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

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

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

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

Нека започнем със средата.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

И финалната част на нашето приложение – най-възприеманата от потребителите – Frontend (фронтенд) – е лицето на Вашето приложение, именно с тази част потребителят взаимодействува директно.

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

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

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

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster