Come realizzare un’applicazione Laravel Multi-tenant — Parte 0

Francesco Lettera
4 min readJun 30, 2018

--

Parte 0 | Parte 1 | Parte 2 | Parte 3 | Parte 4 | Parte 5 | Parte 6

Questa è la traduzione della serie Full-featured multi-tenant Laravel app from scratch di Ashok Gelal, Part 0.

Ti sei mai chiesto come iniziare a scrivere una efficace app multi-tenant con Laravel? Come organizzare il tuo progetto, la tua struttura, il tuo database, scrivere test automatici, creare un admin UI, gestire utenti, fare il deploy della tua app? E in giro hai trovato solo piccoli tutorial superficiali che danno per scontato troppi aspetti? La buona notizia è che hai trovato il posto giusto per soddisfare le tue aspettative.

Photo by Ross Joyner

Molto è stato scritto sulla semplicità e grandezza del framework Laravel. A dispetto dei rumor, puoi realizzare solide applicazioni dalla varia complessità, utilizzando ottimi package ufficiali.

Non è solo il singolo framework, ma l’intero ecosistema ad essere affascinante. Ci sono così tante libraries della community — dalla gestione dei permessi, al supporto dell’autenticazione JWT per le tue API, fino ad arrivare alla gestione del team. E non c’è problema a trovare buona documentazione e ottimi tutorial.

Ma, com rammarico, c’è una grande lacuna nell’ecosistema Laravel: mancano risorse per apprendere come scrivere un’applicazione complessa. Una delle poche cose che ho visto di complesso è “Let’s Build A Forum with Laravel and TDD” di Jeffrey Way. Le altre risorse dedicate a “fare qualcosa di complesso con Laravel” si risolvono a suggerire librerie da utilizzare.

Questo significa due cose — o le persone non scrivono applicazioni complesse con Laravel (e questo è un attacco che Taylor Otwell subisce costantemente per il suo framework), oppure le persono sono troppo occupate per scrivere applicazioni complesse e non hanno il tempo per scriverne su. E penso seriamente che sia quest’ultimo caso. Non incolpateci, quindi, di fare bene il nostro lavoro e di non avere abbastanza tempo per parlarne. Ok? ;)

Di recente, a lavoro, mi hanno assegnato la scrittura di un’app multi-tenant per un reale progetto che, una volta rilasciato, avrebbe gestito centinaia di tenant (aziende), dove ognuna di esse avrebbe gestito da 25 a 10.000 utenti. Dunque puoi immaginare quanto complessa sarebbe stata questa applicazione. Dunque, nei miei 8 anni di carriera di sviluppo software professionale, questo è sicuramente il progetto più complesso a cui ho lavorato (il mio lavoro più complesso non professionale sarebbe stato il Dash project che ho realizzato come studente di Computer Science al Boise State).

Ad ogni modo, non ho trovato buona documentazione o esempi su Laravel e multi-tenant. Ci sono pochi articoli su questo argomento, e niente codice da leggere e nessun posto dove fare domande. Mi stavo quindi dedicando a scrivere ogni cosa da zero e avrei — quindi — appreso dai miei stessi errori.

Imparare dai miei errori è accaduto, ma per fortuna non ho dovuto scrivere tutto da zero e iniziare da un foglio bianco perché mi sono imbattuto in una grande library chiamata appunto Multi-Tenant. Mi ha dato un grande slancio per iniziare, anche se mancavano buoni esempi.

Sul serio, installi il package e poi non hai idea da che parte iniziare. E c’è un numero di cose che non hanno documentazione, e sono andato a finire nel codice sorgente per comprendere come certe cose funzionavano in alcuni punti dell’applicazione. Il package funziona bene in un paio di interazioni, ma la mancanza di buona documentazione è una grande lacuna, credo.

Seriously, you install the package and then you have no idea where to go next. And there are a number of things I ran across where there was no documentation, or lacked a feature and I’ve to go through the source code to understand how to get certain things done or even monkey-patch it in some places. The package has got better in the last couple of iterations but the lack of good documentation still holds true, I think.

Ho anche scoperto che Laravel fa qualche capriccio in alcuni casi e non funzionerebbe in multi-tenant senza qualche workaround. Per esempio, inviare una reset password ad un utente tenant. L’URL generato in ResetPassword.php non punta ad un dominio tenant provocando un errore quando si imposta una nuova password dopo aver cliccato sul link.

Così, dopo tante cadute e cadute, sono riuscito a realizzare un’applicazione multi-tenant complessa e vorrei condividere la mia conoscenza e mostrarti come si fa a impostare, scrivere ed eseguire il deploy di una applicazione multi-tenant in Laravel e libreria Multi-Tenant. Creeremo una completa applicazione supportata da roles e permission, da API, pannello admin e qualcos’altro. L’app permetterà agli utenti di avere una lista di immobili in affitto e la chiameremo Townhouse. Divertente, non trovi?

Pensa a Townhouse come al clone di Craiglist ma focalizzata solo sugli immobili in affitto. Un super admin (cioè tu) avrà l’abilità di creare una città (che sarà la nostra tenant) e assegnerà un admin per gestire gli affitti della città. I proprietari degli immobili (tenant user) avranno l’abilità di iscriversi e registare i propri immobili.

Farò del mio meglio per scrivere una serie di post e guidarti attraverso gli step più importanti dell’applicazione. Oppure potrai avere l’opportunità di clonare il progetto e giocarci su con GitHub e implementare nuove feature.

Nel prossimo post, imposteremo un nuovo progetto Laravel, installeremo le dipendenze, imposteremo il database e creeremo qualche comando da console per inizializzare un tenant e iniziare a gestire la parte UI del tenant admin.

Hai bisogno d’aiuto?

Se hai qualche domanda, commento o hai bisogno di aiuto con questa app, unisciti al canale Slack dedicato.

--

--