Cloud Storage on-premise (e conforme al GDPR) con NextCloud Installazione e guida all'uso di NextCloud, innovativa piattaforma di Cloud Storage on-premise disponibile gratuitamente su sistemi Linux, VM e Docker Image

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

In questo articolo parleremo di NextCloud, un innovativo sistema di cloud storage on-premise installabile gratuitamente su server Linux (o Virtual Machine o Container Docker) e dotato di funzionalità molto simili a quelle di Dropbox e Google Drive, pur con tutte le limitazioni del caso in termini di ridondanza e disponibilità.

Rispetto ai competitor (primo tra tutti OwnCloud, di cui costituisce un fork, ovvero una evoluzione parallela del progetto), NextCloud dimostra una attenzione particolare verso la sicurezza, la privacy compliance e il GDPR, implementando una serie di tecnologie di data-encryption in-transit, at-rest e end-to-end al fine di assicurare un livello di sicurezza elevato: per questo motivo ha attirato immediatamente la nostra attenzione.

A chiunque avesse bisogno di un ripasso su questi argomenti consigliamo, prima di addentrarsi nella lettura di questo articolo, di dare un’occhiata alla nostra guida al Cloud Storage SaaS e on-premise pubblicata qualche giorno fa.

DISCLAIMER: Questo sito non è affiliato con NextCloud e non ha ricevuto contributi di qualsivoglia tipo per realizzare o pubblicare questo articolo: tutte le opinioni e le critiche espresse rappresentano unicamente il libero pensiero dell’autore.

Installazione

Nella prova che abbiamo fatto, abbiamo installato NextCloud su una normalissima macchina Linux CentOS 7 con web server NGINX e sistema di caching basato su FastCGI-cache. Si tratta di una modalità di configurazione particolarmente indicata per la maggior parte delle applicazioni web basate su PHP, da WordPress a MediaWiki a Mantis Bug Tracker. L’intera procedura di installazione è durata pochi minuti, grazie all’ottima documentazione disponibile sul sito ufficiale.

ATTENZIONE: Questo paragrafo è rivolto principalmente agli amministratori di sistema e ai sistemisti di rete: qualora non siate interessati alle questioni tecniche relative all’installazione vi consigliamo di saltarlo in favore dei successivi, dedicati alla descrizione delle varie funzionalità di NextCloud.
.

Nel nostro caso, avendo a disposizione una macchina Linux CentOS, abbiamo seguito in modo pressoché letterale le istruzioni per CentOS, oon l’unica differenza di aver installato e configurato NGINX in luogo di Apache, senza incontrare problemi di sorta.

Questi, in estrema sintesi, i principali passaggi effettuati:

  • Installare una macchina virtuale CentOS 7 (minimal install).
  • Installare una serie di prerequisiti necessari (unzip, curl, wget, mlocate, bzip2, etc.).
  • Aggiornare CentOS e tutti i pacchetti installati durante l’installazione:
  • Installare NGINX e impostarlo come servizio in esecuzione automatica all’avvio del sistema:
  • Installare PHP e una serie di librerie e symlink necessari:
  • Configurare PHP-FPM nella modalità FastCGI-cache seguendo le istruzioni descritte in questa guida.
  • Installare MariaDB e impostarlo come servizio in esecuzione automatica all’avvio del sistema:
  • Configurare MariaDB con le impostazioni di sicurezza necessarie per l’accesso in modalità sicura (ivi inclusa la password di root):
  • Configurare le impostazioni di MariaDB utilizzando la relativa guida sul sito di NextCloud.
  • Installare redis e impostarlo come servizio in esecuzione automatica all’avvio del sistema:
  • Scaricare e installare l’ultima versione dell’archivio di NextCloud dalla pagina di download del sito ufficiale (Server > Download > Archive File for server owners), in formato tar.bz2 oppure zip.
  • Scompattare l’archivio all’interno di una cartella, ad es. /var/www/nextcloud/.
  • Assegnare i permessi necessari per l’accesso dell’utente e del gruppo relativi a NGINX (nel caso di esempio, nginx e www):
  • Impostare il file di configurazione di NGINX /etc/nginx/nginx.conf con i parametri necessari per gestire le richieste HTTP in ingresso dirette verso la URL che si desidera associare all’applicazione web di NextCloud, ad es. nextcloud.mydomain.com:

Ovviamente, trattandosi di una procedura fortemente dipendente dalle caratteristiche hardware e software della macchina server, è probabile qualcuno dei passaggi sopra indicati vada rivisto, modificato o ampliato di conseguenza. Ci siamo inoltre occupati solo dei passaggi strettamente necessari per l’installazione di NextCloud e dei package strettamente necessari, omettendo alcuni importanti aspetti come la configurazione di sendmail (fondamentale per l’invio di e-mail da parte di NextCloud), il fine-tuning dei parametri di configurazione presenti nei file php.ini (PHP) e my.cnf (MariaDB), e tutta una serie di altre attività necessarie per il corretto funzionamento del servizio. Se riscontrate problemi in fase di installazione vi invitiamo a farcelo sapere nei commenti in fondo a questo articolo, così da poter aggiungere ulteriori dettagli a quanto scritto sopra e/o fornirvi i suggerimenti del caso.

Casi d’uso

Quando si ha l’esigenza di archiviare o condividere dei file e si dispone della possibilità di utilizzare una istanza privata di NextCloud è importante porsi una domanda preliminare: l’utilizzo di tale strumento è realmente giustificato oppure no?

Dare una risposta affermativa a questa domanda significa aver valutato con ragionevole certezza che non siano disponibili metodi di condivisione oggettivamente più sicuri, controllati e pratici per svolgere la medesima attività: ad esempio, se si ha bisogno di condividere alcuni documenti con un collega all’interno della stessa infrastruttura di rete aziendale, l’utilizzo di NextCloud potrebbe essere meno ottimale rispetto a una semplice cartella di rete… a meno che non vi siano degli evidenti e oggettivi vantaggi a sostegno della prima ipotesi, come ad esempio la necessità di rendere i suddetti documenti accessibili anche dall’esterno e/o da destinatari al di fuori della rete aziendale. Insomma, è sempre molto importante analizzare con attenzione il caso specifico così da poter prendere la decisione più adeguata alle proprie esigenze.

Nella maggior parte dei casi, per la nostra esperienza d’uso, l’utilizzo di NextCloud come strumento di memorizzazione e/o condivisione dei file si rivela ideale quando si ha almeno una delle seguenti esigenze:

  • Creazione di archivi accessibili da utenti sia interni che esterni alla rete aziendale.
  • Condivisione e/o ricezione di file con utenti sia interni che esterni alla rete aziendale.
  • Superamento di alcuni limiti imposti dal file-system, come ad esempio la necessità di effettuare catalogazioni ulteriori e superiori a quelle mono-direzionali previste con il semplice folder nesting previsto dai sistemi di memorizzazione tradizionali, come l’utilizzo di tag, categorie, metadati e altre tassonomie.

Come si può facilmente vedere due esigenze su tre prevedono la presenza di un interlocutore esterno, in assenza del quale la scelta strategica di implementare soluzioni di Cloud Storage on-premise come NextCloud potrebbe avere poco senso. A conti fatti, è probabile che, nella maggior parte dei casi, utilizzeremo NextCloud in quel sottoinsieme di casi particolari in cui abbiamo bisogno di condividere i nostri file con persone che non hanno la possibilità di accedere ai suddetti servizi: è il caso, ad esempio, di clienti e fornitori, ma anche di colleghi che non si trovano sul posto di lavoro, non hanno la possibilità di collegarsi da remoto e/o hanno necessità di dover accedere a un file da una postazione diversa o non opportunamente configurata.

Condivisione interna o tramite link?

Le principali funzionalità di NextCloud che andremo ad approfondire nei paragrafi successivi sono quelle relative all’archiviazione e alla condivisione di file, ovvero la possibilità di memorizzare nell’archivio uno o più file e impostare le modalità di accesso agli stessi attraverso le due principali modalità di condivisione supportate:

  • il sistema di permessi e ruoli, per condividere file e cartelle con altri utenti dotati di un account su quello stesso server NextCloud.
  • il sistema di condivisione tramite link, per condividere file e cartelle con tutti gli utenti “anonimi”, ovvero chiunque non possieda un account.

Prima di procedere con la guida, è opportuno comprendere è che le due modalità di condivisione di cui sopra sono, o per meglio dire dovrebbero essere, mutuamente esclusive: nessun utente che disponga di un account di accesso al nostro server NextCloud dovrebbe ricevere una condivisione tramite link, che è per sua natura un sistema meno sicuro e più limitato; al tempo stesso, non è pensabile creare un account di accesso personale a tutti gli utenti “anonimi” ai quali inviamo saltuariamente dei file. Anche in questo caso è dunque opportuno effettuare una attenta analisi al fine di determinare quale tipologia di accesso è opportuno prevedere per ciascuno dei nostri potenziali utenti.

Funzionamento

Il funzionamento di NextCloud è piuttosto semplice grazie alla pratica interfaccia web, che ricorda piuttosto da vicino quella di servizi come Dropbox e Google Drive. Una volta effettuato il login ci si troverà di fronte alla schermata principale, che contiene già una panoramica dei file e delle cartelle alle quali è possibile effettuare l’accesso.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Ovviamente, saranno visualizzate soltanto le cartelle e i file ai quali l’account a noi assegnato è stato autorizzato ad accedere in lettura e/o in scrittura.

Caricare file e cartelle

L’utilizzo principale di NextCloud consiste nel caricamento (upload) di uno o più file e/o cartelle da rendere disponibili, come detto più volte, tramite condivisione interna o link. Per ragioni di praticità, quando l’intento è quello di condividere file tramite link, è consigliabile creare una nuova cartella, all’interno della quale potremo caricare uno o più file da condividere: tale cartella sarà l’oggetto che andremo poi a condividere con il destinatario, che potrà accedere anche a tutti gli oggetti (file e/o sottocartelle) ivi contenuti, anche se caricati in un secondo tempo, nonché – se imposteremo la cartella in modo particolare, come avremo modo di vedere tra poco – inviare file.

Creazione di una nuova cartella

Per creare una nuova cartella occorre posizionarsi all’interno della cartella radice, ovvero la cartella che farà da “parent” alla nostra nuova creazione. Inutile dire che, come avviene in tutti gli archivi, è opportuno darsi fin da subito (a se stessi e ai propri collaboratori) delle regole, o per meglio dire delle naming convention, adeguate: ad esempio, noi abbiamo deciso di creare tutte le cartelle contenenti file condivisi tramite link all’interno di una cartella radice apposita, denominata /Shared/, così da renderli distinti dai file ad uso interno.

Le nostre cartelle condivise saranno dunque:

  • /Shared/Mail_2387/
  • /Shared/Date_201907171621/
  • /Shared/ID_12123488/
  • /Shared/Orizzonti/Ref_2218277127/

E così via. In alcuni casi, come possiamo vedere, abbiamo creato una o più sottocartelle all’interno della cartella radice dedicate a clienti, commesse o progetti particolarmente importanti: se i file che dobbiamo condividere sono collegati a quel raggruppamento andremo a creare la nuova cartella all’interno di quella sottocartella, così da evitare di creare tutto nella cartella principale.

Una volta all’interno nella cartella radice (o nella sottocartella) scelta, possiamo creare la nuova cartella facendo click sul pulsante “+” presente in alto e selezionare “Nuova cartella”.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

 

Anche per quanto riguarda il nome da assegnare alla nuova cartella è senz’altro opportuno stabilire alcuni criteri di naming, soprattutto se la piattaforma sarà utilizzata da più persone. Queste sono le regole che noi abbiamo deciso di adottare:

  • Se esiste un riferimento univoco riconducibile alla condivisione (ID pratica, ID cliente, etc.), utilizzare “<NomeApplicativo>_<ID univoco>”, ad esempio ID_138188139, Ryadel_1249848 e via dicendo. In assenza di un nome applicativo, utilizzare il nome del cliente (es. /Orizzonti_23804/) o un generico “Ref”.
  • In tutti gli altri casi, utilizzare “Date_yyyyMMddHHmm”, (anno, mese, giorno, minuti, secondi), ad esempio, Date_201907161358 per una cartella creata il 16 luglio 2019 alle ore 13:58.

Ovviamente si tratta soltanto di convenzioni, che possono essere modificate o adattate alle proprie esigenze: l’importante è concordare criteri di naming uniformi e predeterminati, al fine di ridurre la confusione all’interno dell’archivio. In ogni caso, per ovvie ragioni di rispetto della privacy, consigliamo di non utilizzare dati personali (es. il nome, il cognome, il telefono o l’e-mail di un determinato utente o assistito) all’interno del nome della nuova cartella.

Caricamento dei file

Una volta creata la nuova cartella, è possibile caricare uno o più file (o altre cartelle) al suo interno tramite drag-and-drop dal desktop (o da Esplora Risorse) alla finestra di NextCloud all’interno del browser, oppure utilizzando l’apposita funzione Carica file accessibile mediante il pulsante “+” in alto.

Condivisione di file e cartelle

Nel momento in cui creiamo una nuova cartella, quest’ultima erediterà i permessi di condivisione dalla sua cartella madre: questo significa che sarà visualizzabile e/o modificabile da tutti gli utenti (interni o esterni) per i quali è stata attivata una impostazione di condivisione sulla cartella contenitrice. Le cartelle create nella root non ereditano alcun permesso di condivisione e non saranno quindi visibili ad alcuno, se non a noi.

Condivisione ad uso interno

In conseguenza di questo detto nel paragrafo precedente possiamo facilmente capire come, nella maggior parte dei casi, quando si crea una cartella destinata all’uso interno questa risulterà già condivisa nel modo corretto, ereditando le impostazioni di condivisione dalla cartella madre… a meno che non sia creata nella root. Ad ogni buon conto, per assegnare permessi dedicati a una cartella occorre effettuare i seguenti passaggi:

  • Fare click sull’icona della condivisione presente a destra del nome della cartella: questa azione provocherà l’apertura di un pannello contestuale sulla parte destra dello schermo.
  • All’interno del nuovo pannello, selezionare il tab Condivisione, quindi utilizzare la casella di testo presente per cercare utenti e/o gruppi con i quali condividere la cartella.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Opzioni di condivisione interna

Una volta attivata la condivisione interna è opportuno fare click sulla three-dots icon posta alla destra della checkbox stessa: una volta fatto si aprirà un secondo pannello contenente una serie di opzioni di condivisione aggiuntive. Tramite queste opzioni è possibile impostare le modalità di accesso alla cartella (o al file) dell’utente che abbiamo autorizzato.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Le opzioni di condivisione interna sono abbastanza auto-esplicative: oltre al permesso di lettura, ovvero di accesso e download del file, è possibile assegnare una serie di permessi ulteriori: creare (caricare) nuovi file/cartelle, cambiare(modificare) ovvero eliminare file e cartelle preesistenti, ri-condividere la cartella e/o il suo contenuto ad altri utenti interni e/o esterni, e così via. C’è anche la possibilità di inserire una nota per il destinatario, che sarà visualizzata all’accesso di quest’ultimo.

L’opzione più interessante, su cui vale la pena spendere qualche parola, è quella che consente di impostare una data di scadenza. Per impostazione predefinita, le condivisioni interne hanno durata illimitata: questo singnifica che l’utente, una volta abilitato all’accesso (o alla modifica) della cartella, manterrà questo privilegio a tempo indeterminato. L’opzione imposta una data di scadenza consente di modificare questo assunto, assegnando una durata temporale alla condivisione. Si tratta di una funzionalità che, nel caso delle condivisioni interne, rischia di trovare scarsa applicazione pratica, ma – come avremo modo di vedere tra poco – risulterà fondamentale in ottica di condivisione esterna o tramite link.

Condivisione tramite link

Per condividere la cartella tramite link la procedura è sostanzialmente la medesima, con una singola differenza:

  • Fare click sull’icona della condivisione presente a destra del nome della cartella: questa azione provocherà l’apertura di un pannello contestuale sulla parte destra dello schermo.
  • All’interno del nuovo pannello, selezionare il tab Condivisione, quindi abilitare la checkbox Condividi collegamento.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Opzioni di condivisione tramite link

Una volta attivata la condivisione, interna o esterna che sia, è opportuno fare click sulla three-dots icon posta alla destra della checkbox stessa: una volta fatto si aprirà un secondo pannello contenente una serie di opzioni di condivisione aggiuntive. Tramite queste opzioni è possibile:

  • Copiare l’URL del collegamento, funzionalità indispensabile per poterlo comunicare all’utente.
  • Impostare la modalità di condivisione. Il valore predefinito è Sola Lettura, che consentirà al destinatario del link di visualizzare i file contenuti nella cartella ed effettuarne il download, ma non di cancellarli, modificarli o aggiungerne di nuovi. Nell’eventualità in cui volessimo consentire queste operazioni, è possibile selezionare Consenti il caricamento e la modifica oppure Rilascia file (solo caricamento). La prima alternativa può essere utile se si desidera che l’utente esterno possa inviarci nuovi file e/o modificare i file che intendiamo mettergli a disposizione, la seconda se vogliamo limitarlo alla sola aggiunta di nuovi file, impedendogli la modifica di quelli già presenti / già caricati.
  • Impostare una password. Questa funzione riveste un’importanza fondamentale: in mancanza di una password di accesso, chiunque dovesse entrare in possesso del link di condivisione potrà automaticamente avere accesso ai file, con le modalità previste dall’opzione precedente (ovvero, potenzialmente, anche con possibilità di effettuare upload e modifiche). Per ovviare a questo problema suggeriamo di impostare sempre una password di accesso alla condivisione tramite questa opzione, avendo cura di crearne una avente complessità adeguata (min. 8 caratteri con maiuscola, minuscola, numero e carattere speciale).
  • Impostare una data di scadenza. Per impostazione predefinita i link univoci creati per la condivisione hanno durata illimitata: ovviamente questo non è ideale nella maggior parte dei casi, visto che si tratta di condivisioni che si suppone esauriscano la loro funzione nel giro di pochi giorni/settimane. Per questo motivo è imperativo impostare una data di scadenza, con durata variabile a seconda dei casi (1, 10, 30, 60, 90 o 180 giorni). Allo scattare della data di scadenza impostata il collegamento per la condivisione sarà automaticamente rimosso e quindi non sarà più possibile accedere al file con quella modalità: al tempo stesso, il file non sarà eliminato. Si tratta quindi di una retention policy che ha effetto solo sull’accesso ai dati, non sulla conservazione dei dati stessi.

Applicazioni

Tra le funzionalità più interessanti che abbiamo trovato esplorando le moltissime funzionalità offerte NextCloud vi è il pannello Applicazioni, un vero e proprio elenco di moduli aggiuntivi che funzionano in modo simile alle estensioni di Google Chrome e/o ai plugin di WordPress: ciascuna applicazione consente di arricchire la propria istanza NextCloud con funzionalità uniche, alcune delle quali estremamente potenti.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Tra le molte Applicazioni che abbiamo provato, suggeriamo di dare un’occhiata alle seguenti:

  • Files automatic tagging, che consente di assegnare dei tag (etichette, nella traduzione italiana) a seconda del nome, tipo e posizione dei file che vengono caricati.
  • External storage support, che consente di associare sistemi e servizi di data storage esterni.
  • Default encryption module, che abilita all’utilizzo di diverse funzionalità di data encryption.
  • Retention, che può essere utilizzata per impostare delle regole di eliminazione dei file e delle cartelle sulla base di vari parametri.

Per ovvie ragioni di tempo e di spazio non riteniamo opportuno approfondire queste applicazioni all’interno di questo articolo: ci limiteremo ad analizzarne due, che ci sono sembrate particolarmente interessanti: Files automatic tagging e Retention, che – se utilizzate insieme – consentono di impostare delle regole di retention che possono rivelarsi particolarmente utili per il rispetto del considerando 39 del GDPR:

[…] Da qui l’obbligo, in particolare, di assicurare che il periodo di conservazione dei dati personali sia limitato al minimo necessario. I dati personali dovrebbero essere trattati solo se la finalità del trattamento non è ragionevolmente conseguibile con altri mezzi. Onde assicurare che i dati personali non siano conservati più a lungo del necessario, il titolare del trattamento dovrebbe stabilire un termine per la cancellazione o per la verifica periodica. […]

Data Retention Policy

La possibilità di impostare le etichette, ovvero dei meta tag che consentono di classificare i file, è una funzionalità di base di NextCloud. L’applicazione Retention, una volta installata e attivata, consente di creare delle regole per pianificare l’eliminazione automatica di file e/o cartelle che presentino determinate caratteristiche – tra cui la presenza di determinate etichette. L’applicazione Files automatic tagging, anch’essa da installare e attivare, consente infine di assegnare automaticamente delle etichette al momento del caricamento di file e/o cartelle che presentino determinati requisiti.

Unendo queste tre cose siamo riusciti a impostare una vera e propria policy di retention per i file e le cartelle caricate all’interno della cartella radice /Shared/, ovvero – per intenderci – alle copie dei file che intendiamo condividere tramite link. Trattandosi di copie, quindi di duplicati che è opportuno eliminare quando cessano di avere la loro utilità, questi dati costituiscono le cavie perfette per il nostro test.

La prima cosa che abbiamo fatto è creare le seguenti etichette pubbliche:

  • Eliminare dopo 10 giorni
  • Eliminare dopo 30 giorni
  • Eliminare dopo 60 giorni
  • Eliminare dopo 90 giorni
  • Eliminare dopo 180 giorni

Per farlo, è sufficiente andare nelle Impostazioni > Amministrazione > Flusso di Lavoro e utilizzare il mini-form presente in alto:

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Una volta fatto questo, ci siamo spostati nel pannello inferiore della sezione flusso di lavoro e abbiamo configurato delle regole di retention basandoci sulla presenza delle etichette appena create, nel seguente modo:

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

Come si può vedere, le regole di eliminazione che abbiamo impostato corrispondono esattamente a quanto riportato nel nome di ciascuna etichetta: in conseguenza di ciò, per attribuire un periodo di retention alla nostra cartella (e a tutto il suo contenuto) non dovremo fare altro che assegnare alla cartella stessa una delle etichette di retention che abbiamo definito.

Per assegnare un’etichetta a una cartella, è sufficiente fare click sull’icona delle Etichette, presente nella parte in alto a destra del panello di condivisione e selezionare l’etichetta corrispondente.

Cloud Storage on-premise (e conforme al GDPR) con NextCloud

In buona sostanza, quella che abbiamo creato è una vera e propria data retention policy completamente automatizzata: con un pò di pazienza (e data-entry) è possibile creare un numero di etichette ancora maggiore e gestire politiche di cancellazione anche più in là nel tempo (ad esempio in anni), così da poter gestire la maggior parte dei dati trattati. Ecco dunque un ulteriore valido motivo per utilizzare NextCloud come sistema di archiviazione!

Inutile dire che l’utilizzo consapevole e sistematico di questa data retention policy diventa particolarmente importante per le cartelle che si creano per la condivisione tramite link, anche in presenza della data di scadenza: quest’ultima, infatti, se pure impedisce all’utente oggetto della condivsione di accedere ulteriormente ai file, non risolve il problema della retention. E’ dunque opportuno utilizzare entrambe le funzionalità, magari avendo cura di impostare una durata superiore di qualche giorno/settimana a quella indicata nella data di scadenza del link di condivisione: in tal modo, qualora il destinatario del link avesse bisogno di qualche giorno in più, sarà possibile prorogare la data di scadenza del link anche a link scaduto, prima che il piano di retention abbia fisicamente eliminato i file.

Conclusioni

Per il momento è tutto: ci auguriamo che questa panoramica su NextCloud possa essere utile a quanti hanno intenzione di dotare la propria infrastruttura di un sistema di Cloud Storage on-premise, che a fronte di un investimento assolutamente contenuto (un server Linux, una VM o una Docker Image) consente di avere accesso a moltissime funzionalità interessanti per l’archiviazione e la condivisione interna ed esterna di qualsiasi tipo di file.

Alla prossima, e… buona condivisione!

Ti interessa approfondire ulteriormente questo argomento? Partecipa ai nostri corsi di formazione sul Cloud Storage e ottieni il tuo attestato digitale!

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.