opsi als Docker-Container

Seit 2022 gibt es ein Docker-Image, mit dem Sie einen opsi-Configserver oder einen opsi-Depotserver einrichten können. Es setzt auf das Orchestrierungswerkzeug Docker Compose, das es ermöglicht, mehrere Container zu definieren, diese miteinander zu verbinden und auf einem Docker-Host auszuführen. Sie benötigen mindestens Docker Compose 1.17.0 und die Docker-Engine 17.09.0 oder neuer.

Beachten Sie, dass ausschließlich WebDAV als Protokoll zur Kommunikation mit dem opsi-Depot zum Einsatz kommt; eine Samba-Unterstützung gibt es in dieser Variante nicht.

Docker installieren

Installieren Sie Docker bzw. Docker Desktop unter Linux, Windows oder macOS:

Unter Linux können Sie auch ganz einfach direkt mit der Docker Engine arbeiten. Dazu installieren Sie die entsprechenden Pakete für Ihre Linux-Distribution.

Dass die Installation erfolgreich war, können Sie schnell mit dem folgenden Befehl im Terminal überprüfen:

docker run --rm hello-world
In der Voreinstellung erfordert das docker-Kommando Root-Rechte, das heißt, auch die Arbeit mit unseren Hilfsskripten setzt Root-Rechte voraus. Sie können dazu entweder sudo vor die in diesem Kapitel gezeigten Befehle stellen, oder Sie fügen einen Benutzeraccount zur Gruppe docker hinzu. Weitere Informationen finden Sie im Docker-Handbuch, Kapitel Linux post-installation steps for Docker Engine.

Als Antwort sollten Sie diese Ausgabe sehen:

Hello from Docker!
This message shows that your installation appears to be working correctly.
[...]

Quick Start

Für eine einfache Inbetriebnahme und Verwaltung einer opsi-Docker-Umgebung steht ein Hilfs-Skript bereit.

Docker-Profis können auf das Hilfs-Skript verzichten und finden alle relevanten Informationen in unserem GitHub-Repository opsi-docker.

Windows

Unter Windows gehen Sie folgendermaßen vor:

  1. Legen Sie einen Ordner opsi-server an.

  2. Laden Sie das Skript opsi-server.ps1 herunter und legen es im Ordner opsi-server ab.

  3. Starten Sie eine PowerShell mit Administrator-Rechten.

  4. Führen Sie im Terminalfenster den folgenden Befehl aus: PowerShell.exe -ExecutionPolicy Bypass

  5. Wechseln Sie mit cd in den Ordner opsi-server.

  6. Führen Sie den Befehl .\opsi-server.ps1 start aus.

Linux und macOS

Unter Linux und macOS führen Sie diese Schritte aus:

  1. Legen Sie einen Ordner opsi-server an.

  2. Laden Sie das Skript opsi-server.sh herunter und legen es im Ordner opsi-server ab.

  3. Starten Sie ein Terminal mit root-Rechten.

  4. Wechseln Sie mit cd in den Ordner opsi-server.

  5. Machen Sie das Skript ausführbari: chmod +x opsi-server.sh

  6. Führen Sie den Befehl ./opsi-server.sh start aus.

Die benötigten Docker-Images werden jetzt automatisch heruntergeladen und die Container gestartet.

  • Mit dem Befehl .\opsi-server.ps1 status bzw. ./opsi-server.sh status können Sie den Status der Container ausgeben.

  • Mit dem Befehl .\opsi-server.ps1 logs bzw. ./opsi-server.sh logs können Sie die Logs der Container einsehen.

  • Mit dem Befehl .\opsi-server.ps1 upgrade bzw. ./opsi-server.sh upgrade können Sie die Container auf die aktuellsten Versionen aktualisieren.

In dem Ordner opsi-server liegt nun eine Datei docker-compose.yml. Öffnen Sie diese Datei mit einem Texteditor. Suchen Sie nach der Umgebungsvariable OPSI_ADMIN_PASSWORD. Das angegebene Passwort benötigen Sie in den folgenden Schritten zur Anmeldung am opsi-Server als Benutzer adminuser.
Wir empfehlen dringend, dieses Passwort zu ändern.

Wenn Sie die Datei docker-compose.yml verändert haben, starten Sie die Container neu, um die Änderungen zu übernehmen. Dazu geben Sie .\opsi-server.ps1 recreate bzw. ./opsi-server.sh recreate ein.

Docker Compose

Die Konfigurationsdatei docker-compose.yml definiert Netzwerke, Volumes und diese vier Dienste (Abschnitt services):

  • mysql: installiert den Datenbankserver MariaDB

  • redis: installiert die In-Memory-Datenbank Redis mit dem RedisTimeSeries-Modul

  • grafana: spielt ein aktuelles Grafana ein

  • opsi-server: installiert die Pakete opsiconfd, opsipxeconfd, opsi-tftpd-hpa und opsi-utils in der jeweils aktuellsten Version

Am Anfang der Datei sind einige X Properties (sogenannte Extension fields) definiert, z. B. x-restart-policy, x-common-variables usw. Diese YAML-Anker kommen zum Einsatz, um Einstellungen zwischen den Diensten auszutauschen.

Im weiteren Verlauf finden Sie dort einige Umgebungsvariablen für die Container. Diese bearbeiten Sie entweder in der Datei docker-compose.yml direkt, oder Sie setzen die Variablen in der mitgelieferten Datei opsi-server.env, die beim Start eingelesen wird (definiert in sder Datei docker-compose-env.yml). Die .env-Datei hält dann die Konfiguration an einer zentralen Stelle vor, und Sie müssen die Variablen nicht in der docker-compose.yml heraussuchen. Sie können den Stack dann über dieses Kommando starten:

docker compose -f docker-compose-env.yml up
Aus Sicherheitsgründen sollten Sie alle Passwörter in der Datei docker-compose.yml ändern: MYSQL_ROOT_PASSWORD, MYSQL_PASSWORD, REDIS_PASSWORD, GF_SECURITY_ADMIN_PASSWORD und OPSI_ADMIN_PASSWORD.

Ein Kennwort für den Benutzer root ist nicht gesetzt. Sie können dieses über OPSI_ROOT_PASSWORD festlegen:

OPSI_ROOT_PASSWORD: <passwort>
Wenn Sie TFTP-Netzwerk-Boot (und damit opsipxeconfd und opsi-tftp-hpa) nicht benötigen, können Sie die Variable OPSI_TFTPBOOT auf "false" setzen.

Die nächsten beiden Abschnitte erklären, wie Sie die Konfigurationsdatei docker-compose.yml anpassen, um einen Configserver oder einen Depotserver aufzusetzen.

opsi-Configserver

Nachdem Sie die Einstellungen für den Hostnamen und die Domain im Bereich opsi-server an Ihr Netzwerk angepasst haben, setzen Sie die Variable OPSI_HOST_ROLE auf configserver:

OPSI_HOST_ROLE: configserver

Unter Linux und macOS starten Sie alle Dienste über ./opsi-server.sh start, unter Windows mit dem Befehl .\opsi-server.ps1 start (siehe Abschnitt Die Helfer-Skripte). Den Status des Containers überprüfen Sie mit dem Befehl ./opsi-server.sh status (Linux, macOS) bzw. .\opsi-server.ps1 status, und die Logfiles betrachten Sie mit ./opsi-server.sh logs bzw. .\opsi-server.ps1 logs.

Überprüfen Sie den Status und die Logfiles mit dem Skript *opsi-server.sh*.
Abbildung 1. Überprüfen Sie den Status und die Logfiles mit dem Skript opsi-server.sh.

opsi-Depotserver

Sie können unser Docker-Image dazu verwenden, einen opsi-Depotserver aufzusetzen. Das setzt voraus, dass es bereits einen opsi-Configserver gibt und dass Sie diesen über das Netzwerk erreichen können. Konkret sollten Sie prüfen, ob Sie vom Docker-Host aus den Configserver auf Port 4447 per HTTPS ansprechen können (siehe Abschnitt Verwendete Protokolle und Ports). Dazu können Sie beispielsweise curl auf der Kommandozeile verwenden (Windows: Eingabeaufforderung, Linux/macOS: Terminal):

curl --insecure https://<fqdn>:4447/public

Ersetzen Sie <fqdn> durch den FQDN oder die IP-Adresse des opsi-Configservers; das Verzeichnis public ist in der Regel ohne Authentifizierung auf dem Configserver erreichbar. Als Rückmeldung erhalten Sie eine XML-Datei.

Außerdem erzeugen Sie auf dem Configserver ein neues Depot. Am leichtesten gelingt das über die Admin-Seite auf dem Reiter Depots. Tragen Sie den FQDN des Docker-Hosts und eine optionale Beschreibung ein und klicken Sie auf Create Depot. Das neue Depot sollte sofort in der Liste auftauchen; den Host-Key benötigen Sie gleich für die Konfiguration des Depotservers.

Admin-Seite: ein neues Depot erzeugen
Abbildung 2. Admin-Seite: ein neues Depot erzeugen

Danach können Sie die Datei docker-compose.yml im Texteditor Ihrer Wahl bearbeiten. Die beiden Dienste mysql und grafana benötigen Sie für einen Depotserver nicht, daher können Sie diese auskommentieren oder löschen. Achten Sie darauf, mysql dann auch im Abschnitt opsi-server aus dem depends_on-Attribut zu entfernen.

Setzen Sie die Variable OPSI_HOST_ROLE auf depotserver:

OPSI_HOST_ROLE: depotserver

Für einen Depotserver setzen Sie außerdem die beiden Variablen OPSI_SERVICE_ADDRESS (Service-URL des opsi-Configservers) und OPSI_HOST_KEY (Host-Key des Depots). Danach starten Sie alle Dienste über ./opsi-server.sh start (Linux, macOS) bzw. .\opsi-server.ps1 start (Windows).

Den Host-Key des opsi-Depotservers finden Sie z. B. im Admin-Interface des opsi-Configservers auf dem Reiter Depots. Klicken Sie in das Feld, um diesen sichtbar zu machen.
Admin-Seite: den Host-Key des Depots einblenden
Abbildung 3. Admin-Seite: den Host-Key des Depots einblenden

Die Helfer-Skripte

Wir haben zwei Helfer-Skripte beigelegt, die den Umgang mit dem opsi-Docker-Container erleichtern. Unter Linux und macOS verwenden Sie das Skript opsi-server.sh. Machen Sie dieses zunächst ausführbar:

chmod +x opsi-server.sh

Danach rufen Sie es als normaler Benutzer ohne weitere Parameter oder Optionen auf, um eine Onlinehilfe einzublenden:

./opsi-server.sh
Usage: ./opsi-server.sh <command>

Commands:
  edit                      Edit docker-compose.yml.
  start                     Start all containers.
  status                    Show running containers.
  stop                      Stop all containers.
  logs [service]            Attach to container logs (all logs or supplied service).
  shell [service]           Exexute a shell in a running container (default service: opsi-server).
  update                    Update and restart all containers.
  open-volumes              Open volumes directory in explorer.
  inspect [service]         Show detailed container informations (default service: opsi-server).
  diff [service]            Show container's filesystem changes (default service: opsi-server).
  prune                     Delete all containers and unassociated volumes.
  export-images             Export images as archive.
  import-images [archive]   Import images from archive.
  build [--no-cache]        Build opsi-server image. Use --no-cache to build without cache.
  publish                   Publish opsi-server image.

Das zweite Skript opsi-server.ps1 ist für Windows-Anwender und den Einsatz auf der Windows PowerShell gedacht. Es hat im Wesentlichen die gleichen Optionen und Parameter; lediglich die letzten beiden Kommandos (build und publish) sind nicht verfügbar.

Der opsi-Server ist jetzt bereit für die nächsten Schritte.