A seguito di una domanda posta da @debryc qui, ecco una breve nota su alcuni lavori che abbiamo svolto per far funzionare insieme i nostri forum Discourse con l’archiviazione cloud (un’istanza NextCloud) e la chat (nel nostro caso, Mattermost).
Un post lungo, quindi nascondiamo i dettagli finché non clicchi sulla freccia…
Post completo e lungo
Devo subito precisare che non sono lo sviluppatore di questo sistema: è stato realizzato in C#/.NET da un altro membro del team Tech, quindi non posso rispondere a domande tecniche dettagliate. Mi limito a esporre il problema che volevamo risolvere e ciò che abbiamo fatto.
Contesto: utilizzavamo un sistema integrato (Basecamp) per fornire discussioni, chat in tempo reale e integrazione per l’archiviazione dei file. Presentava molti elementi insoddisfacenti, sia a livello strutturale che di sicurezza, così abbiamo deciso di migrare l’organizzazione verso un nuovo sistema o nuovi sistemi open source.
Abbiamo fatto un’ampia ricerca e valutazione: alcune delle nostre scelte sono state dettate dall’opportunità, altre dalla ricerca della soluzione più adatta alle nostre esigenze e altre ancora dalla necessità di rendere il percorso di migrazione il più indolore possibile per 10.000 utenti (tra cui una percentuale elevata di non tecnici e un numero significativo di utenti tecnofobici, tutti con le proprie opinioni fortemente radicate: non è facile accontentarli!)
Per arrivare al punto, abbiamo optato per tre componenti separati: Mattermost per la chat in tempo reale, Discourse per discussioni più ponderate e Nextcloud per l’archiviazione sicura dei file e la modifica collaborativa (sostituendo una combinazione di archiviazione nativa di Basecamp e Google Docs). Tutti ospitati sui nostri server gestiti.
Ora dovevamo trovare un modo per unire in modo relativamente fluido i tre accessi richiesti e creare automaticamente gli account utente, assegnando gli utenti ai gruppi/forum appropriati (Discourse), ai gruppi di archiviazione condivisa (Nextcloud) e ai team e canali (Mattermost).
L’organizzazione conta alcune centinaia di gruppi/team distinti (per ubicazione e funzione) e gli utenti possono far parte di molti gruppi: alcuni sono chiusi, altri sono aperti e chiunque può unirsi liberamente.
Il primo problema era creare account utente su tre sistemi diversi e, inizialmente, assicurarsi che avessero lo stesso nome utente (in modo che potessero riconoscersi) e la stessa password (in modo da avere almeno un unico insieme di credenziali da ricordare o memorizzare e, in definitiva, un accesso singolo a tutti e tre i sistemi).
Avevamo anche bisogno di un metodo per gestire l’assegnazione delle persone ai gruppi corretti al momento della creazione dell’account: nel vecchio sistema non c’era una corrispondenza adeguata tra i gruppi reali e quelli online, quindi non potevamo semplicemente migrarli.
La soluzione che abbiamo elaborato è stata un sito web separato, chiamato Hub, che si occupa di tenere traccia degli account utente e utilizza le API dei tre sistemi per creare e aggiornare i dettagli degli utenti.
L’Hub permette inoltre ai “Campioni Tecnici” di ciascun gruppo (o insieme di gruppi) di invitare persone sui nuovi servizi, assicurandosi così che solo le persone giuste finiscano in ciascun luogo.
Quindi, un utente riceve un’email di invito per unirsi ai nuovi servizi con un link monouso all’Hub, dove può creare un nome utente e una password. Questi vengono poi utilizzati per creare automaticamente gli account utente corrispondenti sui tre servizi separati.
L’Hub sa anche a quali gruppi/forum, team/canali e aree di archiviazione l’utente dovrebbe avere accesso e li aggiunge nei luoghi pertinenti tramite le API.
Con l’evoluzione, l’Hub ha visto lo sviluppo di ulteriori funzionalità, così che ora un utente può utilizzarlo per cercare canali e forum, richiedere di unirvisi e svolgere varie altre funzioni amministrative sia per i Campioni Tecnici che per gli utenti.
Ora può anche fornire una forma di accesso singolo (single sign-on), in modo che, accedendo all’Hub, un utente possa accedere a uno degli altri servizi con un singolo clic (alcuni dei lavori in quest’area hanno incluso l’esclusione dei login standard di tipo social media aziendale in uso).
Abbiamo esaminato vari modi per integrare la chat e gestire l’archiviazione dei file in un unico sistema (tutti e tre offrono alcune di queste possibilità), ma in tutti i casi si tratta di enormi compromessi e si finisce per ottenere un cammello (un cavallo progettato da un comitato) come Basecamp. Meglio attenersi a una soluzione dedicata di razza per ciascuna delle funzioni principali e farle bene.