Чекліст для створення та публікації веб-додатків

Для того, щоб створити свій веб-додаток у наш час недостатньо вміти його розробляти. Важливим аспектом є налаштування інструментів розгортання програми, моніторингу, а також управління та адміністрування середовища, в якому воно працює. Ера ручного розгортання забуває, навіть для невеликих проектів, інструменти автоматизації можуть принести відчутну користь. При розгортанні «руками» часто ми можемо забути перенести щось, врахувати той чи інший нюанс, запустити забутий тест, цей список можна продовжувати досить довго.

Ця стаття може допомогти тим, хто тільки осягає основи створення веб-додатків, і хоче трохи розібратися в основних термінах та конвенціях.

Отже, побудова додатків можна розділити все ж таки на 2 частини, це все що співвідноситься з кодом програми, і все що співвідноситься з середовищем, в якому цей код виконується. Код програми у свою чергу також ділиться на серверний (той, що виконується на сервері, часто: бізнес логіка, авторизація, зберігання даних тощо), і на клієнтський (той, що виконується на машині користувача: часто інтерфейс, і пов'язана з нею логіка).

Почнемо, мабуть, із середи.

Основою для роботи будь-якого коду, системи, програмного забезпечення є Операційна система, тому нижче ми розглянемо найбільш популярні системи, представлені на ринку хостингів, і дамо їм коротку характеристику:

Windows Server - Та сама Windows, але в серверній варіації. Деякий функціонал, доступний у клієнтській (звичайній) версії Windows тут не присутній, наприклад, деякі служби зі збору статистик, і подібного ПЗ, зате є набір утиліт для адміністрування мережі, базове ПЗ для розгортання серверів (web, ftp, …). Загалом, Windows Server виглядає як звичайна Windows, крякає як звичайна Windows, однак, коштує в 2 рази дорожче свого звичайного побратима. Однак, враховуючи, що розгортання програми Ви робитимете швидше за все на виділеному/віртуальному сервері, кінцева вартість для Вас хоч і може зрости, але не критично. Так як платформа Windows займає переважне місце на ринку ОС, її серверна редакція буде найбільш звичною більшості користувачів.

Юнекс-Подібна система. Традиційна робота в даних системах не передбачає наявності звичного графічного інтерфейсу, пропонуючи користувачеві як елемент управління лише консоль. Для недосвідченого користувача робота в такому форматі може представляти труднощі, чого тільки вартий вихід із досить популярного в даних текстового редактора Vim, питання, пов'язане з цим за 6 років набрало вже більше 1.8 млн переглядів Основними дистрибутивами (редакціями) цього сімейства є: 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.Хмара (дають 4000 руб . на 2 місяці), Microsoft Azure (дають безкоштовний доступ до популярних послуг на рік, + 12 500 рублів на будь-які послуги протягом одного місяця). Таким чином, можна випробувати будь-якого з даних провайдерів, не витративши жодної копійки, але отримавши приблизну думку про якість та рівень надання послуг.

Залежно від обраного шляху, надалі зміниться лише той факт, на кому, здебільшого лежить відповідальність за ту чи іншу область адміністрування. Якщо Ви хостите самі, то Ви повинні розуміти, що будь-які перебої з електрикою, інтернетом, сервером, ПЗ, розгорнутим на ньому – все це повністю лежить на Ваших плечах. Втім, для навчання та тестування цього більш ніж достатньо.

Якщо ж у Вас немає зайвої машини, здатної зіграти роль сервера, тоді Ви захочете скористатися другим або третім шляхом. Другий випадок ідентичний першому, за винятком, що Ви перекладаєте відповідальність за доступність сервера, і його потужності на плечі хостера. Адміністрування сервера та ПЗ все ще під Вашим контролем.

І нарешті, варіант із орендою потужностей хмарних провайдерів. Тут Ви можете налаштувати автоматизоване управління практично будь-чим, не сильно вдаючись у технічні нюанси. Крім того, замість однієї машини, ви можете мати кілька паралельно запущених інстансів (екземплярів), які можуть, наприклад, відповідати за різні частини програми, при цьому не сильно відрізняючись за вартістю від виділеного сервера. А ще, тут є інструменти оркестрування, контейнеризації, автоматичного деплою, безперервної інтеграції та багато іншого! Деякі з цих речей ми розглянемо нижче.

У загальному випадку, інфраструктура сервера виглядає таким чином: ми маємо так званий «оркестратор» («оркестрування» — процес управління кількома інстансами серверів), керуючий змінами середовища на інстансі сервера, контейнер віртуалізації (опціональний, але часто застосовується), що дозволяє розділити додаток на ізольовані логічні шари, та ПЗ для Безперервної Інтеграції – що дозволяє здійснювати оновлення розміщеного коду за допомогою «сценаріїв».

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

Наступна сходинка – віртуалізація лише на рівні ОС. Зараз широкого поширення набуло поняття «докеризація», яке пішло від інструменту Docker, що надає функціонал ізольованих один від одного контейнерів, але які запускаються у контексті однієї операційної системи. Що це означає: у кожному з таких контейнерів можна запустити додаток, або навіть набір додатків, які вважатимуть, що вони одні єдині у всій ОС, навіть не підозрюючи існування когось ще на даній машині. Ця функція дуже корисна як для запуску однакових програм різних версій, чи просто конфліктуючих програм, а також для розділення шматочків програми на шари. Цей зліпок шарів, згодом можна записати в образ, який використовувати, наприклад, для деплою програми. Тобто, встановлюючи цей образ, та розгортаючи контейнери, який він містить, ви отримуєте готове середовище для запуску Вашої програми! На перших кроках Ви можете скористатися даним інструментом як з ознайомлювальною метою, так і для отримання цілком реальної вигоди, рознісши логіку додатку на різні шари. Але тут варто сказати, що докеризація потрібна далеко не всім, і не завжди. Докеризація виправдана у випадках, коли додаток «фрагментований», розбитий на невеликі частини, кожна така, що відповідає за своє завдання, так звана «мікросервісна архітектура».

Крім того, крім забезпечення середовища, нам необхідно забезпечити і грамотний деплой програми, що включає всілякі трансформації коду, установки пов'язаних з додатком бібліотек і пакетів, прогонки тестів, оповіщень про ці операції і так далі. Тут необхідно звернути увагу на таке поняття як «Безперервна Інтеграція» (CI – Continuous Integration). Основними інструментами в цій галузі на даний момент є Jenkins (ПЗ для CI, написане на Java, може здатися дещо складним на старті), Тревіс К.І. (Написаний на Ruby, суб'єктивно, дещо простіше Jenkins'a, втім, все ще необхідні деякі знання в області налаштування деплою), Gitlab CI (написаний на Ruby та Go).

Отже, поговоривши про середовище, в якому належить працювати Вашому додатку, настав час нарешті подивитися, які інструменти пропонує нам сучасний світ, для створення цих додатків.

Почнемо з основи: Backend (Бекенд) - серверна частина. Вибір мови, набору основних функцій та зумовленої структури (фреймворку) тут визначається в основному особистими уподобаннями, проте варто згадати для розгляду (думка автора щодо мов є досить суб'єктивною, хоч і з претензією на неупереджений опис):

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

Ну і фінальна частина нашого додатку - найбільш відчутна для користувача - Frontend (Фронтенд) – є особою Вашої програми, саме з цією частиною користувач взаємодіє безпосередньо.

Не вдаючись у деталі, сучасний фронтенд стоїть на трьох стовпах, фреймворків (і не дуже), для створення інтерфейсів користувача. Відповідно, три найбільш популярні є:

  • ReactJS – не фреймворк, а бібліотека. Власне, від гордого звання фреймворк відрізняється лише відсутністю деяких функцій «з коробки» і необхідністю встановлювати їх вручну. Таким чином, є кілька варіацій «приготування» цієї бібліотеки, які формують своєрідні фреймворки. Для новачка може бути складним, через деякі базові принципи, і досить агресивного налаштування складального середовища. Втім, для швидкого старту можна скористатися "create-react-app" пакетом.
  • VueJS – фреймворк для побудови інтерфейсів користувача. З цієї трійці по праву забирає титул найдружнішого до користувача фреймворку, для розробки в Vue поріг входження нижче ніж у інших наведених побратимів. Крім того, серед них він наймолодший.
  • Angular – вважається найскладнішим із наведених фреймворків, єдиний вимагає наявності TypeScript (Надбудова над мовою Javascript). Найчастіше застосовується для побудови великих корпоративних програм.

Резюмуючи вище написане, можна дійти невтішного висновку, що зараз розгортання додатку кардинально відрізняється від те, як цей процес протікав раніше. Втім, ніхто не заважає здійснювати «деплою» по-старому. Але чи коштує трохи заощадженого часу на старті – величезної кількості граблів, на які належить наступити розробнику, який вибрав цей шлях? Я вважаю, що відповідь «ні». Витративши трохи більше часу на ознайомлення з цими інструментами (а більшого й не потрібно, адже Вам необхідно зрозуміти, чи потрібні вони Вам у поточному проекті чи ні), Ви зможете відіграти його, значно скоротивши, наприклад, випадки примарних помилок, що залежать від середовища та що виявляються тільки на продакшн-сервері, нічних розборів, що призвело до падіння сервера, і чому він не запускається, і багато іншого.

Джерело: habr.com

Додати коментар або відгук