Build, Docker, CI, environnements
Environnements
| Env | ASPNETCORE_ENVIRONMENT | URL | Specificites |
|---|---|---|---|
| Development | Development | localhost | appsettings.local.json charge en surcouche, Razor runtime compilation, pas de Sentry, page d'exception detaillee |
| Staging | Staging | metiersdart.spektrum.media | Sentry + profiling actifs (si SentryUrl), URL rewrite actif, sujets mail prefixes [STAGING], job de rappel JEMA desactive |
| Production | Production | metiersdart.ch | Sentry (sample 10 %), URL rewrite actif, job de rappel JEMA actif |
Hebergement : VM Azure Columbia, conteneur Docker Linux derriere docker-compose (hosting/docker-compose.yml, image columbia-registry.spektrum.media/umb_metiersdart:{staging|prod}, port 5001:5000). Volumes montes : appsettings.json, wwwroot/media, umbraco/Logs.
Base de donnees
- SQL Server (VM Azure vmsqla001). Bases :
umb_metiers-d-art_staging,umb_metiers-d-art_production,umb_metiers-d-art_deven local. - Chaine
umbracoDbDSNdansappsettings.json(providerMicrosoft.Data.SqlClient). Umbraco:CMS:Unattended:UpgradeUnattended = true(migration de schema Umbraco automatique au demarrage).- uSync importe le groupe Settings au demarrage (
ImportAtStartup: Settings) ;DictionaryHandlerenCreateOnly.
Dockerfile (hosting/Dockerfile, multi-stage Linux)
- Build stage (
dotnet/sdk:10.0) : installe Node 22.x, copiesrc/Web,dotnet restore,npm ci+npm run build:prod. - Adapte le style backoffice selon
ENVIRONMENT(arg,staging/prod) : copiebackoffice-env.{branch}.css(prod -> master). dotnet publish -c Release -o /app/publish, puis copie explicite dewwwroot/css/*etwwwroot/js/*dans le publish (cardotnet publishignore les assets generes par Vite).- Runtime stage (
dotnet/aspnet:10.0) :ENTRYPOINT ["dotnet", "Web.dll"].
CI - deux pipelines coexistent
GitLab CI (.gitlab-ci.yml)
- Stage
builduniquement. Jobbuild:staging(branchestaging) etbuild:production(branchemaster) via un template.build_template:docker buildavec cache (--cache-from), tagsstaging/prod+$CI_COMMIT_SHORT_SHA, push versregistry.internal.spektrum-suisse.ch/metiersdart-website. - Runner
linux, Docker-in-Docker (docker:25-dind). - Cablage docs (ajoute) : composant
sync-claude-docssur le stagedocs, declenche surmain/master/stagingquand.claude/docs/**/*change (ou sur run web manuel). Voir la section docs du fichier.
CircleCI (.circleci/config.yml)
- Jobs :
front-end-build(Node 22,npm run build:prod, adapte le style backoffice),back-end-build-and-test(dotnet build+dotnet test),generate-and-store-artifacts(publish + tar stocke en artifact),deploy(build + push imagecolumbia-registry.spektrum.media/umb_metiersdart:{production|staging}). - Workflows par branche (
staging, et equivalent master/production). Contextesmetiersdart-staging/ prod.
Commandes locales
bash
dotnet build MetiersDArtWebsite.sln
dotnet test MetiersDArtWebsite.sln
dotnet run --project src/Web
cd src/Web && npm install && npm run build # assetsGotchas
- Ne pas committer
appsettings.local.jsonni de secrets (SMTP, Sentry, newsletter, dashboard) : vides en repo, injectes par environnement. - Les assets Vite doivent etre dans
wwwroot/css|jsavant le publish (gere par le Dockerfile en local/CI ; en dev, lancernpm run build). - Le job de rappel JEMA ne tourne pas en dev/staging (court-circuit dans
JemaEmailReminderJob.Execute). rewriteRules.xmln'est applique qu'en staging/prod.
Contributors
No contributors
Changelog
No recent changes

