Auto-héberger NexBasira
La même stack Docker qui fait tourner notre SaaS managé est celle que nous livrons on-prem. Même backend Django, même SPA React, même chaîne d'audit. Disponible sur le niveau Enterprise avec un pack DPA + questionnaire InfoSec.
docs/SELF_HOST.md dans le dépôt source — nous le livrons aux clients Enterprise avec leur package d'installation. Contactez-nous via Contact (Enterprise) pour entamer la conversation. Pourquoi auto-héberger
- Obligation réglementaire — votre secteur ou votre juridiction exige que les preuves résident sur votre infrastructure.
- Isolation réseau — vos inspecteurs opèrent au sein d'un VPN ; une sortie vers un SaaS n'est pas envisageable.
- Résidence des données personnalisée — vous devez héberger les données dans une région spécifique ou un cloud souverain.
- Prévisibilité des coûts à grande échelle — au-delà de 5 000 inspections/mois, une infrastructure dédiée est souvent moins chère que la tarification à l'inspection.
Architecture
Six services (plus votre fournisseur d'identité existant pour le SSO) :
| Service | Rôle | Image |
|---|---|---|
| caddy | Terminaison TLS, routage HTTP, service des ressources statiques | caddy:2 |
| backend | Application Django — API REST, chaîne d'audit, SCIM, signature | ghcr.io/codelounge-io/certivisiopro/api (your tag) |
| frontend | Nginx servant la SPA compilée + le statique marketing | ghcr.io/codelounge-io/certivisiopro/web |
| postgres | Stockage de données principal, isolation des locataires appliquée par RLS | postgres:16 |
| redis | Broker Celery + cache + magasin de sessions | redis:7 |
| celery-worker + celery-beat | Tâches d'arrière-plan (interrogation TSA, post-traitement des enregistrements, purge de rétention) | identique au backend |
| livekit | SFU WebRTC pour le plan vidéo en direct | livekit/livekit-server |
| minio (optional) | Stockage objet compatible S3 pour les preuves + enregistrements | minio/minio |
Pour le stockage objet, vous pouvez aussi pointer vers n'importe quel service compatible S3 (AWS S3, Wasabi, OVH Object Storage, votre cluster Ceph on-premise existant). MinIO est inclus par défaut pour les véritables installations air-gap.
Configuration minimale
| Aspect | Minimum | Confortable |
|---|---|---|
| OS | Linux x86_64 (Ubuntu 22.04 LTS or Debian 12) | identique |
| Docker / Compose | Docker 24 + Compose v2 | identique |
| CPU | 4 vCPU | 8 vCPU |
| RAM | 8 GB | 16 GB |
| Disk | 200 Go SSD (BD + preuves initiales) | 500 Go + stockage objet compatible S3 pour les enregistrements |
| Network | IP statique, ports 443 + WebRTC (LiveKit) accessibles | identique |
| TLS | Caddy provisionne automatiquement via Let's Encrypt | Certificat fourni par vos soins (BYO) pour les réseaux fermés |
Amorçage
Grossièrement la structure automatisée par le script d'installation :
# 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" Sur un VPS Ubuntu 22.04 vierge, toute la séquence s'exécute en environ 5 minutes.
Ce que vous obtenez d'emblée
- À la fois
app.<votre-domaine>(SPA) +<votre-domaine>(site marketing, optionnel) sur un seul Caddy. - TLS automatique via Let's Encrypt — ou épinglage sur une autorité de certification privée sur les réseaux fermés.
- Migrations RLS Postgres + les quatre rôles système préchargés.
- Trigger Postgres de la chaîne d'audit (append-only).
- Seeder de session de démonstration pour que les administrateurs débutants puissent explorer avec des données réalistes.
Exploitation au quotidien
- Sauvegardes — dump logique Postgres nocturne + cycle de vie S3 pour les objets. Le runbook
docs/SELF_HOST.mdinclut des tests smoke de restauration depuis sauvegarde, dontaudit-chain verify. - Mises à niveau — récupérez le nouveau tag d'image,
docker compose up -d. Les migrations de schéma sont unidirectionnelles + testées en CI ; le rollback est documenté pour un usage en dernier recours. - Observabilité — Django émet des logs JSON structurés avec les labels
tenant_id+session_id; routez-les vers votre agrégateur de logs existant. - Métriques — endpoint exporteur Prometheus sur le backend ; scrapez-le depuis votre stack de supervision.
Ce qui diffère du SaaS managé
| Aspect | SaaS managé | Auto-hébergement |
|---|---|---|
| Backends TSA | YodaLedger + FreeTSA + OpenTimestamps configurés par défaut | Configurable. Vous pouvez en désactiver un ; vous pouvez brancher directement un QTSP payant (DataSure). |
| Stockage des enregistrements | S3 UE avec cycle de vie vers Glacier | Votre bucket compatible S3 ; le cycle de vie est à votre charge. |
| Distribution des e-mails | Sendgrid dans notre infrastructure | Configurez les variables d'environnement SMTP vers votre propre relais. |
| Distribution des SMS | Twilio dans notre infrastructure (opt-in) | Twilio avec votre propre compte, ou backend null s'il n'est pas utilisé. |
| Facturation Stripe | Intégrée | Désactivée par défaut — l'auto-hébergement implique votre propre contrat de facturation. |
| Mises à jour | Nous déployons | Vous récupérez les tags d'image à votre rythme. |
Support
Les clients Entreprise en auto-hébergement bénéficient d'un canal Slack + Connect dédié, d'un SLA d'une heure, de démonstrations de mise à niveau planifiées et d'un accès direct à notre astreinte pour les incidents de production.
Et ensuite
- Démarrer une conversation Entreprise
- Posture de sécurité — ce que contient le pack de questionnaire InfoSec
- DPA — ce que contient le pack contractuel