Auto-héberger NexBasira
La même stack Docker qui fait tourner notre SaaS géré est ce que nous livrons on-premise. Même backend Django, même SPA React, même chaîne d'audit. Disponible sur le niveau Enterprise avec un DPA + un pack de questionnaires 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 engager la conversation. Pourquoi l'auto-hébergement
- Obligation réglementaire — votre secteur ou votre juridiction impose que les preuves résident sur votre infrastructure.
- Isolation réseau — vos inspecteurs opèrent au sein d'un VPN ; toute sortie vers un SaaS est exclue.
- Résidence des données sur mesure — vous devez héberger les données dans une région précise ou un cloud souverain.
- Prévisibilité des coûts à grande échelle — au-delà de 5 000 inspections/mois, une infrastructure dédiée revient souvent moins cher que la formule à 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 site marketing statique | ghcr.io/codelounge-io/certivisiopro/web |
| postgres | Magasin de données principal, isolation des tenants imposée par RLS | postgres:16 |
| redis | Broker Celery + cache + magasin de sessions | redis:7 |
| celery-worker + celery-beat | Tâches en arrière-plan (interrogation TSA, post-traitement des enregistrements, balayage 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 + les 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 installations réellement air-gap.
Prérequis minimaux
| Poste | 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 (BDD + 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
Grosso modo ce que le script d'installation automatise :
# 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, l'ensemble de la séquence s'exécute en 5 minutes environ.
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 CA privée pour les réseaux fermés.
- Migrations RLS Postgres + les quatre rôles système initialisés.
- Trigger Postgres de chaîne d'audit (append-only).
- Générateur de session de démonstration pour que les nouveaux administrateurs puissent explorer avec des données réalistes.
Exploitation au quotidien
- Sauvegardes — dump logique Postgres chaque nuit + cycle de vie S3 pour les objets. Le runbook
docs/SELF_HOST.mdinclut des smoke tests 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 forward-only et testées en CI ; le rollback est documenté 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 exporter Prometheus sur le backend ; collectez-le depuis votre stack de supervision.
Ce qui diffère du SaaS géré
| Poste | SaaS géré | Auto-hébergement |
|---|---|---|
| Backends TSA | YodaLedger + FreeTSA + OpenTimestamps configurés par défaut | Configurable. Vous pouvez en désactiver n'importe lequel ; vous pouvez brancher directement un QTSP payant (DataSure). |
| Stockage des enregistrements | S3 en UE avec cycle de vie vers Glacier | Votre bucket compatible S3 ; le cycle de vie vous incombe. |
| 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 si inutilisé. |
| 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 Enterprise en auto-hébergement bénéficient d'un canal Slack + Connect dédié, d'un SLA d'une heure, de sessions d'accompagnement planifiées pour les mises à niveau, et d'un accès direct à notre astreinte pour les incidents de production.
Et ensuite
- Entamer une discussion Enterprise
- Posture de sécurité — le contenu du pack de questionnaire InfoSec
- DPA — le contenu du dossier contractuel