Self-host NexBasira
Lo stesso stack Docker che alimenta il nostro SaaS gestito è ciò che rilasciamo on-prem. Stesso backend Django, stessa SPA React, stessa catena di audit. Disponibile nel livello Enterprise con un pacchetto DPA + questionario InfoSec.
docs/SELF_HOST.md nel repository sorgente — lo rilasciamo ai clienti Enterprise con il loro pacchetto di installazione. Contattaci tramite Contatto (Enterprise) per avviare la conversazione. Perché il self-host
- Obbligo normativo — il tuo settore o la tua giurisdizione richiede che le prove risiedano sulla tua infrastruttura.
- Isolamento di rete — i tuoi ispettori operano dentro una VPN; l'uscita verso un SaaS non è un'opzione.
- Residenza dei dati personalizzata — devi far risiedere i dati in una regione specifica o in un cloud sovrano.
- Prevedibilità dei costi su larga scala — oltre le 5k ispezioni/mese, un'infrastruttura dedicata è spesso più economica del livello per ispezione.
Architettura
Sei servizi (più il tuo provider di identità esistente per l'SSO):
| Servizio | Cosa fa | Immagine |
|---|---|---|
| caddy | Terminazione TLS, routing HTTP, distribuzione di asset statici | caddy:2 |
| backend | App Django — API REST, catena di audit, SCIM, firma | ghcr.io/codelounge-io/certivisiopro/api (your tag) |
| frontend | Nginx che serve la SPA compilata + il marketing statico | ghcr.io/codelounge-io/certivisiopro/web |
| postgres | Archivio dati primario, isolamento dei tenant applicato tramite RLS | postgres:16 |
| redis | Broker Celery + cache + session store | redis:7 |
| celery-worker + celery-beat | Attività in background (polling TSA, post-elaborazione delle registrazioni, sweep di retention) | come il backend |
| livekit | SFU WebRTC per il piano video live | livekit/livekit-server |
| minio (optional) | Storage a oggetti compatibile con S3 per prove + registrazioni | minio/minio |
Per lo storage a oggetti, puoi anche puntare a qualsiasi servizio compatibile con S3 (AWS S3, Wasabi, OVH Object Storage, il tuo cluster Ceph on-prem esistente). MinIO è incluso come default per le installazioni realmente air-gap.
Requisiti minimi
| Aspetto | Minimo | Consigliato |
|---|---|---|
| OS | Linux x86_64 (Ubuntu 22.04 LTS or Debian 12) | uguale |
| Docker / Compose | Docker 24 + Compose v2 | uguale |
| CPU | 4 vCPU | 8 vCPU |
| RAM | 8 GB | 16 GB |
| Disk | 200 GB SSD (DB + prove iniziali) | 500 GB + storage a oggetti compatibile con S3 per le registrazioni |
| Network | IP statico, porte 443 + WebRTC (LiveKit) raggiungibili | uguale |
| TLS | Caddy effettua il provisioning automatico tramite Let's Encrypt | Certificato proprio (BYO-cert) per reti chiuse |
Bootstrap
All'incirca la forma che lo script di installazione automatizza:
# 1. Clone the released bundle
git clone --depth 1 https://github.com/codelounge-io/nexbasira-onprem.git
cd nexbasira-onprem
# 2. Fill in env from the example
cp .env.example .env
$EDITOR .env # set DOMAIN, SECRET_KEY, DB password, S3 creds, LiveKit keys
# 3. Pull pinned images
docker compose pull
# 4. Run migrations + create the platform superuser
docker compose run --rm backend python manage.py migrate
docker compose run --rm backend python manage.py createsuperuser
# 5. Start everything
docker compose up -d
# 6. Tail the logs until you see the audit-chain self-test pass
docker compose logs -f backend | grep "audit chain self-test" Su un VPS Ubuntu 22.04 pulito l'intera sequenza gira in circa 5 minuti.
Cosa ottieni out of the box
- Sia
app.<your-domain>(SPA) sia<your-domain>(sito marketing, opzionale) su un unico Caddy. - TLS automatico tramite Let's Encrypt — oppure fissa una CA privata su reti chiuse.
- Migrazioni RLS Postgres + i quattro ruoli di sistema inizializzati.
- Trigger Postgres della catena di audit (append-only).
- Seeder di una sessione demo, così gli admin al primo accesso possono esplorare con dati realistici.
Operatività Day-2
- Backup — dump logico Postgres notturno + lifecycle S3 per gli oggetti. Il runbook
docs/SELF_HOST.mdinclude smoke test di restore-from-backup, inclusa laaudit-chain verify. - Aggiornamenti — scarica il nuovo tag dell'immagine,
docker compose up -d. Le migrazioni dello schema sono forward-only + testate in CI; il rollback è documentato per l'uso come ultima risorsa. - Osservabilità — Django emette log JSON strutturati con etichette
tenant_id+session_id; instradali verso il tuo aggregatore di log esistente. - Metriche — endpoint dell'exporter Prometheus sul backend; effettua lo scrape dal tuo stack di monitoraggio.
Cosa cambia rispetto al SaaS gestito
| Aspetto | SaaS gestito | Self-host |
|---|---|---|
| Backend TSA | YodaLedger + FreeTSA + OpenTimestamps configurati per default | Configurabili. Puoi disabilitarne uno qualsiasi; puoi collegare direttamente un QTSP a pagamento (DataSure). |
| Storage delle registrazioni | S3 EU con lifecycle verso Glacier | Il tuo bucket compatibile con S3; il lifecycle è a tuo carico. |
| Recapito email | Sendgrid nella nostra infrastruttura | Configura le env var SMTP verso il tuo relay. |
| Recapito SMS | Twilio nella nostra infrastruttura (opt-in) | Twilio con il tuo account, oppure backend null se non usato. |
| Fatturazione Stripe | Integrata | Disabilitata per default — il self-host implica un tuo contratto di fatturazione. |
| Aggiornamenti | Deployiamo noi | Scarichi i tag delle immagini secondo la tua cadenza. |
Supporto
I clienti Enterprise self-host ottengono un canale dedicato Slack + Connect, uno SLA di 1 ora, walkthrough di aggiornamento pianificati e accesso diretto alla nostra rotazione on-call per gli incidenti di produzione.
Cosa c'è dopo
- Avvia una conversazione Enterprise
- Postura di sicurezza — cosa contiene il pacchetto del questionario InfoSec
- DPA — cosa contiene il pacchetto contrattuale