For this instance, the document below lists both the software dependencies (DEV) and the operational services (OPS) that make up the platform. It is published in CycloneDX 1.6, an OWASP open standard that describes code libraries and third-party managed services in a single document.
Libraries, containers and OS packages that form the application. Tied to the code version; reproducible by anyone with access to the source.
| Name | Type | Version | License |
|---|---|---|---|
| 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 | — | — |
Third-party managed services this instance depends on. Tenant-scoped information that changes whenever the operator reconfigures the deployment or switches provider.
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.
A high-level view of the four layers that make up the platform: from user access down to the runtime platform.
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.
The complete list of components and services, with versions, hashes and technical properties, is available in the sections above and in the downloadable JSON.