Checkliste zum Erstellen und Veröffentlichen von Webanwendungen

Um in unserer Zeit eine eigene Webanwendung zu erstellen, reicht es nicht aus, diese entwickeln zu können. Ein wichtiger Aspekt ist die Einrichtung von Tools für die Anwendungsbereitstellung und -überwachung sowie die Verwaltung und Verwaltung der Umgebung, in der sie ausgeführt wird. Da die Ära der manuellen Bereitstellung in Vergessenheit gerät, können Automatisierungstools selbst für kleine Projekte spürbare Vorteile bringen. Bei der Bereitstellung „von Hand“ können wir oft vergessen, etwas zu verschieben, diese oder jene Nuance zu berücksichtigen, einen vergessenen Test durchzuführen – diese Liste lässt sich noch lange fortsetzen.

Dieser Artikel kann denjenigen helfen, die gerade erst die Grundlagen der Erstellung von Webanwendungen erlernen und ein wenig über die grundlegenden Begriffe und Konventionen verstehen möchten.

Das Erstellen von Anwendungen kann also immer noch in zwei Teile unterteilt werden: alles, was sich auf den Anwendungscode bezieht, und alles, was sich auf die Umgebung bezieht, in der dieser Code ausgeführt wird. Der Anwendungscode wiederum ist auch in Servercode (der auf dem Server ausgeführt wird, häufig: Geschäftslogik, Autorisierung, Datenspeicherung usw.) und Clientcode (der auf dem Computer des Benutzers ausgeführt wird: häufig) unterteilt die Schnittstelle und die damit verbundene Logik).

Beginnen wir mit Mittwoch.

Die Grundlage für den Betrieb jedes Codes, Systems oder jeder Software ist das Betriebssystem. Im Folgenden betrachten wir daher die beliebtesten Systeme auf dem Hosting-Markt und geben ihnen eine kurze Beschreibung:

Windows Server - das gleiche Windows, aber in einer Servervariante. Einige Funktionen, die in der Client-Version (normal) von Windows verfügbar sind, sind hier nicht vorhanden, zum Beispiel einige Dienste zum Sammeln von Statistiken und ähnlicher Software, aber es gibt eine Reihe von Dienstprogrammen für die Netzwerkadministration, grundlegende Software zum Bereitstellen von Servern (Web, FTP, ...). Im Allgemeinen sieht Windows Server wie normales Windows aus, funktioniert wie normales Windows, kostet jedoch doppelt so viel wie sein normales Gegenstück. Da Sie die Anwendung jedoch höchstwahrscheinlich auf einem dedizierten/virtuellen Server bereitstellen werden, sind die endgültigen Kosten für Sie zwar höher, aber nicht kritisch. Da die Windows-Plattform einen überwältigenden Platz auf dem Consumer-Betriebssystemmarkt einnimmt, wird die Serverversion den meisten Benutzern am vertrautesten sein.

Unix-ähnliches System. Die herkömmliche Arbeit in diesen Systemen erfordert nicht das Vorhandensein einer vertrauten grafischen Oberfläche und bietet dem Benutzer lediglich eine Konsole als Steuerelement. Für einen unerfahrenen Benutzer kann die Arbeit in diesem Format schwierig sein, ebenso wie die Kosten für das Beenden eines Texteditors, der in der Datenverarbeitung recht beliebt ist Vim, eine diesbezügliche Frage hat in 6 Jahren bereits mehr als 1.8 Millionen Aufrufe erhalten. Die Hauptdistributionen (Editionen) dieser Familie sind: Debian – eine beliebte Distribution, deren Paketversionen sich hauptsächlich auf LTS konzentrieren (Langfristige Unterstützung – Unterstützung über einen langen Zeitraum), was sich in einer relativ hohen Zuverlässigkeit und Stabilität des Systems und der Pakete ausdrückt; Ubuntu – enthält Distributionen aller Pakete in ihren neuesten Versionen, was die Stabilität beeinträchtigen kann, Ihnen jedoch die Nutzung der Funktionalität neuer Versionen ermöglicht; Red Hat Enterprise Linux – Betriebssystem, für die kommerzielle Nutzung konzipiert, ist kostenpflichtig, beinhaltet jedoch Support von Softwareanbietern, einige proprietäre Pakete und Treiberpakete; CentOS – Open Source eine Variante von Red Hat Enterprise Linux, die sich durch das Fehlen proprietärer Pakete und Unterstützung auszeichnet.

Für diejenigen, die gerade erst anfangen, diesen Bereich zu beherrschen, würde ich Systeme empfehlen Windows ServerOder Ubuntu. Wenn wir Windows betrachten, dann ist dies in erster Linie die Vertrautheit des Systems, Ubuntu – mehr Toleranz gegenüber Updates und dadurch beispielsweise weniger Probleme beim Start von Projekten zu Technologien, die neue Versionen erfordern.

Nachdem wir uns also für das Betriebssystem entschieden haben, gehen wir zu einer Reihe von Tools über, mit denen Sie den Status der Anwendung oder ihrer Teile auf dem Server bereitstellen (installieren), aktualisieren und überwachen können.

Die nächste wichtige Entscheidung wird die Platzierung Ihrer Bewerbung und des Servers dafür sein. Im Moment sind drei Möglichkeiten am gebräuchlichsten:

  • Das Hosten (Behalten) eines Servers auf eigene Faust ist die kostengünstigste Option, Sie müssen jedoch bei Ihrem Provider eine statische IP bestellen, damit Ihre Ressource ihre Adresse im Laufe der Zeit nicht ändert.
  • Mieten Sie einen Dedicated Server (VDS) – und verwalten Sie ihn selbstständig und skalieren Sie die Lasten
  • Bezahlen Sie (häufig haben Sie die Möglichkeit, die Funktionalität der Plattform kostenlos auszuprobieren) für ein Abonnement für ein Cloud-Hosting, bei dem das Zahlungsmodell für die genutzten Ressourcen recht üblich ist. Die prominentesten Vertreter dieser Richtung: Amazon AWS (sie gewähren ein Jahr lang die Nutzung der Dienste kostenlos, jedoch mit einem monatlichen Limit), Google Cloud (sie spenden 300 US-Dollar auf das Konto, das im Laufe des Jahres für Cloud-Hosting-Dienste ausgegeben werden kann) , Yandex.Cloud (sie geben 4000 Rubel für 2 Monate), Microsoft Azure (ein Jahr lang kostenlosen Zugang zu beliebten Diensten, + 12 Rubel für alle Dienste für einen Monat). Sie können also jeden dieser Anbieter ausprobieren, ohne einen Cent auszugeben, aber sich ein ungefähres Bild von der Qualität und dem Niveau der angebotenen Dienstleistungen machen.

Abhängig vom eingeschlagenen Weg wird sich in Zukunft nur noch ändern, wer für diesen oder jenen Bereich der Verwaltung maßgeblich verantwortlich ist. Wenn Sie selbst hosten, müssen Sie verstehen, dass etwaige Unterbrechungen der Stromversorgung, des Internets, des Servers selbst und der darauf bereitgestellten Software vollständig auf Ihren Schultern liegen. Für Training und Tests ist dies jedoch mehr als ausreichend.

Wenn Sie keinen zusätzlichen Computer haben, der die Rolle eines Servers übernehmen kann, sollten Sie den zweiten oder dritten Weg nutzen. Der zweite Fall ist identisch mit dem ersten, mit der Ausnahme, dass Sie die Verantwortung für die Verfügbarkeit des Servers und dessen Stromversorgung auf die Schultern des Hosters verlagern. Die Verwaltung des Servers und der Software unterliegt weiterhin Ihrer Kontrolle.

Und schließlich die Möglichkeit, Kapazitäten von Cloud-Anbietern zu mieten. Hier können Sie fast alles automatisiert steuern, ohne zu sehr auf technische Details einzugehen. Darüber hinaus können Sie anstelle einer Maschine mehrere parallel laufende Instanzen haben, die beispielsweise für verschiedene Teile der Anwendung verantwortlich sein können, wobei sich die Kosten nicht wesentlich vom Besitz eines dedizierten Servers unterscheiden. Außerdem gibt es Tools für Orchestrierung, Containerisierung, automatische Bereitstellung, kontinuierliche Integration und vieles mehr! Wir werden uns einige dieser Dinge weiter unten ansehen.

Im Allgemeinen sieht die Serverinfrastruktur so aus: Wir haben einen sogenannten „Orchestrator“ („Orchestrierung“ ist der Prozess der Verwaltung mehrerer Serverinstanzen), der Umgebungsänderungen auf einer Serverinstanz verwaltet, einen Virtualisierungscontainer (optional, aber ganz einfach). (häufig verwendet), mit dem Sie die Anwendung in isolierte logische Schichten unterteilen können, und Continuous-Integration-Software, die Aktualisierungen des gehosteten Codes über „Skripte“ ermöglicht.

Mit der Orchestrierung können Sie also den Status von Servern anzeigen, Updates für die Serverumgebung bereitstellen oder rückgängig machen und so weiter. Dieser Aspekt wird Sie zunächst wahrscheinlich nicht beeinträchtigen, da Sie für die Orchestrierung mehrere Server benötigen (Sie können einen haben, aber warum ist das notwendig?), und um mehrere Server zu haben, benötigen Sie diese. Unter den Tools in dieser Richtung ist Kubernetes das beliebteste, entwickelt von Google.

Der nächste Schritt ist die Virtualisierung auf Betriebssystemebene. Heutzutage ist das Konzept der „Dockerisierung“ weit verbreitet, das aus dem Tool stammt Docker, das die Funktionalität von voneinander isolierten Containern bereitstellt, aber im Kontext eines Betriebssystems gestartet wird. Was bedeutet das: In jedem dieser Container können Sie eine Anwendung oder sogar eine Reihe von Anwendungen ausführen, die glauben, sie seien die einzigen im gesamten Betriebssystem, ohne auch nur zu ahnen, dass jemand anderes auf diesem Computer existiert. Diese Funktion ist sehr nützlich, um identische Anwendungen unterschiedlicher Versionen oder einfach widersprüchliche Anwendungen zu starten sowie Teile einer Anwendung in Ebenen zu unterteilen. Dieser Layer-Cast kann später in ein Image geschrieben werden, das beispielsweise zum Bereitstellen einer Anwendung verwendet werden kann. Das heißt, durch die Installation dieses Images und die Bereitstellung der darin enthaltenen Container erhalten Sie eine fertige Umgebung zum Ausführen Ihrer Anwendung! In den ersten Schritten können Sie dieses Tool sowohl zu Informationszwecken nutzen als auch um durch die Aufteilung der Anwendungslogik in verschiedene Schichten einen echten Nutzen zu erzielen. An dieser Stelle ist jedoch zu erwähnen, dass nicht jeder und nicht immer eine Dockerisierung benötigt. Dockerisierung ist in Fällen gerechtfertigt, in denen die Anwendung „fragmentiert“ und in kleine Teile unterteilt ist, von denen jeder für seine eigene Aufgabe verantwortlich ist, die sogenannte „Microservice-Architektur“.

Darüber hinaus müssen wir neben der Bereitstellung der Umgebung auch eine kompetente Bereitstellung der Anwendung sicherstellen, die alle Arten von Codetransformationen, die Installation anwendungsbezogener Bibliotheken und Pakete, die Durchführung von Tests, Benachrichtigungen über diese Vorgänge usw. umfasst. Hier müssen wir auf ein Konzept wie „kontinuierliche Integration“ achten (CI – Kontinuierliche Integration). Die wichtigsten Tools in diesem Bereich sind derzeit Jenkins (in Java geschriebene CI-Software mag am Anfang etwas kompliziert erscheinen), Travis CI (in Ruby geschrieben, subjektiv, etwas einfacher Jenkins, allerdings sind noch einige Kenntnisse im Bereich der Deployment-Konfiguration erforderlich), Gitlab-CI (geschrieben auf Ruby und Go).

Nachdem wir also über die Umgebung gesprochen haben, in der Ihre Anwendung funktionieren wird, ist es nun an der Zeit, sich endlich anzusehen, welche Tools uns die moderne Welt für die Erstellung genau dieser Anwendungen bietet.

Beginnen wir mit den Grundlagen: Backend (Backend) – Serverteil. Die Wahl der Sprache, der Grundfunktionen und der vordefinierten Struktur (Framework) wird hier hauptsächlich von persönlichen Vorlieben bestimmt, ist aber dennoch erwähnenswert (die Meinung des Autors zu Sprachen ist recht subjektiv, wenn auch mit Anspruch). zu einer unvoreingenommenen Beschreibung):

  • Python ist für einen unerfahrenen Benutzer eine recht benutzerfreundliche Sprache, sie verzeiht einige Fehler, kann aber auch recht streng mit dem Entwickler umgehen, damit dieser nichts Schlechtes tut. Bereits eine ziemlich ausgereifte und bedeutungsvolle Sprache, die 1991 erschien.
  • Go – eine Sprache von Google, ist auch recht benutzerfreundlich und praktisch, es ist ziemlich einfach, auf jeder Plattform eine ausführbare Datei zu kompilieren und zu erhalten. Es kann einfach und angenehm sein, oder es kann komplex und ernst sein. Frisch und jung, erschien vor relativ kurzer Zeit, im Jahr 2009.
  • Rust ist etwas älter als sein vorheriger Kollege aus dem Jahr 2006, im Vergleich zu seinen Mitbewerbern aber noch recht jung. Richtet sich an erfahrenere Entwickler, versucht aber immer noch, viele einfache Aufgaben für den Programmierer zu lösen.
  • Java ist ein Veteran der kommerziellen Entwicklung, wurde 1995 eingeführt und ist heute eine der am häufigsten verwendeten Sprachen in der Entwicklung von Unternehmensanwendungen. Aufgrund der grundlegenden Konzepte und der umfangreichen Einrichtung kann die Laufzeit für Anfänger eine ziemliche Herausforderung darstellen.
  • ASP.net ist eine von Microsoft veröffentlichte Anwendungsentwicklungsplattform. Zum Schreiben von Funktionalität wird hauptsächlich die im Jahr 2000 erschienene C#-Sprache (ausgesprochen C Sharp) verwendet. Seine Komplexität ist vergleichbar mit dem Niveau zwischen Java und Rust.
  • PHP wurde ursprünglich für die HTML-Vorverarbeitung verwendet. Obwohl es derzeit die absolute Marktführerschaft auf dem Sprachmarkt innehat, gibt es einen Trend hin zu einem Rückgang der Verwendung. Die Einstiegsschwelle ist niedrig und das Schreiben von Code ist einfach, aber gleichzeitig reicht die Funktionalität der Sprache bei der Entwicklung relativ großer Anwendungen möglicherweise nicht aus.

Nun, der letzte Teil unserer Anwendung – der greifbarste für den Benutzer – Frontend (Frontend) – ist das Gesicht Ihrer Anwendung; mit diesem Teil interagiert der Benutzer direkt.

Ohne auf Details einzugehen, steht das moderne Frontend auf drei Säulen, Frameworks (und nicht so sehr), zur Erstellung von Benutzeroberflächen. Dementsprechend sind die drei beliebtesten:

  • ReactJS ist kein Framework, sondern eine Bibliothek. Tatsächlich unterscheidet sich das Framework von seinem stolzen Titel nur dadurch, dass einige Funktionen „out of the box“ fehlen und diese manuell installiert werden müssen. Daher gibt es mehrere Variationen der „Aufbereitung“ dieser Bibliothek, die einzigartige Frameworks bilden. Für einen Anfänger kann es aufgrund einiger Grundprinzipien und der recht aggressiven Einrichtung der Build-Umgebung etwas schwierig sein. Für einen schnellen Einstieg können Sie jedoch das Paket „create-react-app“ verwenden.
  • VueJS ist ein Framework zum Erstellen von Benutzeroberflächen. Von dieser Dreieinigkeit trägt es zu Recht den Titel des benutzerfreundlichsten Frameworks; für die Entwicklung in Vue ist die Eintrittsbarriere niedriger als bei den anderen genannten Brüdern. Außerdem ist er der Jüngste unter ihnen.
  • Angular gilt als das komplexeste dieser Frameworks, das einzige, das dies erfordert Typoskript (Add-on für Javascript-Sprache). Wird häufig zum Erstellen großer Unternehmensanwendungen verwendet.

Wenn wir das oben Geschriebene zusammenfassen, können wir zu dem Schluss kommen, dass sich die Bereitstellung einer Anwendung jetzt grundlegend von der Art und Weise unterscheidet, wie dieser Prozess zuvor ablief. Allerdings hindert Sie niemand daran, die „Bereitstellung“ auf die altmodische Art und Weise durchzuführen. Aber ist die geringe Zeitersparnis zu Beginn die enorme Anzahl an Fehlern wert, die ein Entwickler, der diesen Weg wählt, begehen muss? Ich glaube, die Antwort ist nein. Indem Sie etwas mehr Zeit damit verbringen, sich mit diesen Tools vertraut zu machen (und mehr brauchen Sie auch nicht, denn Sie müssen verstehen, ob Sie sie in Ihrem aktuellen Projekt benötigen oder nicht), können Sie diese ausspielen und beispielsweise deutlich reduzieren , Fälle von Geisterfehlern je nach Umgebung, die nur auf dem Produktionsserver auftreten, nächtliche Analyse, was zum Serverabsturz geführt hat und warum er nicht startet, und vieles mehr.

Source: habr.com

Kommentar hinzufügen