Skip to content

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émentConventionExemple
Sous-domaine<site>.staging.spektrum-suisse.chpully.staging.spektrum-suisse.ch
DB Umbracoumb_<site>_stagingumb_pully_staging
DB app customapp_<site>_stagingapp_travelise_staging
User SQL Umbracoumbracouser-<site>umbracouser-pully
User SQL appappuser-<site>appuser-travelise
Site IISumb_<site>_staging ou app_<site>_stagingumb_pully_staging
App poolidem site IISumb_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).

  1. Se connecter sur https://manager.infomaniak.com
  2. Aller dans Domaines => spektrum-suisse.ch
  3. Cliquer sur Modifier la zone DNS
  4. Ajouter un nouvel enregistrement :
ChampValeur
TypeA
Nom<site>
CibleIP du reverse proxy (voir doc infra)
TTL3600
  1. Enregistrer.

Vérifier la propagation :

bash
nslookup <site>.staging.spektrum-suisse.ch

La 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 :

  1. Clic droit sur la DB => Tasks => Export Data-tier Application...
  2. Destination : fichier .bacpac local ou sur un partage réseau interne
  3. 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 :

  1. Clic droit sur Databases => Import Data-tier Application...
  2. Source : le fichier .bacpac exporté
  3. Nom de la DB :
    • umb_<site>_staging pour un site Umbraco
    • app_<site>_staging pour une app custom
  4. Valider

Créer un user SQL pour le site staging

Toujours isoler les credentials staging des credentials prod. Convention de nom :

  • umbracouser-<site> pour Umbraco
  • appuser-<site> pour une app custom
sql
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

  1. Ouvrir IIS Manager
  2. Clic droit sur Sites => Add Website
  3. Remplir :
ChampValeur
Site nameumb_<site>_staging (ou app_<site>_staging)
Physical pathchemin du build
Binding typehttp
Host name<site>.staging.spektrum-suisse.ch
Port2000-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 :

  1. Clic droit sur le site umb_<site>_staging => Add Virtual Directory
  2. Remplir :
ChampValeur
AliasMedia (ou App_Data, SitesData, Customer)
Physical pathE:\<site>\Media (ou le dossier correspondant)
  1. Répéter pour chaque dossier à mapper selon le site :

    • Umbraco : Media, App_Data (obligatoires), éventuellement SitesData, Customer
    • App custom : selon les besoins (souvent App_Data + un dossier métier)
  2. 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 dossier E:\<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 :

powershell
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.

  1. Aller sur https://nginx.internal.spektrum-suisse.ch/nginx/proxy
  2. Cliquer sur Add Proxy Host
  3. Remplir :
ChampValeur
Domain Names<site>.staging.spektrum-suisse.ch
Schemehttp
Forward Hostname / IPIP interne du serveur IIS
Forward PortPort du site pool IIS
Cache Assetsoff (staging)
Block Common Exploitson
Websockets Supporton
  1. Onglet SSL :

    • SSL Certificate : Request a new SSL Certificate (Let's Encrypt)
    • Force SSL : on
    • HTTP/2 Support : on
    • HSTS : on
  2. 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.

Contributors

The avatar of contributor named as Clément Favre Clément Favre

Changelog