Lista kontrolna dotycząca tworzenia i publikowania aplikacji internetowych

Aby w naszych czasach stworzyć własną aplikację internetową, nie wystarczy umieć ją rozwijać. Ważnym aspektem jest ustawienie narzędzi do wdrażania aplikacji, monitorowania oraz zarządzania i administrowania środowiskiem, w którym funkcjonuje. Gdy era ręcznego wdrażania odchodzi w zapomnienie, nawet w przypadku małych projektów narzędzia do automatyzacji mogą przynieść wymierne korzyści. Wdrażając „ręcznie”, często możemy zapomnieć o przesunięciu czegoś, wziąć pod uwagę ten czy inny niuans, przeprowadzić zapomniany test, tę listę można kontynuować przez dość długi czas.

Ten artykuł może pomóc tym, którzy dopiero uczą się podstaw tworzenia aplikacji internetowych i chcą trochę zrozumieć podstawowe terminy i konwencje.

Zatem budowanie aplikacji nadal można podzielić na 2 części: wszystko, co dotyczy kodu aplikacji i wszystko, co dotyczy środowiska, w którym ten kod jest wykonywany. Kod aplikacji z kolei dzieli się także na kod serwera (ten, który działa na serwerze, często: logika biznesowa, autoryzacja, przechowywanie danych itp.) i kod klienta (ten, który działa na komputerze użytkownika: często interfejs i związana z nim logika).

Zacznijmy od środy.

Podstawą działania dowolnego kodu, systemu, czy oprogramowania jest System Operacyjny, dlatego poniżej przyjrzymy się najpopularniejszym systemom na rynku hostingowym i podamy ich krótki opis:

Windows Server - ten sam Windows, ale w wersji serwerowej. Nie ma tutaj niektórych funkcjonalności dostępnych w klienckiej (zwykłej) wersji systemu Windows, na przykład niektórych usług gromadzenia statystyk i podobnego oprogramowania, ale jest zestaw narzędzi do administrowania siecią, podstawowe oprogramowanie do wdrażania serwerów (web, ftp, ...). Ogólnie Windows Server wygląda jak zwykły Windows, szarga jak zwykły Windows, jednak kosztuje 2 razy więcej niż jego zwykły odpowiednik. Biorąc jednak pod uwagę, że najprawdopodobniej będziesz wdrażać aplikację na serwerze dedykowanym/wirtualnym, ostateczny koszt dla Ciebie, choć może wzrosnąć, nie jest krytyczny. Ponieważ platforma Windows zajmuje przeważające miejsce na rynku konsumenckich systemów operacyjnych, jej wersja serwerowa będzie najbardziej znana większości użytkowników.

Unix-podobny system. Tradycyjna praca w tych systemach nie wymaga obecności znanego interfejsu graficznego, oferując użytkownikowi jedynie konsolę jako element sterujący. Dla niedoświadczonego użytkownika praca w tym formacie może być trudna, tylko jaki jest koszt wyjścia z edytora tekstu, który jest dość popularny w danych Vim, związane z tym pytanie uzyskało już ponad 6 miliona wyświetleń w ciągu 1.8 lat. Główne dystrybucje (edycje) tej rodziny to: Debian - popularna dystrybucja, zawarte w niej wersje pakietów skupiają się głównie na LTS (Wsparcie długoterminowe – wsparcie przez długi czas), co wyraża się w dość wysokiej niezawodności i stabilności systemu i pakietów; Ubuntu – zawiera dystrybucje wszystkich pakietów w ich najnowszych wersjach, co może mieć wpływ na stabilność, ale pozwala na korzystanie z funkcjonalności, które dostarczają nowe wersje; Red Hat Enterprise Linux – system operacyjny, przeznaczony do użytku komercyjnego, jest płatny, obejmuje jednak wsparcie ze strony dostawców oprogramowania, niektóre zastrzeżone pakiety i pakiety sterowników; CentOS – open source odmiana Red Hat Enterprise Linux, charakteryzująca się brakiem zastrzeżonych pakietów i wsparcia.

Dla tych, którzy dopiero zaczynają opanowywać tę dziedzinę, moją rekomendacją będą systemy Windows ServerLub Ubuntu. Jeśli weźmiemy pod uwagę system Windows, to jest to przede wszystkim znajomość systemu, Ubuntu – większa tolerancja na aktualizacje, a co za tym idzie np. mniej problemów przy uruchamianiu projektów w technologiach wymagających nowych wersji.

Decydując się więc na system operacyjny, przejdźmy do zestawu narzędzi, które pozwalają na wdrożenie (instalację), aktualizację i monitorowanie stanu aplikacji lub jej części na serwerze.

Następną ważną decyzją będzie umiejscowienie Twojej aplikacji i serwera dla niej. W tej chwili najczęstsze są 3 sposoby:

  • Hosting (utrzymanie) serwera na własną rękę jest najbardziej opłacalną opcją, ale będziesz musiał zamówić statyczny adres IP u swojego dostawcy, aby Twój zasób nie zmieniał swojego adresu z biegiem czasu.
  • Wynajmij serwer dedykowany (VDS) – samodzielnie nim zarządzaj i skaluj obciążenia
  • Zapłać (często dają szansę darmowego wypróbowania funkcjonalności platformy) za subskrypcję jakiegoś hostingu w chmurze, gdzie model płatności za wykorzystane zasoby jest dość powszechny. Najwybitniejsi przedstawiciele tego kierunku: Amazon AWS (dają darmowy rok korzystania z usług, ale z miesięcznym limitem), Google Cloud (wpłacają na konto 300 dolarów, które można przeznaczyć w ciągu roku na usługi hostingu w chmurze) , Yandex.Cloud (dają 4000 rubli na 2 miesiące), Microsoft Azure (dają darmowy dostęp do popularnych usług przez rok, + 12 500 rubli za dowolne usługi przez miesiąc). W ten sposób możesz wypróbować dowolnego z tych dostawców, nie wydając ani grosza, ale uzyskując przybliżoną opinię na temat jakości i poziomu świadczonych usług.

W zależności od wybranej ścieżki jedyne, co zmieni się w przyszłości, to to, kto w dużej mierze będzie odpowiedzialny za ten czy inny obszar administracji. Jeśli sam hostujesz, musisz zrozumieć, że wszelkie przerwy w dostawie prądu, Internecie, samym serwerze, wdrożonym na nim oprogramowaniu - wszystko to leży wyłącznie na Twoich barkach. Jednak do szkolenia i testowania jest to więcej niż wystarczające.

Jeśli nie masz dodatkowej maszyny, która mogłaby pełnić rolę serwera, będziesz chciał skorzystać z drugiego lub trzeciego sposobu. Drugi przypadek jest identyczny z pierwszym, z tą różnicą, że przenosisz odpowiedzialność za dostępność serwera i jego moc na barki hostera. Administracja serwerem i oprogramowaniem jest nadal pod Twoją kontrolą.

I wreszcie możliwość wynajmu pojemności dostawców usług chmurowych. Tutaj możesz skonfigurować automatyczną kontrolę prawie wszystkiego, bez wchodzenia w zbyt wiele szczegółów technicznych. Dodatkowo zamiast jednej maszyny można mieć kilka równolegle działających instancji, które mogą odpowiadać np. za różne części aplikacji, nie odbiegając przy tym znacząco kosztami od posiadania serwera dedykowanego. Dostępne są także narzędzia do orkiestracji, konteneryzacji, automatycznego wdrażania, ciągłej integracji i wiele więcej! Przyjrzymy się niektórym z tych rzeczy poniżej.

Ogólnie infrastruktura serwerowa wygląda tak: mamy tzw. „orkiestratora” („orkiestracja” to proces zarządzania kilkoma instancjami serwera), który zarządza zmianami środowiskowymi na instancji serwera, kontener wirtualizacji (opcjonalny, ale dość często używane), które pozwala podzielić aplikację na izolowane warstwy logiczne, oraz oprogramowanie Continuous Integration – umożliwiające aktualizację hostowanego kodu poprzez „skrypty”.

Zatem orkiestracja umożliwia sprawdzanie stanu serwerów, wdrażanie lub wycofywanie aktualizacji w środowisku serwerów i tak dalej. Na początku jest mało prawdopodobne, aby ten aspekt Cię dotyczył, ponieważ aby cokolwiek zorganizować, potrzebujesz kilku serwerów (możesz mieć jeden, ale dlaczego jest to konieczne?), A aby mieć kilka serwerów, potrzebujesz ich. Wśród narzędzi w tym kierunku najpopularniejszym jest Kubernetes, opracowany przez Google.

Kolejnym krokiem jest wirtualizacja na poziomie systemu operacyjnego. W dzisiejszych czasach powszechne stało się pojęcie „dokeryzacji”, które wywodzi się z narzędzia Doker, który zapewnia funkcjonalność izolowanych od siebie kontenerów, ale uruchamianych w kontekście jednego systemu operacyjnego. Co to oznacza: w każdym z tych kontenerów możesz uruchomić aplikację, a nawet zestaw aplikacji, które uwierzą, że są jedyne w całym systemie operacyjnym, nawet nie podejrzewając istnienia kogoś innego na tym komputerze. Funkcja ta jest bardzo przydatna do uruchamiania identycznych aplikacji w różnych wersjach lub po prostu aplikacji będących w konflikcie, a także do dzielenia fragmentów aplikacji na warstwy. Tę warstwę rzutowaną można później zapisać w obrazie, który można wykorzystać na przykład do wdrożenia aplikacji. Oznacza to, że instalując ten obraz i wdrażając zawarte w nim kontenery, otrzymasz gotowe środowisko do uruchamiania aplikacji! W pierwszych krokach można wykorzystać to narzędzie zarówno w celach informacyjnych, jak i w celu uzyskania bardzo realnych korzyści poprzez podzielenie logiki aplikacji na różne warstwy. Ale warto tutaj powiedzieć, że nie każdy potrzebuje dokowania i nie zawsze. Dokeryzacja jest uzasadniona w przypadkach, gdy aplikacja jest „fragmentowana”, podzielona na małe części, z których każda odpowiada za swoje zadanie, tzw. „architekturę mikroserwisów”.

Oprócz zapewnienia środowiska musimy zadbać o kompetentne wdrożenie aplikacji, które obejmuje wszelkiego rodzaju transformacje kodu, instalację bibliotek i pakietów związanych z aplikacją, uruchomienie testów, powiadomienia o tych operacjach i tak dalej. Tutaj należy zwrócić uwagę na takie pojęcie jak „Ciągła integracja” (CI – Ciągła Integracja). Głównymi narzędziami w tym obszarze są obecnie Jenkins (oprogramowanie CI napisane w Javie może na początku wydawać się nieco skomplikowane), Travis CI (napisany w języku Ruby, subiektywny, nieco prostszy Jenkinsa, jednakże wymagana jest jeszcze pewna wiedza z zakresu konfiguracji wdrożenia), Gitlab CI (napisane na Ruby i idź).

Skoro więc omówiliśmy środowisko, w którym będzie działać Twoja aplikacja, czas w końcu przyjrzeć się, jakie narzędzia oferuje nam współczesny świat do tworzenia właśnie tych aplikacji.

Zacznijmy od podstaw: Backend (backend) – część serwerowa. O wyborze języka, zestawie podstawowych funkcji i predefiniowanej strukturze (frameworku) decydują tutaj głównie osobiste preferencje, niemniej jednak warto o tym wspomnieć (opinia autora na temat języków ​​jest dość subiektywna, choć z zastrzeżeniem do bezstronnego opisu):

  • Python jest językiem dość przyjaznym dla niedoświadczonego użytkownika, wybacza pewne błędy, ale potrafi też być dość rygorystyczny wobec programisty, aby nie zrobił nic złego. Już dość dojrzały i znaczący język, który pojawił się w 1991 roku.
  • Go - język od Google, jest również dość przyjazny i wygodny, dość łatwo go skompilować i uzyskać plik wykonywalny na dowolnej platformie. Może być proste i przyjemne, ale może też być złożone i poważne. Świeża i młoda, pojawiła się stosunkowo niedawno, bo w 2009 roku.
  • Rust jest nieco starszy od swojego poprzedniego kolegi, wydanego w 2006 roku, ale wciąż jest dość młody w porównaniu do swoich rówieśników. Skierowany do bardziej doświadczonych programistów, chociaż nadal stara się rozwiązać wiele zadań niskiego poziomu dla programisty.
  • Java jest weteranem rozwoju komercyjnego, wprowadzonym w 1995 roku i jest dziś jednym z najczęściej używanych języków w tworzeniu aplikacji dla przedsiębiorstw. Dzięki podstawowym koncepcjom i ciężkiej konfiguracji środowisko wykonawcze może stać się dość trudne dla początkującego.
  • ASP.net to platforma do tworzenia aplikacji wydana przez firmę Microsoft. Do pisania funkcjonalności używany jest głównie język C# (wymawiane C Sharp), który pojawił się w 2000 roku. Jego złożoność jest porównywalna do poziomu pomiędzy Javą a Rustem.
  • PHP, pierwotnie używany do wstępnego przetwarzania HTML, obecnie, choć jest absolutnym liderem na rynku językowym, istnieje tendencja do spadku jego wykorzystania. Ma niski próg wejścia i łatwość pisania kodu, ale jednocześnie przy tworzeniu dość dużych aplikacji funkcjonalność języka może nie wystarczyć.

Cóż, ostatnia część naszej aplikacji - najbardziej namacalna dla użytkownika - frontend (frontend) – to twarz Twojej aplikacji, to z tą częścią użytkownik wchodzi w bezpośrednią interakcję.

Nie wchodząc w szczegóły, nowoczesny frontend opiera się na trzech filarach, frameworkach (i nie tylko), służących do tworzenia interfejsów użytkownika. W związku z tym trzy najpopularniejsze to:

  • ReactJS nie jest frameworkiem, ale biblioteką. Właściwie framework różni się od dumnego tytułu jedynie brakiem niektórych funkcji „od razu po wyjęciu z pudełka” i koniecznością ich ręcznej instalacji. Zatem istnieje kilka odmian „przygotowania” tej biblioteki, tworzących unikalne ramy. Dla początkującego może to być trochę trudne ze względu na pewne podstawowe zasady i dość agresywną konfigurację środowiska kompilacji. Jednak na szybki start możesz skorzystać z pakietu „utwórz-reaguj-aplikację”.
  • VueJS to framework do budowania interfejsów użytkownika. Z tej trójcy słusznie przyjmuje miano najbardziej przyjaznego dla użytkownika frameworku; dla rozwoju w Vue bariera wejścia jest niższa niż w przypadku pozostałych wspomnianych braci. Co więcej, jest wśród nich najmłodszy.
  • Angular jest uważany za najbardziej złożony z tych frameworków, jedyny, który tego wymaga TYPESCRIPT (dodatek do języka JavaScript). Często używany do tworzenia dużych aplikacji korporacyjnych.

Podsumowując to, co napisano powyżej, możemy stwierdzić, że obecnie wdrażanie aplikacji radykalnie różni się od tego, jak przebiegał ten proces wcześniej. Jednak nikt nie powstrzymuje Cię przed „wdrożeniem” w staromodny sposób. Czy jednak niewielka ilość czasu zaoszczędzona na początku jest warta ogromnej liczby błędów, na które będzie musiał wejść deweloper decydujący się na tę ścieżkę? Wierzę, że odpowiedź brzmi: nie. Poświęcając trochę więcej czasu na zapoznanie się z tymi narzędziami (a nie potrzebujesz więcej, bo musisz zrozumieć, czy potrzebujesz ich w swoim bieżącym projekcie, czy nie), możesz to rozegrać, znacznie ograniczając np. , przypadki błędów duchów w zależności od środowiska, które pojawiają się tylko na serwerze produkcyjnym, wieczorna analiza tego, co doprowadziło do awarii serwera i dlaczego się nie uruchamia, i wiele więcej.

Źródło: www.habr.com

Dodaj komentarz