Self-hosting NexBasira
Ten sam stack Docker, który obsługuje nasz zarządzany SaaS, dostarczamy w wersji on-prem. Ten sam backend Django, ta sama React SPA, ten sam łańcuch audytu. Dostępne w warstwie Enterprise wraz z DPA i pakietem kwestionariusza InfoSec.
docs/SELF_HOST.md w repozytorium źródłowym — dostarczamy go klientom Enterprise wraz z pakietem instalacyjnym. Skontaktuj się przez Kontakt (Enterprise), aby rozpocząć rozmowę. Dlaczego self-hosting
- Wymóg regulacyjny — sektor lub jurysdykcja wymaga, aby materiał dowodowy znajdował się we własnej infrastrukturze.
- Izolacja sieciowa — inspektorzy działają wewnątrz VPN; ruch wychodzący do SaaS nie wchodzi w grę.
- Niestandardowa rezydencja danych — dane muszą trafić do określonego regionu lub chmury suwerennej.
- Przewidywalność kosztów przy skali — przy >5 tys. inspekcji/miesiąc dedykowana infrastruktura jest często tańsza niż warstwa rozliczana za inspekcję.
Architektura
Sześć usług (plus istniejący dostawca tożsamości dla SSO):
| Usługa | Co robi | Obraz |
|---|---|---|
| caddy | Terminacja TLS, routing HTTP, serwowanie zasobów statycznych | caddy:2 |
| backend | Aplikacja Django — REST API, łańcuch audytu, SCIM, podpisywanie | ghcr.io/codelounge-io/certivisiopro/api (your tag) |
| frontend | Nginx serwujący zbudowaną SPA + statyczne zasoby marketingowe | ghcr.io/codelounge-io/certivisiopro/web |
| postgres | Główna baza danych, izolacja tenantów wymuszana przez RLS | postgres:16 |
| redis | Broker Celery + cache + magazyn sesji | redis:7 |
| celery-worker + celery-beat | Zadania w tle (odpytywanie TSA, przetwarzanie nagrań, przeglądanie retencji) | jak backend |
| livekit | WebRTC SFU dla warstwy wideo na żywo | livekit/livekit-server |
| minio (optional) | Magazyn obiektowy zgodny z S3 dla materiału dowodowego + nagrań | minio/minio |
W zakresie magazynu obiektowego można również wskazać dowolną usługę zgodną z S3 (AWS S3, Wasabi, OVH Object Storage, istniejący klaster on-prem Ceph). MinIO jest dołączony jako domyślny wybór dla prawdziwie odizolowanych (air-gap) instalacji.
Minimalne wymagania
| Zagadnienie | Minimum | Komfortowo |
|---|---|---|
| OS | Linux x86_64 (Ubuntu 22.04 LTS or Debian 12) | tak samo |
| Docker / Compose | Docker 24 + Compose v2 | tak samo |
| CPU | 4 vCPU | 8 vCPU |
| RAM | 8 GB | 16 GB |
| Disk | 200 GB SSD (DB + początkowy materiał dowodowy) | 500 GB + magazyn obiektowy zgodny z S3 dla nagrań |
| Network | Statyczny adres IP, dostępne porty 443 + WebRTC (LiveKit) | tak samo |
| TLS | Caddy automatycznie provisionuje przez Let's Encrypt | Własny certyfikat (BYO) dla sieci zamkniętych |
Bootstrap
Z grubsza kształt tego, co automatyzuje skrypt instalacyjny:
# 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" Na czystym VPS Ubuntu 22.04 cała sekwencja wykonuje się w około 5 minut.
Co otrzymujesz od razu (out of the box)
- Zarówno
app.<your-domain>(SPA) jak i<your-domain>(strona marketingowa, opcjonalnie) na jednym Caddy. - Automatyczny TLS przez Let's Encrypt — lub przypięcie do prywatnego CA w sieciach zamkniętych.
- Migracje RLS Postgres + zaseedowane cztery role systemowe.
- Trigger łańcucha audytu w Postgres (append-only).
- Seeder sesji demonstracyjnej, aby administratorzy mogli za pierwszym razem eksplorować realistyczne dane.
Operacje Day-2
- Kopie zapasowe — nocny logiczny zrzut Postgres + cykl życia S3 dla obiektów. Runbook
docs/SELF_HOST.mdzawiera testy dymne przywracania z kopii zapasowej, w tymaudit-chain verify. - Aktualizacje — pobierz nowy tag obrazu,
docker compose up -d. Migracje schematu są wyłącznie w przód i testowane w CI; rollback jest udokumentowany na wypadek ostateczności. - Obserwowalność — Django emituje ustrukturyzowane logi JSON z etykietami
tenant_id+session_id; kieruj je do istniejącego agregatora logów. - Metryki — endpoint eksportera Prometheus na backendzie; scrapuj ze swojego stacku monitoringu.
Czym różni się od zarządzanego SaaS
| Zagadnienie | Zarządzany SaaS | Self-hosting |
|---|---|---|
| Backendy TSA | YodaLedger + FreeTSA + OpenTimestamps skonfigurowane domyślnie | Konfigurowalne. Można wyłączyć dowolny; można podpiąć płatny QTSP (DataSure) bezpośrednio. |
| Magazyn nagrań | S3 w UE z cyklem życia do Glacier | Twój bucket zgodny z S3; cykl życia po Twojej stronie. |
| Dostarczanie e-maili | Sendgrid w naszej infrastrukturze | Skonfiguruj zmienne środowiskowe SMTP dla własnego przekaźnika. |
| Dostarczanie SMS | Twilio w naszej infrastrukturze (opt-in) | Twilio z własnym kontem lub backend null, jeśli nieużywane. |
| Rozliczenia Stripe | Wbudowane | Domyślnie wyłączone — self-hosting oznacza własną umowę rozliczeniową. |
| Aktualizacje | My wdrażamy | Pobierasz tagi obrazów we własnym rytmie. |
Wsparcie
Klienci self-hostingu w wersji Enterprise otrzymują dedykowany kanał Slack + Connect, SLA na poziomie 1 godziny, zaplanowane przewodniki po aktualizacjach oraz bezpośredni dostęp do naszego dyżuru on-call w przypadku incydentów produkcyjnych.
Co dalej
- Rozpocznij rozmowę Enterprise
- Postawa bezpieczeństwa — co zawiera pakiet kwestionariusza InfoSec
- DPA — co zawiera pakiet umowny