Checklist per la creazione e la pubblicazione di applicazioni web

Oggi, per creare la propria applicazione web, non basta saperla sviluppare. Un aspetto fondamentale è configurare gli strumenti per il deployment dell'applicazione, il monitoraggio, oltre alla gestione e all'amministrazione dell'ambiente in cui essa opera. L'era del deployment manuale sta svanendo; anche per i piccoli progetti, gli strumenti di automazione possono offrire vantaggi significativi. Con il deployment manuale, spesso ci si può dimenticare di trasferire qualche elemento, di considerare un dettaglio specifico o di eseguire un test dimenticato; questo elenco potrebbe continuare a lungo.

Questo articolo può essere utile per chi si avvicina alle basi della creazione di applicazioni web e desidera comprendere meglio i concetti e le convenzioni fondamentali.

Dunque, la costruzione delle applicazioni può essere suddivisa in due parti: quella che riguarda il codice dell'applicazione e quella che riguarda l'ambiente in cui questo codice viene eseguito. Il codice dell'applicazione è a sua volta diviso in codice server (quello che viene eseguito sul server, spesso: logica di business, autorizzazione, archiviazione dei dati, ecc.) e codice client (quello che viene eseguito sulla macchina dell'utente: spesso interfaccia e logica ad essa correlata).

Iniziamo, allora, con l'ambiente.

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

Windows Server – il noto Windows, ma nella sua versione server. Alcune funzionalità disponibili nella versione client (normale) di Windows non sono presenti qui, come alcuni servizi di raccolta statistiche e software di questo tipo, ma è disponibile un insieme di utility per la gestione della rete e software di base per il deployment. server (web, ftp, …). In sostanza, Windows Server appare come una normale versione di Windows, si comporta come una normale versione di Windows, ma costa il doppio rispetto al suo corrispondente standard. Tuttavia, considerando che il deployment delle applicazioni sarà probabilmente effettuato su un server dedicato/virtuale, il costo finale per voi potrebbe aumentare, ma non in modo critico. Poiché la piattaforma Windows detiene una posizione predominante nel mercato dei sistemi operativi per utenti, la sua edizione server sarà la più familiare per la maggior parte degli utenti.

Unix-simile. Il lavoro tradizionale in questi sistemi non prevede un'interfaccia grafica familiare, offrendo all'utente come elemento di controllo solo la console. Per un utente inesperto, lavorare in un formato del genere può risultare difficile, considerando anche l'uscita da un editor di testo piuttosto popolare in questo contesto. Vim, la questione relativa a ciò ha già accumulato oltre 1,8 milioni di visualizzazioni in sei anni. I principali distribuzioni (edizioni) di questa famiglia includono: Debian — una distribuzione popolare, le versioni dei pacchetti in essa sono principalmente orientate al LTS (Long Term Support – support for a long time), which translates into a high level of reliability and stability for the system and its packages; Ubuntu – includes distributions of all packages in their latest versions, which may affect stability but allows you to utilize features provided by new versions; Red Hat Enterprise Linux – OS, positioned for commercial use, is paid, but includes support from software vendors, proprietary packages, and driver packages; CentOS – open source variation of Red Hat Enterprise Linux, distinguished by the absence of proprietary packages and support.

For those who are just starting to learn this field, I recommend systems Windows Server, oppure Ubuntu. When considering Windows, first and foremost is the familiarity of the system, Ubuntu – more tolerance for updates, and consequently, fewer problems when launching projects on technologies requiring new versions.

So, having determined the OS, let's move on to the set of tools that allow you to deploy (install), update, and monitor the state of the application or its parts on the server.

La prossima decisione importante sarà quella di ospitare la tua applicazione e il server adatta. Al momento, ci sono 3 opzioni più comuni:

  • Ospitare il server internamente è l'opzione più economica, ma dovrai richiedere un IP statico dal provider affinché il tuo sito mantenga lo stesso indirizzo nel tempo.
  • Affittare un Server Dedicato (VDS) e gestirne autonomamente l'amministrazione e il ridimensionamento del carico.
  • Pagare (spesso offrono un periodo di prova gratuito) un abbonamento su una piattaforma di hosting cloud, dove è comune il modello di pagamento in base alle risorse utilizzate. Alcuni esempi noti includono: Amazon AWS (offrono un anno gratuito, ma con un limite mensile), Google Cloud (forniscono un credito di 300$ da utilizzare entro un anno per i servizi cloud). di hosting), Yandex.Cloud (offering 4000 RUB for 2 months), Microsoft Azure (providing free access to popular services for a year, plus 12,500 RUB for any services within one month). This way, you can test any of these providers without spending a dime while getting a good sense of the quality and level of service provided.

Depending on the chosen path, only the responsibility for a particular area of administration will change. If you host the server yourself, you must recognize that any outages related to electricity, internet connection, the server itself, or the software deployed on it lie entirely on your shoulders. However, this is more than sufficient for learning and testing purposes.

If you don’t have an extra machine that can serve as a server, you may want to consider the second or third option. The second case is similar to the first, with the exception that you transfer the responsibility for server availability and its capacity to the host provider. Server administration and the software still remain under your control.

E infine, c'è l'opzione di affitto delle risorse dai fornitori di cloud. Qui puoi configurare la gestione automatizzata di praticamente qualsiasi cosa, senza addentrarti troppo nei dettagli tecnici. Inoltre, invece di avere una sola macchina, puoi avere più istanze in esecuzione in parallelo, le quali possono, ad esempio, gestire diverse parti dell'applicazione, senza differire significativamente in costo rispetto alla proprietà di un server dedicato. Inoltre, sono disponibili strumenti di orchestrazione, containerizzazione, deployment automatico, integrazione continua e molto altro! Alcune di queste funzionalità le esploreremo più avanti.

In generale, l'infrastruttura del server è composta da diversi elementi: abbiamo un cosiddetto «orchestratore» (l'«orchestrazione» è il processo di gestione di più istanze di server), che gestisce le modifiche nell'ambiente di un'istanza di server, un contenitore di virtualizzazione (opzionale, ma spesso utilizzato), che consente di suddividere l'applicazione in strati logici isolati, e un software per l'Integrazione Continua – che consente di aggiornare il codice distribuito tramite «script».

Quindi, l'orchestrazione consente di visualizzare lo stato dei server, eseguire «rollout» o «rollback» degli aggiornamenti dell'ambiente del server, e così via. Inizialmente, questo aspetto difficilmente vi interesserà, poiché per orchestrare qualcosa sono necessarie più istanze di server (anche se può bastarne una, ma a cosa serve?), e per avere più server è necessaria una domanda per essi. Tra gli strumenti di questo campo, il più noto è Kubernetes, sviluppato. Google.

Il passo successivo è la virtualizzazione a livello di sistema operativo. Attualmente, il concetto di «containerizzazione» ha guadagnato ampia diffusione, un termine che deriva dallo strumento Docker, fornendo funzionalità di container isolati l'uno dall'altro, ma che vengono eseguiti nel contesto di un unico sistema operativo. Cosa significa questo: in ognuno di questi container è possibile eseguire un'applicazione, o anche un insieme di applicazioni, che crederanno di essere le uniche nel sistema operativo, senza sospettare nemmeno dell'esistenza di altre sulla stessa macchina. Questa funzione è molto utile sia per eseguire versioni diverse di applicazioni simili, sia per applicazioni in conflitto, oltre che per suddividere parti di un'applicazione in strati. Questo duplicato di strati può poi essere registrato in un'immagine, che può essere utilizzata, ad esempio, per il deployment dell'applicazione. In altre parole, installando questa immagine e distribuendo i container che contiene, si ottiene un ambiente pronto per eseguire la propria applicazione! All'inizio, è possibile utilizzare questo strumento sia a fini didattici che per ottenere vantaggi concreti, suddividendo la logica dell'applicazione in diversi strati. Tuttavia, è importante sottolineare che la containerizzazione non è necessaria per tutti e non sempre. La containerizzazione è giustificata nei casi in cui l'applicazione è 'frammentata', suddivisa in piccole parti, ognuna responsabile del proprio compito, nota come 'architettura a microservizi'.

In aggiunta, oltre a garantire l'ambiente, è fondamentale fornire un'implementazione dell'applicazione che comprenda tutte le possibili trasformazioni del codice, l'installazione delle librerie e dei pacchetti collegati all'applicazione, l'esecuzione dei test, le notifiche riguardo a queste operazioni e così via. Qui, dobbiamo prestare attenzione a un concetto chiamato «Integrazione Continua» (CI – Integrazione Continua). Gli strumenti principali in questo ambito sono attualmente Jenkins (un software per CI scritto in Java, che può sembrare un po' complesso all'inizio), Travis CI (scritto in Ruby, soggettivamente un po' più semplice di Jenkins, tuttavia richiede comunque alcune conoscenze in merito alla configurazione dell'implementazione), Gitlab CI (scritto in Ruby e Go).

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

Iniziamo dalle basi: Backend (backend) - parte server. La scelta del linguaggio, del set di funzioni principali e della struttura predefinita (framework) è principalmente determinata dalle preferenze personali. Tuttavia, è opportuno menzionarla per considerazione (l'opinione dell'autore sui linguaggi è piuttosto soggettiva, sebbene pretenda di fornire una descrizione imparziale):

  • Python è un linguaggio piuttosto amichevole per gli utenti inesperti, perdona alcuni errori, ma può anche essere abbastanza severo con il programmatore, affinché non commetta errori. È un linguaggio di programmazione maturo e riflessivo, comparso nel 1991.
  • Go è un linguaggio sviluppato da Google, anch'esso amichevole e facile da usare, semplice da compilare e consente di ottenere un file eseguibile su qualsiasi piattaforma. Può essere semplice e gradevole, oppure complesso e serio. È fresco e giovane, comparso relativamente di recente nel 2009.
  • Rust è un po' più vecchio del precedente, uscito nel 2006, ma è ancora abbastanza giovane rispetto ai suoi colleghi. È orientato a sviluppatori più esperti, anche se cerca di affrontare molti compiti a basso livello per il programmatore.
  • Java – un veterano dello sviluppo commerciale, emerso nel 1995, ed è uno dei linguaggi più usati per lo sviluppo di applicazioni aziendali al giorno d'oggi. Con i suoi concetti di base e la complessità della configurazione dell'ambiente di esecuzione, può risultare piuttosto impegnativo per i principianti.
  • ASP.net – una piattaforma per lo sviluppo di applicazioni, rilasciata da Microsoft. Per implementare le funzionalità si utilizza principalmente il linguaggio C# (pronunciato C si Sharp), apparso nel 2000. È comparabile in complessità a un livello intermedio tra Java e Rust.
  • PHP – originariamente utilizzato per la preelaborazione di HTML, mantiene attualmente una posizione di leadership nel mercato dei linguaggi, ma si nota una tendenza al calo del suo utilizzo. Caratterizzato da una soglia d'ingresso bassa e dalla facilità di scrittura del codice, potrebbe però risultare insufficiente nello sviluppo di applicazioni di grandi dimensioni.

E l'ultima parte della nostra applicazione – la più tangibile per l'utente – Frontend (front-end) – è il volto della tua applicazione, ed è con questa parte che l'utente interagisce direttamente.

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

  • ReactJS – non è un framework, ma una libreria. In effetti, si distingue con orgoglio dal titolo di framework solo per l'assenza di alcune funzionalità "pronte all'uso" e per la necessità di installarle manualmente. Pertanto, ci sono diverse varianti della "preparazione" di questa libreria, che formano particolari framework. Potrebbe risultare un po' complicato per i principianti, a causa di alcuni principi di base e di un ambiente di build piuttosto aggressivo. Tuttavia, per un avvio rapido, è possibile utilizzare il pacchetto "create-react-app".
  • VueJS – è un framework per la costruzione di interfacce utente. Tra questo trio, si guadagna il titolo di framework più user-friendly, con una soglia di ingresso per lo sviluppo in Vue più bassa rispetto agli altri protagonisti. Inoltre, tra di loro è il più giovane.
  • Angular – è considerato il più complesso dei framework precedenti, l'unico che richiede la presenza di TypeScript (estensione del linguaggio Javascript). Spesso utilizzato per costruire grandi applicazioni aziendali.

In sintesi, si può affermare che ora il processo di distribuzione delle applicazioni è radicalmente diverso da come si svolgeva in passato. Tuttavia, nessuno vieta di effettuare il 'deploy' nel modo tradizionale. Ma ne vale la pena, considerando il tempo risparmiato all'inizio, rispetto al numero enorme di problemi che un sviluppatore potrebbe affrontare scegliendo questa strada? Credo che la risposta sia 'no'. Investendo un po' più di tempo per familiarizzare con questi strumenti (e non serve di più, poiché è necessario capire se siano utili per il progetto attuale o meno), si possono recuperare risorse, riducendo notevolmente, ad esempio, i casi di errori fantasma che dipendono dall'ambiente e si manifestano solo sul server di produzione, fastidiosi debug notturni su cosa ha causato il crash del server e perché non si avvia, e molto altro.

Fonte: habr.com

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster