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:

ArgumentBeschreibung
-f, --fileDocker-Compose-Datei auf dem Server (Standard: /etc/ferrosoft/compose.yml; für Caddy-Administration: /etc/ferrosoft/compose.caddy.yml)
-p, --projectDocker-Compose-Projektname (Standard: ferrosoft; für Caddy-Administration: caddy)
-s, --serviceService-Name (Standard: platform-manage)
-h, --hostSSH-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-NameBefehlBeschreibung
authchangepasswordPasswort eines Benutzers ändern
authcreatesuperuserBenutzer mit uneingeschränkten Berechtigungen anlegen
dataimportdataimport_jsonJSON-Katalogdatei importieren
djangocheckDeployment-Check ausführen
djangoloaddataDjango-Fixture in Master-Datenbank importieren
djangomigrateDatenbankmigrationen in Master-Datenbank anwenden
djangosendtestemailTest-E-Mail senden
emiflowcopy_transportTransportkette kopieren
emiflowgen_rapidstartRapidstart-Datei erzeugen (für Microsoft Business Central 365)
emiflowimport_catalogJSON-Katalogdatei importieren (Emiflow-spezifisch)
ferrobaseaddtenantMandant anlegen (auch über Web-UI möglich)
ferrobasedeltenantMandant löschen (auch über Web-UI möglich)
ferrobaseferrobase_cleanupAufräumarbeiten ausführen (z.B. abgelaufene Dateien löschen)
ferrobaseferrobase_updateDatenbankinhalt nach Update aktualisieren
ferrobaselisttenantsMandanten auflisten (auch über Web-UI möglich)
ferrobaseloaddata_tenantDjango-Fixture in allen Mandant-Datenbanken importieren
ferrobasemigratetenantsDatenbankmigrationen in allen Mandant-Datenbanken anwenden
sessionsclearsessionsAbgelaufene Sitzungen löschen
staticfilescollectstaticStatische Dateien ins WWW-Verzeichnis kopieren

Durch Deployment ausgeführte Befehle

Das Ansible-Playbook platform.yml führt folgende Befehle automatisch aus:

  • migrate (und migratetenants)
  • collectstatic --noinput
  • ferrobase_cleanup
  • ferrobase_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.json
  • src/ferrosoft/apps/emiflow/static/emiflow/examples/de/glec-operations-extract.json
  • src/ferrosoft/apps/emiflow/static/emiflow/examples/de/importcollection.json