Zum Inhalt

Architektur

calServer ist eine mandantenfaehige PHP-Webanwendung auf Basis des Yii-1.1-Frameworks. Dieser Abschnitt beschreibt den Technologie-Stack, die Modulstruktur und das Verzeichnislayout.

Technologie-Stack

Schicht Technologie
Sprache PHP 7.4
Framework Yii 1.1 (MVC)
Datenbank MySQL 5.7
Webserver Nginx (Reverse Proxy)
Caching Memcached
Berichtserstellung JasperReports (Report-Runner, Java 21)
Containerisierung Docker / Docker Compose
Orchestrierung Kubernetes / Helm (optional)
Synchronisation SymmetricDS
Backup Borg Backup
Echtzeit Pusher (WebSocket)
SSO SAML 2.0 / LDAP (onelogin/php-saml, adLDAP)

Container-Architektur

Das Docker-Compose-Setup besteht aus folgenden Diensten:

Container Aufgabe
calserver PHP-FPM + Nginx -- Hauptanwendung
mysql_db MySQL-5.7-Datenbank
report-runner Java-Dienst (Javalin + JasperReports) zur Berichtserzeugung auf Port 8090
nginx-proxy Reverse Proxy mit automatischer SSL-Terminierung
adminer Web-basierter Datenbankzugriff (nur Entwicklung/Admin)
metteam MSSQL Server fuer Fluke MET/TEAM-Integration (optional)

Die Kommunikation zwischen calserver und report-runner erfolgt intern ueber HTTP (http://report-runner:8090). Der Nginx-Proxy leitet externe Anfragen an den PHP-FPM-Prozess weiter.

Modulstruktur

Die Anwendungslogik ist in Yii-Module gegliedert, die unter httpdocs/protected/modules/ liegen:

Modul Zweck
frontend Hauptmodul -- Inventar, Kalibrierungen, Kunden, Auftraege, Berichte, Dashboard
api REST-API-Endpunkte (Inventory, Calibration, Customer, Report, User u. a.)
adminpanel Administrationsoberflaeche -- Einstellungen, Feldkonfiguration, Benutzerverwaltung
dms Dokumentenmanagementsystem -- Datei-Upload, Inbox, Versionierung
support Support-Ticketsystem mit E-Mail-Fetch
wiki Internes Wiki-Modul
jbackup Backup-Verwaltung ueber die Weboberflaeche
showcase Demo-/Praesentationsmodul

Jedes Modul folgt dem Yii-MVC-Muster mit Unterverzeichnissen fuer controllers, models, views und optional components.

Verzeichnislayout

calServer-yii/
├── docker/                     # Docker-Compose, Nginx-Konfig, Umgebungsvariablen
│   ├── docker-compose.yml
│   ├── nginx/
│   └── mysql/
├── configs/                    # PHP, Nginx, Memcached, Cron-Konfiguration
├── httpdocs/                   # Webroot
│   ├── index.php               # Einstiegspunkt
│   ├── protected/              # Geschuetzter Anwendungscode
│   │   ├── commands/           # CLI-Befehle (yiic)
│   │   ├── components/         # Anwendungskomponenten und Behaviors
│   │   ├── config/             # Yii-Konfiguration (main, local, constants)
│   │   ├── controllers/        # Globale Controller (Site, Command)
│   │   ├── extensions/         # Yii-Erweiterungen (RestfullYii, PHPExcel, Booster u. a.)
│   │   ├── features/           # Behat-Testszenarien
│   │   ├── helpers/            # Globale Hilfsfunktionen
│   │   ├── messages/           # Uebersetzungsdateien (de, en)
│   │   ├── migrations/         # Datenbank-Migrationen
│   │   ├── modules/            # Anwendungsmodule (siehe oben)
│   │   ├── sql/                # SQL-Skripte
│   │   ├── tests/              # Unit- und Integrationstests
│   │   ├── vendor/             # Composer-Abhaengigkeiten
│   │   └── vendors/            # Manuelle Bibliotheken (mPDF, html2pdf, FPDI)
│   ├── reports/                # JasperReports-Vorlagen (.jrxml, .jasper)
│   ├── filemanager/            # DMS-Dateispeicher
│   ├── uploads/                # Benutzer-Uploads (Bilder, Avatare)
│   └── themes/                 # UI-Themes
├── report-runner/              # Java-basierter Report-Service
│   ├── pom.xml
│   └── src/
├── calserver-sync/             # SymmetricDS-Synchronisation
├── borg/                       # Borg-Backup-Skripte
├── helm-chart/                 # Kubernetes Helm Chart
├── k8s/                        # Kubernetes-Manifeste
├── ci/                         # CI/CD-Konfiguration
├── tools/                      # Hilfsskripte
└── docs/                       # MkDocs-Dokumentation

Zentrale Komponenten

Die wichtigsten Anwendungskomponenten unter httpdocs/protected/components/:

Komponente Beschreibung
Controller Basis-Controller mit Authentifizierung, Layout und Mandantenkontext
DccXmlGenerator Erzeugt DCC-konforme XML-Dateien aus Kalibrierdaten (siehe DCC-Export)
ReportEngineManager Steuerung der Berichtserzeugung (Legacy vs. Report-Runner), Feature-Flags, DCC-Plugin
GridView / GridViewHelper Erweiterte Yii-Grid-Ansicht mit konfigurierbaren Spalten
KCDbAuthManager Datenbankbasierte Rechteverwaltung (RBAC)
KCDbConnection Erweiterte Datenbankverbindung mit Mandantentrennung
CacheHelper Memcached-Abstraktion
DigitalOceanComponent Anbindung an DigitalOcean Spaces fuer Dateispeicherung

CLI-Befehle

calServer stellt ueber das Yii-Console-Framework (yiic) zahlreiche Befehle bereit, die unter httpdocs/protected/commands/ liegen. Die allgemeine Syntax lautet:

./yiic <befehl> run [--parameter=wert]

Wichtige Befehle:

Befehl Beschreibung
status Automatische Statusaktualisierung von Inventaren
mailer / sendemailqueue E-Mail-Warteschlange verarbeiten
dmsinboxcheck Dateien aus dem Eingangsordner ins DMS verschieben
backup Datenbank- und Datei-Backup (Borg)
fetchmail E-Mails fuer das Support-Modul abrufen
exportreport Berichte aus der E-Mail-Warteschlange exportieren

Eine vollstaendige Liste aller Befehle finden Sie in der Administration.

Report-Runner

Der Report-Runner ist ein eigenstaendiger Java-Dienst (Javalin + JasperReports 7), der ueber eine HTTP-API Berichte erzeugt. Die Hauptanwendung sendet JSON-Auftraege an http://report-runner:8090, der Dienst rendert die JasperReports-Vorlage und liefert das Ergebnis (PDF, Excel, CSV) zurueck.

Die Umschaltung zwischen dem Legacy-Berichtssystem (JasperStarter) und dem Report-Runner erfolgt ueber Feature-Flags in der Klasse ReportEngineManager:

  • use_report_runner -- Aktiviert den Report-Runner (pro Benutzer oder global)
  • enable_dual_run -- Parallele Ausfuehrung beider Engines zum Vergleich
  • enable_dcc_plugin -- Aktiviert die DCC-XML-Erzeugung (siehe DCC-Export)

Konfiguration

Die Anwendungskonfiguration liegt unter httpdocs/protected/config/:

Datei Inhalt
main.php Hauptkonfiguration -- Module, Imports, Aliases, Behaviors
components.php Komponentenregistrierung (DB, Cache, Auth, ReportEngine)
local.php Umgebungsspezifische Einstellungen (DB-Zugangsdaten, Domain)
constants.php Systemkonstanten, Feldtypen, Statusdefinitionen
console.php CLI-spezifische Konfiguration
saml.php SAML-SSO-Konfiguration