VM Windows — Installation Dynamics

Support DQE
Support DQE
  • Mise à jour

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 -NoRestart

Redé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 :

  1. Définissez WSL2 comme version par défaut :

    wsl --set-default-version 2
  2. Installez Ubuntu :

    wsl --install -d Ubuntu

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

  1. Installez Docker CE :

    curl -fsSL https://get.docker.com | sudo sh

    Remarque : Le script détecte WSL et recommande Docker Desktop. Ignorez le message et attendez 20 secondes pour que l'installation continue automatiquement.

  2. Ajoutez votre utilisateur au groupe docker et démarrez le service :

    sudo usermod -aG docker $USER
    sudo service docker start
  3. Fermez et rouvrez le terminal WSL2, puis vérifiez :

    docker --version
    docker compose version

    Remarque : 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 data

Remarque : 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.conf

Le 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: bridge

Points clés de configuration :

  • Les services communiquent via leur nom de service, par exemple redis ou rabbitmq, et non via 127.0.0.1.
  • redis-data et rabbitmq-data sont 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 login comme 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.

  1. É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
  2. Étape 2 — Récupérez les images requises :

    docker compose pull
  3. Étape 3 — Démarrez tous les services en mode détaché :

    docker compose up -d
  4. Étape 4 — Vérifiez que tous les conteneurs sont en cours d'exécution :

    docker compose ps

    Ré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 Allow

Remarque : 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é :

  1. Accédez à Azure Portal → Virtual Machines → [Votre VM] → Networking.
  2. Cliquez sur Add inbound port rule.
  3. Définissez Destination port ranges sur 80,443.
  4. Définissez Protocol sur TCP et Action sur Allow.
  5. Pour autoriser le trafic Dynamics 365, définissez Source sur Service Tag et sélectionnez Dynamics365.
  6. 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-routing

1.8.2 Activer le proxy dans ARR

  1. Ouvrez IIS Manager.
  2. Cliquez sur le nœud du serveur → Application Request Routing Cache.
  3. Dans le panneau Actions, cliquez sur Server Proxy Settings.
  4. 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.com

Vous 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:8000

Si 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/20

Plages 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é à

Cet article vous a-t-il été utile ?

Utilisateurs qui ont trouvé cela utile : 0 sur 0