Voraussetzungen
Was Host, Netzwerk und opsi-Server für den Betrieb von oPBWeb mitbringen müssen
Zielgruppe: Technische Administration
Überblick
Dieses Kapitel listet alles, was vor der Installation bereitstehen muss: ein Docker-Host, freie Ports, eine Netzwerkverbindung zum opsi-Configserver und ein technischer opsi-Benutzer. Prüfe die Punkte der Reihe nach, bevor du mit der Installation
beginnst.
Host
oPBWeb läuft auf jedem Linux-Host mit Docker. Du kannst den Stack direkt auf dem opsi-Configserver betreiben oder auf einem eigenen Host, der den Configserver per HTTPS erreicht.
- Betriebssystem: Linux mit aktuellem Docker Engine.
- Docker Compose: das Compose-Plugin (Version 2, Aufruf
docker compose). Das alte eigenständige docker-compose (Version 1) reicht nicht, weil die Compose-Datei Funktionen wie Datei-Secrets und service_completed_successfully nutzt. - Bash und OpenSSL: Die Skripte
setup-opbweb.sh, start.sh, stop.sh und scripts/init-secrets.sh sind Bash-Skripte, die Secrets werden mit openssl erzeugt. - Git: zum Holen der Quellen.
- Speicherplatz: Der Objektspeicher wächst mit den Paketdateien. Plane genug Platz für die Docker-Volumes ein (Datenbank, Objektspeicher). Feste Mindestwerte für CPU, Arbeitsspeicher oder Plattenplatz gibt es nicht; die Container laufen ohne Ressourcenlimits.
Ports
Nach außen öffnet der Stack nur den Frontend-Container. Alle anderen Dienste kommunizieren in internen Docker-Netzen.
Variable in .env | Standard | Verwendung |
|---|
FRONTEND_HTTP_PORT | 80 | leitet auf HTTPS weiter |
FRONTEND_HTTPS_PORT | 443 | HTTPS (immer mit Zertifikat, notfalls self-signed) |
Die Oberfläche läuft nur per HTTPS; der HTTP-Port leitet dorthin weiter. Läuft auf dem Host bereits ein Webserver (zum Beispiel auf dem Configserver), wähle andere Ports.
Netzwerk zum opsi-Configserver
Der Worker-Container spricht direkt mit opsiconfd auf dem Configserver:
- HTTPS auf Port 4447 für JSON-RPC.
- WebDAV über denselben Port für die Freigaben
/repository, /workbench und /depot.
Die Verbindung geht vom Worker aus über das Docker-Netz opsi-net. Firewalls zwischen Docker-Host und Configserver müssen Port 4447 zulassen.
opsi-seitige Voraussetzungen
oPBWeb ist für opsi 4.3 ausgelegt. Auf dem Configserver brauchst du:
- Technischer Benutzer mit opsi-Admin-Rechten: Der Worker meldet sich mit diesem Benutzer an (Vorgabe in der Oberfläche:
opsiadm). Ohne Admin-Rechte schlägt der Verbindungstest mit „… hat keine opsi-Admin-Rechte“ fehl; außerdem verlangen /repository und /workbench Admin-Rechte. admin-networks in opsiconfd: Ist diese Einstellung gesetzt, muss das Docker-Netz des Workers darin enthalten sein. Sonst lehnt opsiconfd die Admin-Aufrufe mit HTTP 403 ab. Das Subnetz ermittelst du nach dem ersten Start mit docker network inspect opbweb_opsi-net (Eintrag Subnet).- FQDN des Configservers: Trage den Configserver später mit seinem vollständigen Hostnamen ein, nicht mit der IP-Adresse. Das Serverzertifikat von opsiconfd lautet auf den Namen; mit einer IP-Adresse scheitert die TLS-Prüfung. Der Name muss aus dem Worker-Container auflösbar sein.
Hinweis
URL, technischer Benutzer, Passwort und CA-Zertifikat des opsi-Servers stehen nicht in Konfigurationsdateien. Du trägst sie nach der Installation in der Oberfläche ein, siehe Ersteinrichtung
.
Zertifikate
- TLS-Zertifikat für die Weboberfläche (empfohlen): Für HTTPS brauchst du ein Zertifikat mit vollständiger Kette (
fullchain.pem) und den passenden privaten Schlüssel (key.pem) für den Hostnamen, unter dem die Benutzer oPBWeb aufrufen. Leg die beiden Dateien vor dem Setup neben setup-opbweb.sh. Ohne eigenes Zertifikat erzeugt das Setup ein self-signed Zertifikat; dann warnt der Browser. - CA des opsi-Servers: Sie wird bei der Ersteinrichtung direkt vom Configserver geholt. Halte für den Abgleich des Fingerabdrucks einen Shell-Zugang zum Configserver bereit.
- LDAPS-CA (optional): Für die Anmeldung per LDAP mit eigener CA legst du die CA-Datei als
ldap-ca.pem neben das Skript oder unter certs/ldap/ ab, siehe LDAP-Anmeldung
.
Images und Internetzugang
Die eigenen Images von oPBWeb (Backend, Frontend, garage-init) kannst du auf zwei Wegen bereitstellen:
- Lokal bauen mit
./start.sh --build. Dafür braucht der Host Zugriff auf:- Docker Hub für die Basis-Images (Python, Node.js, nginx, Alpine),
- GitHub für python-opsi und die Hugo-Module des Handbuchs,
- PyPI für die Python-Pakete,
- npm-Registry für die Frontend-Abhängigkeiten,
- den Go-Modul-Proxy proxy.golang.org für das Handbuch-Theme.
- Fertig aus einer Registry ziehen, zum Beispiel aus der Registry der GitLab-CI des Projekts oder einem internen Mirror. Dann braucht der Host nur Zugriff auf diese Registry; ein Konto (
docker login) nur, wenn sie eine Anmeldung verlangt. Die Registry des Projekts ist öffentlich. Internetzugang zum Bauen braucht nur der Rechner, auf dem die Images gebaut werden.
Die Fremd-Images für MariaDB, Redis und Garage kommen in beiden Fällen von Docker Hub, sofern du keinen Mirror verwendest. Welchen Weg du nimmst, legst du bei der Installation
mit setup-opbweb.sh fest.
Im laufenden Betrieb braucht der Stack keinen Internetzugang.
Versionen
Dieses Handbuch beschreibt folgenden Stand:
| Komponente | Version |
|---|
| Backend | 0.18.8 |
| Frontend | 0.18.17 |
| Launcher | 0.18.0 |
Technische Basis:
| Komponente | Version |
|---|
| Python | 3.13 (python:3.13-slim) |
| FastAPI | 0.143.1 |
| SQLAlchemy | 2.1.4 |
| Alembic | 1.20.0 |
| arq (Job-Worker) | 0.28.0 |
| Vue | 3.5 |
| Vite | 8.3 |
| Node.js (nur Build) | 22 |
| nginx | stable-alpine |
| MariaDB | 11.4 |
| Redis | 7 |
| Garage (S3) | v2.2.0 |
| opsi (Configserver) | 4.3 |
Die installierten Versionen von Frontend und Backend siehst du jederzeit in der Statusleiste unten in der Oberfläche.
Installation
oPBWeb Schritt für Schritt installieren und den Stack zum ersten Mal starten
Zielgruppe: Technische Administration
Überblick
Die Installation besteht aus wenigen Schritten: Quellen holen, ./setup-opbweb.sh ausführen (es schreibt die Konfigurationsdatei .env und erzeugt die Secrets), optional ein TLS-Zertifikat ablegen und den Stack starten. Die Images baust du dabei entweder lokal mit ./start.sh --build oder ziehst sie fertig aus einer Registry. Danach prüfst du, ob alle Dienste laufen, und machst mit der Ersteinrichtung
in der Oberfläche weiter.
Alle Befehle führst du im Projektverzeichnis auf dem Docker-Host aus. Prüfe vorher die Voraussetzungen
.
1. Quellen holen
Klone das oPBWeb-Repository (opsiPackageBuilder-web) auf den Docker-Host und wechsle in das Verzeichnis:
git clone https://gitlab.open-mind.space/pages/opsiPackageBuilder-web.git
cd opsiPackageBuilder-web
Ohne Git und ohne Quellen geht es mit dem Stack-ZIP aus dem Release oPBWeb Stack (oPBWeb-Stack-<Nr>.zip, siehe Build und Auslieferung
): entpacken und in den Ordner oPBWeb-Stack wechseln. Die Images kommen dann immer aus der Registry, die Versionen gibt die beiliegende versions.env vor.
Alle Pfade in diesem Kapitel (.env, secrets/, certs/) beziehen sich auf dieses Verzeichnis.
Nur ausprobieren?
Ohne opsi-Server lässt sich oPBWeb mit zwei opsi-Mocks testen, siehe Testumgebung
.
2. Einrichtung mit setup-opbweb.sh
Starte das Setup-Skript:
Das Skript prüft zuerst, ob docker, das Plugin docker compose und openssl vorhanden sind. Dann fragt es die wichtigsten Einstellungen ab. Bei jeder Frage steht die Vorgabe in eckigen Klammern; mit Enter übernimmst du sie.
| Bereich | Fragen |
|---|
| Images | Images lokal bauen (l) oder aus einer Registry ziehen (r). Bei r zusätzlich: Registry-Präfix der oPBWeb-Images und die Versionen der Images für Backend, Frontend und garage-init |
| Frontend | TLS-Zertifikat (siehe 4. TLS-Zertifikat
): mitgebrachtes übernehmen, vorhandenes behalten oder ein self-signed erzeugen, dafür der Hostname (FQDN); Host-Port für HTTP (Vorgabe 80, leitet auf HTTPS weiter) und HTTPS (443), Zeitzone (Europe/Berlin) |
| Anmeldung | Name des ersten lokalen Administrators (admin), ob LDAP/Active Directory verwendet wird; mit LDAP auch Server, Port, LDAPS, Zertifikatsprüfung, CA-Datei in certs/ldap/, Base DN, Suchbasis, Suchfilter, Bind-DN mit Passwort und die Gruppen je Rolle |
| Betrieb | Log-Level (DEBUG, INFO, WARNING, ERROR; Vorgabe INFO) |
Die Vorgabe für das Registry-Präfix ist die Registry der GitLab-CI des Projekts. Ein anderes Präfix, etwa für einen internen Mirror, gibst du bei der Frage ein oder setzt es vorher als Umgebungsvariable OPBWEB_REGISTRY. Die LDAP-Einstellungen erklärt das Kapitel LDAP-Anmeldung
.
Nach einer Zusammenfassung fragt das Skript „Fortfahren und Dateien schreiben?“. Bestätigst du, dann
- schreibt es die
.env, - erzeugt es über
scripts/init-secrets.sh alle fehlenden Secrets (siehe 3. Secrets
) und schreibt das eingegebene LDAP-Passwort nach secrets/ldap_bind_password.txt, - legt es die Verzeichnisse
certs/ und certs/ldap/ an, übernimmt mitgebrachte Zertifikate dorthin oder erzeugt ein self-signed Zertifikat, - bietet es bei Registry-Images an, die Images gleich zu ziehen („Images jetzt ziehen?“),
- zeigt es die nächsten Schritte an.
Fehlen Dateien, die das Skript für deine Antworten erwartet, warnt es, etwa wenn die angegebene LDAP-CA-Datei nicht in certs/ldap/ liegt oder das Zertifikat in weniger als 30 Tagen abläuft.
Werte, nach denen das Skript nicht fragt (Zeitlimits, Kompression, Token-Laufzeiten, Kontosperre, DEBUG), setzt es auf ihre Standardwerte. Du kannst sie danach direkt in der .env ändern; ein späterer Lauf des Skripts übernimmt sie. Alle Variablen beschreibt das Kapitel Konfiguration
.
Optionen von setup-opbweb.sh
| Aufruf | Wirkung |
|---|
./setup-opbweb.sh | interaktiv; bei vorhandener .env sind deren Werte die Vorgaben, vorhandene Secrets bleiben unverändert |
./setup-opbweb.sh --updateonly | nicht interaktiv: übernimmt jeden Wert der vorhandenen .env, ergänzt neue Variablen mit ihrem Standardwert, legt fehlende Secrets an und schreibt die .env neu. Variablen, die das Skript nicht kennt, bleiben am Ende der Datei erhalten. Setzt eine .env voraus |
./setup-opbweb.sh --dev | Entwickler-Checkout: legt die .env aus .env.example an, falls keine existiert, und arbeitet dann wie --updateonly; die Images werden lokal gebaut (./start.sh --dev --build) |
./setup-opbweb.sh --yes | überspringt die Rückfrage vor dem Schreiben |
./setup-opbweb.sh --lang de bzw. --lang en | Sprache der Ausgaben; das Skript speichert sie als OPBWEB_LANG in der .env, start.sh und scripts/init-secrets.sh übernehmen sie. Ohne die Option gilt OPBWEB_LANG aus Umgebung oder .env, sonst die Locale des Systems (de… → Deutsch, sonst Englisch) |
./setup-opbweb.sh --help | zeigt die Hilfe |
--updateonly brauchst du vor allem beim Aktualisieren
.
Ohne .env bricht start.sh mit der Meldung „.env fehlt – bitte ./setup-opbweb.sh ausführen (im Entwickler-Checkout: ./setup-opbweb.sh –dev).“ ab.
Alternative: .env von Hand anlegen
Statt des Skripts kannst du die Vorlage kopieren und selbst anpassen:
.env.example enthält alle Variablen; auskommentierte Zeilen zeigen den Standardwert. Für eine erste Installation reichen die Vorgaben meist aus. Diese Variablen solltest du prüfen:
| Variable | Standard | Bedeutung |
|---|
BACKEND_IMAGE, FRONTEND_IMAGE, GARAGE_INIT_IMAGE | lokal gebaute Images | nur setzen, wenn du fertige Images aus einer Registry verwendest |
FRONTEND_HTTP_PORT | 80 | Host-Port für HTTP |
FRONTEND_HTTPS_PORT | 443 | Host-Port für HTTPS |
COOKIE_SECURE | false | setzt setup-opbweb.sh auf true (immer HTTPS); nur im Entwicklungs-Stack false |
ADMIN_USERNAME | admin | Name des ersten Administrator-Kontos |
TZ | Europe/Berlin | Zeitzone der Container |
LOG_LEVEL | INFO | Detailgrad der Logs |
OPSI_INSTALL_TIMEOUT_SECONDS | 3600 | Zeitlimit für Upload und Installation großer Pakete auf dem Depot |
JOB_TIMEOUT_SECONDS | 28800 | Obergrenze für einen ganzen Job, z. B. eine Installation auf mehreren Depots |
BUILD_COMPRESSION | zstd | Kompression gebauter Pakete (zstd oder gzip) |
LDAP_ENABLED | false | Anmeldung über LDAP/Active Directory |
Die Secrets erzeugt in diesem Fall start.sh beim ersten Start. Das Passwort des LDAP-Dienstkontos trägst du selbst in secrets/ldap_bind_password.txt ein, siehe LDAP-Anmeldung
.
Zugangsdaten gehören nicht in die .env, sondern in das Verzeichnis secrets/. Alle Variablen beschreibt das Kapitel Konfiguration
.
3. Secrets
Das Skript scripts/init-secrets.sh legt alle fehlenden Secrets im Verzeichnis secrets/ an. Vorhandene Dateien überschreibt es nie. setup-opbweb.sh ruft es auf, start.sh führt es bei jedem Start ohnehin aus. Du kannst es auch selbst aufrufen:
./scripts/init-secrets.sh
Das Skript erzeugt diese Dateien:
| Datei | Inhalt |
|---|
db_password.txt | Passwort des MariaDB-Anwendungsbenutzers |
db_root_password.txt | Root-Passwort von MariaDB (auch für Datenbank-Dumps) |
redis_password.txt | Passwort für Redis |
redis.acl | Redis-ACL, erzeugt aus dem Redis-Passwort |
jwt_secret_key.txt | Schlüssel zum Signieren der Anmelde-Tokens |
opsi_key_public.pem, opsi_key_private.pem | Schlüsselpaar für die opsi-Passwörter: die API verschlüsselt, nur der Worker kann entschlüsseln |
settings_encryption_key.txt | AES-256-Schlüssel der Versionen vor 0.18.6 (nur zum Umstellen alter Einträge) |
garage_rpc_secret.txt | RPC-Secret des Objektspeichers |
garage_admin_token.txt | Token für die Admin-API des Objektspeichers |
admin_password.txt | Passwort des ersten Administrator-Kontos |
ldap_bind_password.txt | leer; setup-opbweb.sh schreibt das Passwort des LDAP-Dienstkontos hinein |
Zusätzlich legt das Skript das leere Verzeichnis certs/ldap/ an.
Das Verzeichnis secrets/ bekommt die Rechte 750, die Dateien 444. Docker reicht die Secret-Dateien mit den Rechten des Hosts in die Container durch. Dort laufen die Prozesse unter anderen Benutzern (MariaDB, Redis, die Anwendung als appuser mit UID 1000); mit 600 könnten sie die Dateien auf einem Linux-Host nicht lesen. Andere Benutzer des Hosts halten die Rechte des Verzeichnisses fern.
Beim ersten Lauf zeigt das Skript das Passwort des ersten Administrators genau einmal an:
>>> Erstes Admin-Konto: Benutzer 'admin', Passwort: <Passwort>
>>> (steht auch in secrets/admin_password.txt; bitte nach der ersten Anmeldung ändern)
Notiere dir das Passwort oder lies es später aus secrets/admin_password.txt.
Achtung
Sichere das Verzeichnis secrets/ zusammen mit den Daten. Ohne opsi_key_private.pem lassen sich die gespeicherten opsi-Passwörter nicht mehr entschlüsseln, ohne die passenden Datenbank- und Garage-Secrets sind die gesicherten Daten nicht nutzbar. Details stehen unter Sicherung und Wiederherstellung
.
4. TLS-Zertifikat
oPBWeb läuft immer mit HTTPS. Port FRONTEND_HTTP_PORT leitet nur auf HTTPS weiter, COOKIE_SECURE setzt das Setup auf true. Für das Zertifikat gibt es drei Wege, das Setup wählt selbst:
| Vor dem Setup | Ergebnis |
|---|
fullchain.pem und key.pem liegen neben setup-opbweb.sh | Das Setup prüft, ob Zertifikat und Schlüssel zusammenpassen, und verschiebt beide nach certs/. Ein vorhandenes Zertifikat bleibt als certs/fullchain.pem.bak-<Zeit> bzw. certs/key.pem.bak-<Zeit> liegen. |
certs/fullchain.pem und certs/key.pem sind schon da | Das Setup behält sie (nach derselben Prüfung). |
| kein Zertifikat | Das Setup erzeugt ein self-signed Zertifikat für den abgefragten Hostnamen (Vorgabe: hostname -f), gültig 825 Tage, mit den Namen Hostname, Kurzname, localhost und 127.0.0.1. Der Browser warnt beim ersten Aufruf. |
fullchain.pem enthält das Serverzertifikat mit allen Zwischenzertifikaten, key.pem den privaten Schlüssel ohne Passwort. Liegt nur eine der beiden Dateien vor oder passen sie nicht zusammen, bricht das Setup mit einer Meldung ab.
Die CA des LDAP-Servers legst du genauso als ldap-ca.pem neben das Skript; das Setup verschiebt sie nach certs/ldap/ und schlägt sie bei den LDAP-Fragen als CA-Datei vor, siehe LDAP-Anmeldung
.
Ein eigenes Zertifikat später einspielen oder erneuern: fullchain.pem und key.pem neben das Skript legen, ./setup-opbweb.sh --updateonly ausführen und das Frontend neu starten (docker restart opbweb-frontend).
5. Images bereitstellen und Stack starten
oPBWeb hat drei eigene Images: Backend (für api und worker), Frontend und garage-init. Welchen Weg du nimmst, hast du im Setup festgelegt.
Images lokal bauen
Starte den Stack und baue dabei die Images:
Der erste Build dauert einige Minuten, weil alle Abhängigkeiten heruntergeladen werden. Der Host braucht dafür Internetzugang, siehe Voraussetzungen
.
Images aus einer Registry
Die GitLab-CI baut die Images und legt sie mit Versionsnummer und als latest in der Registry des Projekts ab (<Registry>/backend, …/frontend, …/garage-init, siehe Build und Auslieferung
). setup-opbweb.sh trägt die vollständigen Namen als BACKEND_IMAGE, FRONTEND_IMAGE und GARAGE_INIT_IMAGE in die .env ein. Hole die Images (falls du das nicht schon im Setup erledigt hast) und starte ohne --build. Die Registry des Projekts ist öffentlich; nur bei einer eigenen Registry, die eine Anmeldung verlangt, meldest du dich vorher mit docker login <Registry-Host> an:
docker compose pull
./start.sh
Gebaut wird auf diesem Host dann nichts; Internetzugang zum Bauen braucht nur der Rechner, der die Images baut.
start.sh
start.sh prüft, ob .env vorhanden ist, ruft scripts/init-secrets.sh auf, startet die Container im Hintergrund und zeigt anschließend ihren Status an.
| Option | Wirkung |
|---|
| (keine) | startet den Produktiv-Stack mit den vorhandenen Images |
--build | baut die Images vor dem Start neu |
--logs | folgt nach dem Start den Container-Logs; Strg+C beendet nur die Anzeige, die Container laufen weiter |
--dev | startet zusätzlich die Entwicklungsumgebung (docker-compose.dev.yml); nicht für den Produktivbetrieb |
--lang de bzw. --lang en | Sprache der Ausgaben für diesen Aufruf (sonst OPBWEB_LANG aus der .env) |
-h, --help | zeigt die Hilfe |
Die Optionen lassen sich kombinieren, zum Beispiel ./start.sh --build --logs.
Was beim ersten Start passiert
Die Dienste starten in fester Reihenfolge, jeder wartet auf seine Abhängigkeiten:
- db, redis und garage starten und melden sich über ihre Healthchecks als bereit.
- garage-init richtet den Objektspeicher ein: Layout, Zugangsschlüssel
opbweb und Bucket packages. Danach beendet sich der Container. Das passiert bei jedem Start erneut und ändert an vorhandenen Daten nichts. - api wartet bis zu 60 Sekunden auf die Datenbank, spielt die Datenbankmigrationen ein und legt das erste Administrator-Konto an, solange noch kein Benutzer existiert. Im Log steht dann „Initial admin ‘admin’ created“.
- worker startet und meldet sich regelmäßig per Heartbeat.
- frontend wählt je nach Zertifikat HTTPS oder HTTP und meldet „TLS-Zertifikat gefunden – HTTPS auf Port 443“ bzw. „Kein TLS-Zertifikat – HTTP auf Port 80“. Die Portangabe bezieht sich auf den Container; nach außen gelten die Ports aus der
.env.
Alle Dienste starten mit restart: unless-stopped und laufen nach einem Neustart des Hosts automatisch wieder an.
6. Installation prüfen
Prüfe zuerst den Status der Container:
Die Dienste opbweb-frontend, opbweb-api, opbweb-worker, opbweb-db, opbweb-redis und opbweb-garage müssen laufen. opbweb-garage-init ist normalerweise bereits beendet (Exit-Code 0); docker compose ps -a zeigt auch beendete Container. Bei Problemen helfen die Logs, zum Beispiel:
docker logs opbweb-api
docker logs opbweb-worker
Öffne anschließend oPBWeb im Browser unter https://<host>/ (bzw. http://<host>/ ohne Zertifikat, bei abweichenden Ports mit Portangabe). Nach der Anmeldung zeigt die Seite Systemstatus den Zustand von Datenbank, Redis, Objektspeicher, Worker und opsi-Server. Solange noch kein Configserver eingerichtet ist, meldet die Zeile opsi-Server einen Fehler – das ist vor der Ersteinrichtung normal. Mehr dazu unter Systemstatus
.
Ohne Anmeldung kannst du die API prüfen:
curl -k https://<host>/api/health
Die Antwort enthält "status":"ok" und die Backend-Version.
Stack stoppen
Das Skript fährt alle Container herunter und entfernt sie. Die Docker-Volumes mit Datenbank und Objektspeicher bleiben erhalten; beim nächsten ./start.sh ist alles wieder da.
Wie geht es weiter?
Ersteinrichtung
Erste Anmeldung, Configserver einrichten, Depot-Stufen festlegen und erste Benutzer anlegen
Rolle: Administrator
Überblick
Nach der Installation
ist oPBWeb erreichbar, kennt aber noch keinen opsi-Server und hat nur ein Konto: den ersten Administrator. In der Ersteinrichtung meldest du dich mit diesem Konto an, änderst sein Passwort, verbindest oPBWeb mit einem oder mehreren opsi-Configservern, legst die Stufen der Depots fest und richtest die ersten Benutzer ein.
Du brauchst dafür das Admin-Passwort aus secrets/admin_password.txt, die Zugangsdaten des technischen opsi-Benutzers und einen Shell-Zugang zum Configserver, um den Fingerabdruck des CA-Zertifikats zu prüfen.
1. Als Administrator anmelden
Öffne oPBWeb im Browser, zum Beispiel https://opbweb.example.local/.

Trage bei Benutzername admin ein (bzw. den Wert von ADMIN_USERNAME aus der .env).
Trage bei Passwort das Passwort aus secrets/admin_password.txt ein.
Klicke auf Anmelden.
Nach der Anmeldung siehst du die Paketliste. Unten in der Statusleiste erscheint der orange Hinweis „Kein Configserver eingerichtet“, bis du den ersten Configserver eingerichtet hast.
2. Admin-Passwort ändern
Das erzeugte Passwort steht im Klartext in secrets/admin_password.txt. Ändere es deshalb direkt nach der ersten Anmeldung:
- Klicke oben rechts auf deinen Avatar (die Initialen).
- Wähle Passwort ändern.
- Trage das Aktuelle Passwort ein, dann zweimal das neue Passwort in Neues Passwort und Neues Passwort wiederholen. Das Passwort muss mindestens 10 Zeichen lang sein.
- Klicke auf Speichern.
Die Datei secrets/admin_password.txt wird dabei nicht geändert. Sie wird nur ausgewertet, solange noch kein Benutzer existiert, also beim allerersten Start.
3. Configserver einrichten
oPBWeb kann mit mehreren opsi-Configservern arbeiten, zum Beispiel einem Test- und einem Produktivsystem. Du legst sie in der Ansicht Depots an; das Passwort wird verschlüsselt in der Datenbank gespeichert und nur vom Worker entschlüsselt. Für jeden weiteren Configserver wiederholst du die folgenden Schritte.
Klicke in der Aktivitätsleiste links auf Depots.
Klicke im Kopf der linken Liste auf + („Neuer Configserver“).
Trage folgende Werte ein:
- Name – eine Bezeichnung, zum Beispiel Configserver. Lässt du das Feld leer, wird der Hostname aus der URL verwendet.
- URL des Configservers – vollständiger Hostname mit Port 4447, zum Beispiel
https://opsi.example.local:4447. Verwende den FQDN, nicht die IP-Adresse: Das Zertifikat von opsiconfd lautet auf den Namen. - Technischer Benutzer – der opsi-Benutzer mit Admin-Rechten (Vorgabe
opsiadm). - Passwort – das Passwort dieses Benutzers.
- Stufe – Produktion (Vorgabe), Staging oder Test. Für einen Testserver wählst du Test; alle Depots des Servers übernehmen diese Stufe (siehe Schritt 4
).
Lass TLS-Zertifikat des Servers prüfen (empfohlen) eingeschaltet.
Klicke unter VERTRAUTES CA-ZERTIFIKAT auf Vom Server holen. oPBWeb lädt das CA-Zertifikat des Configservers und zeigt es im Dialog CA-Zertifikat des Servers mit seinem SHA-256-Fingerabdruck an.
Ermittle auf dem Configserver den Fingerabdruck der opsi-CA:
openssl x509 -in /etc/opsi/ssl/opsi-ca-cert.pem -noout -fingerprint -sha256
Vergleiche beide Fingerabdrücke. Stimmen sie überein, klicke auf Vertrauen. Weichen sie ab, brich ab und kläre, mit welchem Server du tatsächlich verbunden bist.
Klicke auf Hinzufügen. Die Meldung „Configserver gespeichert“ bestätigt das.

Direkt nach dem Hinzufügen startet oPBWeb Verbindung testen für den neuen Server. Der Test prüft Anmeldung, Admin-Rechte und opsi-Version und liest die Depots des Configservers; sie erscheinen danach in der Liste unter dem Server. War er erfolgreich, wird der Punkt vor dem Servernamen grün und das Abzeichen im Formular zeigt „erreichbar“. Später kannst du den Test im Formular des Servers mit Verbindung testen jederzeit wiederholen.
Unter dem CA-Zertifikat siehst du danach eine Zeile wie „Zuletzt geprüft … · opsi 4.3 … · 2 Depots“.
Tipp
Statt Vom Server holen kannst du die CA auch mit PEM-Datei laden … aus einer Datei übernehmen, etwa wenn du /etc/opsi/ssl/opsi-ca-cert.pem vorher vom Configserver kopiert hast.
Schlägt der Test fehl, prüfe die häufigsten Ursachen:
| Meldung oder Symptom | Ursache |
|---|
| „… hat keine opsi-Admin-Rechte“ | Der technische Benutzer ist in opsi kein Admin. |
| HTTP 403 | opsiconfd lässt Admin-Aufrufe nur aus den admin-networks zu; das Docker-Netz des Workers fehlt dort, siehe Voraussetzungen
. |
| Zertifikatsfehler | Die URL enthält eine IP-Adresse statt des FQDN, oder es ist kein bzw. ein falsches CA-Zertifikat hinterlegt. |
Weitere Ursachen beschreibt das Kapitel Fehlersuche
. Alle Funktionen des Formulars, auch das Entfernen eines Configservers und den Wechsel des CA-Zertifikats bei einer Rotation, erklärt das Kapitel Configserver
.
Hinweis
Die Zeile opsi-Server auf der Seite Systemstatus wird von einer Prüfung des Workers gefüllt, die standardmäßig alle 5 Minuten läuft (Einstellungen → Worker
). Es kann also einige Minuten dauern, bis sie nach der Einrichtung „OK“ zeigt.
4. Depot-Stufen festlegen
Mit dem erfolgreichen Verbindungstest liest oPBWeb die Depots vom Configserver. Danach gleicht der Worker die Depots aller Configserver alle 5 Minuten automatisch ab; unter Depots kannst du mit Abgleichen (ein Configserver) oder ⟳ (alle Configserver) auch selbst einen Abgleich anstoßen.
Jedes Depot hat eine Stufe: Test, Staging oder Produktion. Packager dürfen auf Test- und Staging-Depots installieren, auf produktive Depots nur Releaser. Ein Depot erbt die Stufe seines Configservers; das erkennst du am kursiven Abzeichen. Hast du die Stufe beim Configserver schon passend gewählt, ist hier nichts mehr zu tun.
Sollen einzelne Depots von der Stufe ihres Configservers abweichen, zum Beispiel ein Test-Depot an einem produktiven Configserver, stellst du die Stufe am Depot selbst um:
Klicke in der Aktivitätsleiste auf Depots.
Wähle links das Depot aus.
Wähle im Bereich Einstellungen bei Stufe den gewünschten Wert, zum Beispiel Test. Mit „wie Configserver (…)“ erbt das Depot wieder die Stufe seines Servers.

Klicke auf Speichern. Die Meldung „Einstellungen gespeichert“ bestätigt die Änderung, und das Depot trägt in der Liste das Abzeichen Test.
Wiederhole die Schritte für alle weiteren abweichenden Depots.
Die weiteren Depot-Einstellungen (Dienst-URL, Aktiv) beschreibt das Kapitel Depot-Verwaltung
.
5. Erste Benutzer anlegen
Lege für alle, die mit oPBWeb arbeiten, eigene Konten an, statt das Admin-Konto zu teilen:
- Klicke in der Aktivitätsleiste auf Benutzer und Rollen.
- Klicke auf Neuer Benutzer.
- Fülle Benutzername, Rolle, Name, E-Mail, Standardsprache und Neues Passwort aus und klicke auf Anlegen.
Welche Rolle was darf und wie du Konten später bearbeitest, sperrst oder löschst, steht im Kapitel Benutzer und Rollen
.
Tipp
Lege mindestens ein zweites Konto mit der Rolle Administrator an. Ist das einzige Admin-Konto gesperrt oder das Passwort vergessen, kommt sonst niemand mehr an die Verwaltung.
6. Optional: Anmeldung über LDAP
Zusätzlich zu lokalen Konten können sich Benutzer mit ihrem Verzeichniskonto (LDAP oder Active Directory) anmelden. Die Rolle ergibt sich dann bei jeder Anmeldung aus der Gruppenmitgliedschaft. Die Einrichtung erfolgt über die .env und ist Aufgabe der technischen Administration, siehe LDAP-Anmeldung
.
Ergebnis
Nach der Ersteinrichtung:
- ist das Admin-Passwort geändert,
- sind die Configserver eingerichtet und „erreichbar“, die Statusleiste zeigt keinen opsi-Hinweis mehr,
- sind die Depots bekannt und haben die richtige Stufe (Test, Staging oder Produktion),
- können sich die ersten Benutzer anmelden.
Wie die Arbeit in oPBWeb dann aussieht, zeigt das Kapitel Erste Schritte
.