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:
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 Vergleichenable_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 |