Checkliste zur Erstellung und Veröffentlichung von Webanwendungen

Um heutzutage eine Webanwendung zu erstellen, reicht es nicht mehr aus, sie nur zu entwickeln. Ein wichtiger Aspekt ist die Konfiguration von Tools zum Bereitstellen der Anwendung, Überwachen sowie fĂŒr das Management und die Administration der Umgebung, in der sie arbeitet. Die Ära der manuellen Bereitstellung gehört der Vergangenheit an; selbst fĂŒr kleine Projekte können Automatisierungstools erhebliche Vorteile bringen. Bei einer "manuellen" Bereitstellung vergessen wir oft, irgendetwas zu ĂŒbertragen, einen bestimmten Aspekt zu berĂŒcksichtigen oder einen vergessenen Test auszufĂŒhren; diese Liste könnte man ziemlich lange fortsetzen.

Dieser Artikel kann denjenigen helfen, die gerade die Grundlagen der Erstellung von Webanwendungen erlernen und sich ein wenig in den grundlegenden Begriffen und Konventionen zurechtfinden möchten.

Die Entwicklung von Anwendungen kann in zwei Teile unterteilt werden: alles, was mit dem Code der Anwendung zu tun hat, und alles, was sich auf die Umgebung bezieht, in der dieser Code ausgefĂŒhrt wird. Der Anwendungscode wird wiederum in serverseitigen (der, der auf dem Server ausgefĂŒhrt wird, hĂ€ufig: GeschĂ€ftlogik, Authentifizierung, Datenspeicherung usw.) und clientseitigen (der, der auf dem Computer des Benutzers ausgefĂŒhrt wird: hĂ€ufig die BenutzeroberflĂ€che und die damit verbundene Logik) unterteilt.

Beginnen wir wohl mit der Umgebung.

Die Grundlage fĂŒr die AusfĂŒhrung jeglichen Codes, Systeme oder Software ist das Betriebssystem. Daher betrachten wir im Folgenden die beliebtesten Systeme auf dem Hosting-Markt und geben ihnen eine kurze Beschreibung:

Windows Server – das selbe Windows, aber in der Server-Variante. Einige Funktionen, die in der klientenseitigen (gewöhnlichen) Version von Windows verfĂŒgbar sind, fehlen hier, wie beispielsweise einige Dienste zur Statistiksammlung und Ă€hnliche Software, aber es gibt eine Reihe von Dienstprogrammen zur Netzwerkadministration und grundlegende Software zur Bereitstellung. Server (web, ftp, 
). Insgesamt sieht Windows Server aus wie ein gewöhnliches Windows, klinkt wie ein gewöhnliches Windows, kostet jedoch das Doppelte seines gewöhnlichen Pendants. BerĂŒcksichtigt man jedoch, dass die Bereitstellung der Anwendung wahrscheinlich auf einem dedizierten/virtuellen Server erfolgen wird, könnte die Endkosten fĂŒr Sie zwar steigen, ist jedoch nicht kritisch. Da die Windows-Plattform einen dominierenden Platz auf dem Markt der Benutzerbetriebssysteme einnimmt, wird ihre Serverausgabe den meisten Benutzern am vertrautesten sein.

Unix-Ă€hnliches System. Die traditionelle Arbeit in diesen Systemen sieht keinen gewohnten grafischen BenutzeroberflĂ€che vor, sondern bietet dem Benutzer lediglich die Konsole als Steuerelement an. FĂŒr unerfahrene Benutzer kann die Arbeit in einem solchen Format schwierig sein, ganz zu schweigen vom Ausstieg aus dem relativ beliebten Texteditor Vim, die damit verbundene Frage hat in 6 Jahren bereits ĂŒber 1,8 Millionen Aufrufe gesammelt. Die wichtigsten Distributionen (Editionen) dieser Familie sind: Debian – eine beliebte Distribution, deren Paketversionen hauptsĂ€chlich auf LTS ausgerichtet sind (Long Term Support – LangzeitunterstĂŒtzung), was sich in einer relativ hohen ZuverlĂ€ssigkeit und StabilitĂ€t des Systems und der Pakete widerspiegelt; Ubuntu – enthĂ€lt Distributionen aller Pakete in den neuesten Versionen, was sich nachteilig auf die StabilitĂ€t auswirken kann, jedoch die Nutzung der Funktionen ermöglicht, die mit neuen Versionen bereitgestellt werden; Red Hat Enterprise Linux – ein Betriebssystem, das fĂŒr kommerzielle Nutzung positioniert ist, kostenpflichtig ist, jedoch UnterstĂŒtzung von Software-Anbietern, einige proprietĂ€re Pakete und Treiberpakete umfasst; CentOS – eine Open-Source Variante von Red Hat Enterprise Linux, die sich durch das Fehlen proprietĂ€rer Pakete und UnterstĂŒtzung auszeichnet.

FĂŒr diejenigen, die sich in diesem Bereich erst orientieren, empfehle ich Systeme Windows Server, oder Ubuntu. Wenn man Windows betrachtet, ist es in erster Linie die Vertrautheit des Systems, Ubuntu – mehr Toleranz gegenĂŒber Updates und somit zum Beispiel weniger Probleme beim Starten von Projekten mit Technologien, die neue Versionen erfordern.

Nachdem wir uns also fĂŒr ein Betriebssystem entschieden haben, wenden wir uns den Werkzeugen zu, die es ermöglichen, Anwendungen zu installieren (bereitzustellen), zu aktualisieren und den Zustand der Anwendung oder ihrer Teile auf dem Server zu ĂŒberwachen.

Die nÀchste wichtige Entscheidung betrifft das Hosting Ihrer Anwendung und des dazugehörigen Servers. Derzeit gibt es drei gÀngige Möglichkeiten:

  • Den Server selbst zu hosten – die kostengĂŒnstigste Variante, aber Sie mĂŒssen beim Provider eine statische IP anfordern, damit Ihre Ressource im Laufe der Zeit ihre Adresse nicht Ă€ndert.
  • Einen dedizierten Server (VDS) zu mieten und selbst fĂŒr dessen Administration und Lastenmanagement verantwortlich zu sein.
  • Ein Abonnement auf einer Cloud-Hosting-Plattform zu bezahlen (hĂ€ufig kann man die FunktionalitĂ€ten kostenlos testen), wo es weit verbreitete Modelle fĂŒr die Bezahlung nach Verbrauch gibt. Die bekanntesten Anbieter in diesem Bereich sind: Amazon AWS (bieten ein kostenloses Jahr Nutzung ihrer Dienste, jedoch mit einem monatlichen Limit), Google Cloud (geben 300 $ auf das Konto, die man innerhalb eines Jahres fĂŒr Cloud-Dienste ausgeben kann), Yandex.Cloud (bieten 4000 Rubel fĂŒr 2 Monate), Microsoft Azure (gewĂ€hren ein Jahr kostenlosen Zugang zu beliebten Diensten und + 12.500 Rubel fĂŒr alle Dienste innerhalb eines Monats). So kann man jeden dieser Anbieter ausprobieren, ohne einen Cent auszugeben, erhĂ€lt aber einen ungefĂ€hren Eindruck von der QualitĂ€t und dem Niveau der angebotenen Dienstleistungen. HostingJe nach gewĂ€hltem Weg Ă€ndert sich letztendlich nur der Aspekt, auf wen hauptsĂ€chlich die Verantwortung fĂŒr den jeweiligen Bereich der Administration fĂ€llt. Wenn Sie selbst hosten, sollten Sie sich bewusst sein, dass alle Unterbrechungen in der Stromversorgung, dem Internet, dem Server selbst oder der darauf installierten Software – dies alles liegt vollstĂ€ndig in Ihrer Verantwortung. Dennoch ist dies zum Lernen und Testen mehr als ausreichend.

Sollten Sie jedoch keinen zusĂ€tzlichen Computer haben, der als Server fungieren kann, möchten Sie möglicherweise den zweiten oder dritten Weg wĂ€hlen. Der zweite Fall ist identisch mit dem ersten, mit dem Unterschied, dass Sie die Verantwortung fĂŒr die VerfĂŒgbarkeit des Servers und dessen Leistung auf den Hoster ĂŒbertragen. Die Administration des Servers und der Software bleibt jedoch weiterhin unter Ihrer Kontrolle.

Wenn Sie selbst keinen zusĂ€tzlichen Computer als Server haben, ziehen Sie möglicherweise die zweite oder dritte Option in Betracht. Der zweite Fall ist dem ersten Ă€hnlich, nur dass Sie die Verantwortung fĂŒr die VerfĂŒgbarkeit und die Leistung des Servers auf den Hoster ĂŒbertragen. Die Administration des Servers und der Software bleibt jedoch weiterhin in Ihrer Hand.

Und schließlich die Möglichkeit, Rechenleistung von Cloud-Anbietern zu mieten. Hier können Sie eine automatisierte Verwaltung von fast allem einrichten, ohne sich zu sehr mit technischen Details auseinandersetzen zu mĂŒssen. Außerdem können Sie, anstelle einer einzelnen Maschine, mehrere parallel laufende Instanzen haben, die beispielsweise fĂŒr verschiedene Teile der Anwendung verantwortlich sein können, wobei die Kosten kaum von denen eines dedizierten Servers abweichen. DarĂŒber hinaus stehen Ihnen Werkzeuge fĂŒr Orchestrierung, Containerisierung, automatisches Deployment, kontinuierliche Integration und vieles mehr zur VerfĂŒgung! Einige dieser Aspekte werden wir weiter unten betrachten.

Im Allgemeinen sieht die Infrastruktur eines Servers folgendermaßen aus: Wir haben den sogenannten „Orchestrator“ (Orchestrierung – der Prozess der Verwaltung mehrerer Serverinstanzen), der Änderungen in der Umgebung der Serverinstanz steuert, einen Virtualisierungscontainer (optional, aber hĂ€ufig verwendet), der es ermöglicht, die Anwendung in isolierte logische Schichten zu unterteilen, und Software fĂŒr die kontinuierliche Integration, die es ermöglicht, den bereitgestellten Code durch „Skripte“ zu aktualisieren.

Mit anderen Worten, die Orchestrierung ermöglicht es Ihnen, den Status der Server zu sehen, Updates der Serverumgebung anzuwenden oder zurĂŒckzusetzen und vieles mehr. Zu Beginn wird Sie dieser Aspekt wahrscheinlich nicht viel betreffen, da fĂŒr die Orchestrierung mehrere Server notwendig sind (man kann auch einen verwenden, aber wozu?), und um mehrere Server zu haben, muss es eine Notwendigkeit fĂŒr sie geben. Von den Tools in diesem Bereich ist Kubernetes am bekanntesten, das von Google.

Der nĂ€chste Schritt ist die Virtualisierung auf Betriebssystemebene. Der Begriff „Dockerisierung“ hat sich inzwischen weit verbreitet und stammt von diesem Tool. Docker, das Funktionen isolierter Container bietet, die unabhĂ€ngig voneinander funktionieren, aber im Kontext eines einzigen Betriebssystems gestartet werden. Was bedeutet das: In jedem dieser Container kann eine Anwendung oder sogar eine Reihe von Anwendungen gestartet werden, die glauben, dass sie die einzigen in dem gesamten Betriebssystem sind und nicht einmal ahnen, dass es noch andere auf demselben Rechner gibt. Diese Funktion ist sehr nĂŒtzlich, sowohl fĂŒr den Start von identischen Anwendungen verschiedener Versionen als auch fĂŒr einfach konfliktierende Anwendungen und zur Trennung von AnwendungsstĂŒcken in Schichten. Dieser Snapshot der Schichten kann spĂ€ter in ein Abbild aufgezeichnet werden, das beispielsweise fĂŒr das Deployment der Anwendung verwendet werden kann. Das heißt, indem Sie dieses Abbild installieren und die darin enthaltenen Container starten, erhalten Sie eine sofort einsatzbereite Umgebung fĂŒr Ihre Anwendung! In den ersten Schritten können Sie dieses Werkzeug sowohl zu Lernzwecken als auch zur Erzielung echter Vorteile nutzen, indem Sie die Logik der Anwendung auf verschiedene Schichten aufteilen. Es sei jedoch gesagt, dass das Containerisieren nicht fĂŒr jeden und nicht immer erforderlich ist. Containerisierung ist gerechtfertigt in FĂ€llen, in denen eine Anwendung „fragmentiert“ ist, in kleine Teile zerlegt ist, die jeweils fĂŒr eine bestimmte Aufgabe zustĂ€ndig sind, auch bekannt als „Mikroservice-Architektur“.

DarĂŒber hinaus ist es neben dem Bereitstellen der Umgebung notwendig, auch das Deployment der Anwendung effizient zu gestalten, was verschiedene Code-Transformationen, die Installation von damit verbundenen Bibliotheken und Paketen, das AusfĂŒhren von Tests, Benachrichtigungen ĂŒber diese Operationen und so weiter umfasst. Hierbei mĂŒssen wir auf den Begriff „Kontinuierliche Integration“ (CI – Continuous Integration). Die wichtigsten Werkzeuge in diesem Bereich sind derzeit Jenkins (ein fĂŒr CI geschriebenes Java-Programm, das zu Beginn etwas komplex erscheinen mag), Travis CI (geschrieben in Ruby, subjektiv etwas einfacher als Jenkins,aber dennoch sind gewisse Kenntnisse im Bereich der Deployment-Einstellungen erforderlich), Gitlab CI (geschrieben in Ruby und Go).

. Nun, nachdem wir ĂŒber die Umgebung gesprochen haben, in der Ihre Anwendung arbeiten wird, ist es an der Zeit, die Werkzeuge zu untersuchen, die uns die moderne Welt fĂŒr die Erstellung dieser Anwendungen bietet.

Fangen wir mit dem Grundlegendsten an: Backend (Backend) – der serverseitige Teil. Die Wahl der Sprache, der Hauptfunktionen und der vorgegebenen Struktur (Framework) wird hier hauptsĂ€chlich durch persönliche Vorlieben bestimmt, jedoch ist es dennoch erwĂ€hnenswert, dies zu berĂŒcksichtigen (die Meinung des Autors zu den Sprachen ist ziemlich subjektiv, obwohl sie den Anspruch auf eine objektive Beschreibung erhebt):

  • Python – eine fĂŒr unerfahrene Benutzer recht freundliche Sprache, die einige Fehler verzeiht, aber dennoch ziemlich streng mit dem Entwickler sein kann, um zu verhindern, dass er etwas Schlechtes anstellt. Eine bereits relativ reife und durchdachte Programmiersprache, die 1991 eingefĂŒhrt wurde.
  • Go – eine Sprache von Google, ebenfalls recht benutzerfreundlich und angenehm, lĂ€sst sich leicht kompilieren und man erhĂ€lt eine ausfĂŒhrbare Datei auf jeder Plattform. Sie kann einfach und angenehm, aber auch komplex und ernst sein. Frisch und jung, wurde relativ neu, im Jahr 2009, eingefĂŒhrt.
  • Rust – etwas Ă€lter als der vorherige Kollege, eingefĂŒhrt im Jahr 2006, immer noch relativ jung im Vergleich zu seinen Geschwistern. Sie richtet sich an erfahrenere Entwickler, bemĂŒht sich jedoch weiterhin, viele niedrigstufige Aufgaben fĂŒr den Programmierer zu lösen.
  • Java – ein Veteran der kommerziellen Entwicklung, der 1995 erschien, ist eine der am hĂ€ufigsten verwendeten Sprachen bei der Entwicklung von Unternehmensanwendungen bis heute. Mit seinen grundlegenden Konzepten und der komplexen Einrichtung der Laufzeitumgebung kann sie fĂŒr AnfĂ€nger recht schwierig sein.
  • ASP.net – eine von Microsoft eingefĂŒhrte Plattform fĂŒr die Anwendungsentwicklung. FĂŒr die Implementierung von Funktionen wird hauptsĂ€chlich die Sprache C# (ausgesprochen C Sharp) verwendet, die 2000 eingefĂŒhrt wurde. In ihrer KomplexitĂ€t entspricht sie einem Niveau zwischen Java und Rust.
  • PHP – ursprĂŒnglich fĂŒr die Vorverarbeitung von HTML verwendet, hĂ€lt es derzeit, obwohl es eine absolute MarktfĂŒhrerschaft unter den Sprachen hat, eine abnehmende Nutzungstendenz fest. Es zeichnet sich durch eine niedrige EinstiegshĂŒrde und einfache Schreibweise aus, kann aber bei der Entwicklung grĂ¶ĂŸerer Anwendungen in seiner FunktionalitĂ€t unzureichend sein.

Nun, der finale Teil unserer Anwendung – der fĂŒr den Benutzer am greifbarsten – Frontend (Frontend) – ist das Gesicht Ihrer Anwendung, genau mit diesem Teil interagiert der Benutzer direkt.

Ohne ins Detail zu gehen, basiert modernes Frontend auf drei SÀulen, Frameworks (und weniger), zur Erstellung von BenutzeroberflÀchen. Dementsprechend sind die drei beliebtesten:

  • ReactJS – ist kein Framework, sondern eine Bibliothek. Im Grunde unterscheidet es sich nur durch das Fehlen bestimmter Funktionen „out of the box“ und die Notwendigkeit, diese manuell zu installieren, von dem stolzen Titel eines Frameworks. So gibt es mehrere Varianten der „Zubereitung“ dieser Bibliothek, die spezifische Frameworks bilden. FĂŒr einen AnfĂ€nger kann es aufgrund einiger grundlegender Prinzipien und der recht aggressiven Konfiguration des Builds etwas kompliziert sein. FĂŒr einen schnellen Einstieg kann jedoch das „create-react-app“-Paket verwendet werden.
  • VueJS – ist ein Framework zur Erstellung von BenutzeroberflĂ€chen. Von der genannten Dreiergruppe verdient es sich zu Recht den Titel des benutzerfreundlichsten Frameworks, da die EinstiegshĂŒrde beim Entwickeln in Vue niedriger ist als bei den anderen genannten Kollegen. Zudem ist es der jĂŒngste unter ihnen.
  • Angular – gilt als das komplexeste der genannten Frameworks und erfordert als einziges TypeScript (eine Erweiterung der Programmiersprache Javascript). Wird hĂ€ufig zur Erstellung großer Unternehmensanwendungen verwendet.

Zusammenfassend lĂ€sst sich sagen, dass sich das Bereitstellen einer Anwendung jetzt erheblich von dem unterscheidet, wie dieser Prozess frĂŒher ablief. Dennoch steht es niemandem im Wege, das „Deployment“ auf altmodische Weise durchzufĂŒhren. Aber ist die etwas gesparte Zeit zu Beginn wirklich die großen Fallstricke wert, auf die ein Entwickler, der diesen Weg wĂ€hlt, treten wird? Ich denke, die Antwort ist „nein“. Wenn Sie etwas mehr Zeit mit der Einarbeitung in diese Werkzeuge verbringen (und mehr ist eigentlich nicht nötig, da Sie verstehen mĂŒssen, ob sie in Ihrem aktuellen Projekt benötigt werden oder nicht), können Sie diese Zeit erheblich zurĂŒckgewinnen, indem Sie beispielsweise die Anzahl der Geisterfehler, die von der Umgebung abhĂ€ngen und nur auf dem Produktionsserver auftreten, erheblich reduzieren, nĂ€chtliche Analysen, die klĂ€ren, was den Serverausfall verursacht hat und warum er sich nicht starten lĂ€sst, und vieles mehr.

Quelle: habr.com

60GB SSD 8Gb DDR4