Platform Management
Die Web-Oberfläche der Ferrosoft Plattform deckt Routineaufgaben ab (siehe Benutzerhandbuch). Bestimmte Backend-Operationen erfordern jedoch direkten Zugriff über die Django-Management-CLI. Diese Befehle sind hier dokumentiert.
Management-Skript
Das Infrastruktur-Repository enthält im
Unterordner ansible das Skript container-run. Es führt beliebige Befehle
in Diensten der Ferrosoft Plattform aus — als Wrapper um ssh und
docker compose run.
Standardmäßig wird der Dienst platform-manage gestartet: ein spezieller
Kurzzeit-Dienst im Docker-Compose-Profil tools, der ausschließlich für die
Django-Management-CLI vorgesehen ist.
Unterstützte Argumente:
| Argument | Beschreibung |
|---|---|
-f, --file | Docker-Compose-Datei auf dem Server (Standard: /etc/ferrosoft/compose.yml; für Caddy-Administration: /etc/ferrosoft/compose.caddy.yml) |
-p, --project | Docker-Compose-Projektname (Standard: ferrosoft; für Caddy-Administration: caddy) |
-s, --service | Service-Name (Standard: platform-manage) |
-h, --host | SSH-Hostname (Pflichtfeld) |
Alle weiteren Optionen werden direkt an docker compose run --rm -i
durchgereicht.
Beispiel: Argumente für container-run und den Dienst mit Doppel-Dash
-- trennen:
./container-run --host "xxx" -- migratetenants
Django-Management-CLI
Alle verfügbaren Befehle auflisten:
./container-run --host "xxx" -- --help
Optionen eines bestimmten Befehls anzeigen (Beispiel: migratetenants):
./container-run --host "xxx" -- help migratetenants
Befehl ausführen (Beispiel: migratetenants):
./container-run --host "xxx" -- migratetenants
Gebräuchliche Management-Befehle
First-Party-Befehle stammen aus den Apps dataimport, emiflow,
ferrobase, ferromaps und ticketing. Befehle aus ferromaps und
ticketing sind nicht im Einsatz und werden hier nicht aufgeführt. Für
Third-Party-Befehle konsultieren Sie die jeweilige Dokumentation.
Die fett markierten Befehle sind vorrangig relevant.
| App-Name | Befehl | Beschreibung |
|---|---|---|
| auth | changepassword | Passwort eines Benutzers ändern |
| auth | createsuperuser | Benutzer mit uneingeschränkten Berechtigungen anlegen |
| dataimport | dataimport_json | JSON-Katalogdatei importieren |
| django | check | Deployment-Check ausführen |
| django | loaddata | Django-Fixture in Master-Datenbank importieren |
| django | migrate | Datenbankmigrationen in Master-Datenbank anwenden |
| django | sendtestemail | Test-E-Mail senden |
| emiflow | copy_transport | Transportkette kopieren |
| emiflow | gen_rapidstart | Rapidstart-Datei erzeugen (für Microsoft Business Central 365) |
| emiflow | import_catalog | JSON-Katalogdatei importieren (Emiflow-spezifisch) |
| ferrobase | addtenant | Mandant anlegen (auch über Web-UI möglich) |
| ferrobase | deltenant | Mandant löschen (auch über Web-UI möglich) |
| ferrobase | ferrobase_cleanup | Aufräumarbeiten ausführen (z.B. abgelaufene Dateien löschen) |
| ferrobase | ferrobase_update | Datenbankinhalt nach Update aktualisieren |
| ferrobase | listtenants | Mandanten auflisten (auch über Web-UI möglich) |
| ferrobase | loaddata_tenant | Django-Fixture in allen Mandant-Datenbanken importieren |
| ferrobase | migratetenants | Datenbankmigrationen in allen Mandant-Datenbanken anwenden |
| sessions | clearsessions | Abgelaufene Sitzungen löschen |
| staticfiles | collectstatic | Statische Dateien ins WWW-Verzeichnis kopieren |
Durch Deployment ausgeführte Befehle
Das Ansible-Playbook platform.yml führt folgende Befehle automatisch aus:
migrate(undmigratetenants)collectstatic --noinputferrobase_cleanupferrobase_update
Konfigurationsdrift beheben
Neue Plattform-Versionen können Daten in bestehenden Mandant-Datenbanken
erfordern, die nur bei der initialen Mandant-Anlage erzeugt werden. Der
Befehl ferrobase_update behebt dies für die meisten Fälle — er legt
fehlende Daten nach einem Update an oder aktualisiert sie.
Für JSON-Katalogdateien (u.a. GLEC-Emissionsdaten) greift dieser Mechanismus jedoch nicht. Diese müssen bei Änderungen Mandant für Mandant manuell eingespielt werden.
⚠️ Bringt ein Release geänderte JSON-Katalogdateien mit, sind alle Mandant-Datenbanken manuell zu aktualisieren. Mandant für Mandant. Keine Ausnahmen.
./container-run --host "$HOST" -- listtenants
# Folgende Befehle für jeden Mandant wiederholen:
./container-run --host "$HOST" -- import_catalog -T "$TENANT" -S catalog.schema.json \
/app/lib/python3.14/site-packages/ferrosoft/apps/emiflow/static/emiflow/examples/de/glec-public-eu.json
./container-run --host "$HOST" -- import_catalog -T "$TENANT" -S operation.schema.json \
/app/lib/python3.14/site-packages/ferrosoft/apps/emiflow/static/emiflow/examples/de/glec-operations-extract.json
./container-run --host "$HOST" -- dataimport_json \
-s /app/lib/python3.14/site-packages/ferrosoft/apps/dataimport/static/dataimport/dataimport.schema.json \
/app/lib/python3.14/site-packages/ferrosoft/apps/emiflow/static/emiflow/examples/de/importcollection.json
Die Drift betrifft Änderungen an folgenden Dateien im Platform-Repository
(jeweils de- und en-Variante sowie die zugehörigen Schemadateien):
src/ferrosoft/apps/emiflow/static/emiflow/examples/de/glec-public-eu.jsonsrc/ferrosoft/apps/emiflow/static/emiflow/examples/de/glec-operations-extract.jsonsrc/ferrosoft/apps/emiflow/static/emiflow/examples/de/importcollection.json