Questo documento elenca, per l'istanza corrente, le dipendenze software (DEV) e i servizi operativi (OPS) che compongono la piattaforma. Il formato utilizzato è CycloneDX 1.6, uno standard aperto OWASP che descrive in un unico documento sia le librerie di codice sia i servizi gestiti da fornitori terzi.
Librerie, container e pacchetti di sistema che formano l'applicazione. Informazione legata alla versione del codice, riproducibile da chiunque scarichi il sorgente.
| Nome | Tipo | Versione | Licenza |
|---|---|---|---|
| pa-webinar Immagine OCI dell'applicazione Next.js. Base: Debian 12 slim. | container | 0.9.0 | AGPL-3.0-only |
| ghcr.io/italia/pa-webinar-jitsi-web Immagine jitsi/web ricompilata per abilitare rnnoise (soppressione rumore) a 48 kHz. Patch: infra/jitsi-web-patched/ in questo repository. | container | stable-10741-rnnoise-r3 | Apache-2.0 |
| jitsi/prosody | container | stable-10741 | Apache-2.0 |
| jitsi/jicofo | container | stable-10741 | Apache-2.0 |
| jitsi/jvb Video Bridge (SFU). Gira su nodepool dedicato jitsi-jvb in scale-to-zero: il digest viene catturato dinamicamente dai pod JVB quando scalano da zero per un evento. | container | stable-10741 | Apache-2.0 |
| coturn/coturn | container | 4.9 | BSD-3-Clause |
| bitnami/redis Redis in-cluster (subchart Bitnami). Il tag pull è 'latest' (pullPolicy Always); il digest qui riportato è quello in esecuzione alla data del documento. | container | latest | RSALv2 |
| pa-webinar-recorder-controller Controller del recorder multi-traccia (ADR-013). In esecuzione in prod; orchestra i bot di registrazione per-partecipante. Tag :dev in collaudo. | container | dev | AGPL-3.0-only |
| ingress-nginx/controller | container | v1.9.4 | Apache-2.0 |
| jetstack/cert-manager-controller | container | v1.13.3 | Apache-2.0 |
| debian Base image layer dell'applicazione Next.js. | operating-system | 12-slim | — |
| next | framework | 15.5.21 | MIT |
| react | library | 19.2.8 | MIT |
| next-intl | library | 4.13.4 | MIT |
| @prisma/client | library | 6.19.3 | Apache-2.0 |
| bootstrap-italia | library | 2.18.2 | BSD-3-Clause |
| design-react-kit | library | 5.10.0 | BSD-3-Clause |
| ioredis | library | 5.11.1 | MIT |
| Certificati TLS pa-webinar.developers.italia.it X.509 rilasciati da Let's Encrypt via cert-manager (ACME HTTP-01) per pa-webinar.developers.italia.it, pa-webinar-jitsi.developers.italia.it e pa-webinar-turn.developers.italia.it (TURNS). Chiavi RSA 2048 gestite in Secret Kubernetes (pa-webinar-tls, pa-webinar-jitsi-tls, coturn TLS). | cryptographic-asset | — | — |
| Chiave di firma JWT Jitsi Chiave simmetrica HS256 condivisa tra app Next.js e Prosody per autenticare i partecipanti verso Jitsi. Conservata nel Secret videocall-secrets (chiave JITSI_JWT_SECRET). Mai esposta al browser né al cittadino. | cryptographic-asset | — | — |
| Chiave di cifratura PII a riposo AES-256-GCM applicata prima della scrittura su PostgreSQL per campi nominativi ed email degli iscritti. La chiave PII_ENCRYPTION_KEY è gestita nel Secret Kubernetes, il database non la vede. | cryptographic-asset | — | — |
Servizi gestiti da terzi su cui questa istanza si appoggia. Informazione legata al tenant: cambia quando il gestore modifica la configurazione o il fornitore cloud.
Cluster AKS developers-italia-prod che ospita il namespace pa-webinar. Nodepool applications (VM regular) + nodepool jitsi-jvb (scale-to-zero) + nodepool jitsi-jibri (scale-to-zero) + nodepool aigpu (A100, scale-to-zero, per la post-produzione AI).
Database gestito (server developersitalia-prod, database videocall_prod). Contiene dati applicativi: eventi, iscrizioni, consensi GDPR, template email, feedback. I campi nominativi sono cifrati AES-256-GCM lato applicazione prima della scrittura.
Storage account developersitaliarec, container 'recordings-prod'. Conserva le registrazioni video Jibri caricate dallo script di finalize.
SMTP relay per email transazionali: conferme iscrizione, link moderatore, reminder. Regione EU per mantenere i dati nell'Unione Europea.
Una vista sintetica dei quattro livelli che compongono la piattaforma: dall'accesso utente fino alla piattaforma di esecuzione.
Registry OCI da cui AKS pull-a l'immagine pa-webinar. Autenticazione tramite pull secret kubernetes ghcr-secret.
Repository sorgente italia/pa-webinar e pipeline GitHub Actions che produce le immagini :dev e :release e pubblica SBOM alla release. La catena di fornitura del software parte qui.
Ingress controller self-hosted nel cluster. Termina TLS, route verso i servizi interni.
Emissione e rinnovo automatico dei certificati TLS via Let's Encrypt (ACME HTTP-01).
Autorità di certificazione pubblica che firma i certificati TLS della piattaforma.
Single-pod standalone in-cluster usato come bus di messaggistica real-time per la chat. Stato canonico su PostgreSQL; Redis è un relay effimero. Password gestita come Secret Kubernetes.
Server STUN/TURN self-hosted su LoadBalancer dedicato. Utilizzato dai partecipanti dietro NAT simmetrici per relay audio/video.
Telemetria di piattaforma: metriche applicative (/api/metrics), stato cluster, dashboard Grafana di monitoring. Dati aggregati, nessun PII.
[IN COLLAUDO — controller deployato e attivo in prod (pa-webinar-recorder-controller); bot recorder per-partecipante in completamento] Servizio in-cluster che cattura una traccia audio isolata per partecipante (RecordingTrack) e la fornisce al worker di trascrizione per attribuire il transcript al relatore corretto. Diverso dall'audio misto del recording standard: la traccia individuale e' un dato personale ad alta sensibilita' (vicino al biometrico vocale, art. 9 GDPR se usato per identificazione). Non clona ne' identifica la voce: produce solo testo attribuito. Vedi docs/adr/013-multitrack-speaker-attribution.md e docs/POSTPROD.md.
[IN COLLAUDO — orchestrazione attiva (cronjob postprod-orchestrator/reclaim/retention), worker GPU e servizio vLLM in fase di setup: alla data del documento il Deployment vLLM non è ancora presente nel namespace, quindi sintesi/traduzione/dubbing non sono operativi] Pipeline in-cluster sul pool aigpu (NVIDIA A100 80GB) che, su registrazioni di eventi che lo abilitano, esegue trascrizione (WhisperX) + diarization (pyannote), sintesi e traduzione (LLM Mistral via vLLM) e doppiaggio (Piper TTS). Tutto sovrano, in-cluster, senza API esterne. Attivabile per-evento dall'admin.
L'elenco completo di componenti e servizi, con versioni, hash e proprietà tecniche, è disponibile nelle sezioni precedenti e nel JSON scaricabile.