1. Installation
Cette section décrit le protocole d'installation pour déployer DQE Unify Server sur une machine virtuelle Windows à l'aide de Docker et Docker Compose. La stack applicative se compose de Redis, RabbitMQ, Nginx, Unify Server, et d'un Queue Worker, tous orchestrés via Docker Compose.
Remarque : Tous les conteneurs s'exécutent sur un même réseau Docker sur la VM Windows. La communication entre conteneurs utilise les noms de service définis dans docker-compose.yml, et non localhost. Les variables d'environnement sont définies en conséquence.
1.1 Prérequis
1.1.1 Configuration matérielle requise
| Composant | Minimum | Recommandé |
|---|---|---|
| CPU | 4 vCores | 8 vCores |
| RAM | 8 Go | 16 Go |
| Disque (OS + Docker) | 60 Go SSD | 120 Go SSD |
| Réseau | 100 Mbit/s | 1 Gbit/s |
1.1.2 Configuration logicielle requise
| Logiciel | Version / Remarques |
|---|---|
| Système d'exploitation | Windows Server 2019 / 2022 (64 bits) |
| Docker Engine | Dernière version stable – installée dans WSL2 (Ubuntu) |
| WSL2 | Windows Subsystem for Linux 2 – requis pour exécuter des conteneurs Linux sur Windows Server |
| PowerShell | 5.1 ou version ultérieure (inclus avec Windows) |
| Accès Internet | Requis pour récupérer les images depuis le DQE Container Registry et Docker Hub |
1.2 Installer Docker via WSL2
Pourquoi WSL2 ? Docker CE sur Windows Server ne peut pas exécuter nativement des conteneurs Linux (LCOW a été supprimé dans Docker 20.10+). WSL2 fournit un véritable noyau Linux sur Windows, permettant à Docker d'exécuter des conteneurs Linux de manière transparente.
1.2.1 Activer les fonctionnalités Windows
Ouvrez PowerShell en tant qu'administrateur et exécutez chaque commande :
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All -NoRestartRedémarrage requis : Redémarrez la VM après avoir activé ces fonctionnalités avant de continuer.
1.2.2 Installer WSL2 et Ubuntu
Après le redémarrage, ouvrez PowerShell en tant qu'administrateur :
-
Définissez WSL2 comme version par défaut :
wsl --set-default-version 2 -
Installez Ubuntu :
wsl --install -d UbuntuUne fenêtre de terminal s'ouvre vous demandant de créer un nom d'utilisateur et un mot de passe Unix. Terminez la configuration avant de continuer.
1.2.3 Installer Docker CE dans Ubuntu
Ouvrez le terminal Ubuntu WSL2 et exécutez :
-
Installez Docker CE :
curl -fsSL https://get.docker.com | sudo shRemarque : Le script détecte WSL et recommande Docker Desktop. Ignorez le message et attendez 20 secondes pour que l'installation continue automatiquement.
-
Ajoutez votre utilisateur au groupe docker et démarrez le service :
sudo usermod -aG docker $USER sudo service docker start -
Fermez et rouvrez le terminal WSL2, puis vérifiez :
docker --version docker compose versionRemarque : Le service Docker doit être démarré manuellement à chaque ouverture de session WSL2 :
sudo service docker start.
1.2.4 S'authentifier auprès du DQE Container Registry
Les images DQE Unify sont hébergées sur un Azure Container Registry privé. Depuis le terminal Ubuntu WSL2, utilisez les identifiants fournis par DQE Software pour vous connecter :
docker login <registry-url> --username <Username provided by DQE> --password <Password provided by DQE>Une connexion réussie affiche : Login Succeeded.
1.3 Préparer le répertoire de travail
Créez un dossier dédié qui contiendra le fichier Docker Compose, la configuration Nginx, et les volumes persistants.
# Create the main application directory
New-Item -ItemType Directory -Path "C:\dqe-unify"
New-Item -ItemType Directory -Path "C:\dqe-unify\nginxconf"
New-Item -ItemType Directory -Path "C:\dqe-unify\volumes\redisvol"
New-Item -ItemType Directory -Path "C:\dqe-unify\volumes\rabbitvol"La structure du répertoire doit ressembler à ceci :
C:\dqe-unify\
├── docker-compose.yml ← main orchestration file
├── nginxconf\
│ └── default.conf ← Nginx reverse-proxy configuration
└── volumes\
├── redisvol\ ← Redis persistent data
└── rabbitvol\ ← RabbitMQ persistent dataRemarque : Docker Compose monte ces répertoires locaux en tant que bind mounts dans les conteneurs.
1.4 Configurer Nginx
Nginx agit comme un reverse proxy, transférant les requêtes HTTP/HTTPS entrantes vers le conteneur Unify Server sur le port 8000.
Exécutez la commande suivante pour ouvrir le fichier dans le Bloc-notes, puis collez la configuration ci-dessous et enregistrez :
notepad C:\dqe-unify\nginxconf\default.confLe fichier C:\dqe-unify\nginxconf\default.conf doit contenir :
server {
listen 80;
location / {
proxy_pass http://unify-server:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 300s;
}
}Remarque : Dans Docker Compose, chaque service possède son propre nom d'hôte égal à son nom de service. La cible du proxy est donc http://unify-server:8000, et non http://localhost:8000.
HTTPS
Ajoutez un second bloc server dans default.conf et montez votre certificat SSL et votre clé privée dans le conteneur Nginx. Mettez à jour docker-compose.yml pour exposer le port 443 et monter les fichiers de certificat.
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/cert.crt;
ssl_certificate_key /etc/nginx/ssl/cert.key;
location / {
proxy_pass http://unify-server:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 300s;
}
}1.5 Fichier de configuration Docker Compose
Créez le fichier C:\dqe-unify\docker-compose.yml avec le contenu ci-dessous. Remplacez le placeholder <registry-url> par l'URL fournie par DQE Software.
services:
redis:
image: <registry-url>/dqe-unify-redis:latest
platform: linux/amd64
restart: always
volumes:
- redis-data:/data
networks:
- unify-net
rabbitmq:
image: <registry-url>/dqe-unify-rabbitmq:latest
platform: linux/amd64
restart: always
ports:
- "5672:5672"
volumes:
- rabbitmq-data:/bitnami
networks:
- unify-net
nginx:
image: <registry-url>/dqe-unify-nginx:latest
platform: linux/amd64
restart: always
ports:
- "80:80"
volumes:
- /mnt/c/dqe-unify/nginxconf:/etc/nginx/conf.d:ro
depends_on:
- unify-server
networks:
- unify-net
unify-server:
image: <registry-url>/unify-server-web-ms-dynamics:<version>
restart: always
command: ["python", "-u", "app.pyc"]
ports:
- "8000:8000"
environment:
- REDIS_URL=redis://redis:6379
- CLOUDAMQP_URL=amqp://guest:guest@rabbitmq:5672/
- PORT=8000
depends_on:
- redis
- rabbitmq
networks:
- unify-net
deploy:
resources:
limits:
memory: 1g
cpus: "0.25"
queue-worker:
image: <registry-url>/unify-server-web-ms-dynamics:<version>
restart: always
command: ["python", "-u", "queue_worker.pyc"]
environment:
- REDIS_URL=redis://redis:6379
- CLOUDAMQP_URL=amqp://guest:guest@rabbitmq:5672/
depends_on:
- redis
- rabbitmq
networks:
- unify-net
deploy:
resources:
limits:
memory: 5g
cpus: "1.0"
volumes:
redis-data:
rabbitmq-data:
networks:
unify-net:
driver: bridgePoints clés de configuration :
- Les services communiquent via leur nom de service, par exemple
redisourabbitmq, et non via127.0.0.1. -
redis-dataetrabbitmq-datasont des volumes nommés Docker stockés dans le système de fichiers Linux de WSL2. Cela évite les problèmes de permissions NTFS. - La configuration Nginx est lue depuis
/mnt/c/dqe-unify/nginxconf, le dossier Windows accessible via WSL2. - Les identifiants du registre d'images sont gérés par
docker logincomme décrit à la section 1.2.4, et ne sont pas intégrés dans le fichier Compose.
1.6 Déployer l'application
Toutes les commandes ci-dessous doivent être exécutées depuis le terminal Ubuntu WSL2.
-
Étape 1 — Démarrez le service Docker et accédez au répertoire de l'application :
sudo service docker start cd /mnt/c/dqe-unify -
Étape 2 — Récupérez les images requises :
docker compose pull -
Étape 3 — Démarrez tous les services en mode détaché :
docker compose up -d -
Étape 4 — Vérifiez que tous les conteneurs sont en cours d'exécution :
docker compose psRésultat attendu : tous les services doivent afficher le statut
running:NAME IMAGE STATUS dqe-unify-nginx-1 nginx:latest running dqe-unify-rabbitmq-1 rabbitmq:3.13-management running (healthy) dqe-unify-redis-1 redis:alpine running dqe-unify-unify-server-1 <registry-url>/unify-server-web-ms-dynamics:v3.0 running dqe-unify-queue-worker-1 <registry-url>/unify-server-web-ms-dynamics:v3.0 running
Important : Si un conteneur affiche le statut exited ou restarting, vérifiez immédiatement ses logs à l'aide de docker compose logs <service-name>.
1.7 Configurer le pare-feu Windows
Ouvrez les ports entrants requis sur le pare-feu Windows afin que les clients externes puissent accéder à l'application. Exécutez les commandes suivantes dans PowerShell en tant qu'administrateur :
New-NetFirewallRule -DisplayName "DQE Unify - HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "DQE Unify - HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action AllowRemarque : Le port 8000 (Unify Server) et le port 5672 (RabbitMQ) n'ont pas besoin d'être ouverts en externe. Ils ne sont accédés qu'en interne via le réseau Docker.
Dynamics 365 — Autoriser les plages d'IP entrantes
Le DQE Unify Server reçoit des requêtes de Microsoft Dynamics 365, qui s'exécute sur l'infrastructure Azure. Vous devez autoriser les plages d'IP Azure correspondantes à la fois dans le pare-feu Windows et dans le NSG.
La liste complète et à jour des plages d'IP Microsoft Azure est disponible en téléchargement à l'adresse :
Microsoft Azure IP Ranges and Service Tags
Téléchargez le fichier JSON, identifiez les service tags Dynamics365 et AzureCloud pertinents pour votre région, et ajoutez les plages d'IP correspondantes en tant que règles d'autorisation entrantes sur le port 443.
VM Azure — Network Security Group (NSG)
Si la VM est hébergée sur Azure, vous devez également ajouter des règles de sécurité entrantes dans le Network Security Group (NSG) associé :
- Accédez à Azure Portal → Virtual Machines → [Votre VM] → Networking.
- Cliquez sur Add inbound port rule.
- Définissez Destination port ranges sur
80,443. - Définissez Protocol sur
TCPet Action surAllow. - Pour autoriser le trafic Dynamics 365, définissez Source sur
Service Taget sélectionnezDynamics365. - Cliquez sur Add.
1.8 Optionnel : configurer IIS en tant que reverse proxy
Si votre organisation exige IIS comme point d'entrée, par exemple pour la gestion des certificats ou l'intégration avec une infrastructure existante basée sur IIS, vous pouvez configurer IIS pour transférer le trafic vers Nginx s'exécutant sur le port 80. Cette étape est facultative. Nginx seul est suffisant.
1.8.1 Installer IIS et ARR
Dans PowerShell en tant qu'administrateur :
# Install IIS with management tools
Install-WindowsFeature -Name Web-Server, Web-Mgmt-Tools -IncludeManagementTools
# Install URL Rewrite module (required for reverse proxy)
# Download from: https://www.iis.net/downloads/microsoft/url-rewrite
# Then install Application Request Routing (ARR):
# Download from: https://www.iis.net/downloads/microsoft/application-request-routing1.8.2 Activer le proxy dans ARR
- Ouvrez IIS Manager.
- Cliquez sur le nœud du serveur → Application Request Routing Cache.
- Dans le panneau Actions, cliquez sur Server Proxy Settings.
- Cochez Enable proxy et cliquez sur Apply.
1.8.3 Ajouter une règle de réécriture d'URL
Modifiez C:\inetpub\wwwroot\web.config :
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="DQE Unify Proxy" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite"
url="http://localhost:80/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>1.9 Configurer le DNS
Contactez vos administrateurs DNS et demandez-leur de créer un enregistrement A pointant vers l'adresse IP publique de la VM Windows.
| Type d'enregistrement | Nom | Valeur |
|---|---|---|
| A | unify.yourdomain.com |
Adresse IP publique de la VM Windows |
Si la VM est sur Azure, vous pouvez trouver son adresse IP publique dans Azure Portal → Virtual Machines → [Votre VM] → Overview → Public IP address.
1.10 Vérifier le déploiement
Une fois le DNS propagé, ouvrez un navigateur et accédez à :
http://unify.yourdomain.comVous pouvez également tester localement depuis la VM elle-même :
# Test Nginx is reachable
curl http://localhost
# Test the Unify Server is reachable
curl http://localhost:8000Si l'application répond, le déploiement est terminé et le serveur est correctement configuré.
2. Configuration de l'application
Une fois l'application en cours d'exécution, le pare-feu Windows et tout pare-feu ou proxy en amont doivent être configurés pour autoriser les plages d'IP listées ci-dessous.
2.1 Adresses IP à autoriser
DQE Software Office Server
Contactez le support DQE Software pour obtenir l'adresse IP à autoriser.
DQE – Service de dédoublonnage
Contactez le support DQE Software pour obtenir l'adresse IP à autoriser.
DQE – Service de qualité
Contactez le support DQE Software pour obtenir l'adresse IP à autoriser.
Action requise : Faites autoriser l'IP publique de la VM Windows par votre équipe SI/réseau également côté DQE Software. Communiquez à DQE l'IP publique sortante de la VM.
Plages d'IP Azure (IPv4) — Si le trafic sortant transite par Azure
4.175.0.0/16, 4.180.0.0/16, 4.210.128.0/17, 4.231.0.0/17, 4.245.0.0/17, 13.69.0.0/17,
13.73.128.0/18, 13.73.224.0/21, 13.80.0.0/15, 13.88.200.0/21, 13.93.0.0/17, 13.94.128.0/17,
13.95.0.0/16, 20.4.0.0/16, 20.8.0.0/16, 20.13.0.0/17, 20.16.0.0/16, 20.23.0.0/16,
20.31.0.0/16, 20.50.0.0/18, 20.50.88.0/21, 20.50.128.0/17, 20.54.128.0/17, 20.56.0.0/16,
20.61.0.0/16, 20.67.0.0/17, 20.71.0.0/16, 20.73.0.0/16, 20.76.0.0/16, 20.82.0.0/17,
20.86.0.0/16, 20.93.128.0/17, 20.101.0.0/16, 20.103.0.0/16, 20.105.128.0/17, 20.107.0.0/17,
20.123.128.0/17, 20.126.0.0/16, 20.160.0.0/16, 20.224.0.0/16, 20.229.0.0/16,
20.234.128.0/17, 20.238.128.0/17, 23.97.128.0/17, 23.98.46.0/24, 23.100.0.0/20,
23.101.64.0/20, 40.67.192.0/19, 40.68.0.0/16, 40.74.0.0/18, 40.91.192.0/18,
40.114.128.0/17, 40.115.0.0/18, 40.118.0.0/17, 51.124.0.0/16, 51.136.0.0/16,
51.137.0.0/17, 51.138.0.0/17, 51.144.0.0/16, 51.145.128.0/17, 52.136.192.0/18,
52.137.0.0/18, 52.142.192.0/18, 52.143.0.0/18, 52.148.192.0/18, 52.149.64.0/18,
52.157.64.0/18, 52.157.128.0/17, 52.166.0.0/16, 52.174.0.0/16, 52.178.0.0/17,
52.232.0.0/17, 52.233.128.0/17, 52.236.128.0/17, 65.52.128.0/19, 98.64.0.0/16,
104.40.128.0/17, 104.45.0.0/18, 104.45.64.0/20, 104.46.32.0/19, 137.116.192.0/19,
137.117.128.0/17, 168.61.56.0/21, 168.63.0.0/19, 172.201.0.0/16, 172.205.128.0/17,
172.211.0.0/16, 191.233.64.0/18, 191.237.232.0/22, 191.239.200.0/22, 213.199.128.0/20Plages d'IP Azure (IPv6) — Si le trafic sortant transite par Azure
2603:1020:200::/46, 2603:1020:205::/48, 2603:1020:206::/47, 2603:1020:208::/56,
2603:1026:900:7::/64, 2603:1026:900:8::/63, 2603:1026:900:1a::/63, 2603:1026:900:1c::/64,
2603:1026:2405::/48, 2603:1026:2500:24::/64, 2603:1026:3000:140::/59, 2603:1027:1:140::/59,
2a01:111:f403:c201::/64, 2a01:111:f403:ca05::/64, 2a01:111:f403:ca06::/63,
2a01:111:f403:ca08::/63, 2a01:111:f403:d201::/64, 2a01:111:f403:da01::/64,
2a01:111:f403:e201::/64
Associé à