Hier werden mehrere Einrichtungsvarianten vorgestellt. Sie können diejenige auswählen, die Ihren Anforderungen am besten entspricht, und sie nach Belieben ändern.
Das
Setup mit Docker Compose
ist vermutlich das einfachste, und macht Ihren Server direkt über das Internet verfügbar. Wählen Sie diese Methode, falls Sie ein dediziertes System mit eigener IP nur für BOMnipotent Server haben.
Das
Setup mit Proxy
ist sehr ähnlich, setzt aber zusätzlich einen Reverse-Proxy auf. Wählen Sie diese Methode, falls sie potenziell mehr als einen Service von demselben System mit der derselben IP anbieten wollen.
Das
freistehende Setup
vermeidet den Overhead der Kontainerisierung, auf Kosten der, nun ja, Kontainerisierung. Wählen Sie diese Methode, falls Sie erfahren in klassischeren Server Setups sind.
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
. Diese Variante des Setups macht BOMnipotent Server direkt vom Internet erreichbar. Falls Sie den Traffic über einen Reverse Proxy handhaben wollen, nutzen Sie stattdessen eine
andere Anleitung
.
Vorgeschlagene Dateistruktur
Die vorgeschlagene Dateistruktur im Lieblingsverzeichnis 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.
Falls Sie ein Versionierungssystem zum Speichern Ihres Setups verwenden, vergessen Sie nicht, “.env” zu Ihrer .gitignore oder analogen Ignore-Datei hinzuzufügen!
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://bomnipotent.<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>"[smtp]
# Der Nutzername für den Mail-Anbieter, üblicherweise Ihre Mail Adresseuser = "<you@yourdomain.com>"# Der SMTP Endpunkt Ihres Mail-Anbietersendpoint = "<your.smtp.host>"# Das Geheimnis um sich gegenüber dem Mail-Anbieter zu authentifizierenn, üblicherweise Ihr Passwortsecret = "${SMTP_SECRET}"# 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 hergeleitet.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:17logging:
# 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}# Geben Sie das SMTP Geheimnis an den Server weiter.SMTP_SECRET: ${SMTP_SECRET}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, damit BOMnipotent das TLS-Zertifikat und den Schlüssel findet. - type: bindsource: /etc/ssltarget: /etc/sslread_only: true# Die Subscription darf gern in dem Container persisitert werden - bomnipotent_subscription:/root/.config/bomnipotent
Dieses Tutorial führt Sie durch die Dateien und erklärt sie einzeln.
proxy_config/conf.d/default.conf
Die Verwendung von nginx als Reverse-Proxy ist lediglich ein Vorschlag. Sie können ihn durch jede andere Serversoftware Ihrer Wahl ersetzen.
Vereinfacht ausgedrückt dient der Reverse-Proxy als Tor zu Ihrem Server: Er ermöglicht Ihnen, mehrere Dienste (BOMnipotent-Server, eine Website usw.) hinter derselben IP-Adresse zu hosten. Jede Anfrage an eine Ihrer URLs landet beim Reverse-Proxy, der sie dann an den richtigen Dienst weiterleitet. So landen Sie beim Besuch von doc.bomnipotent.de
auf einer anderen Website als beim Besuch von www.bomnipotent.de
, obwohl beide hinter derselben IP-Adresse gehostet werden.
Nginx sucht seine Konfiguration an verschiedenen Orten. Später in der
compose.yaml
verwenden wir Mount-Binding, um unsere Konfiguration hinterrücks in den Nginx-Docker-Container einzuschleusen.
Sie können Folgendes als Ausgangspunkt für Ihre default.conf verwenden:
# Anfragenbegrenzung: Erlaubt bis zu 5 Anfragen pro Sekunde pro IP-Adresse, gespeichert in einem 10 MB großen Speicherbereich.
limit_req_zone $binary_remote_addr zone=api_limit:10mrate=5r/s;
# BOMnipotent Server
server {
# Hierdurch hört der Server auf Port 443, der typischerweise für HTTPS verwendet wird.
listen443sslhttp2;
# Ersetzen Sie dies durch die tatsächliche Domain Ihres BOMnipotent Servers.
server_namebomnipotent.your-domain.com;
# Ersetzen Sie dies durch das tatsächliche Zertifikat Ihrer Domain.
ssl_certificate/etc/ssl/certs/your-domain-fullchain.crt;
# Ersetzen Sie dies durch den tatsächlichen privaten Schlüssel Ihres Zertifikats.
ssl_certificate_key/etc/ssl/private/your-domain_private_key.key;
ssl_protocolsTLSv1.2TLSv1.3;
ssl_prefer_server_cipherson;
ssl_ciphers"ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384";
location/ {
# Anfragenbegrenzung anwenden
limit_reqzone=api_limitburst=10nodelay;
# Dies weist nginx an, Anfragen an Port 8080 des Docker-Containers weiterzuleiten.
proxy_passhttp://bomnipotent_server:8080;
proxy_set_headerHost $host;
# Die folgenden Zeilen stellen sicher,
# dass die BOMnipotent-Logs die IP des Absenders enthalten,
# anstelle der lokalen IP des Reverse-Proxys.
proxy_set_headerX-Real-IP $remote_addr;
proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_headerX-Forwarded-Proto $scheme;
}
}
Sie möchten wahrscheinlich weitere “Server” Blöcke hinzufügen – warum sonst würden Sie sich für die Einrichtung eines Reverse-Proxy entscheiden?
.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.
Falls Sie ein Versionierungssystem zum Speichern Ihres Setups verwenden, vergessen Sie nicht, “.env” zu Ihrer .gitignore oder analogen Ignore-Datei hinzuzufügen!
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 für einen BOMnipotent Server hinter einem Reverse-Proxy 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://bomnipotent.<Ihre-Domain>.<Top-Level>"[tls]
# Die TLS-Verschlüsselung erfolgt über den Reverse-Proxy,# der BOMnipotent-Server ist nicht direkt über das Internet erreichbar.allow_http = true[smtp]
# Der Nutzername für den Mail-Anbieter, üblicherweise Ihre Mail Adresseuser = "<you@yourdomain.com>"# Der SMTP Endpunkt Ihres Mail-Anbietersendpoint = "<your.smtp.host>"# Das Geheimnis um sich gegenüber dem Mail-Anbieter zu authentifizierenn, üblicherweise Ihr Passwortsecret = "${SMTP_SECRET}"# 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...>"
Füllen Sie die Klammern mit Ihren Daten aus.
Falls Sie es bevorzugen, eine lokal laufende SMTP Relay Station zu nutzen, schauen Sie sich die
notwendigen Anpassungen
der compose Datei an.
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:
# Die Namensgebung für das Setup ist optional, andernfalls wird der Name von Docker hergeleitet.name: bomnipotent_server_containers# Die Docker-Container müssen kommunizieren und benötigen dafür ein Netzwerk.networks:
# Dieses Netzwerk benötigt eine Referenz.bomnipotent_network:
# Da sich die Container auf demselben Docker-Host befinden, ist "bridge" eine sinnvolle Treiberwahl.driver: bridge# Es ist zulässig, dem Netzwerk denselben Namen wie der Referenz zu geben.name: bomnipotent_network# Der Reverse-Proxy muss mit dem BOMnipotent-Server kommunizieren, nicht jedoch mit der Datenbank.proxy_network:
driver: bridgename: proxy_networkvolumes:
# Definieren Sie das Volume für die persistente Speicherung der Datenbank.bomnipotent_data:
driver: local# Der Server selbst benötigt ebenfalls Persistenz, wenn das Abonnement nicht nach jedem Neustart aktiviert werden soll.bomnipotent_subscription:
driver: localservices:
reverse_proxy:
# Name des Reverse-Proxy-Containerscontainer_name: reverse_proxydeploy:
resources:
limits:
# Begrenzen Sie die CPU-Auslastung auf 0,5 Kerne.cpus: "0.5"# Begrenzen Sie die Speichernutzung auf 512 MB.memory: "512M"healthcheck:
# Prüfen Sie, ob Nginx läuft und die Konfiguration analysieren kann.test: ["CMD-SHELL", "nginx -t || exit 1"]
# Intervall zwischen Integritätsprüfungeninterval: 60s# Timeout für jede Integritätsprüfungtimeout: 10s# Anzahl der Wiederholungsversuche, bevor der Container als fehlerhaft eingestuft wirdretries: 3# Startzeitraum vor der ersten Integritätsprüfungstart_period: 60simage: nginx:latestlogging:
# Lokalen Protokolltreiber verwendendriver: localoptions:
# Protokollgröße auf 10 MB begrenzenmax-size: "10m"# Maximal 3 Protokolldateien speichernmax-file: "3"networks:
# Mit dem angegebenen Netzwerk verbinden - proxy_networkports:
# Port 443 des Containers freigeben# Dies ermöglicht eine verschlüsselte Verbindung über das Internet - "443:443"# Container neu starten, falls er aus einem anderen Grund als einem Benutzerbefehl gestoppt wurderestart: on-failurevolumes:
# Bind-Mount des SSL-Verzeichnisses, damit nginx das TLS-Zertifikat und den Schlüssel findet. - type: bindsource: /etc/ssltarget: /etc/sslread_only: true# Bind-Mount des Konfigurationsordners auf dem Host - type: bindsource: ./proxy_config/conf.dtarget: /etc/nginx/conf.dread_only: truebomnipotent_db:
# Name des Datenbankcontainerscontainer_name: bomnipotent_dbdeploy:
resources:
limits:
# CPU-Auslastung auf 0,5 Kerne begrenzencpus: "0.5"# Speichernutzung auf 512 MB begrenzenmemory: "512M"environment:
# Datenbanknamen festlegenPOSTGRES_DB: bomnipotent_db# Datenbankbenutzer festlegenPOSTGRES_USER: bomnipotent_user# Datenbankpasswort aus der Variable der .env-Datei festlegenPOSTGRES_PASSWORD: ${BOMNIPOTENT_DB_PW}healthcheck:
# Prüfen, 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 eingestuft wirdretries: 5# Startzeitraum vor der ersten Integritätsprüfungstart_period: 10s# Das angegebene PostgreSQL-Image verwenden# Sie können den Container-Tag nach Belieben anpassenimage: postgres:17logging:
# Lokalen Logging-Treiber verwendendriver: localoptions:
# Log-Größe auf 10 MB begrenzenmax-size: "10m"# Maximal 3 Log-Dateien speichernmax-file: "3"networks:
# Mit dem angegebenen Netzwerk verbinden - bomnipotent_network# Container neu starten, wenn er aus einem anderen Grund als einem Benutzerbefehl gestoppt wurde.restart: alwaysvolumes:
# Volume für persistente Datenspeicherung mounten - bomnipotent_data:/var/lib/postgresql/databomnipotent_server:
# Name des Server-Containerscontainer_name: bomnipotent_serverdepends_on:
# Sicherstellen, dass der Datenbankdienst fehlerfrei ist, bevor der Server gestartet wird.bomnipotent_db:
condition: service_healthydeploy:
resources:
limits:
# CPU-Auslastung auf 0,5 Kerne begrenzen.cpus: "0.5"# Speichernutzung auf 512 MB begrenzen.memory: "512M"environment:
# Datenbankpasswort an den Server weitergeben.BOMNIPOTENT_DB_PW: ${BOMNIPOTENT_DB_PW}# Geben Sie das SMTP Geheimnis an den Server weiter.SMTP_SECRET: ${SMTP_SECRET}healthcheck:
# Servergesundheit überprüfentest: ["CMD-SHELL", "curl --fail http://localhost:8080/health || exit 1"]
# Intervall zwischen Integritätsprüfungeninterval: 60s# Timeout für jede Integritätsprüfungtimeout: 10s# Anzahl der Wiederholungsversuche, bevor der Container als fehlerhaft eingestuft wirdretries: 5# Startzeitraum vor der ersten Integritätsprüfungstart_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:
# Verbindung zwischen Server und Reverse-Proxy. - proxy_network# Verbindung zwischen Server und Datenbank. - bomnipotent_network# 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# Die Subscription darf gern in dem Container persisitert werden - bomnipotent_subscription:/root/.config/bomnipotent
Speichern Sie diese Datei als “compose.yaml”. Dann rufen Sie:
docker compose --detach
docker compose -d
Ihr Server ist jetzt einsatzbereit!
Rufen Sie “docker ps” um den Zustand des Servers zu überprüfen.
Freistehend
Sie sind nicht gezwungen den offiziellen BOMnipotent Server
Docker-Container
zu verwenden. Stattdessen können Sie die BOMnipotent Server-Binärdatei herunterladen und direkt als eigenständige Anwendung ausführen.
Dieses Setup ist erst ab Version 0.4.2 sinnvoll, da der Server zuvor keine Portanpassungen und keine Protokollierung in Dateien unterstützte.
Voraussetzung: PostgreSQL
Der BOMnipotent Server benötigt eine PostgreSQL-Datenbank zur Datenspeicherung. Die Einrichtung hängt von Ihrem Server-Betriebssystem ab.
Auf den gängigsten Distributionen wird PostgreSQL als Paket angeboten. Sie können es beispielsweise über apt/apt-get/aptitude installieren:
PostgreSQL läuft nun als Dienst. Um weitere Anpassungen vorzunehmen, müssen Sie sich als Systembenutzer “postgres” anmelden:
sudo -i -u postgres
Sie können nun die interaktive PostgreSQL-Shell öffnen:
psql
In der Shell müssen Sie den Benutzer “bomnipotent_user” und ein Passwort hinzufügen und die Datenbank “bomnipotent_db” erstellen:
CREATEUSER bomnipotent_user WITH PASSWORD 'Ihr Passwort';
CREATEDATABASE bomnipotent_db OWNER bomnipotent_user;
GRANTALLPRIVILEGESONDATABASE bomnipotent_db TO bomnipotent_user;
\q
Sie können andere Namen für Benutzer und Datenbank verwenden, müssen dann aber den Eintrag “db_url” in Ihrer
Konfigurationsdatei
entsprechend anpassen.
Starten Sie PostgreSQL anschließend neu und wechseln Sie zurück zu Ihrem regulären Benutzer:
Nach Abschluss des Installationsvorgangs wird PostgreSQL als Dienst ausgeführt. Öffnen Sie eine interaktive PostgreSQL-Shell, indem Sie die Administrationskonsole starten und Folgendes eingeben:
psql -U postgres
In der Shell müssen Sie den Benutzer “bomnipotent_user” hinzufügen, ein Passwort vergeben und die Datenbank “bomnipotent_db” erstellen:
CREATEUSER bomnipotent_user WITH PASSWORD 'Ihr Passwort';
CREATEDATABASE bomnipotent_db OWNER bomnipotent_user;
GRANTALLPRIVILEGESONDATABASE bomnipotent_db TO bomnipotent_user;
\q
Sie können andere Namen für Benutzer und Datenbank verwenden, müssen dann aber den Eintrag “db_url” in Ihrer
Konfigurationsdatei
entsprechend anpassen.
Wenn Sie nur BOMnipotent Server als eigenständige Anwendung ausführen, aber dennoch PostgreSQL in einem Container laufen lassen möchten, können Sie letzteren wie folgt starten:
Dadurch wird ein Container namens “bomnipotent_db” mit der ebenso benannten Datenbank “bomnipotent_db”, dem Benutzer “bomnipotent_user” und einem Passwort erstellt. Der Befehl stellt Port 5432 des Containers bereit, speichert die Daten in einem Docker-Volume und startet das Image “postgres:latest” im losgelösten Modus.
Sie können andere Namen für Benutzer und Datenbank verwenden, müssen dann aber den Eintrag “db_url” in Ihrer
Konfigurationsdatei
entsprechend anpassen.
Empfohlene Dateistruktur
Die vorgeschlagene Dateistruktur im Lieblingsverzeichnis Ihres Servers sieht folgendermaßen aus:
Diese Anleitung führt Sie durch die einzelnen Dateien und erklärt sie Schritt für Schritt.
.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 BOMnipotent Server sie nicht.
Falls Sie ein Versionierungssystem zum Speichern Ihres Setups verwenden, vergessen Sie nicht, “.env” zu Ihrer .gitignore oder analogen Ignore-Datei hinzuzufügen!
config.toml
BOMnipotent Server benötigt eine Konfigurationsdatei, die in
einem anderen Abschnitt
ausführlicher erläutert wird.
Der Name der Datei ist beliebig.
Eine minimale Konfiguration sieht folgendermaßen aus:
# Die Datenbank-URL hat die Struktur [db_client]://[Benutzer]:[Passwort]@[Adresse]:[Port]/[db]# Beachten Sie, dass ${BOMNIPOTENT_DB_PW} auf eine Umgebungsvariable verweist.db_url = "postgres://bomnipotent_user:${BOMNIPOTENT_DB_PW}@localhost:5432/bomnipotent_db"# Domain, hinter der der bomnipotent-Server gehostet wirddomain = "https://bomnipotent.<Ihre-Domain>.<Top-Level>"# An den typischen Port für HTTPS bindenhttps_port = 443[log]
# Server anweisen, in eine Datei statt in die Standardausgabe zu protokollierenfile = "/var/log/bomnipotent.log"[tls]
# Pfad zu Ihrer vollständigen TLS-Zertifikatskettecertificate_chain_path = "/etc/ssl/certs/<Ihre-TLS-Zertifikatskette.crt>"# Pfad zu Ihrem geheimen TLS-Schlüsselsecret_key_path = "/etc/ssl/private/<Ihr-geheimer-TLS-Schlüssel>"[smtp]
# Der Nutzername für den Mail-Anbieter, üblicherweise Ihre Mail Adresseuser = "<you@yourdomain.com>"# Der SMTP Endpunkt Ihres Mail-Anbietersendpoint = "<your.smtp.host>"# Das Geheimnis um sich gegenüber dem Mail-Anbieter zu authentifizierenn, üblicherweise Ihr Passwortsecret = "${SMTP_SECRET}"# Herausgeberdaten gemäß CSAF-Standard (Link unten)[provider_metadata.publisher]
name = "<Name Ihrer Organisation>"# Namespace Ihrer Organisation in Form einer vollständigen URLnamespace = "https://<Ihre Domain>.<Top-Level>"# Dies ist höchstwahrscheinlich die gewünschte Enumerationsvariante.category = "Anbieter"# Kontaktdaten sind optional und frei wählbar.contact_details = "<Bei Sicherheitsanfragen kontaktieren Sie uns bitte unter...>"
Es wird empfohlen, die Datei config.toml in einem dedizierten Verzeichnis (in diesem Beispiel “bomnipotent_config”) zu speichern. BOMnipotent Server überwacht das Verzeichnis auf Änderungen. Je weniger Dateien sich im Ordner befinden, desto weniger muss er überwachen. Der Server versucht, die Konfigurationsdatei und die .env-Datei neu zu laden, sobald sich eine davon ändert.
Viele Konfigurationseinstellungen unterstützen Hot Reloading, d. h. sie können ohne Serverneustart geändert werden.
Nachdem Sie Ihre config.toml eingerichtet haben, können Sie diese beispielsweise als config.toml.default kopieren, um Ihre ursprüngliche Konfiguration schnell wiederherstellen zu können. Dies ist jedoch völlig optional.
bomnipotent_server
Dies ist die Binärdatei, mit der BOMnipotent Server ausgeführt wird. Sie können jede Version für Ihre Serverplattform von
www.bomnipotent.de
herunterladen.
Grundsätzlich benötigt BOMnipotent Server lediglich den Pfad zu seiner Konfigurationsdatei. Wenn Sie die Binärdatei ausführen und den Pfad als erstes Argument angeben, haben Sie eine funktionierende Serverinstanz erstellt. Ihr Terminal ist nun jedoch dauerhaft blockiert, und der Dienst wird nach einem Systemneustart nicht neu gestartet. Der Rest dieses Abschnitts dient lediglich dazu, sicherzustellen, dass das Betriebssystem den Server ordentlich unterstützt.
Im Gegensatz BOMnipotent Client, der unter allen gängigen Betriebssystemen läuft, wird BOMnipotent Server derzeit nur unter Linux und Windows unterstützt. Wenn Sie ihn auf einem Server mit macOS hosten möchten,
erstellen Sie bitte einen Issue
.
Für diese Konfiguration muss systemd auf Ihrer Distribution integriert sein.
Falls Sie unsicher sind, ob es das ist, ist es das wahrscheinlich.
Falls Sie sicher sind, dass es das nicht ist, benötigen Sie diese Anleitung wahrscheinlich nicht.
Erstellen Sie die Datei “/etc/systemd/system/bomnipotent.service” mit folgendem Inhalt: