Salta al contenuto

Menu

← Blog

Agorà: videoconferenza privata sulla nostra infrastruttura

Come abbiamo costruito una videoconferenza privata su BigBlueButton, interamente in IaC, e i problemi risolti lungo il percorso.

Cloud6 min di lettura
In questo articolo
  1. Cos'è Agorà
  2. I componenti
  3. Infrastruttura come codice
  4. Configurazione e test
  5. Diagnosi di un problema audio
  6. Gestione delle stanze
  7. Accesso degli ospiti
  8. Scalabilità
  9. Un nostro prodottoVolete un'Agorà tutta vostra?

Cos'è Agorà

Nelle riunioni online circolano informazioni riservate: decisioni, documenti, dati dei clienti. Su una piattaforma esterna tutto questo è gestito da terzi, con regole che non decidiamo noi.

Per questo abbiamo realizzato Agorà: una piattaforma di videoconferenza in esercizio sul nostro cluster, descritta interamente in IaC, in cui ogni modifica passa da una pipeline. Oggi la offriamo anche ai clienti che vogliono una piattaforma propria.

I componenti

Agorà non reinventa nulla: integra componenti open source consolidati, ciascuno con un ruolo preciso, e li rende riproducibili.

100200300400500600700800900Perimetro · HAProxmox VEIntranet · non espostaRilascio · nessuna modifica a mano443CARPAPI · SHA-256GET /invitoUDPcrea la VMregole firewallconfiguraOspitibrowser · invitoOPNsenseattivoOPNsenseriserva+ nodostessa pipelineApp stanzeDjango · CeleryUtenti internirete d'ufficioRepository0 secretGitLab CIlint · test · planOpenTofuVM · firewallAnsibleMoleculeAgoràVM · Ubuntu 22.04BigBlueButton 3.0nginx · /invitoTURNFreeSWITCHAgoràarchitetturatav. 01100200300Perimetro · HAProxmox VEIntranet · non espostaRilascio · niente a mano443CARPAPI · GET /invitoUDPcrea la VMregole firewallconfiguraOspitibrowser · invitoOPNsenseattivoOPNsenseriserva+ nodostessa pipelineApp stanzeDjango · CeleryUtenti internirete d'ufficioRepository0 secretGitLab CIlint · test · planOpenTofuVM · firewallAnsibleMoleculeAgoràVM · Ubuntu 22.04BigBlueButton 3.0nginx · /invitoTURNFreeSWITCHAgoràarchitetturatav. 01
Ospiti e utenti interni raggiungono Agorà, ospitata sul cluster dietro un firewall in alta disponibilità; la intranet non è mai esposta. Nella parte inferiore, il percorso da cui nasce ogni componente.
  • BigBlueButton 3.0Videoconferenza
  • Proxmox VEVirtualizzazione
  • OpenTofuInfrastruttura come codice
  • Ansible e MoleculeConfigurazione
  • OPNsense in HAPerimetro
  • Django e CeleryApplicazione
  • GitLab CIRilascio
  • Let's EncryptCertificati

Infrastruttura come codice

In produzione non si interviene manualmente. La macchina virtuale è definita in OpenTofu, lo stato è conservato in GitLab e il repository contiene 0 secret. Anche le regole del firewall sono codice: il plan mostra ogni modifica prima che venga applicata.

pipeline · main
$ tofu plan # opnsense_firewall_filter.this["lan_turn"] will be createdPlan: 3 to add, 0 to change, 0 to destroy.$ tofu apply plan.cacheApply complete! Resources: 3 added.$ sh ci/ha-sync.sh✓ configurazione sincronizzata sul nodo di riserva

Tutte le 18 merge request del progetto hanno seguito lo stesso percorso:

  1. 1Merge requestrevisione del codice
  2. 2Lint e testtofu test, Molecule, pytest
  3. 3Plananteprima delle modifiche
  4. 4Applyapprovazione manuale
  5. 5Configureconfigurazione con Ansible

Configurazione e test

Ansible configura il resto del sistema: prerequisiti, installazione di BigBlueButton con verifica dell'hash, secret delle API, media server e pagina iniziale. Una seconda esecuzione non deve modificare nulla: se qualcosa cambia, il test fallisce.

I test girano con Molecule su un container Ubuntu. Per il proxy degli inviti viene avviato un nginx reale, verificato anche sui casi limite: percorsi non consentiti, richieste POST, backend non disponibile.

La pagina di benvenuto e la favicon personalizzate sono protette con dpkg-divert, così gli aggiornamenti di BigBlueButton non le sovrascrivono.

Diagnosi di un problema audio

Nel primo test reale video e condivisione dello schermo funzionavano, l'audio no: il microfono non si connetteva e restituiva errorCode 2003.

Abbiamo inoltre introdotto un DNS split-horizon: dall'interno il nome di Agorà risolve sull'IP privato, così i client in ufficio usano il TURN sulla rete interna senza attraversare il NAT.

Gestione delle stanze

BigBlueButton espone solo delle API, senza un'interfaccia per gestire le stanze. Abbiamo quindi sviluppato un'app Django riutilizzabile, con 282 test automatici e il 99% di copertura del codice, distribuita come pacchetto Python nel nostro registry privato. Le funzionalità principali:

  • Più server BigBlueButton, con i secret cifrati e mai visibili nell'amministrazione.
  • Chiamate firmate: checksum SHA-256 verso le API, token e JWT verificati su callback e notifiche.
  • Stato coerente: signal Django emessi solo dopo il commit e task Celery di riallineamento.
  • Amministrazione a moduli: le opzioni della stanza sono campi da compilare, non JSON da scrivere a mano.
  • Chiusura definitiva delle riunioni terminate, salvo nelle stanze configurate come riutilizzabili.
  • Link d'invito revocabili e con scadenza, validi anche senza account.

Accesso degli ospiti

L'app delle stanze risiede nella nostra intranet, non raggiungibile da Internet. Alle riunioni partecipano però anche clienti e partner, che devono poter accedere senza che la intranet venga esposta.

Ospiteun browser, ovunque
Agoràl'unico punto esposto
Intranetmai esposta
Gli ospiti raggiungono solo Agorà, che inoltra alla intranet un unico percorso: la pagina d'invito.

Il server di videoconferenza, già pubblico, fa da reverse proxy per un solo percorso: la pagina d'invito. nginx accetta solo chiavi UUID e richieste GET, verifica il certificato della intranet e limita le richieste per IP, con una soglia che tollera più ospiti dietro lo stesso NAT aziendale. Ogni altro percorso restituisce 404.

Se la intranet non risponde, solo gli inviti restituiscono 502: le riunioni in corso non si interrompono.

Scalabilità

L'app Django gestisce già più server BigBlueButton. Un nuovo ambiente è una nuova configurazione per OpenTofu e Ansible, con le stesse pipeline e gli stessi test; per aumentare la capacità basta aggiungere un nodo.

Volete un'Agorà tutta vostra?

Progettiamo e gestiamo piattaforme di videoconferenza private, sulla vostra infrastruttura o sulla nostra: i dati restano vostri e le regole le stabilite voi.

Parliamone011 1911 5949

  • Dati e registrazioni sotto il vostro controllo
  • Nessun servizio di terze parti
  • Accesso degli ospiti tramite link, senza account
  • Capacità scalabile aggiungendo server

Altri articoli

  • Sviluppo

    Un ufficio più smart, a portata di mano

    Con Home Assistant gestiamo luci, climatizzatori, telecamere e altri dispositivi dell'ufficio da un unico punto, anche dal telefono.

    · 3 min
  • VoIP

    Monitorare Asterisk con Prometheus

    Da Asterisk 17 le metriche escono già nel formato di Prometheus: quali sono e come raccoglierle, con un piccolo progetto Docker da provare.

    · 4 min
  • Helpdesk

    Un gestionale per gli interventi hardware in tutta Italia

    Il gestionale che abbiamo costruito per l'assistenza hardware: tecnici sul territorio, apparati, contatti e ticket.

    · 3 min

Tutti gli articoli