Mettre en place un staging
Objectif : avoir <site>.staging.spektrum-suisse.ch accessible en HTTPS, relié à une copie de la DB de prod, avec certificat SSL valide
L'ordre des étapes est important : DNS d'abord (le temps que la propagation se fasse), DB et IIS en parallèle, puis reverse proxy + SSL à la fin. Ce processus sera automatisé sous peu
Conventions de nommage
À respecter partout (DNS, DB, user SQL, site IIS, app pool) :
| Élément | Convention | Exemple |
|---|---|---|
| Sous-domaine | <site>.staging.spektrum-suisse.ch | pully.staging.spektrum-suisse.ch |
| DB Umbraco | umb_<site>_staging | umb_pully_staging |
| DB app custom | app_<site>_staging | app_travelise_staging |
| User SQL Umbraco | umbracouser-<site> | umbracouser-pully |
| User SQL app | appuser-<site> | appuser-travelise |
| Site IIS | umb_<site>_staging ou app_<site>_staging | umb_pully_staging |
| App pool | idem site IIS | umb_pully_staging |
Voir aussi les conventions DB dans setup-and-deploy-to-linux.md.
1. Prérequis
- Accès Infomaniak (compte Spektrum)
- Accès VPN / réseau interne Spektrum
- Accès SSMS (SQL Server Management Studio)
- Accès RDP au serveur IIS
- Accès au portail nginx interne
2. DNS (Infomaniak)
Il faut créer un enregistrement pour que <site>.staging.spektrum-suisse.ch pointe vers notre IP publique (celle du reverse proxy).
- Se connecter sur https://manager.infomaniak.com
- Aller dans Domaines =>
spektrum-suisse.ch - Cliquer sur Modifier la zone DNS
- Ajouter un nouvel enregistrement :
| Champ | Valeur |
|---|---|
| Type | A |
| Nom | <site> |
| Cible | IP du reverse proxy (voir doc infra) |
| TTL | 3600 |
- Enregistrer.
Vérifier la propagation :
nslookup <site>.staging.spektrum-suisse.chLa propagation prend 1 à 15 minutes en général. Passer à la suite pendant ce temps.
3. Base de données
Exporter la DB de prod en .bacpac
Préférer .bacpac à .bak : format portable (schéma + données), compatible entre versions SQL Server et avec Azure SQL, nettement plus compact.
Sur db-prod (ou le serveur de prod concerné) via SSMS :
- Clic droit sur la DB => Tasks => Export Data-tier Application...
- Destination : fichier
.bacpaclocal ou sur un partage réseau interne - Valider (laisser les options par défaut)
À noter : .bacpac exige que la DB soit dans un état "propre" (pas de users orphelins, pas de features non supportées). Si l'export échoue, SSMS liste les erreurs à corriger.
Importer sur DB-Internal
Sur db-internal via SSMS :
- Clic droit sur Databases => Import Data-tier Application...
- Source : le fichier
.bacpacexporté - Nom de la DB :
umb_<site>_stagingpour un site Umbracoapp_<site>_stagingpour une app custom
- Valider
Créer un user SQL pour le site staging
Toujours isoler les credentials staging des credentials prod. Convention de nom :
umbracouser-<site>pour Umbracoappuser-<site>pour une app custom
CREATE LOGIN [umbracouser-<site>] WITH PASSWORD = '<mot-de-passe-fort>';
USE umb_<site>_staging;
CREATE USER [umbracouser-<site>] FOR LOGIN [umbracouser-<site>];
ALTER ROLE db_owner ADD MEMBER [umbracouser-<site>];Stocker le mot de passe dans Bitwarden (coffre Spektrum), pas dans le code.
Nettoyer les données sensibles
Avant la mise en ligne, au minimum :
- Utiliser les emails de devs / staging
- Mettre en place les clefs API de staging (saferpay, ect.)
- Désactiver les envois d'emails (SMTP redirigé vers un Mailtrap ou équivalent)
4. Site IIS
Sur le serveur IIS (RDP) :
Copier le build
Déposer les fichiers du site dans E:\<site>\website
Créer le site IIS
- Ouvrir IIS Manager
- Clic droit sur Sites => Add Website
- Remplir :
| Champ | Valeur |
|---|---|
| Site name | umb_<site>_staging (ou app_<site>_staging) |
| Physical path | chemin du build |
| Binding type | http |
| Host name | <site>.staging.spektrum-suisse.ch |
| Port | 2000-3999 |
Créer les virtual directories
Les dossiers de données persistantes (médias, App_Data, exports clients) ne sont jamais dans le dossier de build, sinon ils sont écrasés à chaque déploiement. On les externalise sur E:\ et on les mappe via des virtual directories IIS.
Structure type sur E:\ :
E:\<site>\
├── website\
├── Media\ (uploads Umbraco, images front)
├── App_Data\ (cache Umbraco, logs, temp, Umbraco Forms (ancienne version))
├── SitesData\ (données persistantes custom, upload des formulaires)
└── Customer\ (fichiers clients, caches)Dans IIS Manager, pour chaque dossier nécessaire au site :
- Clic droit sur le site
umb_<site>_staging=> Add Virtual Directory - Remplir :
| Champ | Valeur |
|---|---|
| Alias | Media (ou App_Data, SitesData, Customer) |
| Physical path | E:\<site>\Media (ou le dossier correspondant) |
Répéter pour chaque dossier à mapper selon le site :
- Umbraco :
Media,App_Data(obligatoires), éventuellementSitesData,Customer - App custom : selon les besoins (souvent
App_Data+ un dossier métier)
- Umbraco :
Vérifier les droits NTFS : le user de l'app pool (par défaut
IIS AppPool\<nom-du-pool>) doit avoir les droits Read/Write sur chaque dossierE:\<site>\*.
Configurer la connection string
Éditer appsettings.Staging.json (ou web.config) pour pointer vers db-internal, la DB umb_<site>_staging (ou app_<site>_staging) et le user umbracouser-<site> (ou appuser-<site>). Ne jamais commiter les credentials, utiliser des variables d'environnement ou User Secrets.
Vérifier le robots.txt
Avant la mise en ligne publique, s'assurer que le staging n'est pas indexable :
wwwroot/robots.txt :
User-agent: *
Disallow: /Ne pas oublier de retirer cette règle lors d'un déploiement prod, sinon Google déréférence tout le site.
Vérifier en local
Depuis le serveur IIS :
curl http://<site>.staging.spektrum-suisse.ch -H "Host: <site>.staging.spektrum-suisse.ch"Doit retourner un 200 (ou un redirect HTTPS selon la config). Si 500, vérifier les logs Event Viewer + stdout de l'app pool.
5. Reverse proxy nginx + SSL
Le reverse proxy interne gère le HTTPS et redirige le trafic vers le site IIS.
- Aller sur https://nginx.internal.spektrum-suisse.ch/nginx/proxy
- Cliquer sur Add Proxy Host
- Remplir :
| Champ | Valeur |
|---|---|
| Domain Names | <site>.staging.spektrum-suisse.ch |
| Scheme | http |
| Forward Hostname / IP | IP interne du serveur IIS |
| Forward Port | Port du site pool IIS |
| Cache Assets | off (staging) |
| Block Common Exploits | on |
| Websockets Support | on |
Onglet SSL :
- SSL Certificate : Request a new SSL Certificate (Let's Encrypt)
- Force SSL : on
- HTTP/2 Support : on
- HSTS : on
Save
La génération du certificat prend 20-60 secondes. Si échec : vérifier que le DNS pointe bien vers le proxy (étape 2) et que le port est accessible pour la validation Let's Encrypt.

