Il giusto server per lo sviluppatore web. Test e deploy nella cloud

Il mondo IT sta velocemente migrando verso un nuovo modello di sviluppo e deployment delle applicazioni, il cloud computing e la virtualizzazione forniscono sempre più flessibilità anche negli ambienti di sviluppo. Vantaggi e consigli per adottare questo modello.

Gli sviluppatori sono sicuramente tra le persone che hanno tratto un maggiore vantaggio dall’introduzione dei servizi di cloud computing, in particolare dalla flessibilità legata questo modello di utilizzo delle risorse. Chi si occupa di sviluppo web, in particolare, si trova spesso a dover utilizzare diversi ambienti di test e sviluppo, e trae grande vantaggio dal fatto di poter utilizzare un modello flessibile dove può creare un server anche per pochi minuti o aumentare le risorse in base alle esigenze, anche per eseguire stress test sulla propria applicazione. In questo articolo vediamo quali sono le caratteristiche che dovrebbe avere un server dedicato allo sviluppo web, sia dal punto di vista delle applicazioni installate sia dal punto di vista delle risorse hardware e della flessibilità del prodotto.

Coding

Non è un caso se ambienti come Amazon AWS hanno avuto notevole successo proprio fra gli sviluppatori e le startup, perchè è qui che hanno trovato maggiori stimatori del modello cloud flessibile, con l’avvio di server virtuali con configurazione ad hoc, aumento delle risorse e alcuna necessità di investire soldi per l’acquisto o il noleggio di hardware. Il mondo dello sviluppo web cambia velocemente e così le competenze richieste alle persone che vi lavorano: oggi sta scomparendo la figura del singolo sistemista in favore di quella del DevOp, un professionista che ha sia competenze di sviluppo software sia di gestione del sistema, e si trova a dover applicare entrambe proprio in ambienti come quelli di cloud computing, dove spesso tramite API è possibile controllare anche la piattaforma hardware e la scalabilità del sistema. 

 

SelfServer, Server Virtuali online on demand per CMSQuesto articolo è offerto da SelfServer, il brand di Enter Srl che offre server virtuali già pronti all’uso per diversi utilizzi, dallo sviluppo web ad ambienti virtuali pronti per l’uso dei più comuni CMS. Il server virtuale dedicato allo sviluppo Web con PHP, MySQL, MongoDB e PostgreSQL mette a disposizione un ambiente dedicato virtuale con 2 GB di RAM e 2 Core CPU a soli 21 Euro al mese, in promozione.

 

Da locale a online, come cambia l’ambiente di sviluppo

Tipicamente chi si occupa di sviluppo lavora quasi sempre in locale, con una installazione ad hoc di tutto l’ambiente di test, quindi: webserver, database (MySQL o altro), PHP o Python e pochi altri accorgimenti. La possibilità di avere più macchine virtuali ha anche facilitato la possibilità di mantenere sul proprio notebook più ambienti di sviluppo e utilizzarli solamente all’occorrenza; questo metodo di lavoro tuttavia sta subendo pian piano dei mutamenti, dovuti principalmente alla disponibilità di servizi online che rendono sempre più facile gestire direttamente il proprio ambiente di sviluppo direttamente online, per comodità  e per esigenza stessa di testing sulle applicazioni web scritte. 

Basti pensare in primis a come sta cambiando l’approccio alla gestione del versioning dei file e al lavoro in team: il vecchio SVN sta pian piano scomparendo in favore di una maggiore popolarità di Git, supportato da piattaforme SaaS come Github e BitBucket. Queste piattaforme permettono di ospitare il proprio codice direttamente online, rendendo molto semplice il lavoro quotidiano in team, dall’aggiornamento con nuovo codice allo sviluppo, spesso diviso in più branch, a seconda di quanto sia estesa l’applicazione che si sta sviluppando: noi stessi in WeTalk Group utilizziamo sia Github sia Bitbucket per ospitare tutto il codice che produciamo su diversi progetti, suddiviso per team e persone a capo di quel progetto; in questo modo possiamo accedere direttamente ai sorgenti del codice, controllarne lo stato di avanzamento e soprattutto rendere ogni membro del team di sviluppo capace di lavorare su una singola parte del progetto, anche da remoto. 

Il deployment del codice da sempre è diviso tra una parte di test e sviluppo, con un server ad hoc, remoto o locale, e un server in produzione; questo consente di testare tutto il codice che produciamo in locale, con un ambiente identico a quello di produzione, e poi passare il codice (partendo sempre da repository su Git) direttamente sul server in produzione, con la certezza che questo funzioni senza problemi. Tuttavia, mentre una volta non era di fatto conveniente mantenere un server di test esterno, perchè costoso e difficile da gestire, oggi il cloud computing e i server virtuali, più in generale, hanno reso davvero semplice la possibilità di creare ambienti di test e produzione in pochi passi e ad un costo ridotto, con la certezza di poter avere ambienti totalmente customizzabili e soprattutto con risorse adeguate, sia in termini di CPU e memoria RAM, sia in termini di banda, un aspetto da non sottovalutare se pensiamo che sempre più spesso chi sviluppa applicazioni web è molto interessato anche alle performance della piattaforma finale su cui dovrà ospitare il codice e decide di eseguire stress test e ottimizzazioni della configurazione dei demoni (da MongoDB e MySQL a Nginx) che rendono necessario anche un ambiente dedicato performante. 

Infine bisogna osservare come gli ambienti di sviluppo siano diventati pian piano sempre più complessi: dal semplice stack LAMP, composto da Linux, Apache, PHP e MYSQL, siamo passati ora ad avere database NoSQL che spesso includono MongoDB, Redis o altri DBMS e infine a framework che richiedono installazioni ad hoc, difficili da replicare velocemente in locale e soprattutto time consuming in queste operazioni. 

Chi lavora nell’ambito dello sviluppo web sa benissimo che si cerca di mantenere quasi sempre il focus sullo sviluppo e poco invece sull’ottimizzazione e preparazione del sistema, in primis perchè questo è sempre stato compito dei sistemisti: oggi le cose sono fortemente cambiate, con un modello di DevOp e non di semplice software engineer o sviluppatore, dove il rapporto fra l’ambiente su cui funziona l’applicazione in termini di demoni e configurazione e il codice scritto, è strettissimo. 

 

SelfServer, Server Virtuali online on demand per CMSQuesto articolo è offerto da SelfServer, il brand di Enter Srl che offre server virtuali già pronti all’uso per diversi utilizzi, dallo sviluppo web ad ambienti virtuali pronti per l’uso dei più comuni CMS. Il server virtuale dedicato allo sviluppo Web con PHP, MySQL, MongoDB e PostgreSQL mette a disposizione un ambiente dedicato virtuale con 2 GB di RAM e 2 Core CPU a soli 21 Euro al mese, in promozione. Scopri tutte le caratteristiche di SelfServer, piattaforma cloud basata su OpenStack per la massima scalabilità. 

Flessibilità, l’importanza di avere ambienti pre-configurati per lo sviluppo

La maggior parte degli sviluppatori ha poche competenze nel lato sistemistico, e così spesso il setup di un ambiente di test e produzione richiede ore di lavoro, rubate alla programmazione. Bisogna tenere presente che soprattutto per il test di applicazioni web, gli ambienti da creare per il test possono essere diversi, e per velocità spesso si preferisce replicare un intero ambiente anche per la modifica di pochi parametri, in modo da poter poi confrontare direttamente come si differenziano le performance o il comportamento del software. Questa è una delle ragioni che ha portato il cloud computing ad avere grande successo e più ancora gli ambienti con template e immagini di sistema già pronti.

Oggi esistono servizi virtuali e di cloud computing IaaS che offrono immagini già pronte contenenti ambienti di sviluppo web già pronti all’uso: il classico esempio è l’ambiente LAMP, si acquista il server virtuale e questo contiene già tutto per far funzionare la propria applicazione, ma come dicevamo non sempre è sufficiente. Da MongoDB a configurazioni ad hoc di PHP (come PHP-FPM) passando per ambienti in cui vengono richiesti componenti come XCache o APC, sono tante le varianti che oggi si trovano e che necessitano di essere configurate ad hoc per il funzionamento dell’applicazione: poter avere un ambiente già pronto, con un piccolo canone mensile o orario, spesso fa risparmiare ore di lavoro ai team di sviluppo e permette di replicare lo stesso ambiente più volte senza dover ogni volta rieseguire tutte le installazioni e configurazioni.

Non solo, spesso questi ambienti esterni, nella cloud, sono molto utili per dare accesso al cliente nella visione di quanto si sta facendo, un compito più complesso se pensiamo di doverlo fare in locale, oltre ai problemi di sicurezza legati all’apertura della propria rete locale verso Internet. Nel caso di WeTalk Group, per prendere un esempio concreto, da pochi mesi il nostro sistema è passato ad utilizzare esclusivamente MongoDB, con un database complessivo di quasi 10 GB di dati: non avendo in ufficio alcuna macchina dedicata esclusivamente a server di test, abbiamo preferito utilizzare direttamente una VM esterna per poter eseguire li tutti i nostri test di sviluppo, facendo si che MongoDB venisse configurato una sola volta e potesse garantirci le performance che ci servivano. Perchè? Sui nostri server in ufficio avremmo dovuto allocare quasi 12 GB di memoria RAM per poter sfruttare al meglio la nostra configurazione con l’utilizzo del DB in RAM, in produzione, online, all’interno di un server virtuale, abbiamo potuto acquistare questa quantità di risorse ad un prezzo molto conveniente, con la possibilità di replicare il nostro “template” in pochi minuti e avviare un server simile anche per poco tempo. 

Duplice vantaggio, al di la delle risorse dedicate e della connettività a 100Mbit/s che ci permette di eseguire test più reali su come risponda la nostra applicazione sotto carico, abbiamo la possibilità di avere tutti i componenti già pronti nel caso di una nuova installazione. Questo rivoluziona il modo di fare Provisioning di nuovi ambienti, per alcuni provider infatti non dobbiamo procedere nemmeno alla prima configurazione di sistema, come detto esistono template già pronti con tutto quello che serve, dobbiamo solamente portare li nostro codice e attendere di utilizzare l’istanza virtuale. 

 

SelfServer, Server Virtuali online on demand per CMSQuesto articolo è offerto da SelfServer, il brand di Enter Srl che offre server virtuali già pronti all’uso per diversi utilizzi, dallo sviluppo web ad ambienti virtuali pronti per l’uso dei più comuni CMS. Il server virtuale dedicato allo sviluppo Web con PHP, MySQL, MongoDB e PostgreSQL mette a disposizione un ambiente dedicato virtuale con 2 GB di RAM e 2 Core CPU a soli 21 Euro al mese, in promozione. Scopri tutte le caratteristiche di SelfServer, piattaforma cloud basata su OpenStack per la massima scalabilità.

Come scegliere il giusto Server Virtuale per lo sviluppo

In primis bisogna chiarire, nel caso non fosse ancora chiaro, che parliamo di server virtuali e servizi di cloud computing, ovvero ambienti che possono essere creati e distrutti “al volo”. Nella scelta di un ambiente di sviluppo ad hoc per le proprie applicazioni online conta sicuramente la flessibilità del servizio: controlliamo che sia possibile avere il totale controllo della macchina, con accesso root via SSH, e con una console che permetta riavvio, accensione e spegnimento. Se il nostro server si blocca o necessita un riavvio è fondamentale essere indipendenti; un aspetto fondamentale è la possibilità di utilizzare un template già pronto con il software che ci interessa, ovvero non deve essere necessario installare tutti i componenti a mano, questi devono essere presenti fin dall’avvio del server. Se in passato esistevano per lo più ambienti LAMP, oggi i provider più evoluti offrono davvero tante tipologie di immagini, diamo la preferenza a chi ha cura di spiegare anche come è composto l’ambiente nei dettagli, dalla versione e tipologia di installazione di PHP all’aventuale versione di un dbms come MongoDB, questo ci aiuterà a mantenere quell’ambiente aggiornato e a intervenire più rapidamente per modificare la configurazione. 

Utile anche ricercare un provider che fornisca la possibilità di duplicare in tempo reale il server virtuale che stiamo utilizzando, in modo tale da poter estendere l’ambiente di sviluppo. Lo stesso si dica anche per la scalabilità: poter aumentare le risorse di CPU e RAM sullo stesso server di sviluppo e test consente di essere davvero più flessibili. Consideriamo quindi anche su quale tipologia di hypervisor/piattaforma cloud vengono installare le macchine virtuali, questo ci fa capire quali garanzie e risorse può assegnarci l’hosting provider e quanto anche lui è libero di favorire scalabilità e flessibilità del sistema. 

Non dimentichiamo infine di scegliere una soluzione dove l’azienda che ci fornisce il servizio ha reali competenze anche nello sviluppo, questo ci permetterà di avere un livello di assistenza superiore e quasi sempre una migliore comprensione delle problematiche di uno sviluppatore. 

SelfServer, Server Virtuali online on demand per CMSQuesto articolo è offerto da SelfServer, il brand di Enter Srl che offre server virtuali già pronti all’uso per diversi utilizzi, dallo sviluppo web ad ambienti virtuali pronti per l’uso dei più comuni CMS. Il server virtuale dedicato allo sviluppo Web con PHP, MySQL, MongoDB e PostgreSQL mette a disposizione un ambiente dedicato virtuale con 2 GB di RAM e 2 Core CPU a soli 21 Euro al mese, in promozione. Scopri tutte le caratteristiche di SelfServer, piattaforma cloud basata su OpenStack per la massima scalabilità.