Hier werden mehrere Einrichtungsvarianten vorgestellt. Sie können diejenige auswählen, die Ihren Anforderungen am besten entspricht, oder sie nach Belieben ändern. Wenn Sie nicht wissen, wo Sie anfangen sollen, ist die
Einrichtung über Docker Compose
eine ausgezeichnete Wahl.
Nachdem Sie die Schritte einer der Varianten befolgt haben, hat Ihr Server eine Standardkonfiguration und sollte über das Internet erreichbar sein. Danach sollten Sie
einen Admin User Account hinzufügen
.
Unterabschnitte von Starten des Servers
Docker Compose
Das empfohlene und einfachste Setup für BOMnipotent Server verwendet
Docker Compose
.
Vorgeschlagene Dateistruktur
Die vorgeschlagene Dateistruktur im Favoritenverzeichnis Ihres Servers sieht folgendermaßen aus:
Dieses Tutorial führt Sie durch die Dateien und erklärt sie einzeln.
.env
Der BOMnipotent-Server kommuniziert mit einer Datenbank. Derzeit wird nur
PostgreSQL
als Backend unterstützt. Die Datenbank ist durch ein Passwort geschützt. Es empfiehlt sich, das Passwort in einer separaten .env-Datei zu speichern, anstatt direkt im compose.yaml.
Der Name der Datei muss “.env” lauten, ansonsten erkennt Docker sie nicht.
Ihre .env-Datei sollte so aussehen:
BOMNIPOTENT_DB_PW=<Ihr-Datenbank-Passwort>
Falls Sie ein Versionierungssystem zum Speichern Ihres Setups verwenden, vergessen Sie nicht, “.env” zu Ihrer .gitignore oder analogen Ignore-Datei hinzuzufügen!
Um die Sicherheit ins rechte Licht zu rücken: Die Compose-Datei macht den PostgreSQL-Container nicht direkt vom Internet aus erreichbar. Das Passwort wird daher nur für Aufrufe innerhalb des Containernetzwerks verwendet.
config.toml
BOMnipotent Server benötigt eine Konfigurationsdatei, die in
einem anderen Abschnitt
ausführlicher erläutert wird.
Der Name der Datei ist grundsätzlich beliebig, aber der einsatzbereite Docker-Container von BOMnipotent Server ist so eingerichtet, dass er nach “config.toml” sucht.
Eine minimale Konfiguration sieht so aus:
# Die db_url hat die Struktur [db_client]://[Benutzer]:[Passwort]@[Container]:[Port]/[db]# Beachten Sie, dass ${BOMNIPOTENT_DB_PW} auf eine Umgebungsvariable verweist.db_url = "postgres://bomnipotent_user:${BOMNIPOTENT_DB_PW}@bomnipotent_db:5432/bomnipotent_db"# Domain, hinter der der Bomnipotent-Server gehostet wirddomain = "https://<Ihre-Domain>.<Top-Level>"[tls]
# Der Pfad zu Ihrer vollständigen TLS-Zertifikatskettecertificate_chain_path = "/etc/ssl/certs/<Ihre-TLS-Zertifikatskette.crt>"# Der Pfad zu Ihrem geheimen TLS-Schlüsselsecret_key_path = "/etc/ssl/private/<Ihr-geheimer-TLS-Schlüssel>"# Herausgeberdaten gemäß dem unten verlinkten CSAF-Standard[provider_metadata.publisher]
name = "<Geben Sie den Namen Ihrer Organisation an>"# Namespace Ihrer Organisation in Form einer vollständigen URLnamespace = "https://<Ihre Domain>.<Top-Level>"# Dies ist höchstwahrscheinlich die gewünschte Kategoriecategory = "vendor"# Kontaktdaten sind optional und in freier Formcontact_details = "<Bei Sicherheitsfragen kontaktieren Sie uns bitte unter...>"
Es wird empfohlen, Ihre config.toml-Datei in einem dedizierten Verzeichnis zu speichern, in diesem Beispiel “bomnipotent_config”. Die Docker-Compose-Datei gewährt Lesezugriff auf diesen Ordner. Dieses Setup hat zwei Vorteile:
Im unwahrscheinlichen Fall einer Sicherheitsverletzung des BOMnipotent Server-Containers hätte ein Angreifer nur Zugriff auf Ihr Konfigurationsverzeichnis und sonst nichts auf Ihrem Server.
BOMnipotent Server überwacht das Verzeichnis auf Änderungen und versucht, die Konfigurationsdatei neu zu laden, wenn sie geändert wurde. Dies funktioniert nicht, wenn nur eine einzige Datei dem Docker-Container zugänglich gemacht wird.
Viele Konfigurationseinstellungen unterstützen Hot Reloading, d. h. sie können geändert werden, ohne den Server neu zu starten.
Nachdem Sie Ihre config.toml eingerichtet haben, möchten Sie sie möglicherweise beispielsweise als config.toml.default kopieren, um Ihre ursprüngliche Konfiguration schnell wiederherstellen zu können. Dies ist jedoch völlig optional.
compose.yaml
In der Compose-Datei geben Sie das Container-Setup an. Sobald es reibungslos läuft, muss es nicht mehr so oft geändert werden, aber wenn Sie Docker noch nicht kennen, kann es einige Zeit dauern, bis Sie es verstanden haben.
Die Datei muss “compose.yaml” heißen, da kann Docker etwas pingelig sein.
Eine vollständig einsatzbereite Compose-Datei sieht so aus:
# Es ist optional, dem Setup einen Namen zu geben, andernfalls wird er von Docker abgeleitet.name: bomnipotent_server_containers# Die Docker-Container müssen kommunizieren und benötigen dafür ein Netzwerk.networks:
# Dieses Netzwerk benötigt eine Referenzbomnipotent_network:
# Da sich die Container auf demselben Docker-Host befinden, ist "bridge" eine sinnvolle Treiberwahl.driver: bridge# Es ist in Ordnung, dem Netzwerk denselben Namen wie der Referenz zu geben.name: bomnipotent_networkvolumes:
# Definieren Sie das Volume für die dauerhafte Speicherung der Datenbankbomnipotent_data:
driver: local# Der Server selbst benötigt auch noch ein Volumen falls Sie nicht das Abonnement nach jedem Neustart aktivieren wollenbomnipotent_subscription:
driver: localservices:
bomnipotent_db:
# Name des Datenbankcontainerscontainer_name: bomnipotent_dbdeploy:
resources:
limits:
# Begrenzen Sie die CPU-Auslastung auf 0,5 Kernecpus: "0.5"# Begrenzen Sie die Speicherauslastung auf 512 MBmemory: "512M"environment:
# Legen Sie den Datenbanknamen festPOSTGRES_DB: bomnipotent_db# Legen Sie den Datenbankbenutzer festPOSTGRES_USER: bomnipotent_user# Legen Sie das Datenbankkennwort aus der .env-Dateivariable festPOSTGRES_PASSWORD: ${BOMNIPOTENT_DB_PW}healthcheck:
# Überprüfen Sie, ob die Datenbank bereit isttest: ["CMD-SHELL", "pg_isready -U bomnipotent_user -d bomnipotent_db"]
# Intervall zwischen Integritätsprüfungeninterval: 60s# Timeout für jede Integritätsprüfungtimeout: 10s# Anzahl der Wiederholungsversuche, bevor der Container als fehlerhaft betrachtet wirdretries: 5# Startzeitraum vor der ersten Integritätsprüfungstart_period: 10s# Verwenden Sie das angegebene PostgreSQL-Image# Sie können das Container-Tag nach Belieben anpassenimage: postgres:17-alpine3.21logging:
# Verwenden Sie den lokalen Protokollierungstreiberdriver: localoptions:
# Begrenzen Sie die Protokollgröße auf 10 MBmax-size: "10m"# Bewahren Sie maximal 3 Protokolldateien aufmax-file: "3"networks:
# Stellen Sie eine Verbindung zum angegebenen Netzwerk her - bomnipotent_network# Starten Sie den Container neu, wenn er aus einem anderen Grund als einem Benutzerbefehl angehalten wurderestart: alwaysvolumes:
# Mounten Sie das Volume für die dauerhafte Datenspeicherung - bomnipotent_data:/var/lib/postgresql/databomnipotent_server:
# Name des Servercontainerscontainer_name: bomnipotent_serverdepends_on:
# Stellen Sie sicher, dass der Datenbankdienst fehlerfrei ist, bevor Sie den Server startenbomnipotent_db:
condition: service_healthydeploy:
resources:
limits:
# Begrenzen Sie die CPU-Auslastung auf 0,5 Kernecpus: "0.5"# Begrenzen Sie die Speicherauslastung auf 512 MBmemory: "512M"environment:
# Geben Sie das Datenbankkennwort an den Server weiter.BOMNIPOTENT_DB_PW: ${BOMNIPOTENT_DB_PW}healthcheck:
# Prüfen Sie, ob der Server fehlerfrei ist# Ihr TLS-Zertifikat ist höchstwahrscheinlich für "localhost" nicht gültig# Daher das --insecure Flagtest: ["CMD-SHELL", "curl --fail --insecure https://localhost:8443/health || exit 1"]
# Intervall zwischen den Integritätsprüfungeninterval: 60s# Timeout für jede Integritätsprüfungtimeout: 10s# Anzahl der Wiederholungsversuche, bevor der Container als fehlerhaft betrachtet wirdretries: 5# Startzeitraum vor dem ersten Integritätscheckstart_period: 10s# Dies ist das offizielle Docker-Image, auf dem eine BOMnipotent-Serverinstanz ausgeführt wird.image: wwhsoft/bomnipotent_server:latestlogging:
# Verwenden Sie den lokalen Protokollierungstreiberdriver: localoptions:
# Begrenzen Sie die Protokollgröße auf 10 MBmax-size: "10m"# Bewahren Sie maximal 3 Protokolldateien aufmax-file: "3"networks:
# Stellen Sie eine Verbindung zum angegebenen Netzwerk her - bomnipotent_networkports:
# Ordnen Sie Port 443 auf dem Host Port 8443 auf dem Container zu# Dies ermöglicht die Verbindung über verschlüsselte Kommunikation - target: 8443published: 443# Starten Sie den Container neu, wenn er aus einem anderen Grund als einem Benutzerbefehl angehalten wurderestart: alwaysvolumes:
# Mounten Sie den Konfigurationsordner auf dem Host per Bind - type: bindsource: ./bomnipotent_configtarget: /etc/bomnipotent_server/configs/read_only: true# Mounten Sie das SSL-Verzeichnis per Bind - type: bindsource: /etc/ssltarget: /etc/sslread_only: true# Die Subscription darf gern in dem Container persisitert werden - bomnipotent_subscription:/root/.config/bomnipotent