BISO kann als Linux-Container (Docker-Container) ausgeführt werden. Dieses Dokument stellt die erforderlichen Schritte zur Installation und Verwendung des Containers vor.
config.phpBISO 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/
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.
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.
config.phpGenerell 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');
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:
/data/config.php wird gelesen/data werden angelegtDas 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.
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