Images und Releases
Auf dieser Seite siehst du, wie die Docker-Images des Servers gebaut und veröffentlicht werden. Die API wird als Multi-Arch-Image ausgeliefert, gebaut aus src/Schuly.API/Dockerfile.
Container-Image
- Build-Kontext:
./src. DieCOPY-Pfade im Dockerfile sind relativ dazu, nicht zum Repo-Root. - Build-Stufen: Das Frontend baut mit
oven/bun:1.3.5undnode:24-slim, und seine Ausgabe geht nachwwwroot. Die API baut und veröffentlicht aufmcr.microsoft.com/dotnet/sdk:10.0. - Laufzeit:
mcr.microsoft.com/dotnet/aspnet:10.0. Der Einstiegspunkt istdotnet Schuly.API.dll. - Version:
Directory.Build.propsliest die Version normalerweise ausapplication.propertiesim Repo-Root, aber diese Datei ist nicht im Build-Kontext. Das Image wird stattdessen mit-p:Version=$VERSIONgebaut, und der Release-Workflow übergibt die Release-Version. So bleibt die Assembly-Version des Hosts im Einklang mit dem, woran zur Laufzeit geladene Plugins binden. - Plugin-Ordner: Das Image erstellt
/app/pluginsund/app/plugins-configfür zur Laufzeit geladene Plugins und ihre Konfiguration.
Versionierung und Releases
application.properties (<version>) ist die einzige Quelle. src/Directory.Build.props liest sie.
Das Veröffentlichen eines GitHub-Releases startet docker-publish-release.yaml:
sync-version: Vergleicht den Release-Tag ohne seinvmitapplication.properties. Wenn sie sich unterscheiden, aktualisiert der Job die Datei und führt einenrelease-sync/<version>-Pull-Request per Squash-Merge inmainzusammen.build-and-push-multiarch: Bautlinux/amd64undlinux/arm64aus./srcund pusht nachghcr.io/schulydev/schulyund<DOCKERHUB_USERNAME>/schuly. Der Login-Schritt für Docker Hub istcontinue-on-error.build-and-push-sandbox: Baut den Sandbox-Sidecar fürlinux/amd64aussrc/Schuly.Sandbox/Dockerfileund pusht ihn nachghcr.io/schulydev/schuly-sandbox.
Jedes Image erhält die Tags <semver>, <major>.<minor> und <major>, dazu latest bei Nicht-Prereleases.
Migrationen beim Start
Der Container wendet beim Start EF-Core-Migrationen an (ApplyMigrations() in Program.cs ruft db.Database.Migrate() auf) und befüllt den Schulsystem-Katalog. Beim Deployment brauchst du keinen separaten Migrationsschritt. Stelle sicher, dass der Connection-String SchulyDatabase die Datenbank erreicht. Siehe Migrationen und Konfiguration.
