Der erste Lauf auf der Pilotkunden-VM endete Failed, sichtbar war nur needrestarts Abschlussmeldung aus dem apt-Lauf - also die Stelle, an der die Pakete fertig installiert waren. Zwischen apt-mark hold und docker --version gibt das Skript nichts aus; aus dem Protokoll liess sich deshalb nicht lesen, wo der Lauf stehen geblieben ist. Zwei Aenderungen: Die lange Ausgabe des apt-Laufs wird aufgefangen und nur im Fehlerfall gezeigt (letzte 30 Zeilen) - sie verdraengt sonst den Bericht am Ende, dasselbe Problem wie der Pull-Fortschritt bei ESPO-03. Und die stumme Strecke bekommt vier knappe Standmeldungen, sodass die letzte Zeile der Ausgabe immer verraet, wie weit der Lauf gekommen ist. Ausserdem tragen jetzt alle Abbrueche des Hauptskripts die Zeile ESPO02_ERGEBNIS: FEHLER - der Script Monitor sucht danach. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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) |
Nummernkreise der Tasks
| Kreis | Bedeutung | bisher |
|---|---|---|
0x |
von der leeren VM zur laufenden Instanz | 01 Grundeinrichtung, 02 Docker, 03 First-Deploy |
1x |
aktualisieren | 10 Update, 11 Snapshot verwerfen, 12 Snapshot wiederherstellen |
2x |
Betrieb und Überwachung | 20 Inventar (geplant), 21 Backup-Prüfung (geplant) |
3x |
Extensions | geplant |
Ein Kreis beginnt bei x0. Die Liste im RMM sortiert alphabetisch, die Reihenfolge stimmt damit.
| bin/ | Skripte, die auf der VM unter /srv/espo/bin/ liegen und von Tasks aufgerufen werden |
| 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.
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 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.
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.