Seguindo uma pergunta de @debryc aqui, esta é uma breve nota sobre algum trabalho que realizamos para fazer nossos fóruns Discourse funcionarem harmoniosamente com armazenamento em nuvem (uma instância NextCloud) e chat (no nosso caso, Mattermost).
Um post longo, então vamos esconder os detalhes até que você clique na seta…
Post completo e extenso
Devo começar esclarecendo que não sou o desenvolvedor deste sistema — ele foi produzido em C#/.NET por outro membro da equipe de Tecnologia, então não posso responder a perguntas técnicas detalhadas sobre ele. Estou apenas expondo o(s) problema(s) que queríamos resolver e o que fizemos.
Contexto: Estávamos usando um sistema integrado (Basecamp) para fornecer discussão, chat em tempo real e integração de armazenamento de arquivos. Havia muitos elementos insatisfatórios nesse sistema, tanto estruturais quanto de segurança, então decidimos migrar a organização para um novo sistema(s) de código aberto.
Fizemos muita pesquisa e avaliação — algumas de nossas escolhas foram motivadas pela conveniência, outras pela busca da melhor adequação às nossas necessidades e outras ainda pela necessidade de tornar o caminho de migração para 10 mil usuários o mais indolor possível (os usuários incluem uma alta proporção de pessoas não técnicas e um número significativo de usuários tecnófobos, todos com suas próprias opiniões fortemente defendidas — não é fácil agradar a todos!)
Para ir direto ao ponto, optamos por três componentes separados: Mattermost para fornecer chat em tempo real, Discourse para discussões mais ponderadas e Nextcloud para fornecer armazenamento seguro de arquivos e edição colaborativa (substituindo uma combinação de armazenamento nativo do Basecamp e Google Docs). Todos hospedados em nossos próprios servidores gerenciados.
Agora, precisávamos fornecer uma maneira de unir os três logins necessários de forma relativamente transparente e criar automaticamente contas de usuário e atribuir usuários aos grupos/fóruns de acesso apropriados (Discourse), grupos de armazenamento compartilhado (Nextcloud) e equipes e canais (Mattermost).
A organização possui algumas centenas de grupos/equipes separados (por localização e função), e os usuários podem pertencer a muitos grupos — alguns são fechados, outros estão abertos para qualquer usuário se juntar livremente.
O primeiro problema foi criar contas de usuário em três sistemas e, inicialmente, garantir que eles tivessem o mesmo nome de usuário (para que pudessem se reconhecer) e a mesma senha (para que, pelo menos, tivessem um único conjunto de credenciais para lembrar/armazenar e, em última instância, um único login para todos os três sistemas).
Também precisávamos de uma maneira de gerenciar como atribuir pessoas aos grupos corretos quando a conta fosse criada — não havia uma boa correspondência entre os grupos reais e os grupos online no sistema antigo, então não poderíamos simplesmente migrá-lo.
A solução que encontramos foi um site separado, chamado Hub, que cuidava de acompanhar as contas de usuário e usar as APIs dos três sistemas para criar e atualizar detalhes dos usuários.
O Hub também permitia que “Campeões de Tecnologia” de cada grupo (ou conjunto de grupos) convidassem pessoas para os novos serviços — garantindo assim que apenas as pessoas certas acabassem em cada lugar.
Assim, um usuário recebe um e-mail de convite para ingressar nos novos serviços com um link único para o Hub, onde pode criar um nome de usuário e uma senha. Isso é então usado para criar automaticamente contas de usuário correspondentes nos três serviços separados.
O Hub também sabe quais grupos/fóruns, equipes/canais e áreas de armazenamento o usuário deve ter acesso e os adiciona nos locais relevantes por meio das APIs.
À medida que evoluiu, o Hub teve mais recursos desenvolvidos, de modo que agora um usuário pode usá-lo para encontrar canais e fóruns, solicitar ingressar neles e realizar várias outras funções administrativas tanto para campeões de tecnologia quanto para usuários.
Agora também pode fornecer uma forma de login único, de modo que, ao fazer login no Hub, um usuário pode entrar em um dos outros serviços com um único clique. (parte do trabalho aqui envolveu excluir os logins padrão do tipo rede social corporativa que estavam sendo usados)
Analisamos várias maneiras de integrar chat e lidar com armazenamento de arquivos em um único sistema (os três tornam isso possível de alguma forma), mas sempre envolvem grandes compromissos e você acaba com um camelo (um cavalo projetado por um comitê), como o Basecamp. É melhor manter uma solução dedicada de raça pura para cada uma das funções principais e fazê-las bem feitas.