[inhalt]
Projekt BISO 3 - Handbuch

BISO im Linux-Container (aka Docker-Container)

BISO kann als Linux-Container (Docker-Container) ausgeführt werden. Dieses Dokument stellt die erforderlichen Schritte zur Installation und Verwendung des Containers vor.

Erstellen des Container-Images für den Produktiveinsatz

BISO kann als ein einzelner Linux-Container ausgeführt werden: Das von uns bereitgestellte Container-Image beinhaltet die Web-Applikation, ausgeliefert als HTTP-Server mit PHP. Somit eignet sich BISO auch für den Einsatz in einer Container-Orchestrierungs-Infrastruktur wie z.B. Kubernetes.

Sowohl die Datenbank (PostgreSQL) wie auch der persistente File-Storage müssen als externe Ressourcen konfiguriert werden.

Das Erstellen des Container-Images erfolgt mit dem folgenden Befehl:

docker build --pull -t registry.kadenpartner.ch/kp/biso:[Image-Versions-Tag, z.B. 3.16.1] \
     --platform linux/amd64 \
     --build-arg TAG=[ausgecheckter git-Tag, z.B. 3.16.1] \
     --build-arg DEPLOY_TOKEN=[Gitlab Deploy Token] \
     docker/prod/

Deployment auf interne Image-Registry

docker login registry.kadenpartner.ch
docker push registry.kadenpartner.ch/kp/biso:[Image-Versions-Tag, z.B. 3.16.1]

Anmerkung zur Authentifizierung: Für das Gitlab-Deployment muss der Login mit einem User erfolgen, der mind. die Berechtigung "Reporter" und den API-Token-Scope "write_registry" besitzt. Für den lesenden Zugriff (Image Pull) reicht ein Project Access Token mit der Rolle "Reporter" und "read_registry" aus.

Konfiguration und Volume

Nutz- und temporäre Daten sollten in einem persistent Volume gespeichert und dem Container unter /data zur Verfügung gestellt werden.

Der BISO-Container wird unter dem Linux-User biso als uid=5000, gid=5000 ausgeführt. Dieser User benötigt Schreibrechte auf dem /data-Volume, muss also Dateien und Verzeichnisse anlegen und löschen können.

BISO benötigt ein config.php-File, welches die notwendige Konfiguration wie Datenbank-Config, File-Pfade etc. definiert. Wir empfehlen, dieses config-File auf einem persistent Volume unter /data/config.php zu platzieren.

Anpassungen an config.php

Generell sind die Dateipfade so anzupassen, dass die mit der gewählten Systemkonfiguration übereinstimmen. Insbesondere sind folgende Konfigurationen in config.php zu prüfen:

// Ganz oben: Einbinden des BISO-Basis-Config-Files:
require_once '/var/www/html/system_config.php';

// Basis zum Data-Dir, hier zum persistent volume /data:
Config::set('datadir', '/data'));
// Temporäre Dateien:
Config::set('tmpdir', '/data/tmp');
// Das tmp-Dir sollte existieren:
if (!is_dir(Config::get('tmpdir'))) {
    @mkdir(Config::get('tmpdir'));
}
// Temporäre Upload-Dateien:
Config::set('upload_dir', '/data/tmp'));

// Template-Engine-PFade:
Config::set('gaia.smarty_compile_dir', Config::get('tmpdir'));
Config::set('gaia.smarty_cache_dir', Config::get('tmpdir'));

// Web-Pfade:
Config::set('webhost', 'http://localhost:8085');
Config::set('webroot', '');
Config::set('backend_base', '/backend');

// Apache FOP-Executable inkl. Config-Datei:
Config::set('fopBin', Config::get('appdir') . '/fop-1.0/fop -c ' . Config::get('datadir') . '/fop.xconf');
// Falls benötigt (für Word-to-PDF): Libre-Office-Pfad:
Config::set('libreOfficeBin', '/usr/bin/soffice -env:UserInstallation=file:///data/libreoffice');

Container erstellen, konfigurieren

Wird Docker als Container-Runtime verwendet, kann der Container mit dem folgenden Befehl erstellt werden, um oben genannte Konfiguration anzuwenden:

docker run --name biso -ti \
    -v /pfad/zum/persistenten/data/volume:/data \
    -e GAIA_CONFIG=/data/config.php \
    -p [externer TCP-Port]:80 registry.kadenpartner.ch/kp/biso:[Image-Tag, z.B. 3.16.1]

Achtung: Beim Start des Containers wird folgendes ausgeführt:

Das bedeutet, dass beim Container-Start sowohl die Datei config.php vorhanden und korrekt konfiguriert sein muss, sowie auch die Datenbank-Verbindung zum PostgreSQL-Server hergestellt werden muss.

Kann dies nicht erfolgen, stoppt der Container wieder mit einem Fehler.

Informationen zur Verwendung in einer Container-Cluster-Umgebung (z.B. K8s)

Grunsätzlich kann BISO auch in einer Container-Cluster-Umgebung wie Kubernetes betrieben werden. Aktuell ist BISO nur auf den Single-Instance-Betrieb ausgelegt, da bsp. die Web-Session-Daten noch nicht zentral gespeichert werden.

Erfahrungen dazu sind noch zu sammeln. // Infos dazu folgen