config-override.php je Ring statt einmal fuer alle

Die Grundeinstellungen gehoeren zum Stand eines Rings wie die Compose: Eine
Aenderung daran soll denselben Freigabeweg nehmen. Die Datei liegt jetzt in
allen drei Ringordnern, die gemeinsame Fassung ist entfallen.

ESPO-03 holt sie aus dem Ordner des jeweiligen Rings; die Zuordnung Ring zu
Ordner steht damit an zwei Stellen und ist in beiden vermerkt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
gordon.zimm 2026-09-24 12:14:49 +02:00
parent c0e62788c0
commit 0d8aeccff8
5 changed files with 147 additions and 3 deletions

View File

@ -8,7 +8,7 @@ es steht deshalb **kein Passwort, kein Token und keine Kundenangabe** in diesem
| `autoinstall/` | NoCloud-Seed für die Basis-VM (`user-data`, `meta-data`) |
| `rmm-tasks/` | Skripte, die als Task im ConnectWise RMM hinterlegt sind (Quelle für Änderungen) |
| `bin/` | Skripte, die auf der VM unter `/srv/espo/bin/` liegen und von Tasks aufgerufen werden |
| `docker/` | je Ring ein Ordner mit der `docker-compose.yml` dieses Standes, dazu die EspoCRM-Grundeinstellungen (`config-override.php`) |
| `docker/` | je Ring ein Ordner mit dem Stand dieses Rings: `docker-compose.yml` und `config-override.php` |
Konzept, Entscheidungen und Runbooks liegen im internen Repository `espoCRM/espo-fleet-ops`.
@ -28,7 +28,8 @@ Das Semikolon muss maskiert werden – in GRUB trennt ein unmaskiertes `;` zwei
| `docker/1 - Pilotkunde/` | 1 | freigegebener Stand für Pilotkunden |
| `docker/2 - Produktivkunde/` | 2 | freigegebener Stand für den Regelbetrieb |
Jeder Ordner enthält eine vollständige `docker-compose.yml` mit genau einem Platzhalter: `__FQDN__`.
Jeder Ordner enthält den vollständigen Stand dieses Rings: eine `docker-compose.yml` mit genau einem
Platzhalter (`__FQDN__`) und die `config-override.php` mit den EspoCRM-Grundeinstellungen.
**Eine Freigabe ist das Kopieren dieser Datei in den nächsten Ordner** – damit steht in jedem `git diff`, welche
Instanzen den neuen Stand bekommen.

View File

@ -0,0 +1,67 @@
<?php
/**
* subcura – Grundeinstellungen für EspoCRM-Instanzen (deutscher Markt), unabhängig von Extensions.
*
* Mechanismus: EspoCRMs eigene data/config-override.php (ab v8.2) – wird nach config.php und config-internal.php geladen,
* überschreibt nur die hier gesetzten Schlüssel und wird von der Anwendung nie geschrieben (Änderungen an diesen
* Parametern über die Admin-UI bleiben wirkungslos). getenv() ist erlaubt.
* Anwendung: Kunden-VM: ESPO-10 legt die Datei vor dem ersten Start nach /srv/espo/data/config-override.php
* (Bind-Mount des EspoCRM-data-Verzeichnisses); danach Cache leeren.
* Entwicklungs- und Integrationsinstanzen: siehe espo-dev-env, Abschnitt 10.
* Nicht hier: instanzspezifische Werte (siteUrl, Datenbank, Mail-/SMTP-Daten, LDAP-Server, version).
* Geprüft gegen EspoCRM 10.0.8 (Settings.json / defaults/config.php).
*/
return [
// Sprache, Zeit, Zahlen
'language' => 'de_DE',
'timeZone' => 'Europe/Berlin',
'dateFormat' => 'DD.MM.YYYY',
'timeFormat' => 'HH:mm',
'weekStart' => 1, // Montag
'fiscalYearShift' => 0, // Geschäftsjahr = Kalenderjahr
'thousandSeparator' => '.',
'decimalMark' => ',',
// Währung
'currencyList' => ['EUR'],
'defaultCurrency' => 'EUR',
'baseCurrency' => 'EUR',
'currencyFormat' => 3, // "1.000,00 €" (Symbol nach dem Betrag)
'currencyDecimalPlaces' => 2,
// Adressen und Telefon
'addressFormat' => 2, // Straße / PLZ Ort / Land
'addressStateList' => [
'Baden-Württemberg', 'Bayern', 'Berlin', 'Brandenburg', 'Bremen', 'Hamburg', 'Hessen',
'Mecklenburg-Vorpommern', 'Niedersachsen', 'Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Saarland',
'Sachsen', 'Sachsen-Anhalt', 'Schleswig-Holstein', 'Thüringen',
],
'addressCityList' => [],
'phoneNumberPreferredCountryList' => ['de'],
'phoneNumberInternational' => true, // E.164-Speicherung/-Validierung
// Listen
'recordsPerPage' => 50,
'recordsPerPageSmall' => 10,
'recordsPerPageSelect' => 20,
'recordsPerPageKanban' => 10,
// E-Mail und Export
'emailMessageMaxSize' => 25, // MB
'exportDelimiter' => ';', // CSV-Export für deutsches Excel
// Sicherheit (betrifft Espo-Passwörter: Admins, API-Benutzer; bei LDAP-Kunden die Nicht-LDAP-Konten)
'passwordStrengthLength' => 12,
'passwordStrengthBothCases' => true,
'passwordStrengthNumberCount' => 1,
'passwordStrengthSpecialCharacterCount' => 1,
'passwordGenerateLength' => 16,
'passwordRecoveryNoExposure' => true, // Passwort-Reset verrät nicht, ob eine Adresse existiert
'auth2FA' => true, // 2FA anbieten (nicht erzwingen: auth2FAForced)
// Authentifizierung: 'LDAP' nur zusammen mit den ldap*-Parametern der Kundeninstanz setzen
// (ldapHost, ldapPort, ldapSecurity, ldapUsername, ldapPassword, ldapBaseDn, ldapUserLoginFilter, ...).
// Ohne erreichbaren LDAP-Server können sich nur noch Admins anmelden. Dev-/Integrationsinstanz: 'Espo'.
// 'authenticationMethod' => 'LDAP',
];

View File

@ -0,0 +1,67 @@
<?php
/**
* subcura – Grundeinstellungen für EspoCRM-Instanzen (deutscher Markt), unabhängig von Extensions.
*
* Mechanismus: EspoCRMs eigene data/config-override.php (ab v8.2) – wird nach config.php und config-internal.php geladen,
* überschreibt nur die hier gesetzten Schlüssel und wird von der Anwendung nie geschrieben (Änderungen an diesen
* Parametern über die Admin-UI bleiben wirkungslos). getenv() ist erlaubt.
* Anwendung: Kunden-VM: ESPO-10 legt die Datei vor dem ersten Start nach /srv/espo/data/config-override.php
* (Bind-Mount des EspoCRM-data-Verzeichnisses); danach Cache leeren.
* Entwicklungs- und Integrationsinstanzen: siehe espo-dev-env, Abschnitt 10.
* Nicht hier: instanzspezifische Werte (siteUrl, Datenbank, Mail-/SMTP-Daten, LDAP-Server, version).
* Geprüft gegen EspoCRM 10.0.8 (Settings.json / defaults/config.php).
*/
return [
// Sprache, Zeit, Zahlen
'language' => 'de_DE',
'timeZone' => 'Europe/Berlin',
'dateFormat' => 'DD.MM.YYYY',
'timeFormat' => 'HH:mm',
'weekStart' => 1, // Montag
'fiscalYearShift' => 0, // Geschäftsjahr = Kalenderjahr
'thousandSeparator' => '.',
'decimalMark' => ',',
// Währung
'currencyList' => ['EUR'],
'defaultCurrency' => 'EUR',
'baseCurrency' => 'EUR',
'currencyFormat' => 3, // "1.000,00 €" (Symbol nach dem Betrag)
'currencyDecimalPlaces' => 2,
// Adressen und Telefon
'addressFormat' => 2, // Straße / PLZ Ort / Land
'addressStateList' => [
'Baden-Württemberg', 'Bayern', 'Berlin', 'Brandenburg', 'Bremen', 'Hamburg', 'Hessen',
'Mecklenburg-Vorpommern', 'Niedersachsen', 'Nordrhein-Westfalen', 'Rheinland-Pfalz', 'Saarland',
'Sachsen', 'Sachsen-Anhalt', 'Schleswig-Holstein', 'Thüringen',
],
'addressCityList' => [],
'phoneNumberPreferredCountryList' => ['de'],
'phoneNumberInternational' => true, // E.164-Speicherung/-Validierung
// Listen
'recordsPerPage' => 50,
'recordsPerPageSmall' => 10,
'recordsPerPageSelect' => 20,
'recordsPerPageKanban' => 10,
// E-Mail und Export
'emailMessageMaxSize' => 25, // MB
'exportDelimiter' => ';', // CSV-Export für deutsches Excel
// Sicherheit (betrifft Espo-Passwörter: Admins, API-Benutzer; bei LDAP-Kunden die Nicht-LDAP-Konten)
'passwordStrengthLength' => 12,
'passwordStrengthBothCases' => true,
'passwordStrengthNumberCount' => 1,
'passwordStrengthSpecialCharacterCount' => 1,
'passwordGenerateLength' => 16,
'passwordRecoveryNoExposure' => true, // Passwort-Reset verrät nicht, ob eine Adresse existiert
'auth2FA' => true, // 2FA anbieten (nicht erzwingen: auth2FAForced)
// Authentifizierung: 'LDAP' nur zusammen mit den ldap*-Parametern der Kundeninstanz setzen
// (ldapHost, ldapPort, ldapSecurity, ldapUsername, ldapPassword, ldapBaseDn, ldapUserLoginFilter, ...).
// Ohne erreichbaren LDAP-Server können sich nur noch Admins anmelden. Dev-/Integrationsinstanz: 'Espo'.
// 'authenticationMethod' => 'LDAP',
];

View File

@ -38,7 +38,16 @@ done
umask 022
# 4. Grundeinstellungen bereitlegen, bevor EspoCRM zum ersten Mal startet.
curl -fsSL "$BASIS_URL/docker/config-override.php" -o /srv/espo/data/config-override.php || fehler "config-override.php nicht abrufbar"
# Sie gehoeren zum Stand des Rings, liegen also im selben Ordner wie die Compose.
# Dieselbe Zuordnung steht in bin/espo-compose-rendern - beide zusammen halten.
case "$RING" in
0) RINGORDNER="0%20-%20intern" ;;
1) RINGORDNER="1%20-%20Pilotkunde" ;;
2) RINGORDNER="2%20-%20Produktivkunde" ;;
*) fehler "unbekannter Ring '$RING' (erwartet 0, 1 oder 2)" ;;
esac
curl -fsSL "$BASIS_URL/docker/$RINGORDNER/config-override.php" -o /srv/espo/data/config-override.php \
|| fehler "config-override.php fuer Ring '$RING' nicht abrufbar"
# 5. Compose aus dem Stand des Rings schreiben.
curl -fsSL "$BASIS_URL/bin/espo-compose-rendern" -o /srv/espo/bin/espo-compose-rendern || fehler "Render-Skript nicht abrufbar"