Lista di controllo per la creazione e la pubblicazione di applicazioni web

Per creare la propria applicazione web nel nostro tempo non è sufficiente saperla sviluppare. Un aspetto importante è la creazione di strumenti per la distribuzione, il monitoraggio e la gestione e l'amministrazione dell'applicazione in cui opera. Mentre l’era dell’implementazione manuale svanisce nell’oblio, anche per i piccoli progetti, gli strumenti di automazione possono portare vantaggi tangibili. Quando si distribuisce "a mano", spesso possiamo dimenticare di spostare qualcosa, tenere conto di questa o quella sfumatura, eseguire un test dimenticato, questo elenco può essere continuato per un periodo piuttosto lungo.

Questo articolo può aiutare coloro che stanno appena imparando le nozioni di base sulla creazione di applicazioni Web e desiderano comprendere un po' i termini e le convenzioni di base.

Pertanto, la creazione di applicazioni può ancora essere divisa in 2 parti: tutto ciò che riguarda il codice dell'applicazione e tutto ciò che riguarda l'ambiente in cui questo codice viene eseguito. Il codice dell'applicazione, a sua volta, è anche suddiviso in codice server (quello che gira sul server, spesso: logica di business, autorizzazione, archiviazione dati, ecc.) e codice client (quello che gira sulla macchina dell'utente: spesso l'interfaccia e la relativa logica).

Cominciamo con mercoledì.

La base per il funzionamento di qualsiasi codice, sistema o software è il sistema operativo, quindi di seguito esamineremo i sistemi più popolari sul mercato dell'hosting e forniremo loro una breve descrizione:

di Windows Server - lo stesso Windows, ma in una variante server. Alcune funzionalità disponibili nella versione client (normale) di Windows non sono presenti qui, ad esempio alcuni servizi per la raccolta di statistiche e software simili, ma è disponibile una serie di utilità per l'amministrazione della rete, software di base per la distribuzione di server (web, ftp, ...). In generale, Windows Server assomiglia a Windows normale, ciarlatani come Windows normale, tuttavia costa 2 volte di più rispetto alla sua controparte normale. Tuttavia, dato che molto probabilmente distribuirai l'applicazione su un server dedicato/virtuale, il costo finale per te, anche se potrebbe aumentare, non è critico. Poiché la piattaforma Windows occupa un posto di rilievo nel mercato dei sistemi operativi consumer, la sua edizione server sarà la più familiare alla maggior parte degli utenti.

Unix-sistema simile. Il lavoro tradizionale in questi sistemi non richiede la presenza di un'interfaccia grafica familiare, offrendo all'utente solo una console come elemento di controllo. Per un utente inesperto, lavorare in questo formato può essere difficile, quanto costa uscire da un editor di testo piuttosto popolare nel campo dei dati? Vim, una domanda a questo riguardo ha già ricevuto più di 6 milioni di visualizzazioni in 1.8 anni. Le principali distribuzioni (edizioni) di questa famiglia sono: Debian - una distribuzione popolare, le versioni dei pacchetti in essa contenute sono focalizzate principalmente su LTS (Supporto a lungo termine – supporto per lungo tempo), che si esprime in affidabilità e stabilità abbastanza elevate del sistema e dei pacchetti; Ubuntu – contiene le distribuzioni di tutti i pacchetti nelle loro ultime versioni, che possono influire sulla stabilità, ma consente di utilizzare le funzionalità fornite con le nuove versioni; Red Hat Enterprise Linux – Sistema operativo, posizionato per uso commerciale, è a pagamento, tuttavia include il supporto di fornitori di software, alcuni pacchetti proprietari e pacchetti di driver; CentOS - fonte aperta una variante di Red Hat Enterprise Linux, caratterizzata dall'assenza di pacchetti e supporto proprietari.

Per coloro che stanno appena iniziando a padroneggiare quest'area, la mia raccomandazione sarebbe i sistemi di Windows ServerO Ubuntu. Se consideriamo Windows, questa è principalmente la familiarità del sistema, Ubuntu – maggiore tolleranza agli aggiornamenti e, di conseguenza, ad esempio, meno problemi quando si lanciano progetti su tecnologie che richiedono nuove versioni.

Quindi, dopo aver deciso il sistema operativo, passiamo a una serie di strumenti che consentono di distribuire (installare), aggiornare e monitorare lo stato dell'applicazione o delle sue parti sul server.

La prossima decisione importante riguarderà il posizionamento della tua applicazione e il relativo server. Al momento, i più comuni sono 3 modi:

  • Ospitare (mantenere) un server da solo è l'opzione più economica, ma dovrai ordinare un IP statico dal tuo provider in modo che la tua risorsa non cambi il suo indirizzo nel tempo.
  • Noleggia un server dedicato (VDS) e amministralo in modo indipendente e ridimensiona i carichi
  • Pagare (spesso ti danno la possibilità di provare gratuitamente le funzionalità della piattaforma) per un abbonamento ad alcuni cloud hosting, dove il modello di pagamento per le risorse utilizzate è abbastanza comune. I rappresentanti più importanti di questa direzione: Amazon AWS (danno un anno gratuito di utilizzo dei servizi, ma con un limite mensile), Google Cloud (danno $ 300 all'account, che possono essere spesi durante l'anno in servizi di cloud hosting) , Yandex.Cloud (danno 4000 rubli. per 2 mesi), Microsoft Azure (dà accesso gratuito ai servizi più diffusi per un anno, + 12 rubli per qualsiasi servizio per un mese). Pertanto, puoi provare uno qualsiasi di questi fornitori senza spendere un centesimo, ma ottenendo un'opinione approssimativa sulla qualità e sul livello del servizio fornito.

A seconda del percorso scelto, l’unica cosa che cambierà in futuro sarà chi sarà in gran parte responsabile di questa o quella area amministrativa. Se ospiti te stesso, devi capire che qualsiasi interruzione dell'elettricità, di Internet, del server stesso, del software distribuito su di esso: tutto questo ricade interamente sulle tue spalle. Tuttavia, per la formazione e i test, questo è più che sufficiente.

Se non disponi di una macchina aggiuntiva che possa svolgere il ruolo di server, ti consigliamo di utilizzare la seconda o la terza modalità. Il secondo caso è identico al primo, con l'eccezione che si trasferisce la responsabilità della disponibilità del server e della sua potenza sulle spalle dell'hoster. L'amministrazione del server e del software è ancora sotto il tuo controllo.

E infine la possibilità di affittare la capacità dei fornitori di servizi cloud. Qui puoi impostare il controllo automatizzato di quasi tutto senza entrare troppo nei dettagli tecnici. Inoltre, invece di una macchina, è possibile avere diverse istanze in esecuzione parallela, che possono, ad esempio, essere responsabili di diverse parti dell'applicazione, pur non differendo molto in termini di costi rispetto al possesso di un server dedicato. Inoltre, sono disponibili strumenti per l'orchestrazione, la containerizzazione, la distribuzione automatica, l'integrazione continua e molto altro! Di seguito esamineremo alcune di queste cose.

In generale, l'infrastruttura del server si presenta così: abbiamo un cosiddetto "orchestratore" ("orchestrazione" è il processo di gestione di diverse istanze del server), che gestisce i cambiamenti ambientali su un'istanza del server, un contenitore di virtualizzazione (facoltativo, ma abbastanza spesso utilizzato), che consente di dividere l'applicazione in livelli logici isolati e software di integrazione continua, che consente aggiornamenti al codice ospitato tramite "script".

Pertanto, l'orchestrazione consente di visualizzare lo stato dei server, implementare o ripristinare gli aggiornamenti nell'ambiente server e così via. All'inizio è improbabile che questo aspetto ti tocchi, poiché per orchestrare qualcosa hai bisogno di più server (puoi averne uno, ma perché è necessario?), e per avere più server ne hai bisogno. Tra gli strumenti in questa direzione, il più popolare è Kubernetes, sviluppato da Google.

Il passo successivo è la virtualizzazione a livello del sistema operativo. Al giorno d’oggi si è diffuso il concetto di “dockerizzazione”, che deriva dal tool docker, che fornisce la funzionalità di contenitori isolati gli uni dagli altri, ma lanciati nel contesto di un sistema operativo. Cosa significa: in ognuno di questi contenitori è possibile eseguire un'applicazione, o anche un insieme di applicazioni, che crederanno di essere le uniche nell'intero sistema operativo, senza nemmeno sospettare l'esistenza di qualcun altro su quella macchina. Questa funzione è molto utile per avviare applicazioni identiche di versioni diverse, o semplicemente applicazioni in conflitto, nonché per dividere parti di un'applicazione in livelli. Questo cast di livelli può essere successivamente scritto in un'immagine, che può essere utilizzata, ad esempio, per distribuire un'applicazione. Cioè, installando questa immagine e distribuendo i contenitori in essa contenuti, otterrai un ambiente già pronto per eseguire la tua applicazione! Nei primi passaggi è possibile utilizzare questo strumento sia a scopo informativo che per ottenere vantaggi concreti suddividendo la logica dell'applicazione in diversi livelli. Ma vale la pena dire qui che non tutti hanno bisogno della dockerizzazione, e non sempre. La dockerizzazione è giustificata nei casi in cui l'applicazione è “frammentata”, divisa in piccole parti, ciascuna responsabile del proprio compito, la cosiddetta “architettura a microservizi”.

Inoltre, oltre a fornire l'ambiente, dobbiamo garantire una distribuzione competente dell'applicazione, che include tutti i tipi di trasformazioni del codice, installazione di librerie e pacchetti relativi all'applicazione, esecuzione di test, notifiche su queste operazioni e così via. Qui dobbiamo prestare attenzione a un concetto come "Integrazione continua" (CI – Integrazione Continua). Gli strumenti principali in quest'area al momento sono Jenkins (il software CI scritto in Java può sembrare un po' complicato all'inizio), Travis CI (scritto in Ruby, soggettivo, un po' più semplice Jenkins, tuttavia, sono ancora necessarie alcune conoscenze nel campo della configurazione della distribuzione), CI Gitlab (scritto su Ruby e vai).

Quindi, dopo aver parlato dell'ambiente in cui funzionerà la tua applicazione, è tempo di vedere finalmente quali strumenti ci offre il mondo moderno per creare proprio queste applicazioni.

Cominciamo dalle basi: BACKEND (backend) – parte del server. La scelta della lingua, dell'insieme delle funzioni di base e della struttura predefinita (quadro) qui è determinata principalmente dalle preferenze personali, ma vale comunque la pena menzionarla a titolo oneroso (l'opinione dell'autore sulle lingue è piuttosto soggettiva, sebbene con un'affermazione ad una descrizione imparziale):

  • Python è un linguaggio abbastanza amichevole per un utente inesperto, perdona alcuni errori, ma può anche essere piuttosto severo con lo sviluppatore in modo che non faccia nulla di male. Già un linguaggio abbastanza maturo e significativo, apparso nel 1991.
  • Go, il linguaggio di Google, è anche abbastanza amichevole e conveniente, è abbastanza facile compilare e ottenere un file eseguibile su qualsiasi piattaforma. Può essere semplice e piacevole, oppure può essere complesso e serio. Fresco e giovane, è apparso relativamente di recente, nel 2009.
  • Rust è un po' più vecchio del suo precedente collega, uscito nel 2006, ma è ancora piuttosto giovane rispetto ai suoi pari. Rivolto a sviluppatori più esperti, sebbene cerchi comunque di risolvere molti compiti di basso livello per il programmatore.
  • Java è un veterano dello sviluppo commerciale, introdotto nel 1995, ed è oggi uno dei linguaggi più comunemente utilizzati nello sviluppo di applicazioni aziendali. Con i suoi concetti di base e la configurazione pesante, il runtime può diventare piuttosto impegnativo per un principiante.
  • ASP.net è una piattaforma di sviluppo di applicazioni rilasciata da Microsoft. Per scrivere le funzionalità viene utilizzato principalmente il linguaggio C# (pronunciato C Sharp), apparso nel 2000. La sua complessità è paragonabile al livello tra Java e Rust.
  • PHP, originariamente utilizzato per la preelaborazione HTML, attualmente, nonostante detenga la leadership assoluta nel mercato linguistico, si osserva una tendenza al declino del suo utilizzo. Ha una soglia di ingresso bassa e facilità di scrittura del codice, ma allo stesso tempo, quando si sviluppano applicazioni sufficientemente grandi, la funzionalità del linguaggio potrebbe non essere sufficiente.

Ebbene, la parte finale della nostra applicazione, quella più tangibile per l'utente, Frontend (frontend) – è il volto della tua applicazione; è con questa parte che l'utente interagisce direttamente.

Senza entrare nei dettagli, il frontend moderno si regge su tre pilastri, framework (e non tanto), per la creazione di interfacce utente. Di conseguenza, i tre più popolari sono:

  • ReactJS non è un framework, ma una libreria. In realtà, il framework differisce dal suo orgoglioso titolo solo per l'assenza di alcune funzioni “out of the box” e la necessità di installarle manualmente. Pertanto, esistono diverse varianti della “preparazione” di questa libreria, che formano strutture uniche. Può essere un po' difficile per un principiante, a causa di alcuni principi di base e di una configurazione piuttosto aggressiva dell'ambiente di costruzione. Tuttavia, per un avvio rapido, puoi utilizzare il pacchetto “create-react-app”.
  • VueJS è un framework per la creazione di interfacce utente. Di questa trinità, prende giustamente il titolo di framework più user-friendly; per lo sviluppo in Vue, la barriera all'ingresso è inferiore a quella degli altri fratelli citati. Inoltre, è il più giovane tra loro.
  • Angular è considerato il più complesso di questi framework, l'unico che lo richiede Dattiloscritto (componente aggiuntivo per il linguaggio Javascript). Spesso utilizzato per creare applicazioni aziendali di grandi dimensioni.

Riassumendo quanto scritto sopra, possiamo concludere che ora il deploy di un'applicazione è radicalmente diverso da come avveniva prima questo processo. Tuttavia, nessuno ti impedisce di eseguire la “distribuzione” alla vecchia maniera. Ma il poco tempo risparmiato all’inizio vale l’enorme numero di errori che uno sviluppatore che sceglie questa strada dovrà incorrere? Credo che la risposta sia no. Dedicando un po' più di tempo a familiarizzare con questi strumenti (e non ti serve altro, perché devi capire se ne hai bisogno nel tuo progetto attuale o meno), puoi metterti alla prova, riducendo significativamente, ad esempio , casi di errori fantasma che dipendono dall'ambiente e che compaiono solo sul server di produzione, analisi notturna di cosa ha portato al crash del server e del motivo per cui non si avvia, e molto altro ancora.

Fonte: habr.com

Aggiungi un commento