Regles de gestion & contraintes
Multi-tenant (skins)
- Un seul socle de code sert 30+ clients. Chaque client = un skin selectionne au build via
--skin=. - La configuration d'un client est centralisee dans
doc/StarterKitv3_InfosTechniques.json(langues, URL, modules, widgets, shop on/off, secrets DB). Ce JSON est valide contreStarterKitv3_InfosTechniques_Schema.jsonau demarrage du build ; une entree invalide bloque le build. - Il n'y a pas de build "global" : tout cible UN skin.
Build-All-Customersest l'exception (compile toutes les solutions clients).
Base vs shop
- La couche shop (
StarterKitv3_shop.sln) n'est compilee et installee que si le client a le module Shop active (IsShopEnabled()litdoc/StarterKitv3_InfosTechniques.json). - Un client vitrine n'embarque pas la pile uCommerce ; un client e-commerce si. C'est un flag de configuration, pas une branche de code.
Umbraco / patches
- A chaque mise a jour d'Umbraco, reappliquer les 4 fichiers patches (source de verite
Nanoxi.Cms.Resources/Umbraco/) :umbraco.css,umbraco.controllers.js,umbraco.resources.js,umbraco.services.js. - Lors d'une mise a jour de jQuery, aligner
currentArticlePreview.html(ligne 4).
Langue
- Contenu multilingue par item selon le client (FR / DE / EN). Locale par defaut fr-CH.
- L'image Docker importe explicitement la region fr-CH (
RegionSettings_frCH.reg).
Donnees & index
- Tables custom prefixees
nanoxi_*(petaPoco). - Pour les sites a index Examine custom (ex. IEDS / IchMedia), la base et les medias doivent matcher : ne pas remonter l'un sans l'autre, sinon l'index est incoherent (reconstruire l'index apres remontee).
Deploiement
- Deploiement pull-based : un runner sur chaque serveur IIS applique l'artifact
website/via robocopy/E(copie/mise a jour seulement, sans/MIR/purge) : on ne supprime jamais les fichiers extra cote serveur (ils contiennent du runtime non present dans l'artifact :Umbraco\ucommerce\Apps/ RavenDB25,Raven\,*.lic,local.config,Plugins...). - Dossiers preserves cote serveur (jamais ecrases, exclus du robocopy) :
Config,App_Data,Media,Customer,umbraco\Logs,Web.config. - Convention IIS : app pool
umb_<skin>_<env>, chemin physiqueE:\<skin>\website. - staging et production se deploient manuellement (jamais sur push direct). master/staging ne declenchent un pipeline que via "Run pipeline" (web).
Secrets
- Les mots de passe DB (
saPassword,customerPassword) et licences sont dansdoc/StarterKitv3_InfosTechniques.jsonetprodconfig/<skin>/. Ce depot est interne ; ne pas diffuser.
Newsletter
- Toute inscription newsletter se fait en double opt-in. Un formulaire public ne doit jamais creer un abonne directement chez le prestataire (Infomaniak, Brevo, MailChimp) : il enregistre une demande, le prestataire n'est appele qu'apres validation du lien de confirmation. Passer par la Nanoxi Newsletter API (
https://newsletter-opt-in.spektrum.media, reponewsletter-opt-in), qui gere l'attente, le mail de confirmation et l'ecriture finale. - Un formulaire public ne choisit jamais sa cible. Liste, groupe, domaine et cles API se resolvent cote serveur (host de la requete + config). Tout parametre de ciblage lu dans la requete est une faille : l'appelant choisit sa liste.
- Un endpoint d'inscription est un endpoint d'envoi de mail. Il exige donc au minimum : antiforgery, validation d'adresse, honeypot, limitation de debit par IP et par adresse, et un log IP/UA/email des demandes acceptees et refusees. Sans cela, le double opt-in aggrave le probleme au lieu de le resoudre (le site devient relais de mails vers des tiers).
- Historique : ces regles viennent d'un flood constate en aout 2026 sur www.icogne.ch et www.l-info.ch (liste passee de ~300 a >1000 abonnes, plaintes de spam). L'endpoint accmpd etait public, sans antiforgery ni validation, en simple opt-in, avec la liste cible choisie par un champ cache du formulaire, et sans aucun log d'inscription.
Specificites client (exemples)
- IEDS : restrictions de mix de catalogues, methodes de livraison custom, synchros planifiees ; un redemarrage de pool + website resout la plupart des erreurs de synchro.
- CMVEO : les primes d'assurance changent par annee ; dupliquer
PremiumData._20xxet mettre a jourEnvironmentalTaxManager.cs+nanoxiSettings.config(champreleaseNewPrimesDate).
Detail : ../modules/customer-skins.md.
Contributors
No contributors
Changelog
No recent changes

