-
Notifications
You must be signed in to change notification settings - Fork 1
deployment_strategy
Stand: 26. Dezember 2025
Version: v1.3.1
Kategorie: 🚀 Deployment
Status: Production-Ready
Architecture: Offline-First vcpkg Build System
- Kernprinzip
- Quick Start
- Plattform-Builds
- Edition-spezifische Build-Strategie
- Build-Dokumentation
- Verwandte Dokumentation
ThemisDB nutzt eine vcpkg Offline-First Architektur für reproduzierbare, netzwerk-unabhängige Builds auf allen Plattformen:
✅ Offline-fähig: Builds ohne Internetzugang nach initialem Download
✅ Reproduzierbar: Identische Builds durch versionierte vcpkg baseline
✅ Schnell: Keine wiederholten Downloads, ~50% schnellere Builds
✅ CI/CD-optimiert: Cache kann zwischen Build-Agents geteilt werden
✅ Air-Gapped: Perfekt für Enterprise/Government Deployments
vcpkg/
├── downloads/ ← ~2.5 GB - SINGLE SOURCE OF TRUTH (alle Source-Archive)
│ ├── openssl-*.tar.gz
│ ├── rocksdb-*.tar.gz
│ ├── boost_*.tar.gz
│ └── [135+ packages]
│
├── buildtrees/ ← ~3 GB - Temporäre Build-Artefakte (nicht versioniert)
├── packages/ ← ~10 GB - Installierte Packages (nicht versioniert)
└── scripts/
└── buildsystems/
└── vcpkg.cmake ← CMake Integration
NEU in v4.0.0:
- ✅ Unified vcpkg offline cache für Windows, Linux, Docker, ARM
- ✅ Automatisches Cache-Management via
scripts/update-vcpkg-cache.ps1 - ✅ CI/CD-ready vcpkg binary cache (~600 MB komprimiert)
- ✅ Docker multi-stage builds mit vcpkg cache layer
- ✅ Raspberry Pi / ARM offline build support
Wichtig: Zuerst vcpkg cache initialisieren für offline builds:
# Windows
.\scripts\setup-vcpkg-offline.ps1
# Linux/macOS
./scripts/setup-vcpkg-offline.shDies lädt ~2.5 GB an Source-Archiven herunter in vcpkg/downloads/.
Einmalig erforderlich, danach sind alle Builds offline-fähig.
# Option 1: Schnellbuild mit allen Features (empfohlen für Deployment)
.\quick-build.ps1
# Option 2: Manuell mit VS 2022 Generator Preset (neu v4.0.0+)
$env:VCPKG_ROOT = "C:\VCC\themis\vcpkg"
cmake --preset windows-vs2022-release
cmake --build --preset windows-vs2022-release --parallel 8
# Option 3: Manuell mit CMake (Legacy)
cmake -B build-msvc -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DTHEMIS_CORE_SHARED=OFF `
-DTHEMIS_ENABLE_LLM=OFF
cmake --build build-msvc --config Release --parallel 8Output: build-msvc/Release/themis_server.exe
Zeit: 25-35 min (erste Build), 5-10 min (inkrementell)
CMake Preset: windows-vs2022-release (✨ neu, automatisch konfiguriert)
# Ubuntu/Debian
cmake -B build-linux -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" \
-DTHEMIS_ENABLE_LLM=ON
cmake --build build-linux -j$(nproc)# Nach vcpkg offline setup
cmake -B build-arm -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" \
-DTHEMIS_QNAP_BUILD=ON \ # Baseline x86-64, kein AVX
-DTHEMIS_ENABLE_LLM=OFF # Optional: LLM auf ARM
cmake --build build-arm -j4# Nutzt vcpkg cache layer automatisch
docker build -t themisdb:latest .
# Oder mit buildx für multi-arch
docker buildx build --platform linux/amd64,linux/arm64 \
-t themisdb:latest --push .# Minimal Build (Core nur, ~150 MB)
cmake -B build -DTHEMIS_ENABLE_LLM=OFF -DTHEMIS_BUILD_RPC_FRAMEWORK=OFF
# LLM Build (Core + llama.cpp, ~250 MB)
cmake -B build -DTHEMIS_ENABLE_LLM=ON
# Full Build (Core + LLM + RPC + GPU, ~350 MB)
cmake -B build -DTHEMIS_ENABLE_LLM=ON -DTHEMIS_BUILD_RPC_FRAMEWORK=ON -DTHEMIS_ENABLE_GPU=ON| Platform | Triplet | Compiler | Target | Binary Size | Package Size | Status |
|---|---|---|---|---|---|---|
| Windows | x64-windows | MSVC 2022 (17.14) | Windows 10+ (x64) | 32 MB | 23 MB | ✅ Produktiv |
| Linux (x64) | x64-linux | GCC 13.3 | Ubuntu 22.04+ (x64) | 32 MB | 29 MB | ✅ Produktiv |
| Linux (ARM64) | arm64-linux | GCC 11.4 | Ubuntu 22.04+ (ARM64) | ~35 MB | ~30 MB | 🧪 Beta |
| Docker | x64-linux / arm64-linux | GCC 11.4 | Docker Multi-Arch | Varies | ~150 MB | ✅ Produktiv |
| QNAP NAS | x64-linux | GCC 11.4 | QNAP x86_64 | ~30 MB | ~28 MB | 🧪 Beta |
| macOS | arm64-osx / x64-osx | Clang | macOS 11+ (x64/ARM) | TBD | TBD | ⏳ Geplant |
v1.3.1 Modular Build Matrix:
| Configuration | ENABLE_LLM | BUILD_RPC | ENABLE_CUDA | ENABLE_GPU | Binary Size | Build Time |
|---|---|---|---|---|---|---|
| Minimal | OFF | OFF | OFF | OFF | ~150 MB | 15-20 min |
| LLM | ON | OFF | OFF | OFF | ~250 MB | 25-30 min |
| LLM+GPU | ON | OFF | ON | ON | ~300 MB | 30-35 min |
| LLM+RPC | ON | ON | OFF | OFF | ~280 MB | 30-35 min |
| Full | ON | ON | ON | ON | ~350 MB | 35-40 min |
ThemisDB bietet drei Editions-Modelle mit unterschiedlichen Features, Lizenzmodellen und Build-Konfigurationen:
| Edition | Lizenz | GPU VRAM Limit | Max. Nodes | Plugins | LLM Features | Build Script |
|---|---|---|---|---|---|---|
| Community | MIT (Open Source) | 24 GB | 1 (Single-Node) | Core Only | Embedding, Similarity, Inference | build-community-release.ps1 |
| Enterprise | Commercial Subscription | 256 GB | 100 (Sharding) | Enterprise Add-Ons | + Fine-Tuning, Model Management | build-enterprise-release.ps1 |
| Hyperscaler | Custom OEM/Cloud | Unlimited | Unlimited (10000+) | All + Custom | Full Advanced Features | build-hyperscaler-release.ps1 |
Zielgruppe: Open Source Community, Startups, Entwicklung
# Windows - Community Edition
.\scripts\build-community-release.ps1 -Platform all -Configuration Release
# Oder manuell mit CMake
cmake -B build-community -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DTHEMIS_EDITION=COMMUNITY `
-DCMAKE_BUILD_TYPE=Release `
-DTHEMIS_BUILD_TESTS=ON `
-DTHEMIS_BUILD_BENCHMARKS=ON `
-DTHEMIS_ENABLE_GPU=ON `
-DTHEMIS_ENABLE_TRACING=ON
cmake --build build-community --config Release --parallel 8Linux - Community Edition:
cmake -B build-community \
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" \
-DTHEMIS_EDITION=COMMUNITY \
-DCMAKE_BUILD_TYPE=Release \
-DTHEMIS_ENABLE_GPU=ON \
-DTHEMIS_ENABLE_LLM=ON
cmake --build build-community -j$(nproc)Features (Community Edition):
- ✅ Kern-Datenbankfunktionalität (JSON, Graph, Vector, Time-Series)
- ✅ LLM Core Features (Embedding, Similarity Search, Inference)
- ✅ GPU Acceleration (bis 24 GB VRAM)
- ✅ Basic Monitoring & Metrics (Prometheus/Grafana)
- ❌ Keine Enterprise Plugins
- ❌ Kein Sharding/Multi-Master
- ❌ Kein RBAC/Field-Encryption
Zielgruppe: Mittlere bis große Unternehmen, Production Deployments
# Windows - Enterprise Edition
.\scripts\build-enterprise-release.ps1 -Environment production -Configuration Release
# Oder manuell mit CMake
cmake -B build-enterprise -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DTHEMIS_EDITION=ENTERPRISE `
-DCMAKE_BUILD_TYPE=Release `
-DTHEMIS_BUILD_TESTS=ON `
-DTHEMIS_BUILD_BENCHMARKS=ON `
-DTHEMIS_ENABLE_GPU=ON `
-DTHEMIS_ENABLE_TRACING=ON `
-DTHEMIS_ENABLE_LLM=ON `
-DTHEMIS_ENABLE_ENTERPRISE_PLUGINS=ON `
-DTHEMIS_ENABLE_MULTI_MASTER=ON `
-DTHEMIS_ENABLE_FIELD_ENCRYPTION=ON `
-DTHEMIS_ENABLE_RBAC=ON `
-DTHEMIS_ENABLE_HSM=ON
cmake --build build-enterprise --config Release --parallel 8Linux - Enterprise Edition:
cmake -B build-enterprise \
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" \
-DTHEMIS_EDITION=ENTERPRISE \
-DCMAKE_BUILD_TYPE=Release \
-DTHEMIS_ENABLE_GPU=ON \
-DTHEMIS_ENABLE_LLM=ON \
-DTHEMIS_ENABLE_ENTERPRISE_PLUGINS=ON \
-DTHEMIS_ENABLE_MULTI_MASTER=ON \
-DTHEMIS_ENABLE_FIELD_ENCRYPTION=ON \
-DTHEMIS_ENABLE_RBAC=ON \
-DTHEMIS_ENABLE_HSM=ON
cmake --build build-enterprise -j$(nproc)Features (Enterprise Edition):
- ✅ Alle Community Features
- ✅ Sharding & Horizontal Skalierung (bis 100 Nodes)
- ✅ Multi-Master Replication
- ✅ RBAC (Role-Based Access Control)
- ✅ Field-Level Encryption
- ✅ HSM Integration (Hardware Security Module)
- ✅ Enterprise Plugins (GPU Backends, Advanced Search)
- ✅ Advanced LLM Features (Fine-Tuning, Model Management)
- ✅ Advanced Monitoring & Metrics (Custom Dashboards, Alerting)
- ✅ Premium Support (SLA, 24/5)
Lizenz-Konfiguration:
# Lizenz-Datei bereitstellen
export THEMIS_LICENSE_FILE=/path/to/enterprise-license.lic
# Oder in config.yaml
license:
file: /etc/themis/enterprise-license.lic
type: enterprise
validation: strictZielgruppe: Cloud Provider (AWS, Azure, GCP), Massive Scale Deployments
# Windows - Hyperscaler Edition
.\scripts\build-hyperscaler-release.ps1 -Environment production -Configuration Release
# Oder manuell mit CMake
cmake -B build-hyperscaler -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DTHEMIS_EDITION=HYPERSCALER `
-DCMAKE_BUILD_TYPE=Release `
-DTHEMIS_BUILD_TESTS=ON `
-DTHEMIS_BUILD_BENCHMARKS=ON `
-DTHEMIS_ENABLE_GPU=ON `
-DTHEMIS_ENABLE_TRACING=ON `
-DTHEMIS_ENABLE_LLM=ON `
-DTHEMIS_ENABLE_ENTERPRISE_PLUGINS=ON `
-DTHEMIS_ENABLE_MULTI_MASTER=ON `
-DTHEMIS_ENABLE_FIELD_ENCRYPTION=ON `
-DTHEMIS_ENABLE_RBAC=ON `
-DTHEMIS_ENABLE_HSM=ON `
-DTHEMIS_ENABLE_HYPERSCALER_OPTIMIZATION=ON `
-DTHEMIS_ENABLE_ADVANCED_CDC=ON `
-DTHEMIS_ENABLE_GPU_CLUSTER=ON
cmake --build build-hyperscaler --config Release --parallel 8Features (Hyperscaler Edition):
- ✅ Alle Enterprise Features
- ✅ Unbegrenzte GPU VRAM (Multi-GPU Cluster)
- ✅ Unbegrenzte Nodes (1000+ Nodes)
- ✅ GPU-optimierte Queries (Distributed GPU Processing)
- ✅ Advanced CDC (Real-time Sync, Auto-Rebalancing)
- ✅ Hyperscaler-spezifische Optimierungen
- ✅ Custom Plugin System
- ✅ White-Label Support
- ✅ Dedicated Support (SLA, 24/7)
Alle Editions unterstützen Prometheus-Metriken, aber mit unterschiedlichem Umfang:
# Basis-Metriken (Community)
metrics:
enabled: true
exporter: prometheus
port: 9090
# Verfügbare Metriken
basic_metrics:
- http_requests_total
- http_request_duration_seconds
- database_queries_total
- database_query_duration_seconds
- memory_usage_bytes
- cpu_usage_percent# Erweiterte Metriken (Enterprise)
metrics:
enabled: true
exporter: prometheus
port: 9090
# Zusätzliche Enterprise-Metriken
enterprise_metrics:
- sharding_node_health
- replication_lag_seconds
- rbac_authorization_checks_total
- field_encryption_operations_total
- hsm_operations_total
- cache_hit_ratio
- query_plan_optimization_duration
# Custom Dashboards
dashboards:
- grafana_enterprise_overview
- grafana_security_audit
- grafana_performance_deep_dive# Vollständige Metriken (Hyperscaler)
metrics:
enabled: true
exporter: prometheus
port: 9090
# Alle Metriken + Hyperscaler-spezifisch
hyperscaler_metrics:
- gpu_cluster_utilization
- distributed_query_coordination
- cdc_replication_throughput
- auto_rebalancing_events
- cross_region_latency
- multi_tenant_isolation_score
# Advanced Monitoring
telemetry:
opentelemetry: true
distributed_tracing: true
custom_exporters: ["datadog", "newrelic", "splunk"]# CMakeLists.txt - Edition Validation
if(THEMIS_EDITION STREQUAL "ENTERPRISE")
# Prüfe Enterprise Lizenz zur Build-Zeit (optional)
if(DEFINED ENV{THEMIS_BUILD_LICENSE_KEY})
message(STATUS "Enterprise Build License: Verified")
else()
message(WARNING "No Enterprise Build License found. Runtime license required.")
endif()
add_compile_definitions(
THEMIS_EDITION_ENTERPRISE=1
THEMIS_GPU_MAX_VRAM_GB=256
THEMIS_SHARDING_MAX_NODES=100
)
elseif(THEMIS_EDITION STREQUAL "HYPERSCALER")
# Hyperscaler benötigt spezielle Build-Lizenz
if(NOT DEFINED ENV{THEMIS_HYPERSCALER_BUILD_KEY})
message(FATAL_ERROR "Hyperscaler Edition requires THEMIS_HYPERSCALER_BUILD_KEY")
endif()
add_compile_definitions(
THEMIS_EDITION_HYPERSCALER=1
THEMIS_GPU_MAX_VRAM_GB=0 # Unlimited
THEMIS_SHARDING_MAX_NODES=0 # Unlimited
)
endif()// src/license/license_validator.cpp
/**
* LicenseValidator - Validates ThemisDB edition licenses at runtime
*
* Reads and validates license files to ensure the binary edition matches
* the license edition and checks signature, expiry, and feature flags.
*
* @throws LicenseException if validation fails (invalid signature, expired, edition mismatch)
*/
class LicenseValidator {
public:
/**
* Validates a license file and returns the licensed edition
*
* @param licensePath Full path to the license file
* @return EditionType The edition specified in the valid license
* @throws LicenseException on validation failure
*/
static EditionType validateLicense(const std::string& licensePath) {
// Lese und validiere Lizenz-Datei
auto license = parseLicenseFile(licensePath);
// Prüfe Signatur und Gültigkeit
if (!verifySignature(license)) {
throw LicenseException("Invalid license signature");
}
if (license.expiryDate < getCurrentDate()) {
throw LicenseException("License expired");
}
// Prüfe Edition-Match
#ifdef THEMIS_EDITION_ENTERPRISE
if (license.edition != Edition::ENTERPRISE) {
throw LicenseException("Enterprise binary requires Enterprise license");
}
#endif
return license.edition;
}
};Siehe auch:
- EDITION_DEPLOYMENT_STRATEGY.md - Vollständige Edition-Architektur
- EDITION_CONTROL_MECHANISMS.md - Technische Implementierung
- PRICING_MODEL_v1.3.5.md - Lizenzmodelle & Preise
.\vcpkg\downloads\ (~2.5 GB, 135+ Source-Archive) ← SINGLE SOURCE OF TRUTH
├─ boost_1.89.0/
├─ rocksdb-8.x/
├─ simdjson-x/
├─ tbb-x/
├─ hnswlib-x/
├─ openssl-x/
├─ curl-x/
├─ spdlog-x/
├─ fmt-x/
├─ nlohmann-json-x/
├─ yaml-cpp-x/
├─ grpc-x/ ← v1.3.0 (RPC)
├─ protobuf-x/ ← v1.3.0 (RPC)
├─ faiss-x/ ← v1.3.0 (GPU)
└─ [weitere Archive...]
.\vcpkg\packages\ (~10 GB, ephemär)
└─ NICHT in Docker kopiert!
.\vcpkg\buildtrees\ (~3 GB, Temp. Build-Artifacts)
└─ NICHT in Docker kopiert!
.\src\llm\ ← v1.3.0 (llama.cpp integration, bundled)
├─ llamacpp_plugin.cpp
├─ gguf_loader.cpp
├─ paged_kv_cache.cpp
└─ [96 files total]
┌─────────────────────────────────────────┐
│ .\scripts\update-vcpkg-cache.ps1 │
│ (Läuft VOR jedem Build automatisch) │
└────────────┬────────────────────────────┘
│
├─→ 1. Git Pull vcpkg/master
│ (Aktualisiert Portfile-Versionen)
│
├─→ 2. Registry-Baseline-Update
│ (Neue Packages verfügbar)
│
├─→ 3. Pre-Fetch für Triplet
│ ├─ x64-windows
│ ├─ x64-linux
│ └─ arm64-linux
│
└─→ 4. .\vcpkg\downloads\ aktualisiert
(Alle Abhängigkeiten vorab)
Automatische Integration:
- Alle Build-Skripte rufen
update-vcpkg-cache.ps1auf - Optional deaktivierbar via
$SKIP_CACHE_UPDATE = $true - Docker-Builds kopieren nur
vcpkg/downloads/in Image (nicht packages/buildtrees/)
Scripts:
-
.\quick-build.ps1(automatisch) -
.\scripts\build-windows.ps1(manuell)
Methode 1: Manuell mit VS 2022 Generator (EMPFOHLEN)
# 1. VCPKG_ROOT setzen
$env:VCPKG_ROOT = "C:\VCC\themis\vcpkg"
# 2. CMake Konfiguration
cmake -B build-msvc -G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DTHEMIS_BUILD_TESTS=OFF `
-DTHEMIS_BUILD_BENCHMARKS=OFF `
-DTHEMIS_ENABLE_TRACING=OFF
# 3. Kompilierung (Release)
cmake --build build-msvc --config Release --parallel 8
# 4. Packaging
.\scripts\package-release-v1.3.0.ps1Bekannte Probleme & Lösungen:
⚠️ Thrift Build-Fehler (Zugriff verweigert): Arrow-Dependency, wird durch vcpkg binary cache gelöst⚠️ HybridLogicalClock nicht gefunden: Includereplication/multi_master_replication.hinreplication_manager.cpp(bereits gefixt)
Output:
-
build-msvc\Release\themis_server.exe(~32 MB Binary) -
release\themisdb-v1.3.0-windows-x64.zip(~23 MB Package mit DLLs) - Statisch gelinkte Dependencies + vcpkg DLLs
Time Estimate:
- CMake Konfiguration: ~13 Minuten (vcpkg install)
- Kompilierung: ~2-5 Minuten
- Packaging: ~30 Sekunden (eingebettet)
Script: .\scripts\build-linux.sh (oder WSL-Integration)
Via WSL (empfohlen für Windows-Entwickler):
# 1. CMake Konfiguration (in WSL)
wsl bash -c "cd /mnt/c/VCC/themis && \
export VCPKG_ROOT=/mnt/c/VCC/themis/vcpkg && \
cmake -B build-wsl -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=/mnt/c/VCC/themis/vcpkg/scripts/buildsystems/vcpkg.cmake \
-DTHEMIS_BUILD_TESTS=OFF \
-DTHEMIS_BUILD_BENCHMARKS=OFF \
-DTHEMIS_ENABLE_TRACING=OFF"
# 2. Kompilierung
wsl bash -c "cd /mnt/c/VCC/themis/build-wsl && cmake --build . --config Release -j8"
# 3. Packaging
wsl bash -c "cd /mnt/c/VCC/themis && \
tar -czf release/themisdb-v1.3.0-linux-x64.tar.gz \
-C build-wsl themis_server themis_demo themis_demo_encryption \
--transform 's|^|themisdb-1.3.0/bin/|'"Native Linux:
# Identisch, aber ohne wsl prefix und /mnt/c Pfade
cmake -B build-linux -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake"
cmake --build build-linux -j$(nproc)Output:
-
build-wsl/themis_server(32 MB Binary, ELF x86_64) -
release/themisdb-v1.3.0-linux-x64.tar.gz(29 MB Package)
Time Estimate:
- CMake Konfiguration: ~38 Minuten (vcpkg install)
- Kompilierung: ~5-10 Minuten
- Packaging: ~10 Sekunden
Sie können die Artefaktform per CMake steuern:
# Monolithisch: statischer Core, exe beinhaltet Logik
cmake -B build-msvc `
-G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DCMAKE_BUILD_TYPE=Release `
-DTHEMIS_CORE_SHARED=OFF
# Standard (dynamisch): exe + DLL/.so – geteilte Core-Library
cmake -B build-msvc `
-G "Visual Studio 17 2022" -A x64 `
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" `
-DCMAKE_BUILD_TYPE=Release `
-DTHEMIS_CORE_SHARED=ON
# Maximale Portabilität (QNAP/alt): statisch linkende Runtime
cmake -B build-linux \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE="vcpkg/scripts/buildsystems/vcpkg.cmake" \
-DVCPKG_TARGET_TRIPLET=x64-linux \
-DTHEMIS_STATIC_BUILD=ONHinweise:
- Standard ist dynamisch:
THEMIS_CORE_SHARED=ON(Windows/Linux). Pakete enthalten DLL/.so zusätzlich zum Binary. - QNAP/Static:
THEMIS_STATIC_BUILD=ONoderTHEMIS_QNAP_BUILD=ONerzwingen statischen Core. - Unter Windows exportiert CMake für
THEMIS_CORE_SHARED=ONautomatisch Symbole (WINDOWS_EXPORT_ALL_SYMBOLS).
Script: .\scripts\build-docker.ps1
# 1. Cache-Update (beide Triplets)
.\scripts\update-vcpkg-cache.ps1 -Triplet x64-linux, arm64-linux
# 2. Docker Buildx Configuration
docker buildx ls # Stellt sicher, dass buildx verfügbar ist
# 3. Multi-Arch Build
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag themisdb/themisdb:v$((Get-Content VERSION).Trim()) \
--tag themisdb/themisdb:latest \
--build-arg VCPKG_ENABLE_ONLINE=OFF \
--build-arg THEMIS_VERSION=$((Get-Content VERSION).Trim()) \
# Version wird im Build aus `VERSION` bezogen (OCI Label: org.opencontainers.image.version)
.
# 4. Optionaler Push zu Registry
docker buildx build \
--platform linux/amd64,linux/arm64 \
--push \
--tag themisdb/themisdb:v$((Get-Content VERSION).Trim()) \
.
# 5. Time Estimate: 50-60 min (beide Architekturen)Dockerfile Highlights:
- Multi-stage Build (Größe ~150MB statt 500MB+)
- Pre-cached Dependencies aus
.\vcpkg\downloads\ -
VCPKG_ENABLE_ONLINE=OFF(keine Online-Fetches während Build) - Offline-First: Sämtliche Archives müssen vorab in Cache vorhanden sein
Output:
-
themisdb/themisdb:v1.0.1(linux/amd64) -
themisdb/themisdb:v1.0.1(linux/arm64) - Manifest-Liste für Multi-Arch Pull
.\scripts\update-vcpkg-cache.ps1 `
-Triplet @("x64-windows", "x64-linux", "arm64-linux") `
-Force:$falseSchritte:
-
Git Update
cd vcpkg && git pull origin master
Holt neueste Portfile-Versionen von vcpkg-Repository
-
Registry-Baseline aktualisieren
vcpkg x-update-baseline --add-initial-baseline
Synchronisiert verfügbare Package-Versionen
-
Abhängigkeits-Pre-Fetch pro Triplet
vcpkg fetch-all-archives --triplet x64-windows vcpkg fetch-all-archives --triplet x64-linux vcpkg fetch-all-archives --triplet arm64-linux
Lädt alle Source-Archives für die Triplets herunter
-
Cache-Validierung
- Überprüft, dass alle 119 Archives vorhanden sind
- Berichtet Größe (~2GB) und Dateianzahl
- Optional: Generiert Checksums
Alle Build-Skripte rufen diese Funktion automatisch auf:
# Beispiel: .\scripts\build.ps1
function Invoke-BuildTarget {
# Automatic Cache Update (verhindert offline-Fehler)
.\scripts\update-vcpkg-cache.ps1 -Triplet $tripletList
# Platform-specific build follows...
}Kann deaktiviert werden via Umgebungsvariable:
$env:SKIP_VCPKG_UPDATE = "1"
.\scripts\build.ps1 -Target windows-
Cache einmalig synchronisieren (mit Internet):
# Auf Build-Maschine mit Internet: .\scripts\update-vcpkg-cache.ps1 -Triplet x64-windows, x64-linux, arm64-linux # Dann .\vcpkg\downloads\ (~2GB) sichern Compress-Archive -Path ".\vcpkg\downloads" -DestinationPath "vcpkg-cache-2025-12-12.zip"
-
Auf Offline-Maschine:
# Cache hochladen Expand-Archive -Path "vcpkg-cache-2025-12-12.zip" -DestinationPath "." # Builds funktionieren ohne Netzwerk $env:SKIP_VCPKG_UPDATE = "1" .\scripts\build.ps1 -Target all
-
Docker Offline-Build (mit lokalem Cache):
docker build \ --build-arg VCPKG_ENABLE_ONLINE=OFF \ --build-arg VCPKG_ASSET_SOURCES="file:///opt/vcpkg/downloads" \ -t themisdb/themisdb:v1.0.1-offline .
| Package | Version Range | Triplet Support | Größe Cache |
|---|---|---|---|
| rocksdb | [8.0,) | all | ~200 MB |
| simdjson | [3.0,) | all | ~20 MB |
| tbb | [2021.0,) | all | ~50 MB |
| hnswlib | [0.7,) | all | ~5 MB |
| boost-system | [1.89.0] | all | ~30 MB |
| boost-asio | [1.89.0] | all | ~25 MB |
| boost-beast | [1.89.0] | all | ~35 MB |
| boost-optional | [1.89.0] | all | ~5 MB |
| openssl | [3.0,) | all | ~80 MB |
| fmt | [10.0,) | all | ~10 MB |
| spdlog | [1.12,) | all | ~15 MB |
| nlohmann-json | [3.11,) | all | ~2 MB |
| curl | [8.0,) | all | ~30 MB |
| yaml-cpp | [0.8,) | all | ~15 MB |
| Gesamt | ~522 MB |
Hinweis: Zusätzliche Abhängigkeiten (z.B. Zstandard, LZ4) sind Transitive Dependencies und werden automatisch mitgezogen.
cmake, ninja, vcpkg, git, powershell 5.1+
Visual Studio 2022 (Buildtools mind.)
cmake 3.25+
ninja-build
g++ 11.4+
git
python3
Repository: themisdb/themisdb
Tags:
-
latest- Neueste stabile Release (prod) -
v1.0.1- Spezifische Version -
v1.0- Minor-Version -
v1- Major-Version -
edge- Nightly Builds (dev) -
qnap- QNAP-optimiert (latest) -
v1.0.1-qnap- QNAP-spezifische Version
Build & Push:
# Automatisch via CI/CD
.\scripts\build.ps1 -Target docker -Push -Tag v1.0.1Abruf:
# Multi-Arch Pull (auto selects amd64 or arm64)
docker pull themisdb/themisdb:v1.0.1
# Explizit amd64
docker pull themisdb/themisdb:v1.0.1 --platform linux/amd64
# Explizit arm64
docker pull themisdb/themisdb:v1.0.1 --platform linux/arm64URL: https://github.com/makr-code/ThemisDB/releases
Assets pro Release:
- Quellcode (ZIP + tar.gz) - Auto-generiert
- Binary-Pakete:
themisdb-v1.0.1-linux-x64.zipthemis-v1.0.1-windows-x64.zipthemisdb_1.0.1_amd64.debthemisdb-1.0.1-1.x86_64.rpmthemisdb-v1.0.1-qnap-x64.zip
- Checksums:
SHA256SUMS.txt - Release Notes:
RELEASE_NOTES_v1.0.1.md
Build & Upload:
# Lokal alle Binäre erzeugen
.\scripts\build.ps1 -Target all
# Upload zu GitHub Release (via CI/CD oder Manual)
# Assets landen in release/ Verzeichnis# Repository hinzufügen
echo "deb https://repo.themisdb.org/debian stable main" | \
sudo tee /etc/apt/sources.list.d/themisdb.list
# Installieren
sudo apt update
sudo apt install themisdb# Repository hinzufügen
sudo tee /etc/yum.repos.d/themisdb.repo <<EOF
[themisdb]
name=ThemisDB Repository
baseurl=https://repo.themisdb.org/rpm/el\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://repo.themisdb.org/rpm/RPM-GPG-KEY-themisdb
EOF
# Installieren
sudo yum install themisdbbrew install themisdb-
VERSIONaktualisieren (Single-Source-of-Truth) - Update
CHANGELOG.mdmit Release-Notes - Update
docs/VERSION.jsonStruktur/Datei - Alle Unit-Tests lokal laufen (pass)
- Build all platforms lokal testen
- Performance-Benchmarks (optional)
-
Git Tag erstellen:
$ver = (Get-Content VERSION).Trim() git tag -a v$ver -m "Release v$ver: [Release Description]" git push origin v$ver
-
Automatische CI/CD (GitHub Actions):
- Trigger auf Tag-Push
- Alle Builds parallel (Windows/Linux/Docker)
- Binary-Extraktion & Packaging
- Debian/RPM Package-Builds
- GitHub Release erstellen
- Assets hochladen
- Docker Images pushen
-
docs/VERSION.jsonupdaten
-
Manuelle Schritte (bis vollständig automatisiert):
# Local Test-Build all platforms .\scripts\build.ps1 -Target all # Docker Push (falls nicht via CI/CD) .\scripts\build.ps1 -Target docker -Push -Tag (Get-Content VERSION).Trim()
- Docker Hub Images verifizieren
- Installation aus allen Package-Formaten testen
- Dokumentations-Website aktualisieren
- Release ankündigen (Blog, Social Media)
- Probleme monitoren & Hotfixes vorbereiten
MAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
Beispiele:
- 1.0.0 # Stabile Release
- 1.1.0 # Neue Features (rückwärts kompatibel)
- 1.1.1 # Bugfixes
- 2.0.0 # Breaking Changes
- 1.2.0-beta.1 # Beta-Release
- 1.2.0-rc.1 # Release Candidate
- MAJOR: Breaking API Changes, Major Architecture-Changes
- MINOR: Neue Features, rückwärts-kompatible Änderungen
- PATCH: Bugfixes, Security Patches, Performance Improvements
-
alpha- Frühe Entwicklung, instabil -
beta- Feature-complete, Testing-Phase -
rc(Release Candidate) - Final Testing
# GPG-Signing (Zukunft)
gpg --detach-sign --armor themisdb_1.0.1_amd64.deb
gpg --detach-sign --armor themisdb-1.0.1-1.x86_64.rpm- SHA256 Checksums für alle Packages
- Veröffentlicht in
SHA256SUMS.txt - Automatische Verifikation in Install-Skripten
# Manual SHA256-Verifikation
sha256sum -c SHA256SUMS.txt- Multi-stage Builds (minimal attack surface)
- Non-root User-Execution
- Regular Base-Image Updates (ubuntu:22.04)
- Vulnerability Scanning (Trivy)
- Deterministische Builds (reproducible artifacts)
- Signed Git Tags
- Build-Logs archivieren
- Dependency Lock-File (vcpkg baseline)
Symptom: Docker-Build schlägt fehl beim Download von Boost/Arrow
Lösung:
-
Cache manuell aktualisieren:
$env:SKIP_VCPKG_UPDATE = "" # Aktiviere Cache-Updates .\scripts\update-vcpkg-cache.ps1 -Triplet x64-linux, arm64-linux
-
Retry Docker-Build:
.\scripts\build-docker.ps1 -
Offline-Mode testen:
$env:VCPKG_ENABLE_ONLINE = "OFF" .\scripts\build.ps1 -Target docker
Symptom: CMAKE_TOOLCHAIN_FILE nicht vorhanden
Lösung:
-
Stelle sicher, dass vcpkg initialisiert ist:
cd vcpkg && git pull origin master
-
Lösche Build-Cache:
Remove-Item -Path build-msvc, build-linux -Recurse -Force
-
Neuer Build:
.\scripts\build.ps1 -Target windows
Symptom: docker pull schlägt auf ARM-Maschine fehl
Lösung:
-
Verifiziere, dass beide Architekturen gepushed wurden:
docker buildx ls docker manifest inspect themisdb/themisdb:v1.0.1
-
Expliziter Platform-Pull:
docker pull themisdb/themisdb:v1.0.1 --platform linux/arm64
| Platform | Cache-Status | Time | Notes |
|---|---|---|---|
| Windows (MSVC) | ✓ Warm | 25-35 min | First build, full compilation |
| Windows (MSVC) | ✓ Incremental | 5-10 min | Recompile only changed |
| Linux (GCC) | ✓ Warm | 30-40 min | First build, all deps |
| Linux (GCC) | ✓ Incremental | 8-12 min | Partial rebuild |
| Docker amd64 | ✓ Warm | 35-45 min | Single-arch |
| Docker arm64 | ✓ Warm | 40-50 min | Emulated (QEMU) |
| Docker Multi | ✓ Warm | 50-60 min | Both architectures |
| Cache-Update | — | 8-15 min | Pre-fetch all archives |
-
Parallel Compilation:
-j 4(anpassbar via Cores) - Ninja statt Make: ~30% schneller
- Pre-fetched Cache: Verhindert Runtime-Downloads
- Incremental Builds: Header-Only Changes minimal
- GitHub Actions Dashboard: Actions Tab
- Build-Logs: Actions → Workflow Run → Logs
- Failure Notifications: Email, Slack (optional)
ThemisDB enthält Subsystem zur Versions-Überprüfung:
- Periodisches Polling gegen
docs/VERSION.json - Notifications für neue Releases
- Admin-Benachrichtigungen
- Bibliotheken-Übersicht - Alle verwendeten Libraries mit Vendor-Dokumentation
- Build-Optionen Referenz - Alle CMake Schalter (61 Optionen)
- vcpkg Offline Strategy - Offline Build System Details
- Docker Deployment - Container Deployment Guide
- Build Guide - Detaillierte Build-Anleitung
- Build System - Architektur-Übersicht
- Implementation Summary - Was/Warum/Wie
- Docker Guide - Docker Deployment
- Packaging Guide - Package-Erstellung
| Variable | Default | Platform | Purpose |
|---|---|---|---|
| SKIP_VCPKG_UPDATE | false |
All | Cache-Update überspringen |
| VCPKG_ENABLE_ONLINE | ON |
All | Online-Fetches erlauben (OFF für Offline) |
| VCPKG_ASSET_SOURCES | (default) | All | Alternative Asset-Quelle |
| VCPKG_BINARY_SOURCES | (default) | All | Alternative Binary-Cache |
| VERSION (Datei) | n/a | All | Single-Source-of-Truth für Release-Version |
| DOCKER_BUILDKIT | 1 |
Docker | BuildKit Engine aktivieren |
| DOCKER_BUILDKIT_PROGRESS | plain |
Docker | Build-Ausgabe-Format |
Letzte Aktualisierung: 26. Dezember 2025
Autor: Build System v2.0 Implementation Team
Status: Production-Ready ✓
- Architecture-ACCESS-MODEL-IMPLEMENTATION-SUMMARY
- Architecture-ADR-003-pg-dump-sql-parser
- Architecture-BASEENTITY-PRINCIPLE
- Architecture-CACHE-STORAGE-INTEGRATION
- Architecture-CMAKE-ARCHITECTURE
- Architecture-CMAKE-FLAGS-REFERENCE
- Architecture-CMAKE-MODULAR-ARCHITECTURE
- Architecture-CONCERNS-ARCHITECTURE-DIAGRAM
- Architecture-CONCERNS-IMPLEMENTATION-SUMMARY
- Architecture-CONTENT-MODEL
- Architecture-COPILOT-THEMISDB-GRAPH-RAG-BACKEND-ARCHITECTURE
- Architecture-CRYPTO-AND-KEYS
- Architecture-FEATURE-FLAGS-REFERENCE
- Architecture-GPU-ARCHITECTURE-REVIEW-TEMPLATE
- Architecture-HTTP-SHUTDOWN-HARDENING
- Architecture-MIGRATION-GUIDE-CONCERNS
- Architecture-MIGRATION-GUIDE-v13-v14
- Architecture-MODULARIZATION-GUIDE
- Architecture-MODULAR-ARCHITECTURE-ROADMAP
- Architecture-MODULE-ARCHITECTURE-INDEX
- Architecture-P1D01-ISSMPLUGIN-DESIGN-REVIEW
- Architecture-P1-D01-ISSMPLUGIN-DESIGN-REVIEW
- Architecture-P1-D08-MAMBA-GOVERNANCE-CONTRACT
- Architecture-P1-P2-IMPLEMENTATION-COMPLETION-INDEX
- Architecture-PHASE0-COMPLETION-ASSESSMENT
- Architecture-PHASE3-QUERYENGINE-DI-ARCHITECTURE
- Architecture-PHASE4-INDEX-MANAGER-DI
- Architecture-POSTGRESQL-WIRE-PROTOCOL
- Architecture-QUERYENGINE-IMPLEMENTATION-GUIDE
- Architecture-QUERY-SCHEDULING
- Architecture-RAFT-CONSENSUS-DESIGN
- Architecture-README
- Architecture-README-SSM-HYBRID-IMPLEMENTATION
- Architecture-REFACTORING-SUMMARY
- Architecture-RESOURCE-POOLING
- Architecture-SOURCE-DIRECTORY-GUIDE
- Architecture-THEMIS-CORE-GUIDE
- Architecture-UNIFIED-ACCESS-MODEL
- Architecture-WAL-GRPC-MTLS-CONFIGURATION
- Architecture-WIRE-PROTOCOL-RETRY
- Architecture-boltzmann-observability-draft
- Architecture-experimental-logarithmic-vector-storage
- Architecture-llm-wiki-mvp-adr
- Architecture-rewrite-engine-architecture
- Architecture-rope-api-architecture
- Architecture-ssm-gguf-mamba-status
- Architecture-ssm-hybrid-analysis
- Architecture-ssm-hybrid-rollout-plan
- Architecture-ssm-plugin-interface-design-review
- Architecture-transaction-coordinators
- Architecture-wiki-secondary-index
- Architecture-wire-protocol
- Governance-DISABLED-STUB-POLICY
- Governance-DOCS-PR-POLICY
- Governance-GA-PROMOTION-SIGN-OFF
- Governance-GITHUB-MILESTONES-SETUP
- Governance-MATURITY-CLAIM-VERIFICATION-CHECKLIST
- Governance-MATURITY-EVIDENCE-REGISTRY
- Governance-MERGE-GATE-BOT-CONFIG
- Governance-MERGE-GATE-STATUS-LIVE
- Governance-PHASE3-ENFORCEMENT-RUNBOOK
- Governance-PHASE-1-CLOSURE-REPORT
- Governance-PHASE-CLOSURE-POLICY
- Governance-PHASE-DEPENDENCY-GRAPH
- Governance-PLUGIN-SUBMODULE-ROLLBACK
- Governance-PRODUCTION-READY-2026-DELIVERY-PLAN
- Governance-PR-VERSION-TARGETING
- Governance-PR-VERSION-TARGETING-BACKFILL
- Governance-QUERY-MODULE-STATUS
- Governance-README
- Governance-RELEASE-PROMOTION-GATE-POLICY
- Governance-RELEASE-VALIDATION-CHECKLIST
- Governance-SECURITY-MODULE-5671-EVIDENCE-SUMMARY
- Governance-SHARDING-P6-RESIDUAL-RISK-ACCEPTANCE
- Governance-SOURCECODE-COMPLIANCE-GOVERNANCE
- Governance-UPDATES-DEVELOPMENT-STATUS-SIGN-OFF
- Governance-WAVE-C-IMPLEMENTATION-COMPLETE
- Module-acceleration-Roadmap
- Module-access-model-Roadmap
- Module-ai-Roadmap
- Module-analytics-Roadmap
- Module-api-Roadmap
- Module-aql-Roadmap
- Module-auth-Roadmap
- Module-base-Roadmap
- Module-cache-Roadmap
- Module-cdc-Roadmap
- Module-chaos-Roadmap
- Module-chimera-Roadmap
- Module-config-Roadmap
- Module-content-Roadmap
- Module-core-Roadmap
- Module-distributed-knowledge-Roadmap
- Module-distributed-tensor-Roadmap
- Module-document-Roadmap
- Module-ethics-ai-Roadmap
- Module-evaluation-Roadmap
- Module-execution-Roadmap
- Module-exporters-Roadmap
- Module-failover-Roadmap
- Module-geo-Roadmap
- Module-governance-Roadmap
- Module-gpu-Roadmap
- Module-graph-Roadmap
- Module-image-analysis-Roadmap
- Module-importers-Roadmap
- Module-index-Roadmap
- Module-ingestion-Roadmap
- Module-llama-cpp-Roadmap
- Module-llm-Roadmap
- Module-llm-streaming-Roadmap
- Module-llm-wiki-Roadmap
- Module-maintenance-Roadmap
- Module-metadata-Roadmap
- Module-network-Roadmap
- Module-observability-Roadmap
- Module-onnx-clip-Roadmap
- Module-performance-Roadmap
- Module-plugins-Roadmap
- Module-process-Roadmap
- Module-projects-Roadmap
- Module-prompt-engineering-Roadmap
- Module-query-Roadmap
- Module-rag-Roadmap
- Module-replication-Roadmap
- Module-retrieval-Roadmap
- Module-rpc-grpc-Roadmap
- Module-scheduler-Roadmap
- Module-scraper-Roadmap
- Module-search-Roadmap
- Module-security-Roadmap
- Module-server-Roadmap
- Module-sharding-Roadmap
- Module-stable-diffusion-Roadmap
- Module-storage-Roadmap
- Module-temporal-Roadmap
- Module-tensor-Roadmap
- Module-themis-Roadmap
- Module-timeseries-Roadmap
- Module-toolbox-Roadmap
- Module-training-Roadmap
- Module-transaction-Roadmap
- Module-updates-Roadmap
- Module-user-storage-encrypted-Roadmap
- Module-utils-Roadmap
- Module-vector-search-Roadmap
- Module-voice-Roadmap
- Module-whisper-Roadmap