Gordon Zimm 25b2603856 ESPO-03-First-Deploy: Erstinbetriebnahme von EspoCRM
Richtet EspoCRM auf einer vorbereiteten VM zum ersten Mal ein: Verzeichnisse,
Geheimnisse auf der VM erzeugt, config-override.php bereitgelegt, Compose aus
dem Stand des Rings gerendert, up -d, Warten auf app-check, Abschlusspruefung.

Bricht ab, sobald eine Instanz vorhanden ist (Container, Compose-Datei oder
data/config.php). Damit kann dieses Skript keine Migration ohne geprueftes
Backup ausloesen - Aktualisierungen bekommen einen eigenen Weg.

Die Abschlusspruefung misst zugleich die in ADR 0008 offenen Punkte:
Zeichensatz des Servers und Laenge der Record-IDs (36 = UUIDv4 aktiv, sonst
Abbruch). Die Datenbankabfragen laufen im Container und lesen das Passwort dort
aus der Secret-Datei.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 14:47:27 +02:00

espo-deploy

Öffentliche, geheimnisfreie Artefakte für EspoCRM-Kunden-VMs. Alles hier wird von den VMs ohne Anmeldung abgerufen – es steht deshalb kein Passwort, kein Token und keine Kundenangabe in diesem Repository.

Verzeichnis Inhalt
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)

Konzept, Entscheidungen und Runbooks liegen im internen Repository espoCRM/espo-fleet-ops.

Autoinstall

autoinstall ds=nocloud-net\;s=https://gitea.subcura.net/EspoCRM_Public/espo-deploy/raw/branch/main/autoinstall/

Das Semikolon muss maskiert werden – in GRUB trennt ein unmaskiertes ; zwei Befehle.

Compose und Ringe

Ordner Ring Inhalt
docker/0 - intern/ 0 der aktuelle Stand, hier wird entwickelt und getestet
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__. Eine Freigabe ist das Kopieren dieser Datei in den nächsten Ordner – damit steht in jedem git diff, welche Instanzen den neuen Stand bekommen.

bin/espo-compose-rendern <fqdn> <ring> holt den Stand des Rings, setzt den FQDN ein und schreibt /srv/espo/docker-compose.yml. Diese Datei auf der VM ist ein Erzeugnis – sie wird bei jedem Lauf neu geschrieben, Änderungen von Hand gehen verloren. Geändert wird im Repository.

Kundenspezifisches

Gehört nicht hierher, sondern in die Custom Fields des RMM (FQDN, Ring, Wartungsfenster). Geheimnisse entstehen auf der VM (/srv/espo/secrets/, 0600) und verlassen sie nicht.

Description
No description provided
Readme 246 KiB
Languages
Shell 86.8%
PHP 13.2%